With the move of my website to this domain, I'm rethinking the license with which all my code and programs are released. Previosuly, I have just licensed everything under the GPL without giving it much further thought. As with any decision we take, it is worthwhile to consider our motives and understand what exactly it is that we are trying to achieve. In the context of code licensing, it's important to define how I want my code to be used.
  1. I don't really plan making money from this code. Not because I'm an altruist, but because there really isn't anything worthy enough to make money from. If I release something really worthy in the future, I may reconsider this.
  2. The software itself should be free. I'm very grateful whenever I find a free program that does something useful, and I want to give back. Releasing free software of my own, and publishing free content that people may find useful is giving back.
  3. It is important for me to keep my code open-souce and promote open-source in general.
  4. I don't mind if people link my code into their proprietary, closed-source programs. Software is just another professional field following the ubiquitous economic laws of supply and demand. I do believe that open-source, free as in beer software is important. But I also know that it is very important for companies and individuals to be able to make money from developing software.
With this in mind, GPL isn't suitable because it doesn't allow (4). GPL is frequently called viral since it "infects" any software it is linked into, forcing it to follow its licensing rules. GNU acknowledged this defect and released LGPL - Lesser (previously 'Library') GPL, which is the license for many common open source libraries - the best example being libc, which is linked into the vast majority of Linux applications. I think that the chief difference between GPL and LGPL is in relation to (1) - do I want to make money from this code ? If I do, GPL is probably more appropriate. For instance, MySQL and Qt have GPL licenses - these companies make money from their code (MySQL from support and Qt from a parallel commercial license). If I don't have plans to make money from the code, LGPL is probably more appropriate, as it scares less people away from actually using my code in their software. Generally, the GNU licenses fall in the category of "copyleft", which is defined by the Free Software Foundation as:
A general method for making a program free software and requiring all modified and extended versions of the program to be free software as well.
There are also non-GNU open source licenses, like BSD license and MIT license. These are less restrictive than LGPL, and are closer to the simplistic "this code is in the public domain, do whatever you wish with it, just don't blame me if it blows your computer up". Curiously, the popular BSD license had an infamous "advertising clause" which stated:
All advertising materials mentioning features or use of this software must display the following acknowledgement: "This product includes software developed by the University of California, Berkeley and its contributors."
This version of the BSD license is now called the "old version", or the "4-clause version". The newer version doesn't include this clause, and is called the "3-clause version" or the "New BSD license". The MIT license is very similar to the BSD license, the only difference being that it lacks the "endorsement clause", which in the BSD license states:
Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
I think I'll go for LGPL eventually, motivated by the following clarification (from the GNU website):
The simplest way to make a program free is to put it in the public domain, uncopyrighted. This allows people to share the program and their improvements, if they are so minded. But it also allows uncooperative people to convert the program into proprietary software. They can make changes, many or few, and distribute the result as a proprietary product. People who receive the program in that modified form do not have the freedom that the original author gave them; the middleman has stripped it away. In the GNU project, our aim is to give all users the freedom to redistribute and change GNU software. If middlemen could strip off the freedom, we might have many users, but those users would not have freedom. So instead of putting GNU software in the public domain, we "copyleft" it. Copyleft says that anyone who redistributes the software, with or without changes, must pass along the freedom to further copy and change it. Copyleft guarantees that every user has freedom.
This answers all my motivation bullets, especially (3) - it helps promote open-source, making it impossible for people to turn open-source work into closed-source work. Here are some useful links on this subject: Wikipedia is, as always, helpful: