I wrote this in response to a comment thread on hackernews Defending GCC considered futile. There's been a megathread in the last week about whether Emacs should support LLVM, with Richard Stallman and now Eric Raymond joining the frey.
Personally, I use a BSD license for all my code and contribute to BSD/Apache licensed software whenever I can. I do it because I think opensource will eventually eat the world anyway, and I think when it does a BSD/Apache implementation of any given piece of software will emerge as the victor.
With evidence from history, I'm convinced of these two claims:
Given enough time, many high quality opensource version of every useful piece of software will be written. Particularly amongst infrastructure code (kernels, databases, compilers, libraries).
With enough time, any sufficiently large company can implement their own version of any software that anyone else has written. They usually won't write their own version if a high quality opensource version exists with a permissible license.
With this in mind, if your eventual goal as an opensource developer is to have a working opensource ecosystem & software stack, we're going to get that regardless of our license choices. (Which is great news - we're going to win anyway! YAY!) For most parts of the software stack, this is already true. I suspect >50% of the code running on my mac laptop to help me write & post this is opensource code. That number has and will keep going up over time as opensource software improves. On the server the number is well over 90%.
The GPL
The GPL strategically leverages a monopoly of technological superiority to push the goal of software freedom. Its quite clever, because it feeds back on itself to in turn maintain its own technological dominance. There is a cost on developer freedom, but in the long run, the idea is that the GPL version will maintain technical dominance through coercion and keep user freedom by using that technical dominance to outcompete in the marketplace.
The flaw is that in the long run, it keeps getting easier to write software. And people love reinventing the wheel. Look around you - any useful software problem has lots of implementations. Databases are my go-to example at the moment, because holy cow there are so many! The implementations are usually licensed with a mix of GPL, BSD(/Apache/friends) and proprietary. All implementations will try and compete on features, but the value of additional features decreases over time as a software category matures. (I'm sure there are ways in which Chrome is better now than it was 6 months ago, but despite being a web developer and using it every day I couldn't tell you what the changes are).
Survival characteristics
... continue reading