Conservancy provides essential non-software-development work that Open Source and Free Software projects need.
Copyleft is a strategy of utilizing copyright law to pursue the policy goal of fostering & encouraging the equal & inalienable right to copy, share, modify & improve creative works of authorship. Copyleft … describes any method that utilizes the copyright system to achieve the aforementioned goal. Copyleft as a concept is usually implemented in the details of a specific copyright license … Copyright holders of creative work can unilaterally implement these licenses for their own works to build communities that collaboratively share & improve those copylefted creative works.
— Definition of copyleft from copyleft.org
Broadly, GPL enforcement is the process of ensuring that redistributors grant the rights that copyleft assures.
Nevertheless, enforcement pursues that second goal only indirectly.
GPL compliance is usually not about what to do upstream.
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.— GPLv3§1
You may copy and distribute the Program (or a work based on it, under § 2) in object code or executable form under the terms of § 1 & 2 above provided that you … [a]ccompany it with the complete corresponding machine-readable source code … The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.
— GPLv2§3
GPLv2 enforcement, for embedded products, is all about the these eleven words.
Yet, when enforcement processes are at their best, they’re about the spirit behind these words, not the words themselves.
the scripts used to control compilation and installation of the executable.
— GPLv2§3
the scripts used to control compilation and installation of the executable.
— GPLv2§3
It’s part of a larger tutorial called Copyleft and the GNU General Public License: A Comprehensive Tutorial and Guide at copyleft.org.
The Guide, as we call it, contains over 150 pages of tutorials materials about how copyleft works and why copyleft licenses are written the way they are.
For the remainder of this talk, I’ll give you the highlights of good compliance lessons the pristine example shows.
Accompany [executable form] with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code … on a medium customarily used for software interchange
— GPLv2§3
Often, an offer for sources telegraphs that compliance wasn’t done.
If you must use the offer, assume it’ll be requested on product launch day.
Accompany [executable form] with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code … on a medium customarily used for software interchange
— GPLv2§3
Scripts doesn’t only mean shell scripts and Makefiles.
Think of the script of a play or movie.
If your build process includes human intervention …
… then the script are a written explanation of what the human must do.
the scripts used to control compilation and installation of the executable.
— GPLv2§3
A file called “README” at the top-level directory said:
In order to build firmware images for your router, the following needs to be installed:
gcc, binutils, bzip2, flex, python, perl, make, find, grep, diff, unzip,
gawk, getopt, libz-dev and libc headers.
Please use “make menuconfig” to configure your appreciated configuration
for the toolchain and firmware. Please note that the default configuration
is what was used to build the firmware image for your router. It is advised
that you use this configuration.
Simply running “make” will build your firmware. The build system will
download all sources, build the cross-compile toolchain, the kernel and all
chosen applications.
To build your own firmware you need to have access to a GNU/Linux system
(case-sensitive filesystem required).
Very few organizations bother to do this.
It’s probably the most useful step to verify compliance, yet no compliance process recommendations I’ve ever seen include this.
the scripts used to control compilation and installation of the executable.
— GPLv2§3
The toolchain is rarely considered mandatory as part of “the scripts”.
Admittedly, it doesn’t control compilation, it is compilation.
The script here is explaining precisely what type of toolchain is needed.
Something like: “GCC vX built with the following ./configure line” is usually adequate.
But including toolchain is nice for users’ easy.
the scripts used to control compilation and installation of the executable.
— GPLv2§3
Server system software can offer a “make install” that reasonable works to meet installation requirements.
Embedded products are admittedly difficult to install.
To comply here, you’ll usually just have write out the instructions.
It is required; don’t skip this part.
the scripts used to control compilation and installation of the executable.— GPLv2§3
Inclusion of specialized installation hardware is not a “script”.
In our ThinkPenguin example, we had to go buy a USB serial adapter to install the modified firmware.
Just tell the user what they have to go buy for the install to work.
The GPL requires that the users can replace the copylefted binaries in your embedded product with binaries they build.
The host system matters; just tell everyone what host system you use. (& don’t be ashamed at how old it is.)
Explain details of the toolchain used. Including it would be nice, but ensure its compliance too.
Have a colleague not working on the project test the build and installation.
Presentation and slides are: Copyright © 2015, 2017 Bradley M. Kuhn, and are licensed under the Creative Commons Attribution-Share Alike 4.0 International License.
The only core difference between GPLv2 and GPLv3 with regard to Installation Information is cryptographic lock-down.
If you didn’t use cryptography to required signed binaries on installation, then the user has a right under GPLv2 to install updated binaries.
If you did use cryptographic lock-down, then you need to provide all installation information except the signing key.