negative zero

What Does the GPL Say?

2020 August 26

[free-software] [info] [licensing] [tech]

The GNU General Public License is a strong copyleft free software license. In short the GPL is meant to say this: "This program is free software. You may run it for any purpose, study and modify it to suit your needs, and redistribute copies of the original program or your modified program..." (that's the "free software" part) "...but any modified versions must also be free software distributed under these same terms" (that's the "copyleft" part).

Disclaimer: I am not a lawyer. This page does not contain actual legal advice. For more actionable advice see this page from the GNU Project.

That said, I have been reading the GNU General Public License, Version 3, and I wanted to try to summarize the license (mostly as an exercise to help me better understand it). This may be a useful read if you want a basic overview of the license, but it is not a replacement for reading the license or actual legal advice. Here's what I understand the license to say:

Copyright declaration and PREAMBLE

The GNU General Public License, version 3 (which will be referenced hereafter in this post as "GPLv3" for brevity) was published on 2007 June 3rd by the Free Software Foundation. The document may be shared freely but not modified.

The Preamble basically defines the goals of the license. It is written in simpler English than the rest of the document, so I will largely skip it, leaving it as an exercise for the reader.


0. Definitions.

This section defines terms which must be unambiguously understood.

1. Source Code.

This section defines more terms, this time pertaining to what constitutes "source code" versus other parts.

2. Basic Permissions.

The rights granted by this license cannot be revoked (until the work enters the public domain at which time it will still be free). You may run and copy this program on your own devices without restriction. This license does not apply to output from the program, unless that output is the program itself or based on the program. (For example, the GNU nano text editor is licensed GPLv3, but using nano to write a file does not mean that that file must be licensed GPLv3.) Fair use still applies.

Generally the way the GPL handles copyleft is: If you transfer a copy of this program to someone, that copy must be licensed under these terms. This section outlines an exception which allows you to provide the code to someone so they can modify it only for you, without giving them the right to redistribute the code. Similarly, you may run your own code using someone else's resources (for example, writing a program but using someone else's server to run it) without giving them GPL-provided rights over the software. This does not apply to software where you do not control the copyright. Basically, I understand this as "If you control the copyright, you can do whatever you want with it internally, but if you give it away or sell it, it must be GPL."

Outside of these exceptions, this work must be shared or sold only under the terms in later sections.

3. Protecting Users' Legal Rights From Anti-Circumvention law.

Basically as I understand it, this is an anti-DMCA measure to protect people who want to circumvent Digital Restrictions Management (DRM) software. The DMCA makes it illegal to help people circumvent DRM in the United States. If you share or sell a GPLv3 work, you waive your legal power under the DMCA and other such laws to stop people from such circumvention. In other words, you can implement DRM with GPLv3 code, but you forfeit legal power to stop people from breaking it.

4. Conveying Verbatim Copies.

You may give away or sell exact copies of this program's source code, as long as you include the appropriate information: copyright notices, additional licensing terms, absence of warranty, and the license itself. You may provide support or a warranty for a fee.

5. Conveying Modified Source Versions.

You may share or sell your modifications to the work or your whole modified work (both in source code form), as long as you indicate that you modified it and when (from my understanding, providing the code in the form of a Git repository fulfills this requirement easily). If your program includes code from another GPLv3 program, your program must ordinarily be GPLv3, but if you are otherwise permitted, you may also license your program in other ways. For example, if you get permission from the author(s) of the GPL code to include it in an MPL program, you may license your program under the MPL. If your program is a modiciation of a dual-licensed MPL/GPL program, you may publish your version under either or both. If you own the copyright to all the code, you can do whatever you want with it, including dual-licensing it under the GPLv3 and a nonfree commercial license.

Section 5d is confusing to me. It reads "If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so." Displaying "Appropriate Legal Notices" means using indicating to the user appropriate copyright and licensing information (letting them know their rights) and that there is no warranty under the license. I think this condition means that if you add an interactive interface, you must use that interface to provide this information, but if you're modifying a program that already has interactive interfaces, you don't need to add them.

You may aggregate multiple works together, as long as they do not extend each other or combine to form a larger program, without having to subject these works to each other's licenses. For example, you may create an installation CD for a GNU/Linux distribution, which includes software under multiple incompatible licenses.

6. Conveying Non-Source Forms.

Basically, this section says that if you provide someone with the program in non-source form, you must also make the source available to them at no additional cost. It outlines how you may do this. (The easiest way is making the source available online.) You are not responsible for providing the source for system libraries which are used by the program.

If the software is modifiable, you must also provide any information necessary to install a modified version of the program. For example, if a hardware device requires signed firmware which you release under the GPLv3, you must provide the requisite keys so users can modify the firmware source and sign and load their modified version onto the hardware device. This requirement does not apply to software which is not modifiable, such as software burned into ROM.

7. Additional Terms.

Section 7 outlines specific additional terms that you may include if you wish. These include the ability to disclaim warranty differently or require different legal rights regarding trademarks or use of the authors' or licensors' names.

8. Termination.

Section 8 outlines what happens if you violate the GPL. Basically, if you fail to follow the GPL (which I think is there for entities who want to use GPL code in nonfree software they publish), you can lose your license to the work, including any patent licenses granted by the license.

9. Acceptance Not Required for Having Copies.

You do not have to accept this license to have or run the work, or to facilitate its transmission from one person to another, but accepting the license enables you to share and modify the work without violating copyright law.

10. Automatic Licensing of Downstream Recipients.

If you share this work, the recipient automatically receives it under the terms of this license, granted by the original licensor.

The license then describes what happens in the case of an "entity transaction" (involving control or organizational changes to an organization). Basically anyone who receives the work in such a transaction also receives all applicable licenses and a right to the source code (if reasonably possible).

You may not impose additional restrictions not covered in this license.

11. Patents.

I don't understand this section. I think it basically says you must give anyone who receives this software all patent licenses necessary to fulfill their rights under the GPL. In other words, (I think), you can't sue someone for patent infringement for using your GPLv3 code in accordance with the GPLv3.

12. No Surrender of Others' Freedom.

External conditions do not exempt you from the terms of this license. If you are required to do something while sharing the work that contradicts the terms of the license, you may not share the work.

13. Use with the GNU Affero General Public License

You may combine this work with AGPLv3 code, and the combined work must be AGPL (although this work individually will remain GPL).

14. Revised Versions of this License.

If a work is licensed GPLv3 "or any later version" you may treat it as the GPLv3 or any later version published by the Free Software Foundation. If it says "GPL" without a version specified, you may treat it as any version ever published by the Free Software Foundation. The work may specify someone else to give this designation, and that person/entity's public statement on the matter determines which versions may be considered.

The "or any later version" does not apply additional restrictions to the authors or copyright holders. For example, if you write a program published as GPLv3 "or any later version", and the FSF later publishes version 4 of the GPL which forbids some action your program does, you don't have to change, but anyone wanting to publish a modified work under the GPLv4 will need to remove the forbidden action.

15. Disclaimer of Warranty.

This program by default comes with no warranty.

16. Limitation of Liability.

By default, no one but the user holds any liability for using this program.

17. Interpretation of Sections 15 and 16.

If these disclaimers are not legally applicable in a given jurisdiction, instead apply the local law providing the least warranty and liability legally possible.

How to Apply These Terms to Your New Program

This section explains how to apply the GPLv3 to your own program, with a copyright line and such.