Yesterday I was peeved about the oddest usage of “open source” I have ever read. Today, let’s talk about “free software.”
The Free Software Foundation has released the last call draft for version three of the GNU Public License (GPL). Version two of the GPL is the world’s most popular software license and arguably promulgated the concepts of “free software” and “open source.” However, in the intervening years, the field has become mature and the legal landscape has changed. Version three of the GPL is intended to clarify the original precepts of free software in a world that has created new methods of restriction.
Unfortunately for all supporters of free software, I don’t think it will succeed.
One of the strengths of the GPLv2 was its clarity. The average programmer could take an hour, read the entire license, and gain a understanding of the terms under which they would be distributing their work. The entire text lacked the legalisms which muddy contracts and leave their interpretation to the realm of the courts. I used to believe that clarity was intentional in order to help memetical propagation.
But the new GPL fails at that game. Take a look for yourself! Where the older license had:
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
The new license has, and excuse me if I miss every reference:
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
Thank you, Mr. Moglen. Your presence here is felt. But, hey, at least there aren’t any painful legalisms, right?
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
No. I won’t be using the GPLv3. Which is a pity, because I think its singular “viral nature” is one of the best things about it.