In the last few weeks, I’ve gotten a number of emails about our license change from Gnu Public License (GPL) to Clear BSD. While there have been a number of theories, I thought I’d share the actual answer.

Although I have talked and worked with a variety of lawyers on this situation, none of this is legal advice and should only be considered analysis by the leader of an open source project and not legal advice.

The license change primarily came about for a variety of reasons:

  • First, some people are forbidden to contribute to GPL projects. Their employers allow open source contributions via other licenses, but the GPL’s viral nature makes them nervous. Maybe inappropriate and not compelling by itself.
  • Next, the opportunity for others to build commercial successes on and with web2project ensures its longevity. If people make money with the project, it will continue to have supporters. I know of at least two companies doing this now. In both cases, they’ve passed back patches and made thoughtful (and likely helpful to them) architectural suggestions.
  • Next, the GPL would prevent us from interacting with proprietary systems or non-GPL compatible libraries[1]. Fundamentally, a project management system is about sharing information within and between groups. Quite often that information comes from other systems – CRMs, billing, time sheets – which may be proprietary or use non-GPL compatible libraries. If we were GPL, we would have to write/find our own libraries.
    • For example, I work for Twilio where we provide a REST API to send SMS (text messages) from applications. If I wanted to send text updates of tasks and web2project was GPL, I may be barred from using the MIT-licensed Twilio PHP library or have to distribute it separately making it more difficult for users.
    • Even more interesting, since the PEAR libraries within web2project core are under the PHP license, we are banned from including them without an explicit exception from the copyright owner[2]. Previously, Rasmus Ledorf (father of PHP) noted the Free Software Foundation (FSF, maintainer of the GPL) described “linking” in the sense of compiled software and literally said “Move along.” It was a dead issue but until the WordPress/Thesis GPL battle a few years ago. Things got interesting as one of the concepts put forward from many directions was nicely summarized by WordPress core developer Mark Jaquith[3]:

“It isn’t correct to think of WordPress and a theme as separate entities. As far as the code is concerned, they form one functional unit. The theme code doesn’t sit “on top of” WordPress. It is within it, in multiple different places, with multiple interdependencies. This forms a web of shared data structures and code all contained within a shared memory space. If you followed the code execution for Thesis as it jumped between WordPress core code and Thesis-specific code, you’d get a headache, because you’d be jumping back and forth literally hundreds of times. But that is an artificial distinction that you’d only be aware of based on which file contained a particular function. To the PHP parser, it is all one and the same. There isn’t WordPress core code and theme code. There is merely the resulting product, which parses as one code entity.”

Granted, PEAR libraries are not derivative works of web2project as themes are of WordPress, but this muddies the water.

  • Finally, the biggest reason was a potential risk to the data itself. I’m not saying that a tool would change the license of the content created or delivered through it. For example, if you write an original document in Microsoft Word, it is yours and not Microsoft’s. The FSF says that explicitly with:

“copyright law does not give you any say in the use of the output people make from their data using your program. If the user uses your program to enter or convert his own data, the copyright on the output belongs to him, not you.”[4]

Unfortunately, once again things were muddied in the WordPress/Thesis GPL battle. The concept is that if the application and a module/extension share in-memory data structures[5], they form a single program and if one is GPL, they both must be. But another portion of the FAQ adds an interesting spin:

“By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.”[6] (emphasis mine)

And that’s where things get interesting. In the case of WordPress, the data structure for a page or blog post is simple. There’s an object with fields like title, body, author, and a few other fields. The code to replicate that data structure would take most developers minutes to create. Even calling it a data structure is generous.

On the other hand, think about web2project. A project has tasks. Those tasks can be dynamic or milestones and have parent/child relationships and  dependencies. Then tasks have assignees who do work and log their time against each task and update its status which rolls up to the project status. And so far we haven’t considered contacts, files or other things associated with the tasks.

Using – let alone creating – these data structures is difficult with our existing code but – if that code was GPL –  any code exchanging those data structures may have to be GPL too. And every step closer to having the “right” data structure is another step closer to having the communications too “intimate.”

..but what *is* project management but the representation of complex data structures!?

Therefore to ensure the longevity of the project, respect the licenses of current and potential supporting libraries, and the integrity of our users’ data, we had to move away from the GPL.

  1. – Licensing FAQ
  2. Ben Ramsey – “What the GPL?!
  3. Mark Jaquith – “Why WordPress Themes are Derivative of WordPress
  4. GPL FAQ – “Is there some way that I can GPL the output people get from use of my program?
  5. GPL FAQ – “If a program released under the GPL uses plug-ins, what are the requirements for the licenses of a plug-in?
  6. GPL FAQ – “What is the difference between “mere aggregation” and “combining two modules into one program”?

For the record almost all of the GPL code is out of web2project as of quite a while ago. The only place is one single class where we limit our usage to public interfaces which are all being reimplemented. Our supporting libraries include those licensed under the BSD (adodb, Xajax), Lesser GPL (adodb, jscalendar, phpgacl, PHPMailer), MIT (jQuery),  PHP license (PEAR), QPL (jpgraph), or the public domain (ezpdf).