Changeset - 0f3bc95c5160
[Not reviewed]
0 1 0
Bradley Kuhn (bkuhn) - 10 years ago 2014-03-20 12:01:17
bkuhn@ebb.org
Rework pasted text into a coherent description of system library exception.

This required writing a lot of additional text to make it work.

I also added my cheeky rule of thumb. :)
1 file changed with 43 insertions and 24 deletions:
0 comments (0 inline, 0 general)
gpl-lgpl.tex
Show inline comments
...
 
@@ -2370,216 +2370,235 @@ of copies of software in behavioral rather than statutory terms.
 
\section{Appropriate Legal Notices}
 

	
 
GPLv2 used the term ``appropriate copyright notice and disclaimer of
 
warranty'' in two places, which is a rather bulk term.  Also, experience with
 
GPLv2 and other licenses that grant software freedom showed throughout the
 
1990s that the scope of types of notices that need preservation upon
 
conveyance were more broad that merely the copyright notices.  The
 
Appropriate Legal Notice definition consolidates the material that GPLv2
 
traditionally required preserved into one definition.
 

	
 
\section{Other Defined Terms}
 

	
 
Note finally that not all defined terms in GPLv3 appear in GPLv3~\S0.
 
Specifically, those defined terms that are confined in use to a single
 
section are defined in the section in which they are used, and GPLv3~\S1
 
contains those definitions focused on source code.  In this tutorial, those
 
defined terms are discussed in the section where they are defined and/or
 
used.
 

	
 
\section{GPLv3~\S1: Understanding CCS}
 

	
 
Ensuring that users have the source code to the software they receive and the
 
freedom to modify remains the paramount right embodied in the Free Software
 
Definition (found in \S~\ref{Free Software Definition} of this tutorial).  As
 
such, GPLv3~\S1 is likely one of the most important sections of GPLv3, as it
 
contains all the defined terms related to this important software freedom.
 

	
 
\subsection{Source Code Definition}
 

	
 
First, GPLv3\~S1 retains GPLv2's definition of ``source code'' and adds an
 
explicit definition of ``object code'' as ``any non-source version of a
 
work''.  Object code is not restricted to a narrow technical meaning and is
 
understood broadly to include any form of the work other than the preferred
 
form for making modifications to it.  Object code therefore includes any kind
 
of transformed version of source code, such as bytecode or minified
 
Javascript.  The definition of object code also ensures that licensees cannot
 
escape their obligations under the GPL by resorting to shrouded source or
 
obfuscated programming.
 

	
 
\subsection{CCS Definition}
 

	
 
The definition of CCS\footnote{Note that the preferred term for those who
 
  work regularly with both GPLv2 and GPLv3 is ``Complete Corresponding
 
  Source'', abbreviated to ``CCS''.  Admittedly, the word ``complete'' no
 
  longer appears in GPLv3 (which uses the word ``all'' instead).  However,
 
  both GPLv2 and the early drafts of GPLv3 itself used the word ``complete'',
 
  and early GPLv3 drafts even called this defined term ``Complete
 
  Corresponding Source''.  Meanwhile, use of the acronym ``CCS'' (sometimes,
 
  ``C\&CS'') was so widespread among GPL enforcers that its use continues
 
  even though GPLv3-focused experts tend to say just the defined term of
 
  ``Corresponding Source''.}, or, as GPLv3 officially calls it,
 
``Corresponding Source'' in GPLv3~\S1\P4 is possibly the most complex
 
definition in the license.
 

	
 
The CCS definition is broad so as to protect users' exercise of their rights
 
under the GPL\@.  The definition includes with particular examples to remove
 
any doubt that they are to be considered CCS\@.  GPLv3 seeks to make it
 
completely clear that a licensee cannot avoid complying with the requirements
 
of the GPL by dynamically linking a subprogram component to the original
 
version of a program.  The example also clarifies that the shared libraries
 
and dynamically linked subprograms that are included in Corresponding Source
 
are those that the work is ``specifically'' designed to require, which
 
clarifies that they do not include libraries invoked by the work that can be
 
readily substituted by other existing implementations.  While copyleft
 
advocates never doubted this was required under GPLv2's definition of CCS,
 
making it abundantly clear with an extra example.
 

	
 
GPL, as always, seeks to ensure users are truly in a position to install and
 
run their modified versions of the program; the CCS definition is designed to
 
be expansive to ensure this software freedom.  However, although the
 
definition of CCS is expansive, it is not sufficient to protect users'
 
freedoms in many circumstances.  For example, a GPL'd program, or a modified
 
version of such a program, might be locked-down and restricted.  The
 
requirements in GPLv3~\S6 (discussed in Section~\ref{GPLv3s6} of this
 
tutorial) handle that issue.  (Early drafts of GPLv3 included those
 
requirements in the definition of CCS; however, given that the lock-down
 
issue only comes up in distribution of object code, it is more logical to
 
place those requirements with the parts of GPLv3 dealing directly with object
 
code distribution).
 

	
 
The penultimate paragraph in GPLv3\S2 notes that GPLv3's CCS definition does
 
not require source that can be automatically generated.  Many code
 
generators, preprocessors and take source code as input and sometimes even
 
have output that is still source code.  Source code should always be whatever
 
the original programmer preferred to modify.
 

	
 
GPLv3\S1's final paragraph removes any ambiguity about what should be done on
 
source-only distributions.  Specifically, the right to convey source code
 
that does not compile, does not work, or otherwise is experimental
 
in-progress work is fully permitted, \textit{provided that} no object code
 
form is conveyed as well.  Indeed, when combined with the permissions in
 
GPLv3\S~5, it is clear that if one conveys \texti{only} source code, one can
 
never be required to provide more than that.  One always has the right to
 
modify a source code work by deleting any part of it, and there can be no
 
requirement that free software source code be a whole functioning program.
 

	
 
% FIXME: Standard Interface
 

	
 
% FIXME: System Libraries: it's in a different place and changed in later drafts
 

	
 
The final paragraph of section 1 revises the exception to the source code
 
distribution requirement in GPLv2 that we have sometimes called the system
 
library exception. This exception has been read to prohibit certain
 
distribution arrangements that we consider reasonable and have not sought to
 
prevent, such as distribution of gcc linked with a non-free C library that is
 
included as part of a larger non-free system. This is not to say that such
 
non-free libraries are legitimate; rather, preventing free software from
 
linking with these libraries would hurt free software more than it would hurt
 
proprietary software.
 

	
 
As revised, the exception has two parts. Part (a) rewords the GPLv2
 
exception for clarity but also removes the words ``unless that
 
component itself accompanies the executable.''  By itself, (a) would
 
be too permissive, allowing distributors to evade their
 
responsibilities under the GPL.  We have therefore added part (b) to
 
specify when a system library that is an adjunct of a major essential
 
operating system component, compiler, or interpreter does not trigger
 
the requirement to distribute source code.  The more low-level the
 
functionality provided by the library, the more likely it is to be
 
qualified for this exception.
 
\section{The System Library Exception}
 

	
 
The previous section skipped over one part of the CCS definition, the
 
so-called system library exception.  The ``System Libraries'' definition (and
 
the ``Standard Interface'' and ``Major Component'' definitions, which it
 
includes) are designed as part
 

	
 
to permit certain distribution arrangements that are considered reasonable by
 
copyleft advocates.  The system library exception is designed to allow
 
copylefted software to link with these libraries when such linking would hurt
 
software freedom more than it would hurt proprietary software.
 

	
 
The system library exception has two parts.  Part (a) rewords the GPLv2
 
exception for clarity replaces GPLv2's words ``unless that component itself
 
accompanies the executable'' with ``which is not part of the Major
 
Component''.  The goal here is to not require disclosure of source code of
 
certain libraries, such as necessary Microsoft Windows DLLs (which aren't
 
part of Windows' kernel but accompany it) that are required for functioning
 
of copylefted programs compiled for Windows.
 

	
 
However, in isolation, (a) would be too permissive, as it would sometimes
 
allowing distributors to evade important GPL requirements.  Part (b) reigns
 
in (a).  Specifically, (b) specifies only a few functionalities that a the
 
system library may provide and still qualify for the exception.  The goal is
 
to ensure system libraries are truly adjunct to a major essential operating
 
system component, compiler, or interpreter.  The more low-level the
 
functionality provided by the library, the more likely it is to be qualified
 
for this exception.
 

	
 
Admittedly, the system library exception is a frequently discussed topic of
 
obsessed GPL theorists.  The amount that has been written on the system
 
library exception (both the GPLv2 and GPLv3 versions of it), if included
 
herein,  could easily increase this section of the tutorial to a length
 
greater than all the others.
 

	
 
Like any exception to the copyleft requirements of GPL, would-be GPL
 
violators frequently look to the system library exception as a potential
 
software freedom circumvention technique.  When considering whether or not a
 
library qualifies for the system library exception, here is a pragmatic
 
thesis to consider, based on the combined decades of experience in GPL
 
interpretation of this tutorial's authors: the harder and more strained the
 
reader must study and read the system library exception, the more likely it
 
is that the library in question does not qualify for it.
 

	
 
% FIXME: These don't belong here
 

	
 
It is important to note that section 11, paragraph 3 refers to a work that is
 
conveyed, and section 10, paragraph 2 refers to a kind of automatic
 
counterpart to conveying achieved as the result of a transaction. 
 

	
 
\section{GPLv3~\S2: Basic Permissions}
 

	
 
% FIXME: phrase ``unmodified Program'' appears due to User Products exception
 

	
 
We have included the first sentence of section 2 to further internationalize
 
the GPL. Under the copyright laws of some countries, it may be necessary for
 
a copyright license to include an explicit provision setting forth the
 
duration of the rights being granted. In other countries, including the
 
United States, such a provision is unnecessary but permissible.
 

	
 
The first paragraph of section 2 also acknowledges that licensees under the
 
GPL enjoy rights of copyright fair use, or the equivalent under applicable
 
law. These rights are compatible with, and not in conflict with, the freedoms
 
that the GPL seeks to protect, and the GPL cannot and should not restrict
 
them.
 

	
 
% FIXME: propagate and convey
 

	
 
Section 2 distinguishes between activities of a licensee that are permitted
 
without limitation and activities that trigger additional requirements. The
 
second paragraph of section 2 guarantees the basic freedoms of privately
 
modifying and running the program. However, the right to privately modify and
 
run the program is terminated if the licensee brings a patent infringement
 
lawsuit against anyone for activities relating to a work based on the
 
program.
 

	
 
% FIXME:  transition, and some word smith
 
The explicit prohibition of sublicensing ensures that enforcement of the GPL
 
is always by the copyright holder.  Usually, sublicensing is regarded as a
 
practical convenience or necessity for the licensee, to avoid having to
 
negotiate a license with each licensor in a chain of distribution.  The GPL
 
solves this problem in another way, through its automatic licensing
 
provision.
 

	
 
% FIXME: new section here, just to talk DRM before the other section.
 

	
 
GPLv3 introduces provisions that respond to the growing practice of
 
distributing GPL-covered programs in devices that employ technical means
 
to restrict users from installing and running modified versions.  This
 
practice thwarts the expectations of developers and users alike, because
 
the right to modify is one of the core freedoms the GPL is designed to
 
secure.
 

	
 
Technological measures to defeat users' rights --- often described by such
 
Orwellian phrases as ``digital rights management,'' which actually means
 
limitation or outright destruction of users' legal rights, or ``trusted
 
computing,'' which actually means selling people computers they cannot trust
 
--- are alike in one basic respect.  They all employ technical means to turn
 
the system of copyright law, where the powers of the copyright holder are
 
limited exceptions to general freedom, into a prison, where everything not
 
specifically permitted is utterly forbidden, and indeed, if the full extent
 
of their ambition is realized, would be technically impossible.  This system
 
of ``para-copyright'' has been created since the adoption of GPLv2, through
 
legislation in the United States, the European Union, and elsewhere that
 
makes it a serious civil or even criminal offense to escape from these
 
restrictions, even where the purpose in doing so is to restore the users'
 
legal rights that the technology wrongfully prevents them from exercising.
 

	
 
% FIXME: Remove FSF specific parts
 

	
 
As a digital rights organization, we would not be following our mission if we
 
did not oppose these injustices.  But the reason our license must respond to
 
these practices at all is the result of a remarkable irony. Those who wish to
 
impose DRM on the public would like to do so by using software covered by the
 
GPL, a license that is intended to preserve the very freedom that they seek
 
to crush.  They are not satisfied merely with publishing programs having
 
limited capability, which free software permits. They seek to go further, to
 
prevent the user from removing those limits, turning Freedom 1, the freedom
 
to modify, into a sham.
 

	
 
GPLv2 did not address the use of technical measures to take back the rights
 
that the GPL granted, because such measures did not exist in 1991, and would
 
have been irrelevant to the forms in which software was then delivered to
 
users.  But GPLv3 must address these issues: free software is ever more
 
widely embedded in devices that impose technical limitations on the user's
 
freedom to change it.
 

	
 
These unjust measures must not be confused with legitimate applications that
 
give users control, as by enabling them to choose higher levels of system or
 
data security within their networks, or by allowing them to protect the
 
security of their communications using keys they can generate or copy to
 
other devices for sending or receiving messages.  These technologies present
 
no obstacles to the freedom of free software. The user is presented with
 
choices, and figuratively as well as literally retains all the keys to the
 
digital home.
 

	
 
By contrast, technical restrictions that allow other parties to control the
 
user have no legitimate social purpose.  In existing applications where the
 
user is not afforded the same degree of real power to modify the free
0 comments (0 inline, 0 general)