The GnuCash project is having a hard time. GnuCash is personal accounting software on the order of Quicken. It’s “free software” for Linux, BSD, Mac OS X, and traditional Unixes.
It’s no surprise to me that the project has fallen on hard times. It seems they lost a large portion of their developer base when a couple of companies that were paying developers to work on it went under. It’s difficult to find volunteers to work on projects that aren’t terribly interesting to developers. The most successful Open Source software projects are those in which the developers are the users. Things like compilers and operating systems, email packages, Web servers, and other systems software get lots of attention from developers because developers understand and use those things. But a personal financial package? There are relatively few developers who use any but the most rudimentary features of such a program, and even fewer who understand the concepts of double-entry accounting and user reporting. The project is suffering from poor management and an explosive growth in size–almost 290,000 lines of code. Advanced features are partially implemented and poorly (if at all) documented. Reporting, a very important feature of such a program, is difficult to extend. Read the document—the project’s a mess.
It’s been said that open source software is superior to proprietary software because if the primary developers disappear the code is still there and others can continue the work. That’s true, provided that others are able and willing. In the case of GnuCash, those aren’t valid assumptions. In order for a project of this size and complexity to be continued after the demise of the primary developers, the code itself and the documentation have to be complete, accurate, and up to date.
What’s it all mean? That open source isn’t a magic bullet. Large open source projects suffer from the same problems that plague large proprietary projects. Perhaps more in some cases because there is less control over the developers on an open source project.