The Trouble with Free Software
Let me open by saying that when I refer to Open Source Software, what I really mean is free software. The term ‘free software’ has a specific connotation as defined by the Free Software Foundation and doesn’t necessarily mean free-of-charge, but what I mean is software that costs nothing. I use the term ‘open source’ perhaps incorrectly but it is a convenient label that for most people is synonymous with free (no cost) software.
The problem with open source software is that there is a wide expectation that it will be free. Most open source software is free and that fuels the expectation that all open source is free but, worse, it contributes to a growing attitude towards software that all software should be free and is essentially worth nothing. I found the following amazing passage on Scott Hanselman’s blog while I was looking into a new developer tool from Microsoft named ‘Sandcastle’:
Recently Kevin Downs, the leader of NDoc, emailed a NDoc folks announcing that NDoc is dead. I was shocked to get this email, but sadly, not surprised. Here's an important part of his email:
Unfortunately, despite the almost ubiquitous use of NDoc, there has been no support for the project from the .Net developer community either financially or by development contributions. Since 1.3 was released, there have been the grand total of eleven donations to the project. In fact, were it not for Oleg Tkachenko’s kind donation of a MS MVP MSDN subscription, I would not even have a copy of VS2005 to work with!
To put this into perspective, if only roughly 1-in-10 of the those who downloaded NDoc had donated the minimum allowable amount of $5 then I could have worked on NDoc 2.0 full-time and it could have been released months ago! Now, I am not suggesting that this should have occurred, or that anyone owes me anything for the work I have done, rather I am trying to demonstrate that if the community values open-source projects then it should do *something* to support them. MS has for years acknowledged community contributions via the MVP program but there is absolutely no support for community projects.
Apparently Kevin started getting threats - yes, you heard right, threats - about a .NET 2.0 version and has been email-bombed. He's rightfully decided to bow out after a successful run.
NDoc has been used by many a developer to churn out documentation for class libraries, both in HTML for use on the web and in CHM help file format for use within visual studio. I’ve used NDoc myself for a few projects (see here for example output). All that documentation is produced largely automatically, directly from the code. It’s a very powerful idea and encourages forward-push documentation, a great idea started by Microsoft that was left to third party developers to make really useful.
NDoc was a great product, so I was amazed when I read the above and realised there would be no version for .NET 2.0 and beyond. I’m sad that Kevin didn’t get the support he needed to continue, particularly from the very developers who are the so-called advocates for open source. The relevance to Sandcastle is that Microsoft is now stepping up to fill the void left by NDoc with this new offering, but there will be some time before Sandcastle fully fills NDoc’s shoes.
It’s very sad, but I suspect this echoes a recurring pattern for open source software. It relies on the passion of a few individuals whose enthusiasm cannot be sustained by kudos alone and they eventually burn out and give up or simply become bored with the project. With a few important exceptions, there is never adequate documentation and it always feels like you’re using beta software, never a finished product.
Those are the obvious disadvantages of open source software, but I think the real damage is much deeper and much more subtle. Open Source Software makes it harder for professional developers to make a living. Ultimately, that is harmful to the software industry which in turn hurts end users. Some open source software is produced by professionals who usually can’t devote the same time and effort to it as something they get paid for. At worst, open source is written by amateur ‘have-a-go heroes’ who tend to be less accomplished in the arts of software engineering and produce unreliable, badly documented and unsupported monsters. An extreme view perhaps, but I believe that overall, software quality is reduced. Far from being free, open source software carries a heavy cost.
In the arena of astronomy, a hobby of mine, I have seen several people develop something and give it away for free, then ask for donations and be disappointed with the response, then make a donation mandatory then finally move to selling the software at a commercial rate. Anyone wanting to produce sustainable software needs to derive benefits from it, to build a customer base and to have an incentive to support and evolve the software. There are a few people out there who produce free software just for the joy of it – they give it away free because they don’t need the money. In some cases they even produce a quality product. Their aims are probably laudible, but I wish they’d stop to consider the wider implications. I wish they would at least charge a token fee for their software. They don’t seem to realise that by giving it away scot free, they are helping to perpetuate the perception that all software is free and erode respect for intellectual property rights. This makes it harder for professional developers to make their living and is ultimately harmful to everyone.
It doesn’t have to be difficult to make money from software; the licenses don’t have to be draconian and the prices don’t need to be sky-high. Software can be produced commercially at a price that is good for everyone. I’ve produced a set of tools for software developers that make it really easy, two lines of code at minimum, to add shareware registration to any .NET managed code. In the .Net 2.0 era there is a better solution in the form of the Shareware Starter Kit, but my solution is a lot easier to implement. Literally anyone can do it. The system can be extended to vary the evaluation period in terms of a time period, number of launches, it can vary the strength of ‘nagging’ reminders, it can help the author disable advanced features until a registration fee is paid (‘crippleware’) or it can simply display a gentle reminder screen and allow the product to be used without registering. A very flexible system with emphasis on ease of use for the developer rather than on defending against hackers (because if someone wants to crack it, they will – but most people would rather pay a modest registration fee that waste their time). I use this software in some of my own products and I’ve also sold it to a few third parties. The point is, it doesn’t have to be difficult or expensive to do this.
My nugget of wisdom to would-be open software developers is this:
The evidence is there for everyone to see in cases such as NDoc. Giving away free software is not sustainable and in doing so, you make it harder for those who produce software professionally, ultimately harming the industry. Newsflash: most people don’t part with their money unless they have to. Voluntary schemes are all very well, but wake up and take a whiff of human nature. Go to your local supermarket and see if paying for the goods and services is voluntary!
Kevin should have charged a fee for NDoc. It didn’t have to be an exorbitant fee, but the product was good enough and people would have paid for it. Some people would have paid a lot for it. The product would have been sustainable and we would now still have a wonderful tool at our disposal. If a fee had been charged, everyone would have won. By giving people the option not to pay, of course the majority took the default option of not paying and as a result, this product is now lost to us. Ultimately, did it really benefit anyone that this was a free product? No. Everyone is a loser.
If you’re a software developer who laments the demise of NDoc as I do, then fear not! There is a new kid on the block by the name of Sandcastle. Microsoft is finally finishing the job they started in Visual Studio by polishing up the tool they used to produce the documentation for the .Net Framework. It’s not a finished product yet, but it will be a very welcome addition to the developer arsenal. Let's hope it can fill the NDoc void.