Lably
Skip to content

GNU General Public License

Series of free software licenses

  • 43 min read
  • 9 chapters

Related on Lably

Through Computer program, Software license and Free and open-source software

Historically, the GPL license family has been one of the most popular software licenses in the free and open-source software (FOSS) domain. Prominent free software programs licensed under the GPL include the Linux operating system kernel and the GNU Compiler Collection (GCC). David A. Wheeler argues that the copyleft provided by the GPL was crucial to the success of Linux-based systems, giving the contributing programmers some assurance that their work would benefit the world and remain free, rather than being potentially exploited by software companies who would not be required to contribute to the community.

In 2007, the third version of the license (GPLv3) was released to address perceived shortcomings in the second version (GPLv2) that had become apparent through long-term use.

To keep the license current, the GPL includes an optional "any later version" clause, which allows users to choose between two options –the original terms, or the terms in new versions as updated by the FSF. Software projects licensed with the optional "or later" clause include the GNU Project, while projects such as the Linux kernel are licensed under GPLv2 only. The "or any later version" clause is sometimes known as a lifeboat clause, since it allows combinations of different versions of GPL-licensed software to maintain compatibility.

Usage of the GPL has steadily declined since the 2010s, particularly because of the complexities mentioned above, as well as a perception that the license restrains the modern open source domain from growth and commercialization.

History

The original GPL was written by Richard Stallman in 1989 for use with programs released as part of the GNU Project. The license was based on unifying similar licenses used for early versions of the GNU Emacs text editor, the GNU Debugger, and the GNU C Compiler. These licenses contained provisions similar to the modern GPL, but they were specific to each program, which rendered them incompatible despite being the same license. Stallman's goal was to produce a single license that could be used for any project, thereby enabling many projects to share code.

The second version of the license, GPLv2, was released in 1991. During the subsequent 15 years, members of the free software community became concerned about specific problems in the GPLv2 license, which could allow a person to exploit GPL-licensed software in ways contrary to the license's intent. These problems included the following:

  • tivoization—the inclusion of GPL-licensed software in hardware that prevents users from running modified versions of the software (on that hardware)
  • compatibility issues similar to those of the AGPL (v1)
  • patent deals between Microsoft and distributors of free and open-source software, which some people viewed as an attempt to use patents as a weapon against the free software community

Version 3 of the GPL was developed as an attempt to address the concerns mentioned above; it was officially released on 29 June 2007.

Version 1

Version 1 of the GNU GPL, released on 25 February 1989, was written to protect against the two main methods by which software distributors restricted the freedoms that define free software.

The first method is publishing binary files that are only executable, but not readable or modifiable by humans. To prevent this restriction, the GPLv1 states that copying and distributing copies of any portion of the program must also make the human-readable source code available under the same licensing terms.

The second method is adding restrictions, either directly to the license or by combining the software with other software having different restrictions on distribution. The union of two such sets of restrictions would apply to the combined work, thereby adding unacceptable constrictions. To prevent this situation, the GPLv1 states that modified versions, as a whole, must be distributed under the terms of GPLv1. As a result, software distributed under the terms of the GPLv1 could be combined with software distributed under more permissive terms, since this combination would not change the terms under which the whole could be distributed. However, software distributed under GPLv1 could not be combined with software distributed under a more restrictive license, since this combination would conflict with the requirement that the whole be distributable under the terms of GPLv1.

Version 2

According to Richard Stallman, the major change in version 2 of the GPL was the "Liberty or Death" clause—Section 7. The section states that licensees may distribute a GPL-covered work only if they can satisfy all of the license's obligations, despite any other legal obligations they might have. In other words, the obligations of the license may not be severed due to conflicting obligations. This provision is intended to discourage any party from using a patent infringement claim or other litigation to impair users' freedom under the license.

By 1990, it became apparent that a less restrictive license would be strategically useful for two kinds of libraries: the C standard library and software libraries that handled the same tasks as existing proprietary libraries. When the GPLv2 was released in June 1991, a second license was introduced at the same time; this was the GNU Library General Public License (LGPL), numbered as version 2 to show that the two licenses were complementary. The version numbers diverged in 1999 when version 2.1 of the LGPL was released, renamed as the GNU Lesser General Public License to reflect its role in the philosophy. The GPLv2 was updated to refer to the new name of the LGPL, but the GPL's version number remained the same. As a result, the original GPLv2 was not recognized by the Software Package Data Exchange (SPDX).

The GPL includes instructions to specify "version 2 of the License, or (at your option) any later version", to allow the flexible use of either version 2 or 3, but some developers change these instructions to specify "version 2" only.

Version 3

In late 2005, the Free Software Foundation (FSF) announced work on version 3 of the GPL. On 16 January 2006, the first "discussion draft" of GPLv3 was published, and public consultation began. The official GPLv3 was released by the FSF on 29 June 2007. GPLv3 was written by Richard Stallman, with legal counsel from Eben Moglen and Richard Fontana from the Software Freedom Law Center.

According to Stallman, the most important changes involved software patents, free software license compatibility, the definition of "source code", and hardware restrictions on software modifications (such as tivoization). Other changes involved internationalization, the handling of license violations, and the granting of additional permissions by the copyright holder. The term software propagation was explicitly defined as the copying and duplicating of software.

The public consultation process was coordinated by the Free Software Foundation with assistance from Software Freedom Law Center, Free Software Foundation Europe, and other free software groups. Comments were collected from the public via the gplv3.fsf.org web portal, using purpose-written software called stet. By the end of the comment period, a total of 2,636 comments had been submitted.

The third draft of GPLv3 was released on 28 March 2007. This draft included language intended to prevent patent-related agreements such as the controversial Microsoft-Novell agreement; the draft also restricted the anti-tivoization clauses to legal definitions of "user" and "consumer product". The draft also explicitly removed the section on "Geographical Limitations", the likely removal of this section having been announced at the launch of the public consultation.

The fourth and final discussion draft was released on 31 May 2007. It introduced compatibility with Apache License version 2.0 (since prior versions are incompatible); clarified the role of external contractors; and made an exception to avoid perceived problems with an agreement in the Microsoft–Novell style, stating in Section 11, paragraph 6, as follows:

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 ...

This exception aimed to make such future deals ineffective. The license was also intended to cause Microsoft to take action—to extend the patent licenses it granted to Novell customers for the use of GPLv3 software to all users of that GPLv3 software; this extension was possible only if Microsoft was legally a "conveyor" of the GPLv3 software.

Early drafts of GPLv3 also let licensors add a requirement similar to the AGPL that would have resolved a loophole in the GPL pertaining to application service providers. The freedom to run, study, and share the source code, as well as guarantee copyleft protections, is somewhat ambiguous in the context of web services. However, concerns were raised about the administrative costs of checking code for the additional requirements proposed in early GPLv3 drafts; it was ultimately decided to keep the GPL and the AGPL separated.

Other respondents—notably high-profile Linux kernel developers such as Linus Torvalds, Greg Kroah-Hartman, and Andrew Morton—used media comments and public statements to object to portions of the GPLv3 drafts. The kernel developers disapproved of clauses about DRM (and tivoization), patents, and "additional restrictions"; in addition, they warned of a "Balkanisation" of the "Open Source Universe". Linus Torvalds, who chose not to adopt the GPLv3 for the Linux kernel, reiterated his criticism several years later.

GPLv3 improved compatibility with several free software licenses, such as the Apache License (version 2.0) and the GNU Affero General Public License (which GPLv2 could not be combined with). However, GPLv3 software could be combined with and share code with GPLv2 software only if two conditions were met: the GPLv2 license that was used contained the optional "or later" clause, and the software was upgraded to GPLv3. While the "GPLv2 or any later version" clause is considered by FSF to be the most common form of licensing GPLv2 software, Toybox developer Rob Landley described it as a lifeboat clause. Software projects licensed with the optional "or later" clause include Joomla and the GNU Project, while a prominent example without this clause is the Linux kernel.

The final version of the license text for GPLv3 was published on 29 June 2007.

Sign in to keep reading

8 more chapters are free with a Lably account.

More in Computing and communication