My thoughts on software licenses

Whenever you release a piece of code, a library, or any other software package, you should include a license so that other people may legally use your software. You may not think it’s a big deal, but if you don’t include a license, a lot of people won’t be able to (or feel comfortable) using your code. This is an even larger issue when somebody needs to use it for a work project, since companies have to worry more about litigation than individuals do.

In the past, I’ve received requests to include a license with various packages. For example, GitHub.com asked me to specify a license for my sublime-nginx plugin so that they could include it with one of their packages.

I always license my code under the MIT license as a rule of thumb, although I’m happy to use a similarly permissive┬álicense (for example, I was asked to relicense my Varnish Dashboard under the FreeBSD license, which I did). The reason why I do this is that I write and release my open source projects to help other programmers for the most part. I want them to be able to use my code however they see fit, including it with their own project, redistributing it, including it in a commercial project, etc. The MIT license, BSD license, and Apache license are examples of very permissive licenses, while the GPL is a well known example of a non-permissive license.

Non Permissive Software Licenses

Here’s a breakdown of the rights you give people by releasing your software under the GPL (GNU General Public License):

  • People are free to copy the software wherever they want and as many times as they want
  • People are free to distribute the software however they want
  • People are free to charge a fee to distribute the software (but the redistributed software must still include the original license)
  • People are allowed to make whatever modifications to the software that they want

My problem with the GPL is with the last bullet point. People are allowed to make whatever modifications they want, but any projects that include GPL’d code must also be released under the GPL. This means that developers cannot use GPL-licensed code for proprietary software. The GNU Lesser General Public License (LGPL) is a variation of the GPL that allows this, but you cannot relicense GPL code as LGPL to magically work around this.

There are a lot of people who believe all software should be 100% open source, and try to avoid any software that isn’t. Richard Stallman, founder of GNU, is perhaps the most well known individual who has this mentality. He is so adamantly against closed source software, he recently decided against making changes to the GCC to allow better code intelligence in Vim because those changes could allow closed source software to access the intermediate code generated by the GCC without being compiled into the GCC (and therefore not required to be made available under the GPL). He handicapped the GCC and Vim to avoid benefiting non open source software. This is a choice programmers make, and I’ll reserve judgement on it. Luckily if people are unhappy with the licensing on a piece of software, they can create their own and license it however they wish (such as LLVM).

Permissive Software Licenses

In contrast to the GPL, the MIT license has very few stipulations about how you may use the software:

  • People can use, copy, and modify the software however they want. Nobody can prevent them from using it on any project, from copying it as many times as desired, or from changing it however they want to
  • People can give the software away for free or sell it. There are no restrictions on distribution.
  • People must redistribute the license with the software

Basically you’re saying people are free to do whatever they want with your software, as long as the distribute it with the license.

Source Code != Open Source

An important thing to note is that a company or individual may publish source code to a program or library without making it open source. The main distinction is that people are free to use open source software however they want, which isn’t the case for all proprietary/commercial software. For example, Epic Games has published the full source code for the Unreal Engine. You are free to download the Unreal Engine source code, and modify it, but you cannot freely re-distribute it. You must abide by the license Epic Games has created, part of which includes a royalty agreement.

Closing Thoughts

Software licensing, permissive vs non-permissive, closed source vs open source, etc, are all debates that many people are passionate about, and normally lean very hard towards one side or the other. Personally, I prefer permissively licensed open source software. I want my OS to be open source, and I like open source programs for the most part (its nice to see how things work, and to be able to contribute if I want to), however, I’m not against closed source software. There are people who were against Steam moving to Linux because the Steam client and many Steam games are closed source, but I think that’s ridiculous. I don’t think it’s fair to expect everybody to release their work for free.

Releasing the source code for your software doesn’t necessarily mean your work is free, but it’s very likely that you’ll see reduced profits from it.

I do commend commercial developers who release their source code, under any license. For example, Keen Software House recently released the source code for Space Engineers. You still have to buy the game, and you can’t re-use the code, but you can contribute to the code (which is awesome!), it makes modding easier, and it’s helpful to see how such a complex game is created.

Leave a Reply