diff --git a/presentations/20min-violation-intro/violation-intro.md b/presentations/20min-violation-intro/violation-intro.md new file mode 100644 index 0000000..8a99469 --- /dev/null +++ b/presentations/20min-violation-intro/violation-intro.md @@ -0,0 +1,766 @@ +% A Practical Guide to Compliance with the GNU GPL +% Bradley M. Kuhn and Karen M. Sandler +% Thursday 19 January 2016 + + +# Audience + ++ Our goal here is to move faster or slower based on audience knowledge. + ++ There are folks in this audience who have worked with this stuff for years, + and those who are completely new. + ++ We want these presentations to be valuable to all of you. + +# Audience + ++ Please, don't be embarrassed: + + Ever GPL expert in the world, including us, started as a student who + knew none of this. + ++ This is a course; raise your hand if you are confused or have a question. + ++ We are glad to go "off-slides" and get your questions answered. + +# The Tutorial's Textbook + ++ This tutorial actually has a 125-page textbook. + ++ You can download it (PDF or online HTML browse, or the source code!) from + [copyleft.org/guide](https://copyleft.org/guide) + ++ The text is in integration and culmination of every freely licensed + material on copyleft (and GPL in particular) we could find. + ++ We don't mind if you read the text while we talk and raise your hand with questions. + +# How this Tutorial Go? + ++ Materials presented will mix the simple & complex. + ++ We cannot possibly cover the entire GPL and compliance procedures in merely + two hours. + + a full course could take a whole day or more. + + but we'll give you the key highlights. + +# Outline + ++ Discuss: motivations, origins, then a few of GPL's sections. + ++ Turn to focus to how it relates to meeting the requirements of the license + (aka compliance). + ++ If you haven't asked enough questions at that point, we'll then still have + lots of time at the end to take questions and answer them. + +# Why Listen To Us? + ++ Conservancy operates and practices license compliance activities extremely transparently. + ++ So you have access to drafters, interpreters, enforcers. + ++ Someday, we may (or already have) sit across the table from you. + ++ Our transparency does make your job easier. + +# The Mindset of GPL + ++ GPL protects software freedom. + ++ Ultimate goal: make sure every user has the four freedoms. + + Freedom to run the software. + + Freedom to study and modify the software. + + Freedom to share the software. + + Freedom to distribute modified versions. + ++ Every clause in GPL was designed to uphold one of these freedoms. + + Or, it's a compromise of drafting in adoption vs. freedom debate. + +# Using Copyright + ++ GPL is primarily a copyright license. + + Software is copyrighted. + + License grants key freedoms. + + Requirement prohibit activities that take away freedoms. + ++ General concept: copyleft. + ++ Specific implementation: GPL. + +# Conditional Permissions + ++ A copyleft license grants copyright permissions, conditionally. + ++ Think of the phrase: “provided that” + ++ “provided that”: appears (in some form) only + + 4 times in GPLv2 + + 9 times in GPLv3. + +# Compare To Proprietary Licenses + ++ Yes, the GPL has its requirements. + ++ But *none* of these activities are ever permitted under proprietary + licenses. + ++ If you don't like what the GPL requires you to do, then just use + proprietary software instead. + ++ That way, you know the answer to every “Am I allowed to?” question is “no” + ++ rather than: “yes, but only as long as you …” + ++ Many business advantages to copyleft... + +# The Technical Gap + ++ Understanding GPL well requires a some software expertise & legal + expertise. + ++ You don't have to be a professional on either side to grok it. + + but you're best off if you're a professional in one & an amateur + in the other. + ++ Most important technical concepts you need: + + source code, binaries, methods of distribution. + +# Modification As a Center Provision + ++ GPL's primary copyright hook is copyright controls on the right to modify. + ++ GPL's central tenant: + ++ You can make a modified version of various types privately as much as you'd like. + ++ When you distribute that modified version, you have requirements to meet. + ++ Technological considerations dictate necessity of more complex rules for +certain types of modifications. + +# GPLv2 § 2(a-b) + + +

[GPLv2§]2. You may modify your copy or copies of the Program or any +portion of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 above, +provided that you also meet all of these conditions: +
+
+a) You must cause the modified files to carry prominent notices stating +that you changed the files and the date of any change. +
+
+b) You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. +

+
+ +# GPLv3§5(a-c) + + +

+You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: +
+
+a) The work must carry prominent notices stating that you modified it, and +giving a relevant date. +
+
+b) The work must carry prominent notices stating that it is released under +this License and any conditions added under section 7. This requirement +modifies the requirement in section 4 to "keep intact all notices". +
+
+c) You must license the entire work, as a whole, under this License to anyone +who comes into possession of a copy. This License will therefore apply, +along with any applicable section 7 additional terms, to the whole of the +work, and all its parts, regardless of how they are packaged. This License +gives no permission to license the work in any other way, but it does not +invalidate such permission if you have separately received it. +

+
+ +# GPLv2§2¶ penultimates + + +

+These requirements apply to the modified work as a whole. If +identifiable sections of that work 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. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +
+
+Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. +

+ +
+ +# GPLv3 §0 ¶1-5 + +

+ "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. +
+
+ "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. +
+
+To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. +
+
+ A "covered work" means either the unmodified Program or a work based +on the Program. +

+ +# Binaries (Object Code) are Modifications + ++ Software that the computer understands is different than software humans + read. + ++ There is often a process required to modify (and/or translate) the software + from human-readable + + This process can be done ahead of time. + ++ Separation of source and binary was the first way proprietary software + companies discovered to subjugate users. + + GPL uses the fact that binaries are modifications (which are often + distribution) to prevent that subjugation. + +# GPLv2 § 3(a-b) + + +

+

[GPLv2§]3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 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 Sections +1 and 2 above on a medium customarily used for software interchange; or, +
+
+b) Accompany it 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, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; +

+
+ +# GPLv3 § 6(a-b) + + +

+[GPLv3 § ] 6. Conveying Non-Source Forms. +
+
+You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: +
+
+a) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium +customarily used for software interchange. +
+
+b) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a +written offer, valid for at least three years and valid for as +long as you offer spare parts or customer support for that product +model, to give anyone who possesses the object code either (1) a +copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical +medium customarily used for software interchange, for a price no +more than your reasonable cost of physically performing this +conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. +

+
+ +# GPLv3 § 1 ¶ 1, 4-6 + + +

+The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. +
+
+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. However, it does not include the work's System Libraries, or +general-purpose tools or generally available free programs which are used +unmodified in performing those activities but which are not part of the work. +For example, Corresponding Source includes interface definition files +associated with source files for the work, and the source code for shared +libraries and dynamically linked subprograms that the work is specifically +designed to require, such as by intimate data communication or control flow +between those subprograms and other parts of the work. +
+
+The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. +
+
+The Corresponding Source for a work in source code form is that +same work. +

+
+ +# What's a GPL Violation? + ++ GPL (both v2 and v3) require: + + The whole work licensed under GPL. + + (which means all copyrighted material added must be under + GPL-compatible licenses.) + + Complete, Corresponding Source (CCS) of that work provided, under GPL. + ++ The licenses terminate upon violation … + + … thus failure to comply means lost distribution rights. + + … enforcement uses this rights termination as leverage to + restore compliance. + +# Enforcement is Technical + ++ Copyleft's policy goals related to technical acts. + + modifying, building, and installing software is a technical process. + ++ In embedded systems, this process is rarely straightforward. + + Yet GPL requires that such be possible. + ++ In enforcement, we talk about “the CCS adequately meeting GPL's requirements” + +# Compliance-Friendly Development + ++ Use revision control ... + - ... to pull in vendor branch. + - ... to tag releases. + ++ Avoid "Build Guru" ... + - ... by documenting build process. + - ... and versioning it, too. + +# GPL Binary Requirements + +(v2 § 3, v3 § 6) + ++ Four options: + - Source alongside binary (v2/v3). + - Offer for source (v2/v3). + - Internet side-by-side distribution (v3). + - Torrent distribution (v3). + +# Source Alongside Binary + ++ Simplest option + ++ **Obligations end at distribution time.** + ++ Physical media required. + +# Offer For Source + ++ Useful if not shipping CD already. + ++ Lasts three years. + ++ Mail fulfillment required (not in v3). + +# Side-By-Side Distribution + ++ Not in GPLv2, pedantically speaking. + ++ Always been considered compliant for v2. + ++ v3 clarifies this. + +# Peer-to-Peer Distribution + ++ v2 obviously couldn't consider this. + ++ v3 allows distribution of equally seeded source and binary. + +# Preparing Corresponding Source + +(v2 § 3, v3 § 1) + ++ Make sure all sources are present. + - revision system helps a lot here. + ++ Build scripts + - make sure someone skilled in art can build it. + +# Termination + +(v2 § 4, v3 § 8) + ++ v2 is automatic and permanent. + ++ v3 has auto-reinstatement. + - 60 day self-correction timeout. + - 30 day penalty-less after notice. + ++ Usually, you need copyright holder to reinstate. + +# Actual Enforcement + ++ [*The Principles of Community-Oriented GPL Enforcement* at sfconservancy.org/linux-compliance/principles.html](https://sfconservancy.org/linux-compliance/principles.html). + ++ Send a Letter, carefully finding right person. + ++ Communication is key. + ++ Ask for CCS candidates. + + +# The "Rounds" + ++ Ideally (it's only happened to me twice) the first source release is + perfect. + + but we don't live in an ideal world. + ++ The worst I've ever experienced is 22 rounds. + ++ We send detailed reports. + +# No Build Instructions + +
+ The primary issues we found were a dearth of build instructions as well + as a complete lack of installation instructions. There was no + information that mentioned how one might build each package so we had to + guess about which Makefile and/or build script to run for each package. + And in many cases it was not possible or straight-forward to build - this + must be resolved in the next source candidate. + +# Making General Recommendations + +
+ We generally recommend that the source release be a single file (ie. one + tarball containing all packages required for the build) that includes a + README or similar in the main directory explaining exactly how to build + and install all of the packages. See section 21.2 of + http://compliance.guide/pristine-example for an excellent example. + +# Suspicious, But Not Captious. + +
+ Also, we noticed that some packages mentioned in the "OPEN SOURCE + SOFTWARE NOTICE" included with the device (and also downloaded as part of + the source release; see + Open_Source_Software_Notice_and_Privacy_Policy.pdf ) could not be found + in the source release. For example, we found "Software: Samba 3.0.XX" in + the notice, but could not find any trace of Samba in the source release. + Please ensure that all the software included in the notice is included in + the source release as well. + +# Nesting Doll Packages + +
+ + Once extracted, the 3 .rar files above produce the following output + files: + * busybox-1.21.1.rar + * AB_A0101.123.tar.gz + * source.rar + * a small text file that gives two-word descriptions of the above files + + +# Actual(ly Trying to) Build + +
+ + This file included no instructions for how one might build it so we + tried to run "make" but received the following error: + + $ make + .../busybox-1.21.1/scripts/gcc-version.sh: line 11: + arm-none-linux-gnueabi-gcc: command not found + +# Toolchain? + ++ 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 the toolchain is a nice step to make it easy for your users. + +
+> the scripts used to **control compilation** and installation of the executable. + +

+— GPLv2§3 +

+
+ +# We Guess at Compiler Anyway + +
+ So we searched for an arm-none-linux-gnueabi- cross-compiler in the + other files but could not find one. We then tried to use our own (be + editing the PATH appropriately), which did get us past this error. Note + that this is not acceptable in a source release - the cross-compiler + that a user must use needs to be clearly indicated (name, version, etc.) + and/or included with the source release. + +# Feedback on Small Problems + +
+ + Once we had the custom cross-compiler configured, we then ran into these + errors: + + $ make + .../busybox-1.21.1/scripts/gen_build_files.sh: Permission denied + make: *** [gen_build_files] Error 127 + + $ make + .../busybox-1.21.1/scripts/mkconfigs: Permission denied + make: *** [include/config/MARKER] Error 126 + + $ make + /bin/sh: applets/usage_compressed: Permission denied + make[1]: *** [include/usage_compressed.h] Error 126 + make: *** [applets_dir] Error 2 + + $ make + .../busybox-1.21.1/scripts/trylink: Permission denied + make: *** [busybox_unstripped] Error 126 + + In each case, we found the mentioned file and then added executable + permissions to it (ie. "chmod u+x scripts/gen_build_files.sh"). This + must be fixed in the next source release - please set the executable + bits on the above files appropriately in the archive file you + distribute. + +# Install Instructions missing + +
+ After fixing the above, a "busybox" binary was generated. However, + there were no instructions to indicate how one might install this binary + on the device. Such instructions are required by GPLv2, under which + BusyBox is licensed. Please include the instructions in your next + source release. + +# Build "Only Seems" To build + +
+ For the AAB_A0101.123.tar.gz package, we ran "./build.sh", the build + took about 140 seconds, which is less than one would expect for building + all of the programs listed in the "OPEN SOURCE SOFTWARE NOTICE". The + only files we could immediately find that were clearly the result of + this "./build.sh" invocation were some kernel image binaries, found in + path/path/path/path/path/KERNEL_OBJ . This path was not mentioned at + all and we had to guess at where they might be. + +# Maybe Proprietary Kernel Modules? + +
+ Furthermore, there were no .ko files generated, which is abnormal for a + build of the kernel, Linux. Please ensure that all .ko files which are + used on the system are generated with "./build.sh" or a similar script. + +# Weird versioning + +
+ + * The following libraries have different versions in the firmware than + is built from the candidate CCS. Specifically, your candidate CCS + contains version "1800", and the firmware has version "2400". Since + most of these libraries are licensed under the LGPL, you are required + to have the complete, corresponding source present for the correct + version as distributed in the firmware. You also must include the + "scripts to control compilation and installation of the executable". + + * lib/libgio-2.0.so.0.2400.2 + * lib/libglib-2.0.so.0.2400.2 + * lib/libgmodule-2.0.so.0.2400.2 + * lib/libgobject-2.0.so.0.2400.2 + * lib/libgthread-2.0.so.0.2400.2 + * lib/libz.so.1.2.5 (version 1.2.2 is provided in the sources) + +# Weird Build Issues Over Many Candidates + +
+ You mentioned in your Round 6 commentary that you have corrected the + thatlib issues. However, we are unable to see what you mean. There are + now two copies of thatlib, one in 2624.7_524/uclinux-rootfs/lib/thatlib/, + as well as the one in yourlibs. We aren't sure which one you intend to + be built to generate the binaries on the firmware. When we try to build + the yourlibs one from scratch, by cleaning the whole area, we get the + following build issues. Here's what we did: + +# Getting Really build-technical + +
+ + We ran: + + make -C libsrc/thatlib install + + which did not work because of a missing Makefile error. We read the + build source and discovered that the Makefile, etc, for that directory + is generated by running: + + cd libsrc/thatlib/thatlib-0.9.22_mipsel-uclibc; sh configure_thatlib_mipsel-uclibc + + Once we did that + + make -C libsrc/thatlib install + + worked correctly. The only remaining binaries were in build source and + discovered that the Makefile, etc, for that directory is generated by + running: + + cd libsrc/thatlib/thatlib-0.9.22_mipsel-uclibc; sh configure_thatlib_mipsel-uclibc + +# Getting Really build-technical + +
+ + Once we did that + + make -C libsrc/thatlib install + + worked correctly. The only remaining binaries were in + ./libsrc/thatlib/\{YOURLIB_ROOT_DIR\}/ which looks like a build with a + misconfigured environment somehow, so we simply removed that + directory. + + Then, after running make clean, thatlib failed with the following + errors. Random .o/.so files laying around in the thatlib source + directory, and then it failing to build correctly after they are + removed. If there some set of .so files you claim are not required + as part of the C&CS since thatlib is LGPL'd, we understand that, but + the rest of the sources must build and install those other .so's. + Here's the build error we get in the bdvdlibs version: + +# Getting Really build-technical + +
+ + mkdir .libs/libthatlibwm_default.a.tmp + (cd .libs/libthatlibwm_default.a.tmp && ar x ../../.libs/libthatlibwm_default.a) + mkdir .libs/libthatlibwm_default.a.tmp + (cd .libs/libthatlibwm_default.a.tmp && ar x ../../.libs/libthatlibwm_default.a) + /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc- + ld -o libthatlibwm_default.o -r .libs/libthatlibwm_default.a.tmp/*.o + /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc- + ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3) + /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc- + ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3) + /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc- + ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3) + /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc- + ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3) + .libs/libthatlibwm_default.a.tmp/default.o: could not read symbols: File in wrong format + make[4]: *** [libthatlibwm_default.o] Error 1 + +# Proprietary Linux Modules Are Everywhere + +
+ We did find one .ko file that was already included in the package, but + wasn't built when we ran "./build.sh". This is + path/path/android_X.X/device/device-type/mydevice.ko , which notes that + its license is "GPL v2" in the modinfo, but for which we could find no + source code in the source release. Please ensure that the source code + for mydevice.ko is included in the next source candidate. + +# Proprietary Linux Modules Are Everywhere + +
+ + * The following files are derivative of the kernel named Linux and + therefore covered by the GPL. However, no source code, scripts to + control compilation nor installation are included in your CCS + candidate: + lib/modules/myfilesystem.ko + lib/modules/mydevicecontroller.ko + lib/modules/myblockdevice.ko + lib/modules/mypcicard.ko + +# Non-Technical GPL Compliance Issues + +
+ Regarding over the air updates: we'd like to see a screenshot or other + details documenting what has now been implemented by BestBuy to make + sure the offer for source appears to users appropriately after + upgrade. There was a consensus reached on the last conference call + how this would be done, so we only need follow up and implementation + on that. + + +# Binary Comparison. + +
+ + Note that we did not receive a firmware image to compare this with + (though we do have the device). Company's website did not appear to + have any firmware images available for download. It would be helpful to + have such an image for the next CCS check. + + The above source candidate was downloaded from + http:///sourcez.company.com/en/search/index.htm?keywords=X1234Y, which + was alluded to in Company's 2017-01-18 email to us that said: + + "You can check this website + http://sourcez.company.com/en/search/index.htm " + + The email did not mention how to use that website, but we found that by + entering "X1234Y" into the top right search box that we could find the + source file list. + + Note that the offer for source included in the web UI of the device said + to email NAME@COMPANY.com , which is how the above instructions for + downloading the source were received. + + + + +# More Info / Talk License + + + ++ URLs / Social Networking / Email: + - Pls. support Conservancy: [sfconservancy.org/supporter/](https://sfconservancy.org/supporter/) + - If you hold copyrights in Linux, Debian, Samba, or BusyBox, you can + join our enforcement coalition. [Contact us!](https://sfconservancy.org/linux-compliance/about.html) + - [*The Guide*](https://copyleft.org/guide) is available & [welcomes contributions at copyleft.org](https://copyleft.org). + - Conservancy: [sfconservancy.org](https://sfconservancy.org/) & [@conservancy](https://twitter.com/conservancy/). + - Me: [faif.us](http://faif.us) & [ebb.org/bkuhn](http://ebb.org/bkuhn) + - Slides: [ebb.org/bkuhn/talks](http://ebb.org/bkuhn/talks/ELC-2015/pristine-example.html). + + +

Presentation and slides are: Copyright © Bradley M. Kuhn (2008–2011, 2015, 2017), Karen M. Sandler (2017), and are licensed under the Creative Commons Attribution-Share Alike 4.0 International License.

+