Interpreting, enforcing and changing the GNU GPL, as applied to combining Linux and ZFS
This article explains some issues about the meaning and enforcement of the GNU General Public License. The specific occasion for this article is the violation of combining Linux with ZFS, and that concerns specifically GNU GPL version 2; however, most of the points apply to all versions of the GNU GPL and to the GNU Affero GPL as well. "GPL" or "GNU GPL" refers to any version of either of those.
While stating our understanding of the meaning of the license that we publish, we must point out that this is not legal advice.
In January of 2005, we added to our license list a statement explaining that the "Common Development and Distribution License, version 1.0 (CDDL) is incompatible with all versions of the GNU General Public License (GPL)." We explained that "a module covered by the GNU GPL and a module covered by the CDDL cannot legally be linked together," and we urged developers "not to use the CDDL for this reason."
While the CDDL is not commonly used, it is the license for distributing ZFS, a file system developed by Sun Microsystems. ZFS was originally written for Solaris, but since then, there have been projects to make it work as a module with other operating system kernels. Attempts to combine versions of ZFS with Linux run headlong into the incompatibility of the CDDL with the GNU GPL.
Copyleft and Augmented Versions
Changing a free program often involves altering the preexisting code of the program, but sometimes the change consists purely of adding new modules. The added modules do not have to be written specifically for this use -- they may include code obtained from other developers. We can call versions made purely by adding modules "augmented" versions, to distinguish them from other kinds of changes. Changed versions of the program require permission under the copyright of the original program.
The crucial question for a free software license is what it requires about the licensing of augmented versions. Lax, permissive licenses, including the Expat license, the X11 license and the Apache 2.0 license, permit augmented versions of the program to be nonfree. Per-file copyleft licenses such as the Mozilla Public License (MPL) likewise permit this. The result is that any intermediary can straightforwardly convert the program into nonfree software simply by augmenting it.
A copyleft license, including any version of the GNU GPL or GNU AGPL, requires augmented versions to be free under the same license -- the same requirement it applies to modification of the code.1 I wrote a copyleft license for GNU programs to ensure that all users of all versions of them would get the freedoms I intended to give them.
It is not enough to require that the combined program be free software somehow. It must be released, as a whole, under the original copyleft license, to ensure that: (1) subsequent users get the exact same freedoms and (2) subsequent intermediaries do not get more opportunity than first-stage intermediaries to make the program nonfree.
This requirement of copyleft applies to all code you add to the program, regardless of who is the copyright holder on the code that you add.2 If it did not, intermediaries would have an easy excuse to disregard the requirement and deny some users their deserved freedoms: simply add code someone else wrote.
Privately, You Can Do As You Like
Distribution of Augmented Works as Source Code
The GNU GPL, in any version, permits redistribution only in the form of works licensed under the same version of the GPL. This means that when you distribute a work that contains material from a GPL-covered program, you must distribute the entire work, as a whole, under the conditions of appropriate versions of the GPL. For instance, GPL version 2 states:
a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.
This is not limited to your changes to the lines or the modules of the GPL-covered work you started with. Any material you add falls under the same requirement, so such additions do not become excuses to deny users' freedom.5 If the material you want to add does not permit use in this way, you cannot add it to a GPL-covered work for making available to others.
Distribution of Augmented Works in Binary (Non-Source)
The only permissible way to make available a binary (non-source) work that includes GPL'd material is under the GPL. The GPL's licensing requirement for this binary form is fundamentally dependent on the requirements for the same work's source under the GPL. Thus, you can comply with the GPL for a binary only by licensing the entire work (both the binary version and the complete corresponding source version) under the GPL. This is how the fundamental point of copyleft applies to binaries. Code under GPL-incompatible licenses cannot be added, neither in source nor binary form, without violating the GPL.
As concerns distribution or making available, the GPL first states conditions for distribution of a modified work in source code form, then states that you can distribute the same work in non-source form in addition to the source form.6
The GPL permits distributing non-source forms of a modified or extended work, under the GPL's terms, along with distribution (in one of several approved ways) of the complete corresponding source code, which must include all modules and all code in the non-source work it corresponds to, aside from certain system libraries under very specific conditions.7 That corresponding source must be released, as a whole, under the GNU GPL.
What Constitutes the Entire Work?
One common way of combining programs is to "link" them so that one program can use routines from another. Developers typically talk about "static" linking, when code from various source programs are copied together into a combined executable which is then made available to users, and "dynamic" linking, when one program isn't linked to another until the two are executed together on a user's system.
With static linking, it is self-evident what code is part of the source code for that entire program. It includes, at least, the source code for all modules linked together in the binary.
Developers often find this point not quite so self-evident with dynamic linking, but the situation is equally clear: if you distribute modules meant to be linked together by the user, you have made them into a combined work, and you must release the entire combined work under the GNU GPL.
In other words: dynamic vs. static linking never makes any difference on the outcome of the analysis.8 The FSF has been advised by several US lawyers on this matter over the years, and the answer is always this one. Unsurprisingly, some lawyers have been willing to defend a different interpretation when it suits their clients, but their arguments are weak and disputed by the majority of experts.
Copyright Holders Can Explicitly Authorize Additional Uses
In legal terms, releasing a work under the GNU General Public License, or any other free license, is a statement by the copyright holders authorizing users to do certain things. The same copyright holders are legally free to give additional permission for use of their work. If the copyright holders have released a program under the GPL, and then they declare that any company with headquarters in Kalamazoo is allowed to distribute the same program under the MPL version 1 on 1600bpi magnetic tapes in green boxes on Friday the 13th, that permission is valid. The prior permission to use it under the GPL also remains valid.
Thus, the copyright holders of Linux can give permission to use Linux in ways not authorized by GPL version 2. But no one can presume such permission unless the copyright holders give it.
Likewise, the copyright holders of ZFS (the version that is actually used) can give permission to use it under the GNU GPL, version 2 or later, in addition to any other license. This would make it possible to combine that version with Linux without violating the license of Linux. This would be the ideal resolution and we urge the copyright holders of ZFS to do so.
Some copyright holders choose not to enforce their licenses in specific situations.9 That enables users to operate as if permission were granted. However, this does not alter the meaning of the GNU GPL, and does not cause uses that the GPL disallows to either suddenly or slowly become permitted by the GPL. Such acquiescence is not the case in regard to linking Linux and ZFS; indeed, some Linux copyright holders have said they consider this copyright infringement. We have explained above the reasons why that is so.
When Some GPL Condition Is Too Strict
For instance, in 1991 we found that on some systems the C library on SunOS was distributed not with the kernel and the bulk of the system, but rather with the C compiler. (Before that, every Unix variant system included a C compiler.) The consequence was that the "system library" exception in GPL version 1 did not apply to this case -- however, it was part of what that exception was intended to permit.
The FSF decided not to enforce the GPL's conditions against those distributing binaries for SunOS. However, that applied only to code under FSF copyright. The FSF could not decide for other copyright holders whether to enforce the GPL in this kind of situation.
So I wrote GPL version 2, with a modified system library exception that applied to libraries distributed with the compiler as well as those distributed with the base system. That had the effect of immediately authorizing, for all programs released under "GNU GPL version 1 or any later version", the distribution of compiled binaries for SunOS.
Likewise, in 2006 we learned through the GPL version 3 commenting process that downloading binaries of GPL-covered programs with BitTorrent violated GPL version 2, because with BitTorrent every downloader also redistributes. I included terms in GPL version 3 to explicitly permit this, thus authorizing BitTorrent distribution of binaries for all programs released under "GNU GPL version 2 or any later version".
In the nine years since GPL version 3 was released, we have found no flaw that would call for a new version, but the world does change. In 1991, when we released GPL version 2, BitTorrent had not been invented. Next year we may learn about a new practice that calls for a GPL version 4, or perhaps rather 3.1. This is why it is important to release under "GPL version N or later" -- so that we can fix such problems for them, even when they have many copyright holders.
License termination in GPL Version 2 and GPL version 3
Anyone who distributes a GPL-covered program in a way that violates the GPL immediately loses distribution rights. Precisely how this works changed between GPL version 2 and GPL version 3.
With GPL version 2, published in 1991, a violator automatically, immediately and permanently loses the license to distribute that program. There are no exceptions. To get the rights back, the violator must ask the copyright holders for restoration of rights.10
In 1991, it was unlikely for a free program to have hundreds of copyright holders, but now that is the case with Linux and many other free programs. The copyright holders on a large GNU/Linux distribution surely number in the hundreds of thousands or more.
Therefore, in GPL version 3, I decided to make it easier to cure a violation. Once you stop the violating practice, your distribution rights are provisionally reinstated. Copyright holders then have 60 more days to complain; only those that have complained by that date can cancel this provisional reinstatement. If you satisfy them, they can declare that you're in the clear, so that your distribution rights are permanently restored.11
Linux remains under GPL version 2, so the stricter termination of GPL version 2 still applies to Linux. The FSF urges the copyright holders of Linux to move it to GPL version 3, for this and other reasons.
GPL Enforcement for Linux
The Free Software Foundation plays no part in the development of Linux. What we developed is the GNU operating system, which is the usual context in which Linux is used on desktop, laptop and server computers.
The FSF is not a copyright holder of Linux, except for small pieces copied from programs which we released under the Lesser GPL or GPL plus exceptions, and perhaps an obscure processor port. We do not presume on the strength of these pieces of code to tell the developers of Linux proper how to approach GPL enforcement for Linux, and we won't advocate a choice as if we had a say. However, we enthusiastically encourage enforcement of the GPL on Linux in accord with the Principles of Community-Oriented GPL Enforcement, and we wish the enforcers success in bringing violators into compliance, thus maintaining the GPL's integrity so it can defend users' freedom.
Along with several FSF representatives, Karen Sandler and Brett Smith provided valuable critiques, suggestions, and editorial assistance in the preparation of this statement. The result represents only the FSF.
- We talk about programs covered by the GPL, but note that we designed GPL version 3 to be suitable for any kind of work, including for instance hardware designs. By contrast, GPL version 2 was written specifically for programs.
- This doesn't mean that each piece of the work you make available must be released specifically and only under the GNU GPL. It is ok if parts of the work are released under various GPL-compatible licenses.
- The GNU GPL triggers these requirements on allowing others to get copies from you. The GNU Affero GPL has a broader definition of making the work available to others.
- Under the GNU GPL, and some other free licenses, making a certain work available to others in one form can trigger requirements to make it available to others in other forms.
- If the amount of previous GPL-covered material you use is "de minimis", thus not significant for copyright, then there are no requirements about using it.
- The GPL's rules for non-source forms are the same for all automatically transformed forms of the work, regardless of what transformation is done. This includes compilation, minification, parser generation, generation of code in another programming language, or whatever.
- There is a specific narrow exception for "system libraries" that may be included in a binary version of a work but omitted from its source code. The paradigmatic example of a "system library" is the proprietary C library of a proprietary operating system, but the exception covers other libraries distributed in a similar way. We have changed the precise exception criteria in each GPL version, but the basic idea remains unchanged.
- In addition, there are cases where we maintain that modules executing in separate address spaces, and not literally linked together, communicate so intimately that they constitute a single program.
- If you would like to permit other uses of some GPL-covered work, we recommend doing this with an explicit statement of additional permission. For GPL version 3, section 7 explains how these function. The FSF can help you write the exception statement if you wish.
- Community-oriented enforcers of GPL version 2 for Linux and other multi-copyright-held works use a variety of strategies to deal with the unfortunate fact that reinstatement of rights is never fully complete. For example, they offer to make public statements, even assist in later defensive legal action, for former violators that have come into compliance, to assist them in dealing with other copyright holders that might object to the past violation. Anyone who follows the Principles of Community-Oriented GPL Enforcement (by the Software Freedom Conservancy and the Free Software Foundation; see https://www.fsf.org/licensing/enforcement-principles) is unlikely to sue over past violations only, since the goal of enforcement in our community is to uphold the users' freedom through general compliance with the GPL's requirements.
- The same Principles urge copyright holders to follow the termination rules of GPL version 3 for works under GPL version 2, but upgrading to GPL version 3 is the only way to ensure all copyright holders do so.