Last updated on 2012-12-10
Since the code-base that I’m sharing on the internet is getting larger, and the product being created is starting to work, it is not time to add some licensing to the code that is being distributed. Of course, the license has to be open source… but how to choose from all of the available ones (the Open Source Initiative lists 54 different licenses, available by name and category). I read some posts on the internet on choosing an open source license but was still confused. I even considered using the WTFPL :-)).
Here are my thoughts on the open source licensed I read:
- The MIT License: The shortest license in the bunch (that’s why I finished reading it first), it seems to allow the user of the “software” to do anything with it as long as they include the license (and apply it)… This seems OK but I’m not sure how this is applied. If someone takes my code and changes it, does he still have to apply the MIT license? does he have to re-distribute all the code he changed using this license? no idea. But I really like the conciseness and short length of it.
- The BSD 3-Clause License: Also a fairly short license, allows the redistribution of the product both in source and binary format, in all cases requiring reference to the original copyright. Does not require the distributor to provide source code neither of his product or of the original code.
- The BSD 2-Clause License: Looks exactly like the BSD 3-Clause except the third clause was removed, which means that your name can be used for promoting the software that uses it. Makes no difference to me.
- Apache License, Version 2.0: The license starts with a “definitions” sections, so this guys mean business… And since apache is a very impressive organization (the apache web server runs ~65% web servers in the world), I expected no less. From my understanding of lawyer English, the license gives the owner full power over the code, to sell it, distribute it and do whatever he wants with it, with the condition that you provide them with the licence, that changes done to the work must be marked and that any special notices that were in the work when you received it must be passed on. You can add new licensing terms to your work but must still comply with the original license (how is this done? if you change the work and use a different license, do you have to include the original work with the original license? I HATE LAWYERS!!!). A new thing that was not in the previous licenses is called “Grant of Patent License”, which grants the user of the licensed “work” (again my understanding) freedom to use it even if this work is patented, and he doesn’t have to pay license fees.
- GNU General Public License, version 3 (GPL-3.0): The license has a very nice preamble explaining why the license exists and some none-lawyer English on what the license means. Basically the software having this license is free and can be used by anyone. If you sell/distribute the software you MUST provide this license as part of it and also a source where the software can be downloaded. Also changes to the original software must be marked, and as in all other licenses, it is provided AS-IS. After this starts the complicated words like “conveying”, “propagate”, “notwithstanding”… very legal stuff. This license needs more than one reading (probably 5 or 6) to really understand what they mean, and I hate when documents are written that way. So although I like the GNU, I guess I’ll be skipping their license for now.
- Mozilla Public License 1.1 (MPL-1.1): Another long document filled with difficult to understand lawyer language, with no nice introduction like the GPL :-(. It even has a exhibit, like in murder cases :-)!. But the rest looks familiar, you must make source code available, changes you make to the code are also under the license, you have the right to remain silent (kidding). You can create a “Larger Work” but the “covered code” (that is the one on which the license is used) must still fulfill the license (source code availability and such). You can change the license but you must also change the name so that people don’t get confused (yea, like normal people read licenses). Like the GPL, too much words for something that should be simple. I pass.
- Common Development and Distribution License (CDDL-1.0): Seems like a nicer edited version of the Mozilla license previously described.
- Eclipse Public License 1.0 (EPL-1.0): While also a long license, it is easier to read than the previous ones and seems more focused on allowing the use of the created software in commercial products (probably because eclipse is a base for many commercial products). It requires (as all others) that the original source code be freely available, and also seems to provide a better definitions of what contributing means.
After reading the licenses, I decided that to make a decision it would also help to know who uses each license:
- The MIT License: Ruby on Rails, Lua, and the much love SSH client PuTTY.
- The BSD 3-Clause License and The BSD 2-Clause License: FreeBSD uses the 2-clause license, also used in apple’s Mac OS X.
- Apache License, Version 2.0: All of the software created by the Apache Software Foundation, including the Apache HTTP Server, Ant, and Maven, to name a few.
- GNU General Public License, version 3 (GPL-3.0): The Linux Kernel (site seems to be down… not good), and the GNU Compiler Collection.
- Mozilla Public License 1.1 (MPL-1.1): The Mozilla projects like Firefox and Thunderbird
- Common Development and Distribution License (CDDL-1.0): OpenSolaris, Netbeans, and Glassfish.
- Eclipse Public License 1.0 (EPL-1.0): The eclipse platform and related technologies. From some internet reading it seems that you can’t (legally) use GPL code in EPL licensed software because of license incompatibilities. Darn, we can’t even make our licenses compatible!!!
The quest has left me exhausted, and I still can’t figure out what license to use for my code! I am divided between a really open license (like the MIT license) which simply gives everything to anyone who wants it or the EPL license just in case I decide to create a start-up and want to commercialize my work. Oh well. life it so difficult sometimes, isn’t it?