The Free Software Foundation [FSF1] touts the GPL[GNU1] as an all singing, all dancing defender of your freedoms. We are told that the GPL is at the heart of defending four freedoms:
- The freedom to run the program, for any purpose (freedom 0).
- The freedom to study how the program works, and adapt it to your needs (freedom 1). Access to the source code is a precondition for this.
- The freedom to redistribute copies so you can help your neighbor (freedom 2).
- The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits (freedom 3). Access to the source code is a precondition for this.
I assert though that the GPL does not give us freedom, merely different restrictions. I even assert that it does not give us all of the freedoms listed above. In this post, I will argue that the GPL is inherently flawed when it comes to freeing software.
What did I write?
Allow me to take a detour before we begin. I would like to investigate a related topic that is at the core of my argument, and that is the question of exactly what code you wrote. Let us imagine a typical scenario – you are the author of a free, open source library. The purpose of your library does not particularly matter, so lets say it encrypts widgets. You pour your heart and soul into your library, and it becomes stable and fully featured. This diagram represents the project as it stands:
So lets now suppose that a third party takes your code, and builds upon it. We might represent this as such:
What’s important to realise here is that the amount of code you have written has not changed. Even if the addition that the 3rd party writes simply wraps your library with a pretty GUI, the amount of code you have written has neither grown, nor shrunk.
What you license
Okay, so now let’s ask the question. What relevance did that have? Well, it helped clarify exactly what you are licensing when you attach the GPL to your code. You are licensing your code, and only your code. And yet, the GPL makes a restriction on the license for the derivative work. Noting here, that the derivative work is wholy someone else’s work.
The most common argument I hear pushing the GPL is that with a weaker license (say, BSD[BSD1]), a third party can take your code, extend it, and close it. So let’s think about what that means. In order to close your code, they would have to have taken it, removed all open sources for it, and then rereleased it in a closed form. But that doesn’t make any sense. You’re still distributing your source code under a free and open source license, so how have they closed it? They haven’t – your code has remained open source. So then, what have they closed? Well the answer is, their code, and only their code is closed source, and that’s fine – it’s their right to license their code in any way they like.
So the conclusion then, is that a company can come along, and take libWidgetCrypt and produce a thin wrapper around it, and start making an enormous profit by selling the result at $10,000. Yes, that’s possible, but it’s also a rather unlikely scenario. If all they’ve done is write a thin wrapper, then you, or someone else in the open source community is perfectly capable of making such a thin wrapper in no time at all. Then all you need do is undercut them by $10,000, and a good chunk of freedom.
The more likely scenario though, is that a company may come along and take libWidgetCrypt and produce a large amount of other code that just happens to use your library at its core. Then said company will sell their code, and their extensions for a large sum of money, and they are perfectly entitled to do so. It is after all, their code.
Believe it or not, this scenario is even one which is beneficial to you. Said company, is likely to find bugs in libWidgetCrypt, and fix them. From my experience of such things happening, they more often than not, contribute their changes back to you when they make such fixes to your library, even though they’re not required to! Yes it happens that they patch it and run with the patch, but again – they wrote the patch, they’re entitled to do that!
Where the GPL fails
I’ve now gone into detail a lot on exactly what you are licensing when you apply a GPL license to your code, but I haven’t looked at what I claimed I would show at the start of the blog. I haven’t told you why the GPL is not a free license. To do that, I’m going to concentrate on the last freedom that it claims to offer – “The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits (freedom 3).” Suppose that I am a company, and I am building a product to release. I would like to use your library in my program, I would even like to improve your library, and release the improvements to the public so that the whole community benefits. Unfortunately, at the end of the day, I need to ship a product, so I’d like to keep the core of my project closed source. Unfortunately, the GPL outlaws this kind of interaction.
So, we have a good citizen, a company that wants to release their patches to your library back to the community, and yet, the GPL is banning them from doing so! It is not giving them freedom at all! Instead, the GPL is a different set of restrictions.
It may be that you personally find the set of restrictions that the GPL offers more morally palatable than traditional closed source licenses, but it is not a free license. It does not grant freedom, it grants different restrictions.
The GPL is not a free license, in that it restricts freedoms to only people it deems to be morally acceptable. Often, there are people who do not fall inside this morally acceptable box, yet do really have good intentions. Thus, the GPL is too restrictive for many projects. Instead, it’s often a good idea to use a truly FOSS license, like for example the BSD license. Doing so, will not make you vulnerable to companies magically making your code closed source, as you will continue to distribute it. It may be that they will close a small addition to your code and attempt to sell it for vast amounts of money. However, in that situation, you can just release the same minor change, and give it away totally freely too.