My Personal Journey from MIT to GPL(drewdevault.com)
drewdevault.com
My Personal Journey from MIT to GPL
https://drewdevault.com/2019/06/13/My-journey-from-MIT-to-GPL.html
417 comments
First, I'm not a lawyer, but I've always seen the MIT license as being more "free", whereas the GPL is more "fair". Both licenses are pretty much the same for users of the code. Where they differ is that the MIT license gives you the freedom to make an awesome change to the free code you were given, and add it to your closed source application with no obligation to give those enhancements you made to the code to anyone else. This is more "free". You made the enhancements, why shouldn't you keep them for yourself? It's not unethical since the developer chose that license knowing what it entailed, but it's just less "fair". The GPL is all about making sure that those awesome changes you made can be used by others so that they can make other awesome changes to the code. You were given free code that benefited you, so you should pass on any changes you made to the code to others so they can also benefit from it. And so on. That's my basic understanding of the differences, anyway.
I personally prefer the GPL way, but I have yet to use either license on code I've written.
I personally prefer the GPL way, but I have yet to use either license on code I've written.
This may go either way for you, but I feel like the GPL is the closest thing that programmers have to a union. It guarantees that our obligations to users and other programmers always supersede the obligations that we have to our employer. They are a law hack that encodes professionalism.
edit: it seems obvious that a doctor's obligations should be to the patient, then to medicine, then to the particular institution they work for. A lawyer should protect the client, protect the legal profession, then protect whatever firm they happen to work for.
Programmers should make sure that users have access to inspect the code that affects their lives; that other programmers can work with, learn from, and help the users to interpret that code; and that their company makes money. The only way that companies can accept being pushed to the third priority is by a united front of programmers who unambiguously swear to uphold the first two without compromise, and making what you do GPL is attaching an oath to that effect to everything you write.
edit: it seems obvious that a doctor's obligations should be to the patient, then to medicine, then to the particular institution they work for. A lawyer should protect the client, protect the legal profession, then protect whatever firm they happen to work for.
Programmers should make sure that users have access to inspect the code that affects their lives; that other programmers can work with, learn from, and help the users to interpret that code; and that their company makes money. The only way that companies can accept being pushed to the third priority is by a united front of programmers who unambiguously swear to uphold the first two without compromise, and making what you do GPL is attaching an oath to that effect to everything you write.
People should chose a software license the way they choose a screwdriver, not the way they chose a religion.
Choose the tool that accomplishes the job. Do you want to avoid commercial exploitation without repayment-in-kind in the form of contributing back? Use GPL or similar (although this is getting creaky in the case of SaaS deployments). Do you want total world domination for your new protocol? Release a reference implementation under MIT or similar.
License debates go off the rails because too often people try to compress a two-dimensional discussion (ideology and distribution rights) onto a single dimension and talk past each other.
So this blog post seems to say: "I have changed my religion." To which I say: "Consider choosing licenses more strategically."
Choose the tool that accomplishes the job. Do you want to avoid commercial exploitation without repayment-in-kind in the form of contributing back? Use GPL or similar (although this is getting creaky in the case of SaaS deployments). Do you want total world domination for your new protocol? Release a reference implementation under MIT or similar.
License debates go off the rails because too often people try to compress a two-dimensional discussion (ideology and distribution rights) onto a single dimension and talk past each other.
So this blog post seems to say: "I have changed my religion." To which I say: "Consider choosing licenses more strategically."
The question that remains is basically "what is your stance on the Great IP war?"
I agree that the world would be better if all software was public domain and that the GPL is an inferior option.
In a world where proprietary software is the norm though, GPL is a way to fight back this trend.
I think GPL makes a lot of sense on software that make computers easier to use or that have privacy implications: browsers for instance.
Some other times, you just want to help the whole world, including the software industry, stop reinventing the wheel. Typically with a lib that solves a specific problem once and for all. There public domain or MIT/BSD make sense.
I agree that the world would be better if all software was public domain and that the GPL is an inferior option.
In a world where proprietary software is the norm though, GPL is a way to fight back this trend.
I think GPL makes a lot of sense on software that make computers easier to use or that have privacy implications: browsers for instance.
Some other times, you just want to help the whole world, including the software industry, stop reinventing the wheel. Typically with a lib that solves a specific problem once and for all. There public domain or MIT/BSD make sense.
I use MIT (compared to GPL) because it's a low-maintenance library.
When I have published stuff in GPL, I would have had someone from (say) the Netherlands opening an issue asking "hey, can I use this library for doing so-and-so?". And I had to go and check so-and-so and check the again library and re-read the license and after I was not sure because I am not a lawyer and GPL text is fairly dense. Even if I was a lawyer, I would not be familiar with the legal requirements for someone from Netherlands.
One of the reasons I spend my free time doing open source is that I have fun. Reading legal text is the opposite of fun to me. So I moved to MIT. I did not have more of those legal questions.
When I have published stuff in GPL, I would have had someone from (say) the Netherlands opening an issue asking "hey, can I use this library for doing so-and-so?". And I had to go and check so-and-so and check the again library and re-read the license and after I was not sure because I am not a lawyer and GPL text is fairly dense. Even if I was a lawyer, I would not be familiar with the legal requirements for someone from Netherlands.
One of the reasons I spend my free time doing open source is that I have fun. Reading legal text is the opposite of fun to me. So I moved to MIT. I did not have more of those legal questions.
I feel like where this debate breaks down is in trying to apply the same license to both reusable libraries and finished products.
For a library, an MIT license is much more likely to get it adopted in a finished product that is accessible and maintained. A GPLed library can only get adopted in a GPLed project, which means there may be a ton of economic constraints that make the library's functionality inaccessible to anyone who doesn't have the time or expertise to build an entire application around it.
Also worth noting: to most ordinary people, GPL on a library is like a Post-It that says, "Free—take one!" on the door of a safe. It's nice to have permission, but it doesn't do much good if you don't know anyone who has the combination. The GPL-everywhere philosophy seems to assume a magical utopia where everyone is a skilled programmer fluent in multiple languages.
For finished products, though, an MIT license doesn't necessarily make sense, for the reasons lots of folks here have pointed out; namely, any big corp could compile the code unmodified, brand it, and sell it. If you want to make a complete application free and permissive for end users, GPL seems like the best way to guarantee that.
For a library, an MIT license is much more likely to get it adopted in a finished product that is accessible and maintained. A GPLed library can only get adopted in a GPLed project, which means there may be a ton of economic constraints that make the library's functionality inaccessible to anyone who doesn't have the time or expertise to build an entire application around it.
Also worth noting: to most ordinary people, GPL on a library is like a Post-It that says, "Free—take one!" on the door of a safe. It's nice to have permission, but it doesn't do much good if you don't know anyone who has the combination. The GPL-everywhere philosophy seems to assume a magical utopia where everyone is a skilled programmer fluent in multiple languages.
For finished products, though, an MIT license doesn't necessarily make sense, for the reasons lots of folks here have pointed out; namely, any big corp could compile the code unmodified, brand it, and sell it. If you want to make a complete application free and permissive for end users, GPL seems like the best way to guarantee that.
I have a feeling that the jury is still out on this one.
My observations are that:
* MIT license increases adoption of OS projects, increasing pool of potential contributors and derivative works
* People like sharing what they create, hence derivative works are likely to be shared with the world as well.
I know there are companies that utilize tons of free code without contributing enough back.
Overall to me the difference:
* MIT license increases throughput, hence increases participation in absolute terms
* GPL licenses limit throughout, but improves overall quality of participation
My observations are that:
* MIT license increases adoption of OS projects, increasing pool of potential contributors and derivative works
* People like sharing what they create, hence derivative works are likely to be shared with the world as well.
I know there are companies that utilize tons of free code without contributing enough back.
Overall to me the difference:
* MIT license increases throughput, hence increases participation in absolute terms
* GPL licenses limit throughout, but improves overall quality of participation
Here's my rant of the day:
The meme that the GPL is "less free" sounds very Orwellian.
What it really means is that I cannot freely use someone else's creation without restriction, and that I have to respect the wishes of the original author about how their work should be used.
That is because GPL was intended to be a hack on the copyright system (hence "copyleft"), but it always respected the idea of copyright - it does not call for the abolition of copyright.
This talk of GPL being "not free" smells of propaganda so that people (big corporations?) can reuse and repackage others' valuable work for free without any kind of compensation or acknowledgement. (TFA says the same thing)
Feel free not to use GPL'ed code if you find it too restrictive, but please don't contribute to spreading propaganda against it (and get off my lawn while you're at it)
[For the record, I work on proprietary software myself and haven't written any FOSS code, but I use GPL software daily - Linux, gcc, emacs etc]
The meme that the GPL is "less free" sounds very Orwellian.
What it really means is that I cannot freely use someone else's creation without restriction, and that I have to respect the wishes of the original author about how their work should be used.
That is because GPL was intended to be a hack on the copyright system (hence "copyleft"), but it always respected the idea of copyright - it does not call for the abolition of copyright.
This talk of GPL being "not free" smells of propaganda so that people (big corporations?) can reuse and repackage others' valuable work for free without any kind of compensation or acknowledgement. (TFA says the same thing)
Feel free not to use GPL'ed code if you find it too restrictive, but please don't contribute to spreading propaganda against it (and get off my lawn while you're at it)
[For the record, I work on proprietary software myself and haven't written any FOSS code, but I use GPL software daily - Linux, gcc, emacs etc]
I absolutely encourage people to choose the license that works best for them. My motion has been the other way, all my new stuff is permissively licensed. This is basically because I want my work to have broad impact, and have the possibility of collaborating with as many others as possible, including those making proprietary software.
I'm a fan of Drew's work, and also hope to help GPL projects such as Inkscape (I met many such developers at Libre Graphics Meeting). Choose the license that works best for you, and if you can articulate the reasons for your choice, as Drew has done here, even better.
I'm a fan of Drew's work, and also hope to help GPL projects such as Inkscape (I met many such developers at Libre Graphics Meeting). Choose the license that works best for you, and if you can articulate the reasons for your choice, as Drew has done here, even better.
I personally agree with the philosophy of the author: I think all software should be free, and in the perfect world, I would license everything I do under the GPL. However, not everyone in the open source world has this philosophy. A lot of people prefer more permissive licenses like Apache and MIT, and using the GPL excludes these people and projects from using the code - by its viral nature, any single usage of the GPL would force the entire project to be under the GPL as well. Cooperation is the greatest strength of the FOSS world, and so I'm willing to compromise a bit to make that possible. As such, I personally prefer the MPL - it is a weak copyleft license that enforces all modifications to the source code itself are released back (important for me), but unlike the GPL is not viral and will not spread outside its own source files to other projects (important for others). This way I can keep the project and all modifications to it free, but also allow it to be used by others who don't share that point of view.
MIT-like freedom is the "freedom to sell yourself as a slave". GPL is "your liberty ends where my nose begins".
If you understand freedom as the removal of social constraints, you won't understand the value of something like GPL software or Wikipedia.
If, on the other side, you think of freedom as the capability to do things, the accumulation of knowledge in copyleft projects creates possibilities that are less likely in a permissive project, where anyone can capture a version under a proprietary license at any time and evolve it as closed source (compare the ecosystems of Linux and Android for a practical example).
If you understand freedom as the removal of social constraints, you won't understand the value of something like GPL software or Wikipedia.
If, on the other side, you think of freedom as the capability to do things, the accumulation of knowledge in copyleft projects creates possibilities that are less likely in a permissive project, where anyone can capture a version under a proprietary license at any time and evolve it as closed source (compare the ecosystems of Linux and Android for a practical example).
I generally agree with the idea of the GPL but the thing I would encourage everyone to consider is: are you really going to enforce it when someone doesn't comply? If not, consider just adding a sentence (or more) to the top of the MIT license or public domain release that you would really like people to share their modifications but are not going to force them to do so.
Otherwise, the main effects of using the GPL are:
1) Projects that are actually open source but want to be available for closed source use will not use your code (maybe some people want this)
2) Lots of people who would contribute changes anyway will spend time figuring out what the GPL means in detail (it is not short)
3) Quite a few comanies will still use your code without releasing changes since they know that few projects try to enforce the GPL (or any other open source license)
4) It could potentially be helpful in a BSD lawsuit type situation, where companies that sue over copyright (or patents) will themselves violate the license of code that they use
I'm just saying keep in mind that a license does not automatically make people follow it and if you aren't willing to attempt to enfoce it legally then at least consider using a very short license.
Otherwise, the main effects of using the GPL are:
1) Projects that are actually open source but want to be available for closed source use will not use your code (maybe some people want this)
2) Lots of people who would contribute changes anyway will spend time figuring out what the GPL means in detail (it is not short)
3) Quite a few comanies will still use your code without releasing changes since they know that few projects try to enforce the GPL (or any other open source license)
4) It could potentially be helpful in a BSD lawsuit type situation, where companies that sue over copyright (or patents) will themselves violate the license of code that they use
I'm just saying keep in mind that a license does not automatically make people follow it and if you aren't willing to attempt to enfoce it legally then at least consider using a very short license.
It's a very natural human reaction to push back against the idea that someone else might profit from your work--whether or not you have any real opportunity to profit yourself. That was really one of the geniuses of open source licensing (including the GPL) as it developed. By contrast, in the PC world for example, there were a lot of licenses along the lines of "free for educational use only" or "you can't use this software if you're an evil defense contractor."
You still see this usage restriction thread of licensing in Creative Commons for example with non-commercial and no-derivatives being common--even though CC has basically been unable to come up with a workable definition of NC in a decade of trying and ND runs completely counter to the whole idea of remixing that partly drove CC in the first place.
You still see this usage restriction thread of licensing in Creative Commons for example with non-commercial and no-derivatives being common--even though CC has basically been unable to come up with a workable definition of NC in a decade of trying and ND runs completely counter to the whole idea of remixing that partly drove CC in the first place.
This very clearly and simply describes the differences between absolute freedom, limited freedom, and the value of limiting freedom.
In a way, it's similar to the paradox of tolerance, and a tolerant society needing to be intolerant of those that are intolerant.
Or to quote Team America: freedom isn't free.
I may be re-thinking my own use of BSD licensing in favour of something more copyleft in future too.
In a way, it's similar to the paradox of tolerance, and a tolerant society needing to be intolerant of those that are intolerant.
Or to quote Team America: freedom isn't free.
I may be re-thinking my own use of BSD licensing in favour of something more copyleft in future too.
Nonfree software is often malware, https://www.gnu.org/proprietary/proprietary.en.html , and it's nowadays built on top of permissively licensed free software. Its not just a difference of opinion and its not about "selling" the software. Red hat happens to sell lots of free software.
I worry that the downturn of GPL use will have consequences in the future. I understand why the GPL has its issues in context/s, but I don't see why it shouldn't be the default for open source where possible.
The political argument that gave birth to GNU/FSF seems to have lost it's bite in this day and age (perhaps due to a feeling that now open source is the de facto default, it will always be this way?)
The political argument that gave birth to GNU/FSF seems to have lost it's bite in this day and age (perhaps due to a feeling that now open source is the de facto default, it will always be this way?)
> The GPL is the legal embodiment of this Golden Rule
Sort of. It's a bit more like a golden pact with teeth. You can get excommunicated for not following the pact you agreed to. I suppose that's fine. But I prefer not to tempt others to agree -- let them find their own way. Contributing helps the contributor by avoiding having to have local patches, and by getting them reputation and good will points. Sure, a big company might fork an MIT codebase forever and keep it closed, but that's OK with me.
Sort of. It's a bit more like a golden pact with teeth. You can get excommunicated for not following the pact you agreed to. I suppose that's fine. But I prefer not to tempt others to agree -- let them find their own way. Contributing helps the contributor by avoiding having to have local patches, and by getting them reputation and good will points. Sure, a big company might fork an MIT codebase forever and keep it closed, but that's OK with me.
One thing that's worth considering making an exception for, no matter your ideological stand point, is cryptography libraries.
I want everyone to get cryptographic code right, ideally with one implementation that is correct, and then that's the end of it for everyone. Because if commerical vendors do their own thing because of copyleft on a piece of cryptographic code, the one that really ends up suffering is all the users that didn't have a choice in the matter of using said commercial software.
I want everyone to get cryptographic code right, ideally with one implementation that is correct, and then that's the end of it for everyone. Because if commerical vendors do their own thing because of copyleft on a piece of cryptographic code, the one that really ends up suffering is all the users that didn't have a choice in the matter of using said commercial software.
I use the GPL and I long for the day that it is no longer needed -- when we finally abolish copyright. I GPL to help virally encourage an ecosystem of software that will not abuse my freedom via the tyranny of copyright, in the meantime.
My problem with the GPL is more low level. It (in my opinion) doesn't work well over very long periods.
I work on an open source system which is over 20 years old. For a long time it was GPL v2. We had to either go GPL v2+, which assumes the FSF will never go crazy, or stick with GPL v2, which is incompatible with v3, which causes various problems.
The GPL v2 and v3 are really strict compared to most other licenses, they don't really "play nice" with anything, including each other.
I work on an open source system which is over 20 years old. For a long time it was GPL v2. We had to either go GPL v2+, which assumes the FSF will never go crazy, or stick with GPL v2, which is incompatible with v3, which causes various problems.
The GPL v2 and v3 are really strict compared to most other licenses, they don't really "play nice" with anything, including each other.
Even once I started using Linux as my daily driver, however, it took a while still for the importance of free software to set in
same here. Even though, I'm a Linux user since 1995, I just understood the true meaning of free software last year (maybe because I'm not a native English speaker). I realized that it means the software is free, not me. It's kind of respect to the software as something important in our lives.Linux probably wouldn't have gotten the investment to become the server OS of choice if it wasn't for Microsoft and Oracle licensing. Chrome only has user concerns now because of business constraints around adblock, and only then do users gravitate back to Firefox (I am guilty of this). GPL in this sense might get in the way of providing user impact, and IMHO positive user experience with FOSS is critical to sustaining FOSS development.
I'd love to see hard metrics on enterprise Linux tech stacks; I would hazard to guess most business-critical FOSS is Apache/BSD, the latest Javascript framework is probably MIT, and most UNIX-philosophy FOSS (those with a "done" point) is GPL.
I'd love to see hard metrics on enterprise Linux tech stacks; I would hazard to guess most business-critical FOSS is Apache/BSD, the latest Javascript framework is probably MIT, and most UNIX-philosophy FOSS (those with a "done" point) is GPL.
I think the distinction between "download and run" software vs. "libraries used to build new programs" should always be stated in this GPL vs. not discussion.
For "download and run" software, having it be GPL IMO doesn't limit too much who will ultimately be using your software. But if you are writing a programming library that would be used to create new software, GPL and even the LGPL will scare away a lot of commercial users, as well as projects that themselves hope to attract commercial users. If you don't care about commerical users, then it doesn't matter. But I think most people that write programming libraries care a lot about this.
For "download and run" software, having it be GPL IMO doesn't limit too much who will ultimately be using your software. But if you are writing a programming library that would be used to create new software, GPL and even the LGPL will scare away a lot of commercial users, as well as projects that themselves hope to attract commercial users. If you don't care about commerical users, then it doesn't matter. But I think most people that write programming libraries care a lot about this.
I'm a big fan of Social Architecture by Pieter Hintjens, and it's explanation for why he picked GPL instead a BSD license.
BSD tends to fracture the community, and the community is generally even more important than the code, per se.
BSD tends to fracture the community, and the community is generally even more important than the code, per se.
> Your parents probably taught you about the Golden Rule when you were young: do unto others as you would have them do unto you. The GPL is the legal embodiment of this Golden Rule
Funny. For me, the Golden Rule still leads me to the opposite conclusion: I want people to share their work with me open-handedly, without telling me what I can do with it or what other software I am allowed to combine it with. The more strings are attached, the less it feels like it's really sharing. The most annoying example of this is when companies open-source their works under a copyleft license in an obvious attempt to get free labor from the community while reserving the ability to actually profit from that work for themselves.
And therefore, when I share the software I work on, I prefer to share it open-handedly.
Funny. For me, the Golden Rule still leads me to the opposite conclusion: I want people to share their work with me open-handedly, without telling me what I can do with it or what other software I am allowed to combine it with. The more strings are attached, the less it feels like it's really sharing. The most annoying example of this is when companies open-source their works under a copyleft license in an obvious attempt to get free labor from the community while reserving the ability to actually profit from that work for themselves.
And therefore, when I share the software I work on, I prefer to share it open-handedly.
Lately there's been a lot of relicensing stories this year, mongodb[1] being the one I thought of first. It seems like the GPL is just a way for groups to protect their own assets without getting ripped off, and more permissive licenses (BSD, MIT) don't give the creator of that software the same protection. However, if you do violate the GPL and release a closed-source product, who's to tell? Who will know? Always struck me as weird.
[1] https://www.zdnet.com/article/its-mongodbs-turn-to-change-it...
[1] https://www.zdnet.com/article/its-mongodbs-turn-to-change-it...
I went the other way around. I used to mostly release GPL code, and then one day switched to MIT and never turned back. I've profited from code written by others; others should be able to do the same under whichever license they prefer.
There's a simpler way to address the problem outlined by OP: just refuse to consider binding software dependencies whose source you can't read. (It doesn't necessarily mean FOSS, as in I'm OK with paying to get the software; but I do want to be able to read the source code.) To me using such a dependency whose source code I can't read is just a non-starter.
There's a simpler way to address the problem outlined by OP: just refuse to consider binding software dependencies whose source you can't read. (It doesn't necessarily mean FOSS, as in I'm OK with paying to get the software; but I do want to be able to read the source code.) To me using such a dependency whose source code I can't read is just a non-starter.
GPL is about user freedom. The user must always be allowed to inspect what code they're actually running.
That is restrictive on developers, but that's just the cost of doing business here. If you don't share those ideals, that you should be able to inspect and alter the source of the code you run, you will likely never "understand" GPL.
That is restrictive on developers, but that's just the cost of doing business here. If you don't share those ideals, that you should be able to inspect and alter the source of the code you run, you will likely never "understand" GPL.
I teach Physics and Math. As a student, I enjoyed the freedom to consult textbooks, learn about new computation methods and be able to use them later when needed without worrying about potential restrictions. And I want my students to enjoy the same freedom. In my first projects, I used the GPL license but have moved since to almost always using the MIT License or, sometimes and when appropriate, CC-0.
When I find some interesting looking project on github or elsewhere, I am always tempted to look at the code. However, if I notice that the code is licensed under GPL, I refrain to do so as I do not want to have to worry about finding some "cool trick" but not being able to use it later in my own code without fear of violating the license.
I do get why some people swear by the GPL license, and I respect their choice and commitment to what they see as the greater good. However, I see it as a barrier to those that simply desire to learn.
When I find some interesting looking project on github or elsewhere, I am always tempted to look at the code. However, if I notice that the code is licensed under GPL, I refrain to do so as I do not want to have to worry about finding some "cool trick" but not being able to use it later in my own code without fear of violating the license.
I do get why some people swear by the GPL license, and I respect their choice and commitment to what they see as the greater good. However, I see it as a barrier to those that simply desire to learn.
If this means that they are going to repackage and sell the work, that is their prerogative. If that means a professor wants to put the work into their course and help to instruct a class with it, that is great too. It is nice to attempt to force people to play by the rules I like in order to try to enforce the actions that I see as best for the world, like sharing, etc. But at a certain point you just have to realize that there are differing points of view, that is just the way things go, and "progress" includes all of them.