Open Source Software

GPLv3 / AGPLv3 – Section 7 (Additional Permissions) Explained

Posted on by Sam Posted in Open Source Software | Comments Off on GPLv3 / AGPLv3 – Section 7 (Additional Permissions) Explained

Section 7 of GPLv3 has caused a lot of confusion amongst software developers. Once explained, one can see how Section 7  enhances license compatibility and why it has been drafted the way it is. Here is Section 7 (in blue) with annotated notes (in black):

7. Additional Terms.

“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

Essentially, these two paragraphs introduces the concept of “Additional Permissions”, which are terms that make exceptions from one or more of GPLv3’s conditions. Generally, modifications to software licensed under GPLv3 must be released under the GPLv3.  However, Section 7 provides that if you are the copyright holder (or have permission from the copyright holder), you can add additional permissions for what the user can do with the licensed work.  However, these permissions — above and beyond what GPLv3 says — can be removed by downstream recipients.

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

  • a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
  • b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
  • c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
  • d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
  • e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
  • f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

The above paragraph is about a limited list of additional restrictions that you may add to your modifications if you are the copyright holder (or if you have permission from the copyright holder), thus enhancing license compatibility. Without the above paragraph, combining GPLv3 code with another OSS license which introduces a relatively benign restriction that does not exist in GPLv3 would result in a license violation.

Unlike “additional permissions”, this list is understandably limited — if not, GPLv3 software may become so much restricted that it is no longer free.  Moreover, these additional restrictions may not be removed.  Lastly, Section 7 states that if you receive a GPLv3 licensed work with additional restrictions not found in the list in Section 7, you may remove it.

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

The above paragraphs states the obvious — essentially, if you add additional permissive or non-permissive (aka further restrictions) terms, you need to direct the user to where they can be found.  I have often see these additional terms placed in the same file where the GPLv3 license is found under a separately identified paragraph.

For a more in-depth treatment on Section 2, see the Free Software Foundation’s article on Section 2: here.



Open Source Licenses: BSD 3-Clause License

Posted on by Sam Posted in Open Source Software | Comments Off on Open Source Licenses: BSD 3-Clause License

The BSD License 3-Clause  (a.k.a Modified BSD License, New BSD, BSD-3, 3-clause BSD) is another brief license that is “permissive” and compatible with the GPL.

BSD 3-Clause License 

Link to BSD 3-Clause License: here

Background: The original BSD license contained 4-clauses, but had a problematic “advertising clause” which required acknowledgement of organization/individuals that developed the Software.  This became problematic when programs were combined together in a software distribution.  Thus every occurrence of the license with a different name requiring a separate acknowledgement and potentially a full-page ad chalk-full of acknowledgments!  The “advertising clause” was therefore removed from the BSD 3-Clause License.  Thereafter an even simpler version of BSD License evolved called the BSD 2-Clause License (a.k.a. Simplified BSD License) that omits the “non-endorsement clause” that prevented the name of the organization/individual to be used to endorse products derived from the Software.

Key Provisions in BSD 3-clause License:

  1. Redistribution of source code must contain the copyright notice, the list of conditions, and the disclaimer found in the license.
  2. Redistribution of binary form (including any documentation and other materials provided with the distribution of the binary form) must also contain the same requirements above in #1.
  3. Software is provided on an “as is” basis with no warranties.

Open Source License Series: MIT License

Posted on by Sam Posted in Open Source Software | Comments Off on Open Source License Series: MIT License

The MIT License is very short “permissive” license (described below) that does not have copyleft provisions is thus commercial friendly.  In contrast with the GPL, the MIT License does not require modifications to be open source if you distribute such modifications.

MIT License

Link to MIT License: here

Background: The MIT License was published by the Massachusetts Institute of Technology in 1988.

Key Provisions in MIT License:

  1. The MIT License grants, free of charge, to any person who obtains a copy of the Software to copy, modification, publication, distribution, subl-icense, and sale of Software within proprietary software.
  2. The MIT License must be included in all copies or substantial portions of the Software.
  3. The MIT License is “permissive” in that it does not require derivative works to be distributed under the MIT License.  In other words, a sub-license to the Software can be more restrictive.



Open Source License Series: GPL version 3

Posted on by Sam Posted in Open Source Software | Comments Off on Open Source License Series: GPL version 3

GPL version 3 ushers in a number of additions to version 2.  While BlackDuck indicates that there is still twice as many open source software licensed under GPLv2.0 (26%) as there are GPLv3.0 (11%), the adoption rate for GPLv3.0 is still increasing.  It’s worth noting that open source software initially licensed under GPLv2.0 and contains language such as “or (at your version) any later version”, would allow users to sublicense their software under either GPLv2.0 or upgrade to GPLv3.0.

GNU Public License (GPL) Version 3.0

Link to GPLv3.0 License: here

Background: The GPLv3.0 license is more than twice the length of GPLv2.0.  GPLv3.0 has tightened its language such that it is even more so of a “legal license” than the previous GPLv2.0 and introduces new terminology, concepts, and response to recent software developments.

Key Provisions in GPL 3.0:

  1. The strong copyleft provisions of ensuring the freedom of open source software is preserved, and the mechanisms for doing so are more/less similar to those provided under GPLv2.0. For a review of GPLv2.0, click: here
  2. Protecting against “Tivoization”. There is an emerging trend that hardware manufacturers, such as TiVo, sell hardware containing free software that the end-users can’t modify because TiVo blocks them from doing so. This is against the spirit of “free software” because the manufacturer takes advantage of the the spirit of free software but will not pass on that freedom to its users. GPLv3.0 solves this by requiring the manufacturer provide you with the necessary tools (e.g. access keys, etc.) to modify the GPLv3.0 software.
  3. Anti-DRM Provisions. Essentially, these provisions render GPLv3.0 software useless for developing DRM mechanisms. The premise is that people should not be forbidden to write software and tools that they want.  However, against the aforementioned spirit of “free software”, certain laws such as the United States Digital Millennium Copyright Act (DMCA) (a law that implements 1996 treaties of the World Intellectual Property Organization (WIPO)) criminalizes writing software that circumvents Digital Rights Management (DRM) mechanisms. To combat this, GPLv3.0 states that no work under GPLv3.0 will be considered an “effective technological measure..under article 11 of WIPO”, meaning if someone breaks DRM software that contains GPLv3.0 software, then they are not in breach of laws such as the DMCA. In addition, GPLv3.0 also provides that the software developer who implements DRM using GPLv3.0  waives their legal power to forbid circumvention of such technology.
  4. Protecting Against Discriminatory Patent Deals. When someone writes or modifies a GPLv3.0 software, others who are conveyed (e.g. distributed, copied) copies are granted a patent license to exercise rights to carry on all activities permitted by GPLv3.0.  This prevents desperate contributors from trying to sue for patent infringement.


Open Source Licenses Series: GPL version 2

Posted on by Sam Posted in Law, Open Source Software | Comments Off on Open Source Licenses Series: GPL version 2

As a former programmer, I’ve always struggled to untangle the various Open Source Software licenses.  I’m hoping this series will explain, in simple terms, the basics behind such licenses. According to Black Duck Software, the GNU Public License version 2.0 is still the most popular open source software license on the internet and as such, we’ll begin with an introduction to the GPL version 2.0.

GNU Public License (GPL) version 2.0

Link to GPLv2.0 license: here

Background:  The first version of GPL was written by Richard Stallman to address two issues: (1) to ensure software is distributed in source code form; and (2) to ensure subsequent licenses are placed on software that further restricted an individual’s freedom to share and change it. The GPLv2.0 builds on this and adds what Stallman calls the “liberty or death” clause (section 7), explained further below.

Key Provisions in GPLv2.0:

  1. You can copy, modify, distribute GPLv2.0 software if you:
    • accompany it with the source-code;
    • provide a written offer (valid for 3 years) to provide the source code at cost; or
    • for non-commercial distribution, if you pass along the written offer you received if you obtained the object code or executable form.
  2. However, if you modify and subsequently copy and distribute such modifications if you adhere to the following requirements:
    • cause any work you distribute/publish that contains or is derived from the GPLv2.0 program to be licensed as a whole at no charge under GPLv2.0 (aka “copyleft”);
    • cause modified files to carry notices stating you changed the file and the date of any change; and
    • adhere to the requirements in point #1 above.Note: There are special notification requirements for command-line software found in Section 2 of the GPLv2.0
  3. You can only charge a fee for the act of transferring a copy  or offering a warranty protection, but not for the license itself.  In other words, you can sell copies of GPLv2.0 software (or your modifications to it), but those whom you have sold copies to can copy and give away the source code to your software.
  4. If for whatever reason, you are faced with conditions (e.g. court order, patent infringement, etc.) that restrict you from complying with all the requirements of the GPLv2.0, then you must not distribute the GPLv2.0 program (or the modifications).  So for example, if a patent license requires you to pay royalties for each distribution of a certain GPLv2.0 program then you are not permitted to distribute the  program at all.

Interesting Implications:

  1. As a software developer, you can take open source software and modify/copy it for internal use.  You are not obligated to release the source code externally. Only when you start releasing it to other companies or contractors working off-site do you need to adhere to the GPLv2.0 requirements.
  2. Creating modules that statically or dynamically link to GPL as a whole will subject the module to GPLv2.0.  (If your desire is to keep modules clear of GPLv2.0 requirements, consider using the Lesser GPL license that we will discuss at a later date)