Changeset - 41c72f36e86a
[Not reviewed]
0 1 0
Bradley Kuhn (bkuhn) - 10 years ago 2014-11-09 22:56:35
bkuhn@ebb.org
Slightly reword.
1 file changed with 1 insertions and 1 deletions:
0 comments (0 inline, 0 general)
enforcement-case-studies.tex
Show inline comments
...
 
@@ -708,385 +708,385 @@ option to complete the final verification of the CCS:
 

	
 
   \item Purchase a new router and cable anew, and reattempt the installation
 
     process while taking extra care not to miswire any cables.
 

	
 
   \item Seek assistance from the libreCMC community to find an alternative
 
     method of installation.
 

	
 
\end{itemize}
 

	
 
The investigator chose the latter and then contacted a libreCMC developer
 
familiar with the product.  That developer, who  agreed the the RX pin was
 
likely ruined, described an alternative method for console access using the
 
{\tt netcat}.  The libreCMC developer described the process as follows:
 

	
 
\begin{quotation}
 

	
 
  \begin{itemize}
 

	
 
  \item Change the IP address of the router to 192.168.1.1.
 

	
 
  \item Change the IP address of a desktop GNU/Linux system to 192.168.1.2.
 

	
 
  \item Power on the router while holding the reset button for 7 seconds.
 

	
 
  \item Use the {\tt netcat} command (as below) on the desktop, and press
 
    enter to receive U-Boot's prompt:
 
    
 
\lstset{tabsize=2}
 
\begin{lstlisting}[language=bash]
 
$ nc -u -p 6666 192.168.1.1 6666
 
uboot>
 
\end{lstlisting}
 
  \end{itemize}
 
\end{quotation}
 

	
 
Upon following this procedure, the investigator was able to confirm the
 
(original) shipped version of U-Boot was still installed:
 
\begin{lstlisting}[language=bash]
 
$ nc -u -p 6666 192.168.1.1 6666
 
uboot> version
 
U-Boot 1.1.4 (Jul 28 2014)
 
\end{lstlisting}
 

	
 
Thereafter, the investigator followed the instructions from
 
``u-boot\verb0_0reflash''.  Specifically, the investigator configured a TFTP server
 
and placed the newly built firmware into \texttt{/srv/tftp}.  The investigator
 
also followed the remaining instructions in ``u-boot\verb0_0reflash'', but
 
used the \texttt{netcat} console rather than the serial console, and
 
used U-Boot's \texttt{reset} command to reboot the router.
 

	
 
Upon reboot, the serial console (still connect with working output) showed
 
the message \texttt{U-Boot 1.1.4  (Oct 17 2014)}, and thus confirmed a
 
successful reflash of the U-Boot image built by the investigator.
 

	
 
\section{Firmware Comparison}
 

	
 
Next, to ensure the CCS did indeed correspond to the firmware original
 
installed on the TPE-NWIFIROUTER, the investigator compared the built
 
firmware image with the filesystem originally found on the device itself.
 
The comparison steps were as follows:
 

	
 
\begin{enumerate}
 
  
 
\item Extract the filesystem from the image we built by running
 
  \href{https://gitorious.org/copyleft-org/gpl-compliance-scripts/source/master:find-firmware.pl}{find-firmware.pl}
 
  on ``bin/ar71xx/librecmc-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin''
 
  and then running
 
  \href{http://www.binaryanalysis.org/en/content/show/download}{bat-extratools}'
 
  ``squashfs4.2/squashfs-tools/bat-unsquashfs42'' on the resulting
 
  morx0.squash, using the filesystem in the new squashfs-root directory for
 
  comparison.
 

	
 
\item Login to the router's web interface (at \url{http://192.168.10.1/ }) from a computer
 
  connected to the router.
 
  
 
\item Set a password using the provided link at the top (since the router's
 
  UI warns that no password is set and asks the user to change it).
 
  
 
\item Logged into the router via SSH, using the root user with the
 
  aforementioned password.
 
  
 
\item Compared representative directory listings and binaries to ensure the set of
 
  included files (on the router) is similar to those found in the firmware
 
  image that the investigator created (whose contents are now in the local squashfs-root directory).  In
 
  particular, the investigator did the following comparisons:
 

	
 
  \begin{enumerate}
 
  \item Listed the /bin folder (``ls -l /bin'') and confirm the list of files is the same
 
    and that the file sizes are similar.
 
    
 
  \item Checked the ``strings'' output of ``/bin/busybox'' to confirm it is similar in both
 
   places (similar number of lines and content of lines).  (One cannot directly
 
   compare the binaries because the slight compilation variations will cause
 
   some bits to be different.)
 
 \item Repeated the above two steps for ``/lib/modules'', ``/usr/bin'', and other directories with
 
   a significant number of binaries.
 
   
 
 \item Checked that the kernel was sufficiently similar.  The investigator
 
   compared the ``dmesg'' output both before and after flashing the new
 
   firmware.  As the investigator expected, the kernel version string was
 
   similar, but had a different build date and user@host indicator.  (The
 
   kernel binary itself is not easily accessible from an SSH login, but was
 
   retrievable using the U-Boot console (the start address of the kernel in
 
   flash appears to be 0x9F020000, based on the boot messages seen in the
 
   serial console).
 
  \end{enumerate}
 
\end{enumerate}
 

	
 
\section{Minor Annoyances}
 

	
 
As discussed in detail above, there were a few minor annoyances, none of
 
which were GPL violations.  Rather, the annoyances briefly impeded the
 
build and installation.  However, the investigator, as a reasonably skilled
 
build engineer for embedded devices, was able to complete the process with
 
the instructions provided.
 

	
 
To summarize, no GPL compliance issues were found, and the CCS release was
 
one of the best ever reviewed by any investigator at any community-oriented
 
enforcement organization.  However, the following annoyances were discovered:
 

	
 
\begin{itemize}
 
\item Failure to explain how to extract the source tarball and then where to run the
 
  ``make'' command.
 
\item Failure to explain how to install the kernel and root filesystem on the
 
  device; the user must assume the web UI must be used.
 

	
 
\item Including pre-built toolchain binaries that don't work on all systems,
 
  and failure to copy and/or symlink built toolchain binaries in the right location.
 

	
 
\item Failure to include information in the U-Boot installation instructions for
 
  wiring the serial cable.
 

	
 
\item Ideally, the U-Boot installation instructions would also include the
 
  {\tt netcat} method of installation.
 

	
 
\item Finally, the instructions should note that the new U-Boot firmware
 
  should be placed into \texttt{/srv/tftp} when using TFTP on most GNU/Linux
 
  desktops.
 
\end{itemize}
 

	
 
Thus, no CCS is absolutely perfect, but GPL violation investigators always
 
give the distributors the benefit of any doubts and seek to work with the
 
vendors and improve their CCS for the betterment of their users, customers,
 
and the entire software freedom community.
 

	
 
\section{Lessons Learned}
 

	
 
Companies that seek to redistribute copylefted software can benefit greatly
 
from ThinkPenguin's example.  Here are just a few of the many lessons that
 
can be learned here:
 

	
 
\begin{enumerate}
 

	
 
\item Even though copyleft licenses have them,
 
  \hyperref[thinkpenguin-included-ccs]{\bf avoid the offer-for-source
 
    provisions}.  Not only does including the CCS alongside binary
 
  distribution make violation investigation and compliance confirmation
 
  substantially easier, but also (and more importantly) doing so
 
  \hyperref[offer-for-source]{completes the distributor's CCS compliance
 
    obligations at the time of distribution} (provided, of course, that the
 
  distributor is otherwise in compliance with the relevant copyleft license).
 
  
 
\item {\bf Include top-level build instructions in a natural language (such
 
  as English) in a \hyperref[thinkpenguin-toplevel-readme]{clear and
 
    conspicuous place}.}  Copyleft licenses require that someone reasonably
 
  skilled in the art can reproduce the build and installation.  Typically,
 
  instructions written in English are necessary, and often easier than writing
 
  programmed scripts.  The ``script'' included can
 
  certainly be more like the script of a play and less like a Bash script.
 

	
 
\item {\bf Write build/install instructions to the appropriate level of
 
  specificity}.  The upstream engineers
 
  in this case study \hyperref[thinkpenguin-specific-host-system]{clearly did
 
    additional work to ensure functionality on a wide variety of host build
 
    systems}; this is quite rare.  When in doubt, include the maximum level
 
  of detail build engineers can provide with the CCS instructions, but also
 
  double-check to investigate if a more generalized solution (such as other
 
  host systems) work just as well for the build.
 

	
 
\item {\bf Seek to adhere to the spirit of copyleft, not just the letter of
 
  the license}.  Encouragement of users to improve and
 
  make their devices better is one of ThinkPenguin's commercial differentiators.  Copyleft advocates
 
  that other companies have undervalued the large and lucrative
 
  market of
 
  users who seek hackable devices.  By going beyond the
 
  mere minimal requirements of GPL, companies can immediately reap the
 
  benefits in that target market.
 

	
 
  \item Community-oriented enforcement organizations do not play ``gotcha''\footnote{For lack of a better
 
    phrase.} with distributors regarding GPL
 
    violations.  The goal in the GPL enforcement process is to achieve
 
    compliance and correct mistakes and annoyances.  Such organizations
 
    therefore take an ``innocent until proven guilty $\rightarrow$ guilty
 
    therefore take an ``innocent until proven guilty $\rightarrow$ assume guilty
 
    due to honest error rather than malicious action '' approach.  The goal
 
    is compliance (in direct contrast with
 
    the \hyperref[Proprietary Relicensing]{discussion in \S~\ref*{Proprietary Relicensing} about the
 
      proprietary relicensing} business model).
 
    
 
\end{enumerate}
 

	
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
\chapter{Bortez: Modified GCC SDK}
 

	
 
In our first case study, we will consider Bortez, a company that
 
produces software and hardware toolkits to assist OEM vendors, makers
 
of consumer electronic devices.
 

	
 
\section{Facts}
 

	
 
One of Bortez's key products is a Software Development Kit (``SDK'')
 
designed to assist developers building software for a specific class of
 
consumer electronics devices.
 

	
 
FSF received a report that the SDK may be based on the GNU Compiler
 
Collection (which is an FSF-copyrighted collection of tools for software
 
development in C, C++ and other popular languages). FSF investigated the
 
claim, but was unable to confirm the violation. The violation reporter
 
was unresponsive to follow-up requests for more information.
 

	
 
Since FSF was unable to confirm the violation, we did not pursue it any
 
further. Bogus reports do happen, and we do not want to burden companies
 
with specious GPL violation complaints. FSF shelved the matter until
 
more evidence was discovered.
 

	
 
FSF was later able to confirm the violation when two additional reports
 
surfaced from other violation reporters, both of whom had used the SDK
 
professionally and noticed clear similarities to FSF's GNU GCC\@. FSF's
 
Compliance Engineer asked the reporters to run standard tests to confirm
 
the violation, and it was confirmed that Bortez's SDK was indeed a
 
modified version of GCC\@. Bortez had ported to Windows and added a number
 
of features, including support for a specific consumer device chipset and
 
additional features to aid in the linking process (``LP'') for those
 
specific devices. FSF explained the rights that the GPL afforded these
 
customers and pointed out, for example, that Bortez only needed to provide
 
source to those in possession of the binaries, and that the users may need
 
to request that source (if \S 3(b) was exercised). The violators
 
confirmed that such requests were not answered.
 

	
 
FSF brought the matter to the attention of Bortez, who immediately
 
escalated the matter to their attorneys. After a long negotiation,
 
Bortez acknowledged that their SDK was indeed a modified version of
 
GCC\@. Bortez released most of the source, but some disagreement
 
occurred over whether LP was also derivative of GCC\@. After repeated
 
FSF inquiries, Bortez reaudited the source to discover that FSF's
 
analysis was correct. Bortez determined that LP included a number of
 
source files copied from the GCC code-base.
 

	
 
\label{davrik-build-problems}
 
Once the full software release was made available, FSF asked the violation
 
reporters if it addressed the problem. Reports came back that the source
 
did not properly build. FSF asked Bortez to provide better build
 
instructions with the software, and such build instructions were
 
incorporated into the next software release.
 

	
 
At FSF's request as well, Bortez informed customers who had previously
 
purchased the product that the source was now available by announcing
 
the availability on its Web site and via a customer newsletter.
 

	
 
Bortez did have some concerns regarding patents. They wished to include a
 
statement with the software release that made sure they were not granting
 
any patent permission other than what was absolutely required by the GPL\@.
 
They understood that their patent assertions could not trump any rights
 
granted by the GPL\@. The following language was negotiated into the release:
 

	
 
\begin{quotation}
 
Subject to the qualifications stated below, Bortez, on behalf of itself
 
and its Subsidiaries, agrees not to assert the Claims against you for your
 
making, use, offer for sale, sale, or importation of the Bortez's GNU
 
Utilities or derivative works of the Bortez's GNU Utilities
 
(``Derivatives''), but only to the extent that any such Derivatives are
 
licensed by you under the terms of the GNU General Public License. The
 
Claims are the claims of patents that Bortez or its Subsidiaries have
 
standing to enforce that are directly infringed by the making, use, or
 
sale of an Bortez Distributed GNU Utilities in the form it was distributed
 
by Bortez and that do not include any limitation that reads on hardware;
 
the Claims do not include any additional patent claims held by Bortez that
 
cover any modifications of, derivative works based on or combinations with
 
the Bortez's GNU Utilities, even if such a claim is disclosed in the same
 
patent as a Claim. Subsidiaries are entities that are wholly owned by
 
Bortez.
 

	
 
This statement does not negate, limit or restrict any rights you already
 
have under the GNU General Public License version 2.
 
\end{quotation}
 

	
 
This quelled Bortez's concerns about other patent licensing they sought to
 
do outside of the GPL'd software, and satisfied FSF's concerns that Bortez
 
give proper permissions to exercise teachings of patents that were
 
exercised in their GPL'd software release.
 

	
 
Finally, a GPL Compliance Officer inside Bortez was appointed to take
 
responsibility for all matters of GPL compliance inside the company.
 
Bortez is responsible for informing FSF if the position is given to
 
someone else inside the company, and making sure that FSF has direct
 
contact with Bortez's Compliance Officer.
 

	
 
\section{Lessons}
 

	
 
This case introduces a number of concepts regarding GPL enforcement.
 

	
 
\begin{enumerate}
 

	
 
\item {\bf Enforcement should not begin until the evidence is confirmed.}
 
  Most companies that distribute GPL'd software do so in compliance, and at
 
  times, violation reports are mistaken. Even with extensive efforts in
 
  GPL education, many users do not fully understand their rights and the
 
  obligations that companies have. By working through the investigation
 
  with reporters, the violation can be properly confirmed, and {\bf the
 
    user of the software can be educated about what to expect with GPL'd
 
    software}. When users and customers of GPL'd products know their
 
  rights, what to expect, and how to properly exercise their rights
 
  (particularly under \S 3(b)), it reduces the chances for user
 
  frustration and inappropriate community outcry about an alleged GPL
 
  violation.
 

	
 
\item {\bf GPL compliance requires friendly negotiation and cooperation.}
 
  Often, attorneys and managers are legitimately surprised to find out
 
  GPL'd software is included in their company's products. Engineers
 
  sometimes include GPL'd software without understanding the requirements.
 
  This does not excuse companies from their obligations under the license,
 
  but it does mean that care and patience are essential for reaching GPL
 
  compliance. We want companies to understand that participating and
 
  benefiting from a collaborative Free Software community is not a burden,
 
  so we strive to make the process of coming into compliance as smooth as
 
  possible.
 

	
 
\item {\bf Confirming compliance is a community effort.}  The whole point
 
  of making sure that software distributors respect the terms of the GPL is to
 
  allow a thriving software sharing community to benefit and improve the
 
  work. FSF is not the expert on how a compiler for consumer electronic
 
  devices should work. We therefore inform the community who originally
 
  brought the violation to our attention and ask them to assist in
 
  evaluation and confirmation of the product's compliance. Of course, FSF
 
  coordinates and oversees the process, but we do not want compliance for
 
  compliance's sake; rather, we wish to foster a cooperating community of
 
  development around the Free Software in question, and encourage the
 
  once-violator to begin participating in that community.
 

	
 
\item {\bf Informing the harmed community is part of compliance.} FSF asks
 
  violators to make some attempt --- such as via newsletters and the
 
  company's Web site --- to inform those who already have the products as
 
  to their rights under the GPL\@. One of the key thrusts of the GPL's \S 1 and
 
  \S 3 is to {\em make sure the user knows she has these rights\/}. If a
 
  product was received out of compliance by a customer, she may never
 
  actually discover that she has such rights. Informing customers, in a
 
  way that is not burdensome but has a high probability of successfully
 
  reaching those who would seek to exercise their freedoms, is essential
 
  to properly remedy the mistake.
 

	
 
\item {\bf Lines between various copyright, patent, and other legal
 
  mechanisms must be precisely defined and considered.}  The most
 
  difficult negotiation point of the Bortez case was drafting language
 
  that simultaneously protected Bortez's patent rights outside of the
 
  GPL'd source, but was consistent with the implicit patent grant in
 
  the GPL\@. As we discussed in the first course of this series, there is
 
  indeed an implicit patent grant with the GPL, thanks to \S 6 and \S 7.
 
  However, many companies become nervous and wish to make the grant
 
  explicit to assure themselves that the grant is sufficiently narrow for
 
  their needs. We understand that there is no reasonable way to determine
 
  what patent claims read on a company's GPL holdings and which do not, so
 
  we do not object to general language that explicitly narrows the patent
 
  grant to only those patents that were, in fact, exercised by the GPL'd
 
  software as released by the company.
 

	
 
\end{enumerate}
 

	
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
\chapter{Bracken: a Minor Violation in a GNU/Linux Distribution}
 

	
 
In this case study, we consider a minor violation made by a company whose
 
knowledge of the Free Software community and its functions is deep.
 

	
 
\section{The Facts} 
 

	
 
Bracken produces a GNU/Linux operating system product that is sold
 
primarily to OEM vendors to be placed in appliance devices used for a
 
single purpose, such as an Internet-browsing-only device. The product
 
is almost 100\% Free Software, mostly licensed under the GPL and related
 
Free Software licenses.
 

	
 
FSF found out about this violation through a report first posted on a
 
  Slashdot\footnote{Slashdot is a popular news and discussion site for
 
  technical readers.} comment, and then it was brought to our attention again
 
  by another Free Software copyright holder who had discovered the
 
  same violation.
0 comments (0 inline, 0 general)