Over a million developers have joined DZone.
Platinum Partner

Why GPL? Or How the GPL Eats the Kittens it Protects

· Java Zone

The Java Zone is brought to you in partnership with ZeroTurnaround. Discover how you can skip the build and redeploy process by using JRebel by ZeroTurnaround.

The GNU Public License is the best known for its viral aspects. Among the prominent GPL licensed software is of course the Linux core and MySQL. Recent newcomers include the JavaScript framework ExtJS and the application server SpringSource Application Platform. The primary motivation for choosing a viral license like the GPL for people or companys behind the product is to protect their business.

In the case of SpringSource the competitors are now IBM and Oracle (who recently bought BEA). IBM is well known for buildining their own products upon open-source software. If SpringSource would release their Application Platform under the Apache License, like the Spring Framework, there would be nothing to stop IBM from selling a new product that builds upon the Application Platform, without contributing back to the project, be it code or money.

In the case of ExtJS, choosing the GPL license was a vital move for Jack Slocum to protect his works against blatant copies. Again, the motivation was to protect Jack's own business, which should be also in the interest of anyone using ExtJS.

The ugly thing with the GPL are the side-effects, as any strong medicine provides. As a license, the license text must be robust enough to withstand in court. As such, involvement of lawyers is inevitable. Therefore, understanding the license text is, to say the least, difficult. Considering the most common answer of lawyers - it depends! - its not trivial for lawyers either. Eventually a judge has to decide how a certain phrase has to be interpreted, which explains that the GPL is now at version three.

The negative side-effect here is that it's nearly impossible to clearly tell when you are allowed to use GPL licensed software without GPL licensing the software using it. A few examples:

  • Is everyone running a LAMP stack without a commercial license for MySQL breaking the GPL license?
  • What means "using" GPL licensed JavaScript, and when is it more then just using? Is including ExtJS code via script tags in my web application enough to require the application to be GPL licensed? Or writing code that uses GPL code? Or code that loads my script that uses GPL code?
  • What does "distribution" mean in the context of a web application? Is it relevant? Not?

I've met Mike Wiesner of Spring Source yesterday at the Java User Group Cologne event and talked with him about the motivation behind GPL licensing their Application Platform and about using GPL licensed software like MySQL. According to him, MySQL AB, the company behind MySQL, argues that its okay to use MySQL, including the MySQL-JDBC-Driver, in a non-GPL application, as long as the application doesn't use anything specific to MySQL. In other words, as long as you just use the JDBC API for reading and writing data, without anything specific like the LIMIT statement, you're fine. The issue with that: No court has yet decided that this interpretation is correct. While the risk of just using it, like anyone else, is low, it's far from being a desirable situtation.

In the case of the Application Platform Mike argued that just using it as the application server for your application is fine. If you create a product that builds upon it, you need to commercial license to be able to distribut it as part of your product. On the other hand, you can distribute your product without the platform, and let your customer install it himself. Of course that again is just an interpretation that you shouldn't rely on.

I hope this gives a good idea of the more obvious issues with GPL licensed software.

Next up: How to deal with the copyright of external contributions to open-source software.

From bassistance.de

The Java Zone is brought to you in partnership with ZeroTurnaround. Discover how you can skip the build and redeploy process by using JRebel by ZeroTurnaround.


{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}