Linguistic Problems of GPL Advocacy
Reader Chemisor advances a theory in his journal that a linguistic misunderstanding is at the root of many disagreements over different licensing philosophies, in particular BSD vs. GPL. The argument is that GPL adherents desire the freedom of their code, while those on the BSD side want freedom for their projects.
"It is difficult to spend a week on Slashdot without colliding with a GPL advocate. Eager to spread their philosophy, they proselytize to anyone willing to listen, and to many who are not. When they collide with a BSD advocate, such as myself, a heated flamewar usually erupts with each side repeating the same arguments over and over, failing to understand how the other party can be so stupid as to not see the points that appear so obvious and right. These disagreements, as I wish to show in this article, are as much linguistic as they are philosophical, and while the latter side can not be reconciled, the former certainly can, hopefully resulting in a more civil and logical discourse over the matter."
Click below for Chemisor's analysis of the linguistic chasm.
The first disagreement I wish to address concerns the statement "BSD projects are free, but GPL projects stay free." GPL advocates cannot understand why the BSD advocates are not getting this point, and BSD advocates make accusations of Communism, which are then argued to death by both parties. The problem with the statement above is the different interpretation of the word "project." I, and I suspect many other BSD advocates, generally separate the concept of "project" from "code." While code is what projects are made of, I do not see it as valuable as the useful product a project provides. When I write a program, be it a site scraper, or a todo program, or a UI framework, I think of my project as the entity that matters. The fact that I may have copied some code from one to another is of no concern to me.
A GPL advocate sees an entirely different situation. To him, it is the code that comes first, and the applications built from that code are a secondary consideration. Even a single line of code is precious, whether it contains a complex spline formula or i += 2;. As an aside, I would expect this mindset to be more prone to reusing other people's code instead of reimplementing it. Where I would scoff at a piece of code, call it utter garbage, and rewrite the damn thing from scratch, a GPL advocate would probably wrap the garbage in another API that he finds more palatable. In my opinion, this leads to bloat from wrappers, instability from the garbage that is still there, and loss of skills. What programmer from the current generation is up to the challenge of reimplementing libjpeg? But, I digress. I am here to explain, not bash, so please excuse this little rant.
The two different viewpoints outlined above lead to different interpretation of the expression "stay free." To a BSD advocate, his project will always "stay free," and to assert otherwise is ridiculous. Once it is published, what could possibly make it go away? I have projects that I wrote fifteen years ago which are still hosted on ibiblio.org FTP site and mirrored around the world. I no longer maintain them and think them useless, but they'll persist forever, and anyone at all who wants to download them still can download them. The fact that some company can take it, write a little bit on top of it, and sell it, does not in any way affect my project.
To a GPL advocate, the project is not important; the code is important. So he looks not just at the project distributions he has made, but also of other projects that may incorporate any line of code he ever wrote. In his mind there is no distinction between his original work and its encapsulation in a derived work. He still thinks of both as "his code," and as an entity that must stay free. Naturally, any non-free derived work will anger him, because his code in it will no longer be free, even though his own copy of that code and his entire project will still be free.
The code/project distinction also leads to a different view of what it means to "use" a project, although this point is seldom argued explicitly. A GPL advocate makes a rather arbitrary and vague distinction between a human using his code and a computer using his code. Consider a situation where a user has a GPL-licensed program that converts a JPEG image to a GIF image and his own program (which he sells, or distributes under some other incompatible license) that can only view GIF images. It is legal for him and his customers to call the GPL program from the command line to convert JPEG images and then view them with his program. Suppose he gets fed up with this sequence and writes a shell script to do both operations in sequence. Is this legal? Probably. But what if he cuts out the conversion part of the GPL program and embeds it in his viewer? That would make his viewer a derived work, and so illegal to distribute under anything but GPL.
From the GPL advocate's view, this is perfectly logical. It is his code, and he wants all instances of his code to be free. The instance can not be free if it is embedded in another executable that is not free, since it can not be easily modified, which was Stallman's gripe and the reason for the GPL's existence. From the BSD advocate's view, the situation is absurd. His project is still free, and he does not really care how a user wants to use it. A shell script calling the converter is no different than a closed source program embedding it. They are simply different ways for a human to use the program. Whether the object code for the project stays hackable is also irrelevant, since the human's use of the project through a derived work project is just another way of use.
These different views of derived works are another bitter point of contention. GPL code can only be legally embedded in GPL projects, and if a non-GPL project wants to use GPL code, it must either not do that, or become a GPL project. This is why BSD advocates call the license viral, and thus elicit vehement denials from GPL advocates, who retort that nobody is forced to use GPL code, which lead to useless arguments over the meaning of "forced" or "viral" with no meaningful result. It must be reiterated that the GPL advocates look at code, while the BSD advocates look at projects, and the "viral" debate can only be resolved by examining both viewpoints. A GPL advocate sees a derived work as "his code" combined with some "other code" in a package, and his concern is that the package always be openable. "His code" always remains his code, and he sees any use or distribution of the whole package as a kind of use or distribution of his code. As a result, he feels justified in placing restrictions on how a user may use or distribute the derived work, even though he "owns" only a small part of the whole package. This is following the philosophy of copyright and intellectual property, which, curiously, is a favorite target of derision of these same people. A copyrighted work can never be wholly owned by the user, it is only rented, and so subject to control by the original creator.
A BSD advocate sees a derived work as his project being used by another project. The derived project is wholly owned by whoever wrote it, even if it uses other people's code. This is similar to the property laws of the real world. For example, suppose I sit on the curb and give away free lemons. A kid next door might get the bright idea to get my lemons, make lemonade, and sell it. The lemonade is clearly a "derived work," since it is made from my lemons, but it is absurd to suggest I have any right to tell him what price to put on his lemonade or how much sugar he can use in it. By the laws of private property in the real world, my ownership was relinquished at the time when I handed him my lemons. Just as I do not own his lemonade, neither do I own the derived works he makes from my BSD-licensed software.
These distinctive views of ownership combine with considerations of money, and GPL's anti-business mindset, resulting in accusations of Communism, and worse. But I'll save explaining that for another article. For now I will simply suggest that GPL advocates should change their language a bit, to make themselves more easily understood by people who do not subscribe to their philosophy. Specifically:
"BSD code is free, but GPL code stays free."
It would be better instead to say:
"BSD code is free, but the GPL ensures all derived works are also free."
or
"The GPL ensures your code will never be used by a closed-source application."
These alternatives clarify that you are talking about derived works, rather than the original project, which, of course, will always stay free anyhow. Also, do keep in mind the other points brought up in this article and make at least some effort to ensure you are speaking the same language before becoming too upset. I will never agree with your philosophy, but at least you'll know you were understood.
The first disagreement I wish to address concerns the statement "BSD projects are free, but GPL projects stay free." GPL advocates cannot understand why the BSD advocates are not getting this point, and BSD advocates make accusations of Communism, which are then argued to death by both parties. The problem with the statement above is the different interpretation of the word "project." I, and I suspect many other BSD advocates, generally separate the concept of "project" from "code." While code is what projects are made of, I do not see it as valuable as the useful product a project provides. When I write a program, be it a site scraper, or a todo program, or a UI framework, I think of my project as the entity that matters. The fact that I may have copied some code from one to another is of no concern to me.
A GPL advocate sees an entirely different situation. To him, it is the code that comes first, and the applications built from that code are a secondary consideration. Even a single line of code is precious, whether it contains a complex spline formula or i += 2;. As an aside, I would expect this mindset to be more prone to reusing other people's code instead of reimplementing it. Where I would scoff at a piece of code, call it utter garbage, and rewrite the damn thing from scratch, a GPL advocate would probably wrap the garbage in another API that he finds more palatable. In my opinion, this leads to bloat from wrappers, instability from the garbage that is still there, and loss of skills. What programmer from the current generation is up to the challenge of reimplementing libjpeg? But, I digress. I am here to explain, not bash, so please excuse this little rant.
The two different viewpoints outlined above lead to different interpretation of the expression "stay free." To a BSD advocate, his project will always "stay free," and to assert otherwise is ridiculous. Once it is published, what could possibly make it go away? I have projects that I wrote fifteen years ago which are still hosted on ibiblio.org FTP site and mirrored around the world. I no longer maintain them and think them useless, but they'll persist forever, and anyone at all who wants to download them still can download them. The fact that some company can take it, write a little bit on top of it, and sell it, does not in any way affect my project.
To a GPL advocate, the project is not important; the code is important. So he looks not just at the project distributions he has made, but also of other projects that may incorporate any line of code he ever wrote. In his mind there is no distinction between his original work and its encapsulation in a derived work. He still thinks of both as "his code," and as an entity that must stay free. Naturally, any non-free derived work will anger him, because his code in it will no longer be free, even though his own copy of that code and his entire project will still be free.
The code/project distinction also leads to a different view of what it means to "use" a project, although this point is seldom argued explicitly. A GPL advocate makes a rather arbitrary and vague distinction between a human using his code and a computer using his code. Consider a situation where a user has a GPL-licensed program that converts a JPEG image to a GIF image and his own program (which he sells, or distributes under some other incompatible license) that can only view GIF images. It is legal for him and his customers to call the GPL program from the command line to convert JPEG images and then view them with his program. Suppose he gets fed up with this sequence and writes a shell script to do both operations in sequence. Is this legal? Probably. But what if he cuts out the conversion part of the GPL program and embeds it in his viewer? That would make his viewer a derived work, and so illegal to distribute under anything but GPL.
From the GPL advocate's view, this is perfectly logical. It is his code, and he wants all instances of his code to be free. The instance can not be free if it is embedded in another executable that is not free, since it can not be easily modified, which was Stallman's gripe and the reason for the GPL's existence. From the BSD advocate's view, the situation is absurd. His project is still free, and he does not really care how a user wants to use it. A shell script calling the converter is no different than a closed source program embedding it. They are simply different ways for a human to use the program. Whether the object code for the project stays hackable is also irrelevant, since the human's use of the project through a derived work project is just another way of use.
These different views of derived works are another bitter point of contention. GPL code can only be legally embedded in GPL projects, and if a non-GPL project wants to use GPL code, it must either not do that, or become a GPL project. This is why BSD advocates call the license viral, and thus elicit vehement denials from GPL advocates, who retort that nobody is forced to use GPL code, which lead to useless arguments over the meaning of "forced" or "viral" with no meaningful result. It must be reiterated that the GPL advocates look at code, while the BSD advocates look at projects, and the "viral" debate can only be resolved by examining both viewpoints. A GPL advocate sees a derived work as "his code" combined with some "other code" in a package, and his concern is that the package always be openable. "His code" always remains his code, and he sees any use or distribution of the whole package as a kind of use or distribution of his code. As a result, he feels justified in placing restrictions on how a user may use or distribute the derived work, even though he "owns" only a small part of the whole package. This is following the philosophy of copyright and intellectual property, which, curiously, is a favorite target of derision of these same people. A copyrighted work can never be wholly owned by the user, it is only rented, and so subject to control by the original creator.
A BSD advocate sees a derived work as his project being used by another project. The derived project is wholly owned by whoever wrote it, even if it uses other people's code. This is similar to the property laws of the real world. For example, suppose I sit on the curb and give away free lemons. A kid next door might get the bright idea to get my lemons, make lemonade, and sell it. The lemonade is clearly a "derived work," since it is made from my lemons, but it is absurd to suggest I have any right to tell him what price to put on his lemonade or how much sugar he can use in it. By the laws of private property in the real world, my ownership was relinquished at the time when I handed him my lemons. Just as I do not own his lemonade, neither do I own the derived works he makes from my BSD-licensed software.
These distinctive views of ownership combine with considerations of money, and GPL's anti-business mindset, resulting in accusations of Communism, and worse. But I'll save explaining that for another article. For now I will simply suggest that GPL advocates should change their language a bit, to make themselves more easily understood by people who do not subscribe to their philosophy. Specifically:
"BSD code is free, but GPL code stays free."
It would be better instead to say:
"BSD code is free, but the GPL ensures all derived works are also free."
or
"The GPL ensures your code will never be used by a closed-source application."
These alternatives clarify that you are talking about derived works, rather than the original project, which, of course, will always stay free anyhow. Also, do keep in mind the other points brought up in this article and make at least some effort to ensure you are speaking the same language before becoming too upset. I will never agree with your philosophy, but at least you'll know you were understood.
It's not just semantics. GPL-advocates such as myself recognize the value of more permissive licenses such as the BSD license and the LGPL. BSD-advocates often fail to understand why the GPL is so successful.
Freedom is free.
While this doesn't concern the BSD license in itself, we can analyze WINE and the spinoff project Cedega.
In the beginnings, Wine was X11 licensed, and it meant the derived code could be closed. And that's what happened with WineX, now called Cedega. While the WineX guys promised they would return the code (specifically the DirectX code), DirectX development in Wine froze. Years later, Cedega still hasn't returned the code, and Wine just barely came out from it.
This is the kind of issues that the GPL addresses.
Now let's analyze the other side of the coin: MySQL. It was designed as LGPL, and it was used in a wide variety of projects. Later, the MySQL guys decided to move from LGPL to GPL, demanding huge amounts of money from anyone who used MySQL for commercial purposes. So people now are switching from MySQL to PostgreSQL - which is BSD licensed.
(now I wish there was some alternative version of the LGPL that forced derivative work to REMAIN in that license so that people could use it in proprietary products - but still giving back any changes to the library itself - so we could avoid bad moves like the MySQL one. Best of both worlds, eh?)
So, what does PostgreSQL do to remain free? It's the complexity. No one in his 5 senses would fork the Postgre code and make it private. The project is mature and complicated enough so that it remains free. (But then again, so is Freebsd, and look at what happened with Apple Mac OS X).
Both the GPL and BSD licenses have their weaknesses - but if I'm starting a new end-user project and want all the community to benefit from it, I'd chose the GPL license without thinking it twice.
GPL is like a fruit with a seed that the animal has to swallow whole.
BSD is like a fruit with a seed that the animal can choose to chew and destroy.
Let those fruits compete. Evolution will sort out the winner.
But these are just word games, like when Microsoft wants to be known as innovative, or Google want to be known as the opposite of evil. In reality, people and companies still have to read the license terms in detail, and choose what works best for them based on the fine print.
"it will just get better and better, and eventually even Apple will not be able to avoid using Linux, because it will be THAT GOOD"
I don't know much about the open source OS community, but it seems to me that this isn't true. While the open source community spends 100s of man hours improving Linux, Apple can study its source code and implement what they want into their own kernel in much less time; meanwhile, they can afford to hire programmers to improve on top of all this. Therefore, I think the steady-state is for OSX to always be a step ahead of Linux; the second Linux is improved, I am sure someone at Apple is reading through the code changes.
I really think the GPL vs. BSD license debate really comes down to the differences in the point of view of who or what is actually "free".
In the case of the GPL, it is the code that is free; it is born free and stays free. And modifications will still keep it free. For BSD, it is the person who obtains the code that is free; the person can more or less do whatever he/she sees fit with the code.
So, I think there is a fundamental philosophical difference of which entity the freedom is assigned to.
Yeah this is silly because you are implying something that will never happen.
In your comment you said, "and eventually even Apple will not be able to avoid using Linux"
My answer is yes Apple will be able to avoid using Linux because they will always be ahead of Linux.
Saying that they are using BSD and hence could use Linux is missing the point of Steve Jobs. I would argue that the BSD kernel is inferior to the Linux kernel. Yet he chose BSD! Why because I am thinking in his mind a kernel is just a kernel and he has other things on his mind. And in his mind he sees control more important, hence the choosing of the BSD kernel.
>Am I to assume that if it is in the best economic interest of Apple to switch to Linux, that they won't do so?
Yes that is exactly what I am saying because Linux will never be in the best economic interest of Apple. Apple makes money hands over fist by selling a premium product. Linux is free and can't even get out of the starting gate. Of course I am referring to the client side, not the server side.
"You can't make a race horse of a pig"
"No," said Samuel, "but you can make very fast pig"
You BSD guys are so full of it sometimes. I mean i respect the license and I even use it in a lot of my code but c'mon. No one is forcing you to use GPL code. You guys act as if the GPL says you have to use their code. If you don't agree with the license then just keep your code away from it and do one of the following:
1) Request and possibly purcahse a BSD version of whatever code you want to use
2) Find a BSD alternative (look at a number of OpenBSD projects)
3) Code your own
I mean the BSD guys' arguments against the GPL is like the GNU guys complaining that they HAVE to use microsoft proprietary software. The GPL basically says in exchange for all this code i've written, any modifications need to be made available. If you are not up to that task do the following 3 things i mentioned. Why is the GPL inferior because those guys have a different goal.
Same thing with you GNU folks, the people who prefer BSD licensing aren't inherently evil and aren't looking to subvert your efforts. I mean BSD code allows code to be adopted end of story. In the case of OpenSSH and a lot of the other omnipresent BSD software floating around, giving code back isn't the point, it's that the code has been used rather than someone having to reinvent the wheel and most likely create something buggy (good programmer or bad it happens).
I am sick of hearing BSD folks saying the GPL is a prison license. The terms are clear and you have your options. On the otherside the BSD camp is not selling out to big business. If anything it ensures that big business has secure code so that some obviously stupid security flaw doesn't occur. So what if Big Company (tm) takes the code and doesn't give anything back. The original code is still there. It really isn't like Adobe, Verizon, or Microsoft has taken (as in theft) the code and no one has it anymore. FreeBSD and OpenBSD is still well and alive (cue netcraft jokes).
The big problem is just FUD being slung around by both side. Cut the bullshit and use what you like. GPL these days seems to be akin to a fanatical religion while BSD seems to be like fanatical atheism.
I'm just not sure I understand the logic behind "I wrote this piece of code. You're using it alongside your code. Therefore I get to dictate not only what you do with my code, but also with yours. And I do this because I don't want my code to become unavailable". There's two stupid statements there. First the clear one that you get to decide what I'm allowed to do with the code I wrote, because I'm using it with some of yours. And also the idea that if I weren't to make your code available, that no one could go up a level and get it straight from you. It's not as if the creation of a derivative work causes the original to disappear.
There's really no direct political comparison, but the closest example to BSD vs. GPL in that context is a Libertarian vs. Social Democrat example.
As a due-paying member of FSF and a self-described libertarian, I resent that comparison.
Copyleft is no more contrary to concept of freedom ("real freedom" or not) than prohibition of slavery is.
I like to liken BSD (and its relatives) to a society where everything is so ... laissez-faire that one person can own another person (by contract or payment of money), whereas GPL would be a society that decided that freedom to restrict others' freedom is not a freedom.
Then don't sell the code - sell a maintenance contract, or some other service around the code. For the video player you mention:
Embed the GPL'd code into a product. Make the product shiny, stylish and nice (hardware). Sure everyone will know HOW the product works - but people will pay for a **whatever** that looks/feel nice and/or works well.
Red Hat are doing OK. Even Sun Microsystems are doing it now.
The GPL isn't "anti-business", it can work. Just stops you making money from software like Microsoft do. You need to "add value" to the product.
The GPL isn't really about some abstract "protect the code" idea - it IS about protecting the end user. GPL'd code cannot come with a "ransom note":
PaY mE mORe MOn eY oR yOU wOn'T gET t hE pATchES tO m aKE tHi S WOr K pROpeRL y, oR sTAy SeCU re
If the success of your project is predicated on the obscurity of the implementation then the GPL is useless for that. There are legitimate reasons for this, but they are fairly rare. Most business case around software are quite compatible with the GPL.
Well, I'm a programmer myself. If you are saying that I'm not "adding value" to the product, you don't value my job. Prior to saying that I should be stopped from "making money from software" make sure that you are able to implement all of applications you use yourself, or make sure that you're comfortable with using only "free" ones.
And no, people won't pay for GPL'd program if they know they can have it for free, no matter whether it works or not. Even Slashdot uses CentOS, though they can probably afford sufficient number of RHEL subscriptions. And as I have already said, not every product can live off the support.
If you succeed in making programming not profitable, then I just start violating GPL. And luckily for me, a Russian citizen, no Russian court is going to do anything against that, because GPL status in Russia is still unclear (we're not bound to contracts that are not written on paper, and license agreements in foreign languages are invalid if signed between two Russian subjects).
Coding etudes
Well, not really, but he uses non-copyleft free software licenses when he believe they best serve the cause of free software.
For example, the compression code from gzip was separated out in the zlib library, and made available under such a permissive license, because it was deemed more important to remove dependency on software patents (which affected the compress and gif file formats) than on non-free software.
So the license "hate" between BSDL and GPL is mostly one way only, from BSD-fanatics. If you want to be loved by everyone, go with BSDL. Even Microsoft will love you.
The first major one is:
Duh!
We've kept saying that. GPL protects the USER from being restricted. BSD protects the RECEIVING PROGRAMMER from being restricted (though there are still restrictions such as keeping copyright and disavowal for damages et al with the BSD).
Second is right at the end:
"The GPL ensures your code will never be used by a closed-source application."
is wrong. Or at least worded in such a way as to be pejorative.
"The GPL ensures your code will never be less free than it is now."
When copyright expires, GPL code will be usable in closed source applications. If your code is de minimis or not expressive, it will be usable in closed source applications.
The GPL and BSD are equally good for the business that uses the code.
(as an aside, Chemistor has it wrong: the major reason for talking past each other is the overloading of "USER". BSDers think of the user as the one using the code to make their own code, GPLers think of the user as the end user, using the program to achieve a task)
BSD is better for the company that wants their developers to use the code in their own work than the GPL.
Funny, but not accurate.
It isn't about sucking, but about basic philosophic differences.
The giveaway licenses like BSD are there for people who actually want to give away their code. They release the code and get nothing in exchange except the warm feeling of being good people.
The GPL is, despite the cries of those who think its somehow Communist or socialist, based on exchange: you release your code, and in exchange you get more code back.
Which is what RMS and the other hacker types want. Money is good, of course, but what really drives a hacker is code. Code to learn from, code to play with, code to try and push in directions its originator didn't think of. MS sells its code for money. People who release under the GPL sell their code for more code. Its a commercial transaction: you can can use my code for anything, and in exchange I get to see and play around with all the derivative code your produce.
I've always thought that "freedom" was the wrong way to describe it. Yes, there's a certain free aspect, but mostly the GPL is a very straightforward commercial transaction. I give you code, I get code back.
"Mission Accomplished" -- George W. Bush May 1, 2003
If that's what I want, I can (and have in the past) do it better by releasing the software into the Public Domain. BSD licenses tend to have annoying little attribution and advertising clauses and whatnot.