A Visual Guide to The GPL License

Sebastian Carlos
18 min readNov 17, 2023
Photo by Giammarco Boscaro on Unsplash

What follows is an analysis of the full text of GPLv1, which holds a significant place in history as the foundation of the free and open-source software movements. GPL versions 2 and 3 continue to sustain the Linux kernel, along with the majority of the GNU/Linux ecosystem.

Licenses brings us to the crossroads of technology and law, touching upon various cultural and societal dimensions. They contain intricate concepts such as “freedom,” which demand an appreciation of their philosophical and historical contexts to be fully understood.

I will not go into those details. I encourage readers to embark on their own explorations when questions arise. For example, by reading the GPL FAQ.

Instead, I offer a tongue-in-cheek programmer’s point of view — focusing only on the technical aspects — as if the license were a codebase I’m trying to understand.

GPLv2, released two years later, is very similar to the original. The differences will be noted.

TLDR

GPL is a complex licence — More permissive licenses such as BSD and MIT are two or three paragraphs long, while GPLv1 has around 40.

I believe GPL is a good choice when one sets up to create a grand piece of software with mass appeal and attempting to obtain the collaboration of the otherwise-hostile Big Tech. Authors of humbler projects might benefit from MIT and BSD licenses to obtain a larger user-base.

My analysis of GPLv1 can be resumed by this cheat sheet:

GPLv1 cheat sheet.

Without further ado.

Opening blurb

GNU GENERAL PUBLIC LICENSE
Version 1, February 1989

Copyright © 1989 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110–1301 USA

Solid start.

To put things in context, 1989 was a turning point in political history with the “Revolutions of 1989,” which ended communism in the Eastern Block. Indeed, the fall of the Berlin Wall would occur just nine months after the release of GPLv1.

The Free Software Foundation still operates from the same building. Here’s a picture:

Note that the license is called “General Public License.” Two adjectives are provided (“general” and “public”).

  • The “public” part is self-evident, as we can read the text. Private licenses are not easy to obtain if you are not a paying customer.
  • “General” suggests that the license applies to a broad range of areas, maybe even to hyper-dimensional planes of existence.

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

We reach the first point of legal risk.

To be clear, I will not tamper with the text in this article, even if I’m tempted to do it to see if the FSF has the guts to send their legal team.

Preamble

The license agreements of most software companies try to keep users at the mercy of those companies.

That’s funny because I feel at the mercy of GNU when trying to remember tar flags.

I joke, of course. tar was originally developed at AT&T Bell Labs. And for any intimidated newbie, the tool is easy to use if you follow this cheat sheet:

By contrast, our General Public License is intended to guarantee your freedom to share and change free software — to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation’s software and to any other program whose authors commit to using it. You can use it for your programs, too.

I am intrigued but somewhat worried.

Sure, I would like to be able to share and change software. But guess what? I can already share and change any object in my possession — even if not allowed by the manufacturer — so long as I maneuver around the fuzzy boundaries of the law and avoid bringing attention to myself.

Having said that, I appreciate GPL’s efforts to bring common sense to our legal relationships with the material world. But I would rather have a plain-language license stating that “users are allowed to share and change the software.” Without resorting to loaded words like “freedom.”

“Freedom” is an absurd term — our understanding of physics suggests that the universe is deterministic and there is no such thing as “free will.” (I’m joking here. I’m just trying to highlight the trickiness of introducing complex terms like this.)

I also reserve the right to put a sizable number of people at the mercy of some of my software to make a large profit if I so desire. After all, our modern society requires the continuous exploitation of some of our fellow humans — You, by reading this in a digital device, are indirectly oppressing rare-earth miners — It’s sad to see that the GPL license shows so little respect for the capitalists and manufacturers of the world.

When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

“Selling GPL-licensed software” also sounds absurd; The first buyer who decides to give away copies of your software will make it effectively “free as in beer” for everyone. Sure, people can sell tech support for their free software, but that’s besides the point.

I do like the idea of people modifying and selling my software. That would validate my programmer ego rather than make me feel ripped off.

The part about “freedom to use pieces of it in new free programs” suggests that it’s not allowed to use pieces of GPL-licensed software in software that doesn’t follow the “free software” concepts. This sounds like a limitation on the so-called “freedom to change”, but I’ll keep reading before jumping to conclusions.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of a such a program [sic], whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights.

Ok, this sounds like a classic bamboozle. First, they tell you of scary software companies that put you at their mercy with their licenses, and now they want to add restrictions of their own!

This confirms my previous suspicion: You do not have complete “freedom” to change GPL-licensed software. “Freedom” seems to be a loose term here.

The license has to make a very compelling case because, so far, I would rather use a license with no restrictions or no license at all.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

I don’t even know if “copyright” is a valid term anymore in the times of the internet. Anyone can publish for free to the entire world. It’s not like you need authorization to get something to the printing press.

Also, for each author’s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors’ reputations.

I have two issues here:

  • First, the lack of a warranty should be enough to convey the absence of a warranty. There is no need for a piece of paper saying that there is no warranty. Such a warning sounds dramatic — it’s like appending “These are not the nuclear codes” to the output of sha256.
  • Second, the desire to make it known that “what they have is not the original” is surely another restriction on my freedom to copy and impersonate, as one is not allowed to make a copy that appears to be the original — I believe distinctions between the original and the copy should not be required, except of course for the distinctions required by the law of causality and the linearity of time (Nevertheless, those laws have been disputed by philosophers such as David Hume and Immanuel Kant, respectively.)

The precise terms and conditions for copying, distribution and modification follow.

Ok, that preamble left us with more questions than answers. Let’s try to forget it and focus on the actual license:

GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

What follows is the “Terms and Conditions,” which is the main body of the license, only followed by an appendix.

It consists of 11 terms, indexed from 0 to 10. (Yes, programmers like zero-index even for licenses)

0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The “Program”, below, refers to any such program or work, and a “work based on the Program” means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as “you”.

Let us draw the topology of the GPL License:

Topology and entities of GPL.

Here, “the Program” is a single GPL work used as an example throughout the GPL Terms and conditions. Note that every “work based on the Program” is also a GPL work.

I appreciate that “work based on the Program” can refer either to derivatives or to the Program itself. Nice recursion!

The addressing in the second-person, and the fact that the list ends with the index number 10, is a clear indication that the GPL license follows in the steps of the biblical ten commandments, and likely other works of coercive law such as the Hammurabi code.

Note: GPLv2 considers “translations” to be also “modifications.”

1. You may copy and distribute verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy.

By combining this and the previous item, it seems like the term “copyright notice” is short for “a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.”

Also, it seems there are two additional requirements when making a verbatim copy: A “disclaimer of warranty” and “a copy of the GPL.”

In other words: If you fork an original GPLv1 GitHub project, you need to make sure that it has a copyright notice, the full text of the license, and a disclaimer of warranty — Maybe only the copyright notice was there in the original!

I would encourage authors to add all three elements to the original to help with copying.

Careful reader may notice that a faulty copy of a GPL work (lacking one of the three required elements) would still be a valid GPL work according to item 0, so long as it contains the copyright notice. It is unclear, then, what’s the punishment for a faulty copy.

The best way in which I can reconcile these contradictions is the following:

  • Whoever produces a faulty copy of a GPL work is punishable by law.
  • And yet, the faulty copy itself is — flawed as it is — still a valid GPL work. Thereby, any person who finds it might follow the GPL to generate a new copy from it and restore it to glory.

This section also clarifies the seemingly absurd idea of “selling copies” of GPL software. It seems it was only referring to a fee to cover the costs of distribution, which were undoubtedly non-zero in 1989.

2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following:

Ok, so these items are called “Paragraphs.” That’s funny because “Paragraph 2” has five more paragraphs to go:

a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and

b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option).

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License.

d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms.

This paragraph deals with additional requirements when modifying the work, as illustrated here:

Notably, an original or verbatim copy of an interactive GPL work does not need to show copyright info on interactive use. But if someone changes (even if the changes are not related to the interactive use per se), they must add it.

Note: GPLv2 allows to provide a warranty for verbatim copies too.

Note 2: GPLv2 seems to be more lax about showing notices on interactive use, although how exactly is not completely clear: “Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.” What’s the meaning of “normally print such an announcement” is anyone’s guess.

Note 3: A significant change is made by GPLv2 here: Apparently, not every part of a “work containing the program” is subject to these rules. “If identifiable sections of [a work containing the program] are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.” In short, GPLv2 is not “viral” on parts of the work which can be reasonably considered to be “separate works.” The word “reasonably,” however, suggests possible ambiguities.

3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following:

a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or,

b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or,

c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.)

Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system.

It’s funny that sending a link to the place where the source can be found is only allowed for noncommercial distributions. That’s probably because “sending a link” was way more inconvenient back in the day.

The small point about libraries and operating-systems suggests the main benefit of the license: It allows the interaction of GPL-licensed software with the underlying system. Likewise, everyone is able to create software to run on GPL platforms such as Linux, even if that software is not GPL.

Note: GPLv2 clarifies that “source code” also includes the scripts used to generate the executable.

4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance.

This confirms the suspicions I had. The license is designed to punish bad actor, but any tampered GPL work can be restored to harmony.

Still, the punishment sounds trivial. Breaking the license means you can no longer use the license? Meh.

5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions.

Sounds fair. It’s hard to avoid being aware of the license. It’s literally everywhere.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein.

Right, I guess the point here is to prevent adding your own license that says “ignore the previous license and do this instead.” Clever.

Note: GPLv2 also says here that “you are not responsible for enforcing compliance by third parties to this License.” Enforcing is the responsibility of the law apparatus.

Note 2: GPLv2 introduces two new paragraphs here, related to patents and what to do when a court judgment contradicts this license.

7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Can’t wait.

Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation.

Ok, so this is semver for licenses. It can be an exact number, an infinite range from a number, or no number (which means you can pick any version you want.)

8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

Notably, the highlighted “free programs” text is the only unqualified mention of “free” within the main body of the GPL. And, unfortunately, it fails to explain what GPL means with “free software.” This gives credence to my theory that free software is whatever the Free Software Foundation thinks it is.

All software should be free, but some software is freer than others?

The last two “Paragraphs” concern warranties, and they are hilariously in all caps:

NO WARRANTY

9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

The funny thing is that this is in itself a “disclaimer of warranty,” but according to the GPL, you must add your own disclaimer of warranty in addition to this one.

What about GPLv3?

This article won’t go into details about GPLv3, but the main differences with version one and two are:

  • The definition of terms such as “Copyright” and “the Program” is much more detailed, thereby improving on some of the criticisms made in this article.
  • GPLv3 aims to provide protection against “devices designed to deny users access to install or run modified versions of the software inside them” (The practice of shipping hardware containing free software which can’t be modified is known elsewhere as “Tivoization”).
  • GPLv3 is the first version to use the term “copyleft.” (Only once, without explaining it.)
  • GPLv3 uses softer language in the preamble, like “we need to prevent others from denying you these rights. Therefore, you have certain responsibilities…” instead of “we need to make restrictions that forbid anyone to deny you these rights.” However, GPLv3 does use the word “restrictions” elsewhere in the license.

Closing thoughts

Who is Richard Stallman? How can someone create such a convoluted license and nevertheless be at the inflection point out of which some of our best software emerged?

Maybe Stallman was not a genius programmer after all, just a great programmer who copied Unix, the masterpiece of the previous generation, and started a movement. And who can blame him? Who dares aspire to more than that?

So, is this license the work of a capable programmer who is also a legal madman? Or is this license just a reflection of its time, a necessary evil when radical measures and cold-war rhetoric were needed to mobilize the nerds of the world under a common cause? And have we moved past those dark times, or are we still in dire need of chaotic-neutral legalese?

In some sense, GPL comes from a time of paranoia, where developers wanted to write and share simple programs without caring too much if it works or not. But they needed a license wrapped in disclaimers to avoid any chance of litigation.

That might have made sense back then, but I don’t see anyone suing developers anymore. Although maybe that’s due to GPL.

What do I think about all this, you ask? Well…

Personally, I take my software licenses like I take my women: Fully permissive.

Seriously though, GPL seems like a fine license for those who live in a Hobbsian world of positive rights and savage state of human nature. I’m more of a free-flowing Locke developer, so I’ll stick with MIT and BSD-2-Clause licenses for now, particularly because I’m not planning to build world-changing software any time soon.

Thanks for reading! If you enjoy humorous tech stories like these and want to support me, consider buying some coffee. I will literally get a coffee every time. You can also follow me on Medium and Twitter.

--

--