Free software, as defined by Richard Stallman, must provide the user with the following freedoms:
rms wrote: |
---|
Freedom 0: The freedom to run the program for any purpose.
Freedom 1: The freedom to study how the program works, and change it to make it do what you wish.
Freedom 2: The freedom to redistribute copies so you can help your neighbor.
Freedom 3: The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits. |
However, there's one missing:
rms should have written:
Freedom 4: The freedom to distribute your own code under the license you choose. |
I've been writing a shell in C, and I decided that, instead of using the input and history libraries I'd been writing, I'd use the more flexible and robust GNU Readline and History libraries (hereafter referred to collectively as "Readline"). I just found out that Readline is licensed GPL instead of LGPL like I assumed, meaning that if I want to distribute my own code, I
have to license it GPL.
The GPL is a virus - anyone who wants to use GPL'd libraries must infect their software with its presence, propagating it and spreading the disease. It's almost as bad as some of the proprietary licenses it aims to defeat (fighting fire with fire). The license text itself is a convoluted mess. I remember helios pointing out once that BSD licenses tend to be < 2 kiB, while the GPL is nearly 32 kiB. 32 kiB of viral RNA ready to infect any project it comes into contact with. (I'll admit that by this point I'm just being silly).
With that being said, I have a couple of questions:
1. If I link to Readline dynamically rather than statically, do I still have to license it GPL? I really wanted it to be MIT licensed.
2. If not, are there permissively-licensed alternatives to Readline?
Note:
For anyone that is not familiar with GNU Readline/History, Readline is a library which provides user input with line editing, while History (somewhat seamlessly) allows you to store any input text in memory for command history. The history can also be saved to a file and then recalled, providing more permanent command history.