GPL or BSD License: Confusion Galore

I have been working on a new project, Wikiply, for the past few weeks. Very little code has been written because I am still in the planning and designing phase. Things have been progressing smoothly except for one issue that sways me multiple times a day: licensing. Should I choose GPL or BSD license?

There are many, many posts online discussing the issue of GPL and BSD license. I have read a lot of them and they all make good points for and against GPL and BSD license. But the more I read, the more confused I become.

I started with the notion that GPL should always be used in open source software. I also thought that releasing software under BSD license was letting others take advantage of your hard work without giving anything in return; a highly unfair practice. My thoughts have changed a bit. You can read all about the regurgitated pros and cons all over the Internet. I’m looking to introduce a new perspective, if I can.

Let us first think of the developer, someone like me. He has to create a project that will utilize some code from other projects, be they libraries, embeddable code, or whatever. If he chooses code licensed under BSD, he has more freedom on what to do with the code. However, if he chooses code licensed under GPL, he now has an added responsibility: release his code under GPL as well. GPL seems to restrict his freedom on what to do with the code but it ensures that if he used someone else’s code, he has to let others use his code in the same manner.

Using code licensed under BSD license gives the developer lots of freedom to distribute the code under any license, provided he maintains the copyright notice and information. The developer now has to care less about his legal responsibilities and can focus on the code. He can take open source code and use it to make an even better code base. By reducing the burden of a developer, we increase the chance of him building better products.

For some projects GPL is the perfect license. Something like the Linux kernel needs to force others to give back after they take so that everyone can benefit and work doesn’t need to be duplicated. But that’s not to say Linux would not have been where it is without GPL (alright, maybe a little). The different BSD OS flavors (FreeBSD, OpenBSD, NetBSD, etc.) all exist, and have existed for close to 20 years, with the BSD license. They may not be as popular as Linux but in technical terms they are as good if not superior. Their using an “open source” license rather than a “free” license hasn’t resulted in a closed source OS that has taken the world by storm and left everyone else in the dust. Yes, parts of Mac OS X are from the BSD world but OS X is more than just its BSD lineage. It’s a perfect example of how “open source” helps millions with their computing. There’s no financial incentive or payback for the BSD developers in this case but it’s a matter of pride nonetheless.

Proprietary software developers have three options: (1) use GPL code and release their own code under GPL; (2) use BSD licensed code and release their code under any license; (3) create their own version of the code from scratch. In the best of situations, all code would be “free” but that is not always possible. In the worst of situations, all code would be proprietary and that is certainly possible, given the financial incentives it entails. But in the real world, some code is proprietary, some is “free”, and the rest is “open source”. “Open source” bridges the gap between proprietary and “free”. It gives an opportunity to a developer to choose his own path: does he want to be restrictive (against the benevolence shown by others) or does he want to be benevolent like others? So at each step in an “open source” license, we trust the judgement of the involved developer. Some will decide to be benevolent and others will not. That’s exactly how the world is anyways.

Not everyone who releases code under GPL can enforce its conditions. That includes small-time developers like me. We think that since we have released our code under a “free” license that others will respect the license. This is false security, pretty evident from the rampant software piracy in many parts of the world. If proprietary code can’t always be protected or licenses enforced, what chance does a “free” license have? On the other hand, as a developer, I sleep easy knowing that I did all I could to make sure I didn’t adversely affect a benevolent developer’s responsibilities and choice when I used BSD license. To me, BSD license is more of “do what you will” license because I want you to and also I can’t stop you from it.

Eventually, you have to decide how you want to approach code. Do you want to write something you are proud of or do you want to write something that gets you recognition? Are you writing code that you expect to be re-distributed multiple times or might be re-distributed a couple times and then stay in a data center somewhere? BSD is being benevolent to the next person who uses your code while GPL is being benevolent to the person after the next person who uses your code (while putting this next person in a licensing conundrum).

There’s the possibility of dual-licensing your code with GPL/BSD but I don’t like it because it might create even more confusion, hence legal burdens, on developers. Let’s try to keep things as simple as possible for us and for those who wish to use our code. You could even dual-license GPL/proprietary but if our goal is to provide “open source” or “free” code, why even go the proprietary route?

A good point comes from finite, who wrote “I am very glad that our code is MIT licensed. It doesn’t matter who ends up owning the copyright on my code in the future, because I have licensed it to myself and the world under a completely non-restrictive license.” So BSD gives you complete authority over the code even when you are not the copyright holder. Sure you can’t change the license of the written code but you are not artificially bound by any other means.

My take is this: don’t get stuck on one side of the fence. If your code will be used to create applications with mass distribution potential, use GPL so that more and more developers have access to the modifications and enhancements. If your code will be used in applications that are not distributed but function in a service-oriented role (web application, etc.), use BSD. So a kernel, with potential for mass distribution, ought to be GPL and a Wiki engine, most likely just installed and not modified before distribution, ought to be BSD.

Edit: I modified this post to address some points raised by cultic_raider.

Edit 2011-10-28: I have received some feedback from others on this issue, and as anyone would have guessed, both licenses have their supporters. I am leaning toward the BSD license for these reasons. I don’t expect my code to be used and then distributed under a restrictive license because it’ll probably not be so ground-breaking to warrant it. Even if others take my code, modify it, and release it under a restrictive license, my code is still open source so anyone (even I) could make similar modifications and release them under an open source license. BSD license allows other developers to include my code in their BSD code or GPL code so presumably my code can continue to live on in other products with non-restrictive licenses. I want other developers to have an easy time using and distributing my code because I have two users: end users and other developers. My code benefits end users directly but if other developers modify my code and the end product (with or without an open source or free license) also benefits end users, I win both ways. Any modifications others make are their own code and they should have the freedom, like I do right now, to release their code under conditions suitable to them. BSD lets me provide equal benefit to my end users and to developers consuming my code. If I release my code under GPL, my end users benefit and end users of other developers who modify my code benefit but the developers themselves are not free to make their own choices. This is good for the code but I want to be good to the developers as well.