Integrate pasted text regarding LGPL.

Much of the pasted text here was useful.  However, some of the claims
were broad reaching, I've reigned those in.  (e.g., saying "Taken
together, these provisions mean:" was a bit strong).

Also, in that specific spot, the conclusions made in the text were
described as applying to LGPLv2.1, but are clearly conclusions about
LGPLv3.  I've corrected that herein.

Finally, I had to write a bunch of next text to make the pasted text
work, and also added one FIXME for later of where things could be
improved further.
This commit is contained in:
Bradley M. Kuhn 2014-11-13 12:25:13 -05:00
parent 895d387cc7
commit 9f34658440

View file

@ -4604,97 +4604,46 @@ mechanism, the user must have available the object code for the ``work
based on the library,'' so that the user can relink the application and based on the library,'' so that the user can relink the application and
build a new binary. build a new binary.
%FIXME-URGENT: integrate Almost all known LGPL'd distributions exercise either LGPLv2.1~\S6(a) or
LGPLv2.1~\S6(b). However, LGPLv2.1~\S6 provides three other options.
LGPLv2.1~\S6(c) allows for a written offer for CCS (akin to
\hyperref[GPLv2s3b]{GPLv2~\S3(b)}). CCS may also be distributed by network
under the terms of LGPLv2.1~\S6(c). Furthermore, under LGPLv2.1~\S6(e) the
distributor may ``verify'' that the user has already received, or at least
that the distributor has already sent to this particular user, the relevant
source\footnote{Policy motivations for LGPLv2.1~\S6(d) are unclear, but it
presumably intended to prevent requiring duplicate deliveries in ``whole
distribution'' situations.}.
Under \S6(c), this source code may be offered in writing rather than provided, Finally, LGPLv3~\S6 also requires that:
or it may be distributed by network under the terms of \S6(d). In addition,
under \S6(e) the distributor may ``verify'' that the user has already received,
or at least that the distributor has already sent to this particular user,
the relevant source. This is evidently intended to prevent requiring
duplicate deliveries in ``whole distribution'' situations.
If the distributor of the combined work intends not to distribute or offer \begin{quote}
the source code of the LGPLd components, the LGPLd work must be separately
distributed (subject to source code delivery requirements as part of that
separate distribution) and packaged in a ``shared library'' mechanism, which
means
\begin{quotation}
that [it] (1) uses at run time a copy of the library already present on
the users computer system, rather than copying library functions into
the executable, and (2) will operate properly with a modified version of
the library, if the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
\end{quotation}
Taken together, these provisions mean:
\begin{itemize}
\item If you create a program that links through a shared library mechanism to
a work that is separately distributed under LGPLv2.1, then you can
distribute the resultant program under a license of your choice and you
need not convey the LGPLd works source code. If you distribute the
library along with your program, or are the separate distributor of the
work in another context or as another product, you must distribute its
corresponding source under the terms of LGPLv2.1 or GPLv2+, at your
option.
\item If you choose to statically link or otherwise combine your program with
an LGPLd work, you may choose your own license for the work provided the
license terms limitations for user modification, reverse engineering and
debugging are met, and given that the LGPLd components are still
governed by LGPLs terms. You must offer or provide complete and
corresponding source code for the LGPLd components. The source code
material provided must be sufficient to regenerate the combined work with
a user-modified version of the LGPLd components.
\end{itemize}
%FIXME-URGENT: integrate
\S6 also requires that:
\begin{quotation}
You must give prominent notice with each copy of the work that the You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work during this License. You must supply a copy of this License. If the work during
execution displays copyright notices, you must include the copyright execution displays copyright notices, you must include the copyright
notice for the Library among them, as well as a reference directing the notice for the Library among them, as well as a reference directing the
user to the copy of this License. user to the copy of this License.
\end{quotation} \end{quote}
This is not identical to the roughly parallel requirements of GPLv2 and This is not identical to the roughly parallel requirements of GPLv2 and
GPLv3. Compliance requires slightly different measures with respect to the GPLv3. Compliance requires slightly different measures with respect to the
``credits'' or ``licenses'' or ``about'' screens in interactive programs. ``credits'' or ``licenses'' or ``about'' screens in interactive programs.
%FIXME-URGENT: end \section{Distributing Works Based On the Library}
The remaining options in LGPLv2.1~\S6 are very similar to the other choices
provided by GPLv2~\S3. There are some additional options, but time does
not permit us in this course to go into those additional options. In
almost all cases of distribution under LGPL, either LGPLv2.1~\S6(a) or LGPLv2.1~\S6(b) are
exercised.
\section{Distribution of the Combined Works}
Essentially, ``works based on the library'' must be distributed under the Essentially, ``works based on the library'' must be distributed under the
same conditions as works under full GPL\@. In fact, we note that same conditions as works under full GPL\@. In fact, we note that
LGPLv2.1~\S2 is nearly identical in its terms and requirements to GPLv2~\S2. LGPLv2.1~\S2 is nearly identical in its terms and requirements to GPLv2~\S2.
There are again subtle differences and additions, which time does not
permit us to cover in this course.
%FIXME-urgent; integrate There are, however, subtle differences and additions. For example not only
is CCS required (as would be with normal versions of GPL), but also the CCS
Not only must the source code be complete and corresponding, but it must be provided must enable a developer to regenerate the modified version of the
provided in such a way that a modified version of the entire combined work entire combined work, using with a modified version of the LGPL'd work (as a
can be regenerated with a modified version of the LGPLd work replacing the replacement for the version a distributor provided). For example, LGPL'd
version originally provided to the user. When LGPLd code is statically code is statically linked to a non-copyleft executable, the required source
linked to a non-copyleft executable, for example, the required source code code must also include sufficient material to split the distributed
must also include sufficient material to split the distributed executable and executable and relink with a modified version of the library.
relink with a modified version of the library.
%FIXME-URGENT: end
\section{And the Rest} \section{And the Rest}
@ -4703,15 +4652,11 @@ conditions:
\begin{itemize} \begin{itemize}
\item Allowing a licensing ``upgrade'' from the LGPL to the GPL\@ (in LGPLv2.1~\S3) \item Allowing a licensing ``upgrade'' from the LGPL to the GPL\@ (in LGPLv2.1~\S3).
Note, however, LGPLv2.1~\S3 allows relicensing of works under its terms
%FIXME-URGENT: integrate instead under the terms of GPLv2-or-later. This provides, for example, a
But LGPLv2.1 \S3 allows all works under its pathway for those who do not want to use code under the requirements of
terms, copy by copy, to be used instead under the terms of GPLv2 or any later LGPLv2.1 to do so under GPLv2 or GPLv3 at their discretion.
version. This provides a pathway for those who do not want to use code under
the requirements of LGPLv2.1 to do so under GPLv2 or GPLv3 at their
discretion.
%FIXME-URGENT: end
\item Binary distribution of the library only, covered in LGPLv2.1~\S4, \item Binary distribution of the library only, covered in LGPLv2.1~\S4,
which is effectively equivalent to LGPLv2.1~\S3 which is effectively equivalent to LGPLv2.1~\S3
@ -4729,75 +4674,121 @@ understanding the difference between a ``work based on the library'' and a
remainder of LGPLv2.1 is close enough to GPL that the concepts discussed in remainder of LGPLv2.1 is close enough to GPL that the concepts discussed in
our more extensive GPL unit can be directly applied. our more extensive GPL unit can be directly applied.
% FIXME-URGENT: integrate
\chapter{LGPLv3} \chapter{LGPLv3}
\label{LGPLv3} \label{LGPLv3}
LGPLv3 was designed to rectify the architectural plan of the GNU family of LGPLv3 was designed to rectify architectural flaws in the GNU family of
licenses, by making the copyleft license from which LGPLv3 is a combination licenses. Historically , LGPLv2.1 was a textual modification of GPLv2.
exception GPLv3. LGPLv3 is therefore an additional permission in the form Reconciliation of licensing terms upon combination of LGPLv2.1'd and GPLv2'd
provided for in GPLv3 \S7, above. works is cumbersome, from a licensing bookkeeping perspective.
LGPLv3 redresses this historical problem through extensive use of
\hyperref[GPLv3s7]{GPLv3~\S7}'s exception architecture. LGPLv3 is therefore
a set of additional permission to GPLv3.
%FIXME: harken back to policy motivations of LGPL and how GPLv3 as a whole is
%always an option.
\section{Section 0: Additional Definitions} \section{Section 0: Additional Definitions}
Section 0 defines the ``Library'' it covers as a work that presents one or more LGPLv3~\S0 defines the ``Library'' -- a work that presents one or more
interfaces at which a ``use'' can be made by an ``Application.'' Class interfaces at which a ``use'' can be made by an ``Application.'' Class
inheritance is ``deemed'' a use of an interface. An ``Application,'' which is inheritance is ``deemed'' a use of an interface. An ``Application,'' which is
other program code using one or more ``Library'' interfaces can be combined other program code using one or more ``Library'' interfaces can be combined
with the code on the other side of the interfaces it uses to form a ``Combined with the code on the other side of the interfaces it uses to form a
Work.'' ``Combined Work.''
\section{Section 1: Exception to Section 3 of the GNU GPL} \section{LGPLv3~\S1: Exception to GPLv3~\S3}
Section 1 excepts away the interference with use of LGPLv3 code as part of LGPLv3~\S1 excepts away the interference with use of LGPLv3 code as part of
``effective technological measures'' of access limitation for other copyrighted ``effective technological measures'' of access limitation for other copyrighted
works provided otherwise by GPLv3 \S3. works provided otherwise by GPLv3~\S3.
\section{LGPLv3~\S2: Conveying Modified Versions}
\section{Section 2 Conveying Modified Versions} LGPLv3~\S2 continues to require, as LGPLv2.1~\S2(d) requires, that the Library
Section 2 continues to require, as LGPLv2.1 \S2(d) required, that the Library
not be modified to require keys, tokens, tables, or other global non-argument not be modified to require keys, tokens, tables, or other global non-argument
data unrelated to function. This is again stated as a ``good faith effort'' data unrelated to function. This is again stated as a ``good faith effort''
requirement, but failure to cure on notice is strong evidence of the absence requirement, but failure to cure on notice is strong evidence of the absence
of good faith. Use of GPLv3 terms by removal of the additional permission, as of good faith. LGPLv3~\S2(b) permits removal of the permissions entirely (as
provided for by GPLv3 \S7, is the alternate path to compliance. prescribed by GPLv3~\S7); however, such removal reduces the license of the
entire covered work back to pure GPLv3. Thus, exercising LGPLv3~\S2(b) as a
compliance alternative to LGPLv3~\S2(a) likely creates more compliance
obligations than it removes.
\section{Section 3: Object Code Incorporating Material from Library Header Files} \section{LGPLv3~\S3: Object Code Incorporating Material from Library Header Files}
Section 3 disposes entirely [FIXME: with deep technical discussion of LGPLv3~\S3's front matter assures incorporation of smaller header files into
combination mechanisms] in the use of header files and other such forms of non-copylefted object code can proceed unimpeded. More complex
Library material covered by LGPLv2.1 \S5 by stating a rule applicable at the header files (those that do not meet the limitations provided in the
users discretion to all such uses within copyright scope: giving notice that section), can still be incorporated into object code, a copy of appropriate
the library is used in the program and providing copies of GPLv3 and LGPLv3 licensing information must accompany distribution (per LGPLv3~\S3(a--b).
along with the work.
\section{ Section 4: Combined Works} %FIXME: talk about copyrightabilty lines and the like and why the ten line rule.
Section 4 is the combination permission at the heart of LGPLv3. It restates \section{LGPLv3~\S4: Combined Works}
the license limitation provision of LGPLv2.1 \S2 to clarify that the terms on
LGPLv3~\S4 is the combination permission at the heart of LGPLv3. It restates
the license limitation provision of LGPLv2.1~\S2 to clarify that the terms on
the Combined Work may not prohibit user modification of the Library code, or the Combined Work may not prohibit user modification of the Library code, or
the debugging of such modifications to the Library code by means of whatever the debugging of such modifications to the Library code by means of whatever
reverse engineering is necessary. reverse engineering is necessary.
Section 4(d)(0) contains the source provision requirement, for the Minimal LGPLv3~\S4(d)(0) contains the source provision requirement, for the Minimal
Corresponding Source, which ``means the Corresponding Source for the Combined Corresponding Source, which ``means the Corresponding Source for the Combined
Work, excluding any source code for portions of the Combined Work that, Work, excluding any source code for portions of the Combined Work that,
considered in isolation, are based on the Application, and not on the Linked considered in isolation, are based on the Application, and not on the Linked
Version [of the Library].'' The alternative to the provision of source code is Version [of the Library]''. The alternative to the provision of source code is
distribution by way of the ``shared library'' mechanism under \S4(d)(1), distribution by way of the ``shared library'' mechanism under LGPLv3~\S4(d)(1),
described with respect to LGPLv2.1 \S6, above. described with respect to LGPLv2.1~\S6.
In addition, \S4(e) requires the delivery of ``installation information'' In addition, LGPLv3~\S4(e) requires the delivery of ``installation information''
required to install the modified version of the Library in ``user products'' required to install the modified version of the Library in ``user products''
under GPLv3 \S6. Where Library Minimal Corresponding Source is not made under GPLv3~\S6. Where Library Minimal Corresponding Source is not made
available under \S4(d)(1), \S4(e) reaffirms that ``installation information'' available under LGPLv3~\S4(d)(1), LGPLv3~\S4(e) reaffirms that ``installation information''
must still be compliantly delivered under the terms of GPLv3 \S6. must still be compliantly delivered under the terms of GPLv3~\S6.
All other provisions of GPLv3 are in force as previously described, and are All other provisions of GPLv3 are in force as previously described, and are
not excepted by the additional permission granted in LGPLv3. not excepted by the additional permission granted in LGPLv3.
%FIXME-URGENT: end
If the distributor of the combined work intends not to distribute or offer
the source code of the LGPL'd components, the LGPL'd work must be separately
distributed (subject to source code delivery requirements as part of that
separate distribution) and packaged in a ``shared library'' mechanism, which
means that it:
\begin{quote}
\begin{enumerate}[label=4(d)(\arabic*):,ref=LGPLv3s4d\arabic*]
\item uses at run time a copy of the library already present on
the users computer system, rather than copying library functions into
the executable, and
\item will operate properly with a modified version of
the library, if the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
\end{enumerate}
\end{quote}
Taken all together, LGPLv3~\S4's primary implications for redistributors are
two-fold, as follows:
\begin{itemize}
\item If you create a program that links through a shared library mechanism to
a work that is separately distributed under LGPLv3, then you can
distribute the resultant program under a license of your choice and you
need not convey the LGPLv3'd work's source code. If you distribute the
library along with your program, or are the separate distributor of the
work in another context or as another product, you must distribute its
corresponding source under the terms of LGPLv3 or GPLv3-or-later.
\item If you choose to statically link or otherwise combine your program with
an LGPLv3'd work via mechanisms other than a shared library, you may choose your own license for the work provided the
license terms limitations for user modification, reverse engineering and
debugging are met, and given that the LGPL'd components are still
governed by LGPL's terms. You must offer or provide CCS for the LGPL'd components. The source code
material provided must be sufficient to regenerate the combined work with
a user-modified version of the LGPL'd components.
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FIXME-LATER: There should be a chapter on GPL Exceptions generally. % FIXME-LATER: There should be a chapter on GPL Exceptions generally.