Software Licensing

Throughout the decade I have been programming, I've never really thought much about software licensing. It's just never been an issue. To date, every single program I've posted on my website has been released to the public domain: source code and all. But then, there was that one exception. An SNES emulator I have spent the last two and a half years developing, bsnes. Because of this, I have learned a lot about software licensing, and have spent the last several months researching the topic in great detail. I wish to share what I have learned during this time, in hopes that it is helpful to someone.

First, a little background. Feel free to skip this next section if you are familiar with copyright law and the various software licenses available.

Copyright and Software Licenses Available

The copyright owner of a software program is free to license their program however they choose. In fact, one does not even need to register for a copyright: the rights are automatic. Registration only affords you certain addition legal benefits. This means that any software program we write can be copyrighted any way we choose. The author can choose to release their source code or not.

For those of us that choose to release our source code, we typically prefer to choose a license that is well established and known.

For those who do not wish to impose any licensing conditions upon users of their software, no license is needed: one simply releases their work to the public domain. This allows anyone to use the software, and its' source code, for any purpose whatsoever. This includes creating derivative works, selling the software, and commercial use.

There is also the BSD license, which only attempts to allow the author to maintain copyright over his code, limit his liability for software defects, and to disallow the use of the author's name for the purposes of promotion.

Next up, there is the LGPL. And here are where things start getting complicated. The LGPL is a 16-condition license full of cryptic legal writings. In summation, it attempts to define that any software that uses LGPL software with it, must either link to the LGPL code through the use of a library, or provide source code to the author's program so that end users can recompile the software with modified versions of the LGPL work. Also, any modifications to the LGPL license must be published. The LGPL was designed to be used for library code, but some authors choose to use it for other things due to its lesser restrictions than the next license I will talk about. The problem here is that linking to another software program through a library is rather difficult: you cannot simply create libraries for every small snippet of code and get these libraries installed on users' computers trivially. This is only really effective for larger libraries. It also defeats some compilier optimizations that are possible when code is linked together as a single package, and prevents the program author from guaranteeing the integrity of the entire software program, as the LGPL portions can be substituted by anyone.

Finally, the last popular license is the GPL. This is the most complicated and restrictive of all. While only weighing in at 12-clauses, this license conveys an entire following, that is the subject of this article. This license attempts to define that anyone who uses any portion of GPL source code must then license their entire program under a license that is compatible with the GPL, meaning equally or less restrictive, sacrificing all of his copyright on his own work, at least to the extent that the GPL does. But the license was created with good intentions: it prevents commercial users from taking someone's code, and using it in a commercial product to profit from. This can be very desireable if one is uneasy with the idea of others profiting from their work, and many people appear to fall into this category. But there are two major problems with this license, which I shall discuss below.

Freedom

The GPL, lead by the FSF, states that it was designed with the idea of freedom, or "free software", in mind. That is, the freedom for anyone to use, modify and distribute GPL licensed software. However, the plain use of the word 'free' is very curious. According to dictionary.com, there are 49 different meanings for the term 'free'. So we must put this claim into context. What do they mean by "free software"? According to the license, it refers to freedom, or more specifically, the user's freedom, to do whatever they choose with the software. The term does not refer to what most people would consider the most obvious meaning, free of charge software. The license hopes that users will attempt to redefine the common term to mean user freedom, rather than cost. Unfortunately, the license does not even grant freedom to everyone. It comes at a cost: the developers give up their rights / freedoms in return for giving it to end users. By using the GPL, or any code that is licensed under the GPL, the developer loses the ability to not release his source code, even for that which he wrote himself and legally owns the copyright to, to prevent others from taking his work and using it in a competing product, and even to prevent others from selling his work for a profit, such as is done on many popular Linux distribution CDs. As the license affects even code that was not written under it by forcing it to be licensed as GPL compatible, it has earned a reputation of being "viral", or spreading to all code. The term is accurate, if somewhat blunt and offensive to supporters of the GPL. So, as you can see, the term "free software", as used by the GPL, is ambiguous. It attempts to define certain meanings of free, while denying other meanings.

The BSD license, on the other hand, attempts to grant a different kind of freedom: developer freedom. But again, not to the author, but to any developer who attempts to use the author's code. The developer is free to use said code almost however he chooses. Even in a closed source application. The ideal that BSDL supporters stand behind is that the author of the code should have the rights to do what they want with their own code. However, this in turn can take away user freedoms. Not directly, the user is free to download the code from the original author and do as he chooses with it. But in the future, say another user downloads the software, makes modifications, and then publishes that code. This user does not have to publish the modified source code, nor does he have to use the same licensing conditions, so he can restrict the next user's rights further.

With public domain code, it is the most philosophically accurate version of the term "free software" possible. It grants completely unrestricted freedoms to both users and developers, while taking all rights away from the author. It also implies monetarily free software. As anyone can use it, anyone can copy it and give it away for free. It suffers from the same "flaw" as the BSD license, that anyone using the free work can then modify it and claim copyright of it again. For an example of this in the real world, take a look at the numerous adaptions of "Romeo and Juliet". The story itself is in the public domain, but the adaptions of them for movies are copyrighted. Public domain attains its philosophical accuracy by putting the onus of freedom on the direct users of the software. The author is giving the immediate person full freedom to the work, and placing no restrictions on that person to keep allowing that work to be free as it is modified and passed down in the future. If "Romeo and Juliet" were a story licensed such as the GPL, the motion picture adaptions would not have the right to prevent their movie being distributed and adapted further without making any profit whatsoever. Thusly, the movies would not have been made, as it would not have been profitable to do so.

The bottom line is that licenses are an attempt to limit the freedoms of those who acquire your code: whether it be users or developers, to protect the wishes of the author of the code. The only way to truly claim that one is releasing "free software" in all senses of the word, is to release it to the public domain. Any other uses are vague, and very confusing to people who are not familiar with the above license agendas.

Open Source

Even in the world of GPL software, there lies a split among followers. Some prefer to support the term "open source", stating that "free software" is ambiguous, for much the same reasons I have stated above. This group is lead by the OSI. The ideals are nearly the same for both the FSF and OSI. Somewhat ironically, they have managed to choose an even more ambiguous term. Once again, we turn to dictionary.com to see that the word 'open' conveys an astonishingly vast 88 different meanings. At first glance, as a user would consider "free software" to be software at no charge, a user unaware of the OSI would consider the term "open source" to mean that the source is available, or open. Indeed, that is a valid definition of the term. However, much like the FSF, the OSI attempts to redefine the existing term, hoping that its supporters will convince the world to change the meaning to mean what they want it to mean. Unfortuantely, this only becomes the source of contention and animosity among the programming world.

As it turns out, the OSI even attempted to apply for a trademark on the term "open source", which you can read about here. As one might have guessed, the trademark was denied, because the meaning was too generic and vague. In the words of OSI itself, "So "Open Source" is not and cannot become a trademark." -- The OSI then goes on to both request the use of a new trademark, "OSI Certified", as well as to continue attempting to redefine what the term "open source" means anyway, even knowing the level of confusion and hostility they are causing by doing this.

The World of GPL

The common blanket response to those who are unhappy with the GPL is, "don't use it." -- if only it were that simple.

Imagine for a second, a world where all available software was licensed under the GPL. At first, it sounds good, right? Access to all source code, full rights to it, and the right to modify and distribute the software for free. Indeed, this would be a huge boon to the end user. They would never have to pay for software again. But it comes at a very large price, that unfortunately few realize. If all software was GPL, from the kernel to the window manager to the compiler to the compiler library to the user interface library, it would be virtually impossible to create software that was not GPL. Simply using any of this code in your project would instantly force it to be under the GPL. Qt is a good example of the negative effects of this. Aside from their offer to sell you the source code, you must license your code under the GPL to use their toolkit. So, in order to do something as primitive as draw a window on the screen, you must give up your exclusive rights as granted by copyright law to do it. Sure, you could "not use it", and write your own toolkit. But there's no way you could match that level of quality. You'd end up presenting your users with an inferior user interface that does not at all integrate well with their desktop and other applications. But for now, you can use an alternative toolkit, GTK+, which uses the less restrictive LGPL license. The point is, what if GTK+ was also GPL? What if all libraries were? What if even the basic compiler library functions were GPL? Qt, for one, would likely not exist. They are a business, and make money by selling their library to companies such as Adobe. They would not be able to sell Qt at all, as Adobe would simply download the software elsewhere. And by extension, the popular K Desktop Environment, used by nearly half of all Linux users, that makes heavy use of Qt, would not exist either. In fact, you would have to basically reinvent and entire operating system to create your program, even if it were only as simple as a calculator, to avoid the GPL. So in return for the end user having freedom to do whatever they want with your work and without your permission, you completely lose your freedom to develop code, except under the GPL. This reality will probably never happen, but it is interesting to take an ideal to its logical conclusion.

Infighting

Even discounting the problems with licenses such as the GPL, there is yet another serious problem. The supporters of the GPL. Although I am certain there are many very level headed people who support the GPL, Linus Torvalds being a shining example, there are many more who are very hostile and condescending toward others in attempts to push their beliefs onto the world.

I am referring to the FSF and OSI camps that continue to attempt to attack any and all software that is not licensed under conditions that match their ideals, most notably the GPL, claiming that said software is "proprietary", "not open source" and "not free software". These groups typically attempt to clone products to eliminate them from relevence, and scare off users to go to other products. While it is fine to express one's preference, and respectable to have their own ideals about how software should be licensed, it is absolutely not acceptable to attempt to proselytize their beliefs onto the authors of other works who choose not to use such licenses.

Let us take a look at the terms used one more time: "proprietary" -- certainly a GPL licensed program qualifies here. In order to enforce a license, it must belong to someone, a proprieter. The only way a program is not proprietary is if it is released to the public domain. How about, "free software"? The reality is that the majority of people do not know anything about the FSF or its' ideals. They see the term and think "free of charge software". The freedom meaning of the word free is reserved for animate objects, such as humans. It is inanimate objects that associate free with price. Therefore, strictly speaking, a program that is closed source can very easily and validly be declared "free software". Attempting to chastize the author of said software, and confuse end users into thinking the software costs money is not acceptable. The FSF simply must choose a more descriptive term than "free software", and stop complaining about it's use by non-GPL software programs. Lastly, what about "open source"? Again, the term "open" does not convey anything about the OSI's "Open Source Definition". If a program has released it's source code, it doesn't matter whether or not the end user has GPL-compatible rights to it's use. The code is there, and it qualifies as open. Attempts to redefine the term only spread more confusion. The world is too large, and FSF / OSI advocates are too few. This will likely not ever change: new terms are needed.

The OSI took a half-step in the right direction by declaring a new trademark term, "OSI Certified". One is only allowed to state their software is "OSI Certified" when it matches their own personal view of what constitutes open source software. There is no confusion here. If a user does not know what the term means, it is a legally registered trademark. They can look up the term and read all about it. The user is not confused by a statement like "this program is not open source", despite seeing the entire source code package available with said software. However, they unfortunately continue to advocate redefining "open source". But, as one can easily see, software can be GPL and OSD incompatible, yet still be validly considered "open source".

We must stop attempting to redefine these words. Sadly, the FSF does not have their own trademark term, such as "FSF Certified". This would be a very good thing to attain. Typically when this point is raised, the usual response is, "well, what term do you suggest we use to define our software?" -- I'm sorry, that is not our responsibility. Ask the FSF to declare a new term for you to use, and make sure it is unambiguous.

It's not even really the terms that are the major problem, it is the attitudes of those who attempt to redefine them that are my biggest source of contention. It is nauseating that someone can have so little respect for the hard work of others. When a software developer chooses to develop a program, he is entitled to copyright of his work, which grants him exclusive rights under law. This is because he created it. Not you, not the FSF, and not the OSI. I have the utmost respect for GPL software and those who make informed choices to license their source under this license. However, I do not have respect for those who attack others for not using this license. If you are unhappy with a license, then shut up and write your own software. Nobody is stopping you. You are not entitled to all exclusive copyrights the owner enjoys over their own. You have done nothing to deserve it. Unless the author decides to give you those rights, you have absolutely no right or justification to complain about it.

Again, I must point out that not all open source advocates behave in this zealotous manner. This article and its scorn are directly solely at those who attack others over their choice of license.

Forking

The reason I have chosen not to release my latest software project, bsnes, under the GPL, is because I wish to maintain the collaboration of the project, and prevent the act of forking without my permission. What is forking? Forking is taking someone else's project, as it currently stands, and then starting on a competing, or alternate, project. The GPL grants everyone the right to do this, without even asking the author permission first. This can be advantageous, and if the developer understands those risks, he is free to use the GPL. However, like anything, it can also be bad. Take a look at the Compiz and Beryl projects. Compiz was an attempt to add 3D effects to the desktop of X-Windows, the video display server for Linux. It was released under the MIT license, which is very similar the BSD license. The authors of Beryl, apparently upset that Compiz preferred to keep their project stable rather than continue adding feature after feature, forked the project and relicensed it under the GPL. As a result of this, the workforce behind Compiz was cut in half. Even worse in this case, is that Compiz cannot legally use any of the code added to Beryl, but Beryl is free to take any code from Compiz. Would you, as an author, want to compete against a project like Beryl?

This is why I chose to license bsnes under a no-derivative license. It's not even that I am afraid of honest competition, I just find it unnecessary. I am willing to add virtually any code submitted to me to bsnes, unless it severely goes against my project's goals. If someone wishes to do something that goes completely against my goals, then they can and should make a separate project. They do not need to fork the work I spent the last 30 months of my life developing without so much as a thank you to me. However, I do wish to create a collaborative environment, and will most likely even add code that I do not agree with. Take Nach's JMA decompression library, for instance. I am not a supporter of creating more compression formats. But Nach developed this code for me, and graciously allowed me to use it. I know some people will be happy to have the code in bsnes, so it is there. You see, I want to unite and have everyone work on the same project. I want to prevent my userbase and group of contributors from splitting in half when someone gets upset with me one day because I won't add a single feature he thinks should be in bsnes that goes against my project's goals, such as, say, a game-specific hack.

But my license is not the be-all end-all of discussion on this matter. It is simply the license you get if you do not talk to me at all. You see, all I want is the basic common courtesy for someone to ask me permission before forking my work or using large portions of it in their applications directly (eg copying). To date, I have allowed Richard Bannister to create a Mac OS X port of bsnes, and I even allowed him a right the GPL would not have given him: the right to not release the source code to his port. You see, I felt it was his work that made this port, and thusly it was his right to choose whether or not he released his own code. But that is my personal opinion. But you see, I'm willing to grant these kinds of freedoms. I have also offered all of my code to the ZSNES project, the SNES9x project, and to SNEeSe, to be used free of charge. They have declined my request, and the offer has since been rescinded, but they're free to ask again anytime and we can discuss the matter. The point is, I don't want them to have to change their licenses to use it. I offered it to them as though it were in the public domain if they wanted it. And anyone is free to ask me if they would like the same rights to any portion or all of my code. If the request is unreasonable, I probably would deny the request, or at least add some restrictions. All I want is my legal right to be able to choose whether or not to allow someone to use my work. All I want is to have someone ask me permission.

The Relevance of Software Licensing

So, surely, offering all of my code like this probably resulted in a lot of requests, right? Actually, no. To date, Richard Bannister is the only person who has ever asked me permission to use my code. And I agreed. And despite the fact that only one person has ever asked me to use my code, I have been publically insulted and attacked by no less than five people directly, and quite likely many more that I am unaware of, for choosing the license I have for bsnes. This is absolutely tasteless, and I warn anyone doing this: you are only scaring people away from using licenses such as the GPL by committing these actions. I have no intentions of granting you all of my exclusive copyrights after you attack me.

So why haven't I received more requests to use my code? The reality is that nobody really has the need to release a derivative work. Those that have made improvements have sent them to me, and I've included them and given them proper credit.

For reference, the bsnes software license that has been the source of personal attacks against me, can be read here.

Conclusion

The ultimate reality is that not many people care about software licensing at all. The most important factor in choosing a software application for the vast majority of people is the quality of the work. Or in the case of those with less money than others, the price, followed by the quality. The software license is pretty low in most people's books. It has taken me a while to realize this, and I have succumbed to joining in arguments over the licensing of my work in the past. Well, no longer. This will be my last public discussion regarding software licensing. I will simply refer people to this article in the future when they choose to attack me over my choice of software licensing.

I hope this has been educational to at least some people, and I thank everyone for reading. I offer you my sincere apologies if I have offended, but I fear I would not have been able to get my point across effectively had I chosen to be non-confronting and timid in my statements. Some people really need to realize the extent of their actions and words, as well as the basis upon which they are making them from. Please, when you see someone misrepresenting terms like "proprietary", "free software" and "open source" to reference certain agendas, please direct them here. None of these terms are legally registered trademarks (no, not even when capitalized), and thusly they do not convey any additional meaning, no matter how much a minority group of people would like them to. Let us, the end users and developers alike, stand up for other authors who are being publically attacked for their choice of licensing. Let us clear up this source of contention and confusion once and for all.

Your comments are welcome, direct them to setsunakun0 <at> hotmail.com.

© 2007 byuu - archive.is/EOtd3