There are two kinds of good software development models: open source software and community driven software. I won’t discuss the ethical reasons since these are quite obvious (everyone has the right to learn) and I won’t discuss how you can get the most money out of a consumer. Instead I’m going to focus on this single aspect: the quality of software.
Community driven software
When a lot of advanced computer users lack a tool, they will create the software they need in a free way: everyone will be able to alter the code (and study it, use it and re-use it). As a consequence by times the code-base will be very messy and will need to be cleaned up, by times the code-base will be very neat. Yet this is the kind of software that only gets better over time. For instance emacs has been around for 40 years (In computer-terms, this is since the Big Bang), and I don’t have to convince you this is by far the best IDE, best text-editor, best irc-client, best… well… anything. Another great example is the linux kernel: around for almost 20 years and it beats any other UNIX-implementation.
The most incredible part about this «free» software is: they never got engineered. They were made from scratch step by step, function by function when those were needed to implement one or more person’s requirements. When it got too messy, a partial rewrite was done and so on. When given some time, this process delivers the best software which suits anyone’s needs.
Free and open source software (FOSS) are often mentioned in one breath, although they are not the same. Open source software is not necessarily run by a community and it can implement different degrees of freedom which in its least free form has this definition.
The advantage of the open source development model is that it allows a company to properly engineer an application from a to z, before releasing the code. The first release of the code will practically be a working product and it will produce good-quality software in a short-run. These open source end-user products are very often reusing code from community driven software and that’s the way it should be: it is even very important because when a lot of companies rely on this code, they are going to fix bugs and add features.
-Pieter — follow me on identi.ca