4

Background:

This question is derived from a previous question.

I am writing a Blender add-on which enables the use of Blender with a piece of hardware (i.e., a lightfield display). Blender and the use of the specific Python API, which is required to write Blender add-ons, is licensed under GPL. In order to communicate with the lightfield display on the software level the manufacturer of the display provides a compiled, closed-source DLL under a non-GPL license. Still, the DLL can be downloaded at no cost by everyone wanting to develop software for this display. The add-on cannot provide the main functionality without this DLL.

According to @MadHatters answer, this DLL cannot be considered a system library, because it is not a "Major Component" of an operating system.

Central Issue:

Does GPL allow the use (linking) of such a DLL with a GPL-licensed software, if I only convey the add-on and let it to the user to install the DLL on his/her own?

My current understanding:

In my current understanding it - unfortunately - would be not allowed by GPL. I base my understanding mainly on the following FAQ statement to the question Does the GPL have different requirements for statically vs dynamically linked modules with a covered work?:

Linking a GPL covered work statically or dynamically with other modules is making a combined work based on the GPL covered work. Thus, the terms and conditions of the GNU General Public License cover the whole combination

As I read it, the mere linking of the GPL-licensed add-on with the non-GPL DLL makes this DLL and the add-on a combined work which is to be put under the GPL as a whole. As a consequence, I would need to convey the source code of any non-GPL DLL I link to. No matter, if I convey it with the add-on or demand the user to do install it separately. In contrast to that, the Lesser GPL explicitly states on the very same question:

(2) If you dynamically link against an LGPLed library already present on the user's computer, you need not convey the library's source. On the other hand, if you yourself convey the executable LGPLed library along with your application, whether linked with statically or dynamically, you must also convey the library's sources, in one of the ways for which the LGPL provides.

The differences in the answers implies, that distributing the add-on and linking to the DLL, which is downloaded by the user separately, would be fine - but only in the LGPL, not in the GPL. However, due to Blenders licensing, all Blender add-ons using Blender's Python API need to be under GPL.

Furthermore, in the case of GPL it is stated that:

If you want your program to link against a library not covered by the system library exception, you need to provide permission to do that. [...] Only the copyright holders for the program can legally release their software under these terms. [...] But if you want to use parts of other GPL-covered programs by other authors in your code, you cannot authorize the exception for them. You have to get the approval of the copyright holders of those programs.

First of all, that further underlines that one may not link against a non-GPL library - no matter if it is already on the user's computer or not. Second, since only the copyright holder (in my case: The Blender Foundation) may define such an exception, I cannot. And since my add-on is a derived works of the Blender Python API (since my add-on uses this API), I have no chance to distribute the add-on without violating the GPL.

What I need to be answered:

  1. Is my interpretation correct and am I really not allowed to link any closed-source library which does not fulfill the system library exception to a GPL software, if I am conveying a GPL software of someone else, which I only modified? Is that true, even if the closed-source, non-system DLL is zero-cost and either freely downloadable by the user or already present on the users PC?

  2. Did I grasp the difference between GPL and LGPL correctly?

  3. May I never distribute the add-on or is there something I can do without violating the GPL?

4
  1. Is my interpretation correct and am I really not allowed to link any closed-source library which does not fulfill the system library exception to a GPL software, if I am conveying a GPL software of someone else, which I only modified? Is that true, even if the closed-source, non-system DLL is zero-cost and either freely downloadable by the user or already present on the users PC?

Yes, that is correct. The only way you can link to a closed-source library from GPL code is if it falls under the exception for System Libraries or if all relevant copyright holders* agree to add an exception to the GPL for using that particular library in this context.

The GPL is not concerned with the cost of software (it is entirely acceptable to ask money for GPl-licensed software), but rather with freedom. In particular the freedom to inspect and improve the software you have and to distribute those improvements.

* The relevant copyright holders also come from GPL-licensed libraries.

  1. Did I grasp the difference between GPL and LGPL correctly?

No, you did not, but it is a subtle point that many people miss.

The LGPL is written in such a way that a closed-source project can link to an LGPL library, but the LGPL project itself cannot depend on closed-source software.

From the LGPL license itself:

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

and

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

Section 4 also mentions some restrictions that you must obey, which boild down to that you must inform your users about the presence of LGPL code and give them the right and possibility to replace the LGPL code.

  1. May I never distribute the add-on or is there something I can do without violating the GPL?

If you can convince the vendor of the DLL that there is a business case in supporting your plugin (or other GPL software), you might be able to convince them to relicense the library with a GPL-compatible open-source license. After that is done, you can use that new version of the library in your plugin and release it all.

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.