2

According to the FSF "The Lesser GPL permits use of the library in proprietary program". Is this permission granted in cases where an LGPL-3.0 licensed work links against a proprietary library?

Both GPL-3.0 and LGPL-3.0 grants specific permissions ("rights") from a copyright holder of a work to other parties or licensees. Some of the permissions granted by these licenses have specific conditions which must be met for the permission grant to be in effect. If these conditions are not met then permissions contingent on them are also not granted.

This question seeks to clarify whether the requisite conditions for any of the permissions granted by LGPL-3.0 are met if an LGPL-3.0 licensed work links against a proprietary library.

Specifically is a licensee of an LGPL-3.0 licensed work that links against a proprietary library permitted do any of the following with the LGPL-3.0 licensed work:

  • convey modified source versions of the LGPL-3.0 licensed work.
  • convey non-source forms of the LGPL-3.0 licensed work.

And if so, under what conditions and are these permission to do this granted by LGPL-3.0 (as opposed to GPL-3.0)

The arrangement in question can be represented visually as:

<code>question-cls-x_lgpl-l_propr.plantuml</code>

This implies that the LGPL-3.0 licensed work uses an interface provided by the the proprietary library:

<code>question-cmp-x_lgpl-l_propr.plantuml</code>

For examples of how the arrangement in question can occur, consider the following examle arrangements:

  • Example Arrangement 1: ApplicationA {Proprietary} links against licensed LibraryD {LGPL-3.0} which links against LibraryE {Proprietary}:

    <code>question-cls-a_propr-l_lgpl-l_propr.plantuml</code>

    This implies that ApplicationA {Proprietary} uses an interface provided by LibraryD {LGPL-3.0}, and that LibraryD {LGPL-3.0} uses an interface provided by LibraryE {Proprietary}:

    <code>question-cmp-a_propr-l_lgpl-l_propr.plantuml</code>

  • Example Arrangement 2: ApplicationB {LGPL-3.0} links against LibraryD {LGPL-3.0} which links against LibraryE {Proprietary}:

    <code>question-cls-a_lgpl-l_lgpl-l_propr.plantuml</code>

    This implies that ApplicationB {LGPL-3.0} uses an interface provided by LibraryD {LGPL-3.0}, and that LibraryD {LGPL-3.0} uses an interface provided by LibraryE {Proprietary}:

    <code>question-cmp-a_lgpl-l_lgpl-l_propr.plantuml</code>

  • Example Arrangement 3: ApplicationC {LGPL-3} links against LibraryE {Proprietary}

    <code>question-cls-a_lgpl-l_propr.plantuml</code>

    This implies that ApplicationC {LGPL-3} uses an interface provided by LibraryE {Proprietary}:

    <code>question-cmp-a_lgpl-l_propr.plantuml</code>

So the question applied to these examples arrangements:

  • Example Arrangement 1 and 2:

    Does LGPL-3.0 grant a licensee permission to convey "modified source versions" or "non-source forms" of LibraryD {LGPL-3}. Further, are there any other permissions, pertaining to LibraryD, that LGPL-3.0 grants that are not already granted by GPL-3.0

  • Example Arrangement 2:

    Does LGPL-3.0 grant a licensee permission to convey "modified source versions" or "non-source forms" of ApplicationC {LGPL-3}. Further, are there any other permissions, pertaining to ApplicationC, that LGPL-3.0 grants that are not already granted by GPL-3.0.

In this question "proprietary library" refers to a library that is NOT licensed under an LGPL-3.0 and GPL-3.0 compatible license and which, additionally, is NOT licensed under a license that is considered an open source or free software license.

No other licenses than those explicitly mentioned here should be considered in the answer, this includes open source licenses on proprietary works (they would not be proprietary if such licenses existed) or exceptions such as linking exceptions.

My current understanding is that is that at least some permissions granted by LGPL-3.0 are contingent on directionality of linking as a consequence of the definitions used by LGPL-3.0, such as:

A “Combined Work” is a work produced by combining or linking an Application with the Library.

And that those permissions would not be granted in any of the example arrangements.

Related Questions

  • 1
    Your interpretation on the directionality of linking in the LGPL matches with how I interpret that clause of the license. – Bart van Ingen Schenau Jan 31 at 12:13
  • @BartvanIngenSchenau, but a court of law might disagree... – vonbrand Feb 27 at 13:20
  • 2
    @vonbrand, a court of law may disagree with just about anything. – Bart van Ingen Schenau Feb 27 at 13:26
  • 1
    @vonbrand I think if you are not reasonably sure if litigation with regards to a certain action will rule in your favor then you should avoid the action. Just because you may get lucky in court could still result in years of very costly and unpleasant litigation. – Iwan Aucamp Feb 27 at 14:15
2

My understanding is that only permission, pertaining to the LGPL-3.0 licensed work, granted by LGPL-3.0 that is clearly applicable to the arrangement in question is the permission to upgrade to a later version of LGPL (granted in Section 6).

All other permissions granted by LGPL-3.0 seems to me to be contingent on conditions that are not present to the arrangement in question (i.e. if an LGPL-3.0 licensed work links against a proprietary work).

The reasoning behind my understanding on this matter follows below.

The question then whether a licensee of an LGPL-3.0 licensed work is permitted convey "modified source versions" or "non-source forms" of said work becomes a question of whether these permissions are granted by GPL-3.0. On this matter my understanding is that GPL-3.0 does not grant these permissions to licensees, this question and my understanding can be found in this stackexchange question: Licensing software that uses a proprietary library under GPL-3.0 without linking exceptions: what are the implications?.

So in summary: My understanding is that neither LGPL-3.0, nor GPL-3.0, grants permission to licensees to convey "modified source versions" or "non-source" versions of a LGPL-3.0 licensed work that links against a proprietary library.

LGPL-3.0 definitions and directionality

LGPL-3.0 defines the following terms LGPL-3.0 / Section 0: Additional Definitions.:

  1. “The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.

  2. An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.

  3. A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”.

These definitions are in the arrangement that can be seen in this diagram:

answer-cmp-lgpl.plantuml

Figure 1: LGPL-3.0 arrangement ▲

In this arrangement the following is clearly directional:

makes use of an interface provided by the Library

However, in the arrangement in question, there is not something (i.e. another work, proprietary) «[making] use of an interface provided by the Library».

Instead, in the arrangement in question, there is something (i.e. another work, proprietary) «providing an interface used by the Library»:

answer-cmp-question.plantuml

Figure 2: Arrangement in question ▲

The arrangement in question differs from the LGPL-3.0 arrangement in that the roles (i.e. provider of interface vs user of interface) of the proprietary work and LGPL-3.0 licensed work are reversed.

The arrangement in question is thus not described by the LGPL-3.0 definitions and permissions granted by LGPL-3.0 that are contingent on those definitions are therefore also not granted for the arrangement in question.

Given this, sections can be eliminated for consideration if the permissions they grant are contingent on the LGPL-3.0 definitions or LGPL-3.0 arrangement.

Eliminated Sections

LGPL-3.0 / Section 1: Exception to Section 3 of the GNU GPL.

You may convey a covered work under sections 3 and 4 ...

This is section applies only if section 3 and 4 is applicable and as is shown below those sections are not applicable.

LGPL-3.0 / Section 2: Conveying Modified Versions.

If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility [...], then you may [...]

The permissions granted by this section are contingent on the definition of an "Application". Since nothing in the arrangement in question satisfies the definition of an "Application" the permissions granted by this section are also not in effect.

LGPL-3.0 / Section 3: Object Code Incorporating Material from Library Header Files.

The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice [...]

Similarly to section 2, The permissions granted by this section are contingent on the definition of an "Application". Since nothing in the arrangement in question satisfies the definition of an "Application" the permissions granted by this section are also not in effect.

LGPL-3.0 / Section 4: Combined Works.

You may convey a Combined Work under terms of your choice [...]

The permissions granted by this section are contingent on the definition a "Combined Work". The definition of a a "Combined Work" in turn is contingent on the definition of an "Application".

Since nothing in the arrangement in question satisfies the definition of an "Application" there can also not be something in the arrangement in question that satisfies the definition of a "Combined Work". Consequently the permissions granted by this section are not in effect.

Remaining sections

This elimination process leaves only Section 5 and Section 6:

LGPL-3.0 / Section 5: Combined Libraries.

You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if [...]

Neither "library facility" nor "side by side" (pertaining to library facilities) are terms of art in software engineering, there is also no clear definition in LGPL-3.0 of these terms. Consequently what would qualify as "side by side" and what would not qualify as "side by side" is somewhat open to interpretation.

There are some snippets from LGPL-3.0 that we can use to try and piece together what side by side means pertaining to library facilities:

[...] place library facilities that are a work based on the Library side by side in a single library [...] ~ LGPL-3.0 / Section 5

[...] an Application that uses the facility [...] ~ LGPL-3.0 / Section 2

From this we can gather:

  • A library can have one or more library facility.
  • Two library facilities can be arranged in a manner which we can say they are side-by-side.
  • Two library facilities can be arranged in a manner which we can say they are not side-by-side.
  • A library facility can be used by something external to the library.

It also seems reasonable:

  • A library facility can use another library facility.

We can now consider the following arrangements of two library facilities:

  • Option A

    <code>answer-cls-facilities_sidebyside_a.plantuml</code>

    Figure 3: Option A ▲

    If we assume a library facility to be analogous to a function in Python, then we can represent the same in python as:

    def lgpl_facility_a():
        pass
    
    def lgpl_facility_b():
        pass
    

    That is, the neither of the two facility uses the other.

  • Option B

    <code>answer-cls-facilities_sidebyside_b.plantuml</code>

    Figure 4: Option B ▲

    In python:

    def lgpl_facility_a():
        lgpl_facility_b()
    
    def lgpl_facility_b():
        pass
    

    That is, one of the two facility uses the other.

In these figures "LGPL-3.0 Library Facility" is shorthand for "library facilities that are a work based on the Library".

The question now is, does side to side refer to the arrangement in Option A or Option B.

My view is that Option A is side by side and Option B is not side by side. Since these terms are not well defined I am sure other views on the meaning of "side by side" is also reasonable.

If we now consider what a "combined library" might look as extensions of these options:

  • Combined library: Option A

    <code>answer-cls-facilities_combined_a.plantuml</code>

    Figure 5: combined library: Option A ▲

    In python:

    def lgpl_facility_a():
        pass
    
    def proprietary_facility_a():
        pass
    
    def lgpl_facility_b():
        pass
    
    def proprietary_facility_b():
        pass
    

    That is, LGPL-3.0 facilities do not use proprietary facilities and proprietary facilities do not use LGPL-3.0 facilities.

  • Combined library: Option B

    <code>answer-cls-facilities_combined_b.plantuml</code>

    Figure 6: combined library: Option B ▲

    In python:

    def lgpl_facility_a():
        proprietary_facility_a()
    
    def proprietary_facility_a():
        pass
    
    def lgpl_facility_b():
        pass
    
    def proprietary_facility_b():
        lgpl_facility_b()
    

    That is, at least some LGPL-3.0 facilities use proprietary facilities and/or some proprietary facilities use LGPL-3.0 facilities.

From these options, Option B corresponds to the arrangement in question, while Option A does not.

The best answer I can devise to whether this section applies to the arrangement in question (and thus grants any permissions applicable to the arrangement in question) is that it does not clearly apply.

The reason why it does not clearly apply is because "side by side" very well could be interpreted to be Option A only and not Option B - this is how I interpret it.

If the section does not clearly apply, and does not clearly grant any permission, then it should not be assumed to apply either. It could apply, but whether or not it does apply has to be determined by litigation and until such a determination is made the permission cannot be said to be granted.

LGPL-3.0 / Section 6: Revised Versions of the GNU Lesser General Public License.

This section seems to apply regardless of arrangement, though the only permission it grants it conditional permission to use later versions of LGPL. Subsequent versions of LGPL-3.0 could change the answer but the question is about LGPL-3.0 so other versions will not be considered.

Views of the FSF

I think the FSF would favour my understanding for the following reasons:

  • The FSF would view a LGPL-3.0 licensed work that links against a proprietary work as "off limits to the Free World":

    Can I write free software that uses nonfree libraries? (#FSWithNFLibs)

    If you do this, your program won't be fully usable in a free environment. If your program depends on a nonfree library to do a certain job, it cannot do that job in the Free World. If it depends on a nonfree library to run at all, it cannot be part of a free operating system such as GNU; it is entirely off limits to the Free World.

  • The stated intent of GPL-3.0 is:

    to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.

  • The stated intent of LGPL-3.0 is:

    The Lesser GPL was designed to fill the middle ground between these cases, allowing proprietary software developers to use the covered library, but providing a weak copyleft that gives users freedom regarding the library code itself.

Given this, it seems likely that LGPL-3.0 was not intended to allow "proprietary software developers" to turn free software into something "off limits to the Free World". And this would be permitted if licensees are allowed to convey "modified source versions" and "non-source forms" as they could take a "free software" library, enhance it but make the enhancements depend on proprietary software thus making it "off limits to the Free World".

This kind of thing also seems like exactly what LGPL-3.0 / Section 2: Conveying Modified Versions. is trying to prevent with conditions in subsection b.

0

LGPL is intended to provide free (as in FSF-free) software that can be used with closed (propietary) software, as a compromise (they'd like all software to be free, they compromise in that only a part of the work is free instead of nothing at all, hoping to encourage use of the free part by others). Thus the uses above are legal, even the intended (if not really desired) uses.

Thus, you are allowed to use the above (GPL/LGPL doesn't/can't regulate private use), whenever you distribute the combination to a client, you must tell them that a part is LGPL, and (as the license details) give access to the exact source code (as modified by you to work with the closed part, if applicable) used to (re)create the free part and rebuild the whole. Common courtesy is to give complete build machinery and any documentation to replicate the original, if so desired (I believe the license requires this).

IANAL, just an enthusiast who learned a bit about software licensing and has followed flamewars around it.

  • If we take a specific action, such as conveying modified source versions of the LGPL-3.0 licensed work that links against a proprietary library - do you see such action as being permitted by GPL-3.0 or LGPL-3.0? And could you clarify what sections from which? – Iwan Aucamp Feb 27 at 14:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.