6

In my case we developed several software components that work together to build the final system. Now I want to release my developments under the GPLv3 license.

When checking the dependencies I discovered that there are some static links to other components that are required to provide a runnable implementation. Unfortunately these source code packages are not open source and therefore cannot be published.

Do any methods exist to solve such a situation in which components of a framework are to be published but are closely linked to others that cannot be made available in a public repository?

6
  • Can you explain more clearly what exactly you mean by "link"? In different programming languages this will mean different things, and sometimes it will matter if it's statically or dynamically linked. Jul 10, 2015 at 13:21
  • Thanks to @curiousdannii - I edited the question to be more concise Jul 10, 2015 at 13:27
  • @curiousdannii, I doubt that the legal definition of "derivative work" (which is what predicates the legal conditions for what you're allowed to do) depends on whether the components are statically or dynamically linked. They need not even be linked. As long as the free works depends on the non-free work (i.e. the free work will not function without it), the legal defintiuon of "derivative" is satisfied. Jul 10, 2015 at 13:30
  • 3
    @FreeRadical: The FSF sees every link (static or dynamic) as creation of a derivate, but other experts have a different opinion. As far as I'm aware the question of dynamic linking so far wasn't tested in court.
    – Mnementh
    Jul 10, 2015 at 13:32
  • @FreeRadical Really? Producing a single binary vs using a standard OS-supplied library seems to be very different circumstances to me, and I thought this was reflected in some of the FLOSS licenses. Jul 10, 2015 at 13:32

2 Answers 2

3

There is no way to combine non-free code components with free software with a copyleft license. The reason is that any such combination will be a derivative work of both, and since the terms are mutually incompatible, that would be illegal.

This follows directly from text of the GPL (the quote below is from GPL version 2), but similar language is in GPL version 3:

This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law. (my emphasis).

Please note that copyright law does not deal with computer science technicalities such as various methods of linking, a derivative work is a work that depends on another work, and cannot exist without that other work being present. It is this functional dependency that makes the composite a derivative, and not the method used to combine the components.

This is also made clear by the FSF in the GPL FAQ:

Does the GPL have different requirements for statically vs dynamically linked modules with a covered work? (#GPLStaticVsDynamic)

No. 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 always, Wikipedia can be relied upon to confuse matters. However, the FSF FAQ is written by lawyers, the Wikipedia is written by anybody that has an opinion about something.)

What you need to do is to develop free replacements for all the non-free components. This has been done in several FLOSS projects in the past.

3
  • This is what I was afraid of! Nevertheless thank you for clarification. Jul 10, 2015 at 13:30
  • I'm not sure that "functional dependency" is the correct way to interpret "derivative work under copyright law". After all, if I change all the names in Harry Potter and redistribute it, copyright law says that is a derivative work. And if I publish a book of commentary about Harry Potter, that is probably not a derivative work even though its meaning and value "depends on" the original Harry Potter text. But certainly a compiled binary which was produced from some closed-source code is a derivative work of that code under copyright law.
    – Ben
    Aug 24, 2015 at 3:26
  • As @Ben explains in his answer, this answer is incorrect. GPL projects can legally link and they do it all the time. Tons of GPL'd code links against proprietary Mac and Windows libraries. Aug 24, 2015 at 7:21
4

You should be able to publish your source code under the GPL plus instructions for the users themselves to obtain the non-GPL work independently and compile the software themselves.

This works because the GPL imposes no restrictions on using works that are not distributed. If your users create the linked program themselves then they have a work they cannot legally distribute under the GPL, but they can use it. Plus they can modify and redistribute the original package of code + instructions according to the terms of the GPL.

Of course, this means you cannot distribute your software in a form that's actually useful out-of-the-box. It's also a bit against the spirit of what people expect from open source software (something that is a complete work of software, which they can inspect and modify as they like), so you may disappoint some of your potential audience.

If you automate the "obtain the other work and compile the combined software" step for user convience, at some point the automation could be seen as a form of "linking", making your work a derivative of the non-GPL code and thus impossible to distribute under the GPL. After all, if you take this point to extremes dynamic linking is nothing more than instructions to find a separate binary and produce a combined work (in memory), that is carried out on the users system at the user's initiation, not by you. Would a Makefile that builds the combined program count as linking? What if it was a bash invoking the separate projects build scripts, and then calling the linker? A web page listing commands to copy and paste into a shell? I have no idea where the line "really" is from a legal standpoint, and to the best of my knowledge it depends on what judges will decide in court cases that haven't happened yet.

4
  • If the automated program does not contain any copyrightable material from the GPL works, it cannot possibly be a derivative work thereof. If the actual linking process is performed by the recipient of the software, the linking process would produce a derivative work which could not legally be distributed, but could nonetheless be legally produced because it wouldn't be distributed. The fact that the linking was performed by control of software supplied by someone other than the recipient would be irrelevant.
    – supercat
    Oct 11 at 16:22
  • As for respecting the spirit of the GPL, if a recipient of such a package would be able to arbitrarily change any aspect of the GPL portion they don't like and build and use the overall package substituting their version of the GPL portion, I'd view that as fitting precisely with what the GPL is supposed to facilitate. So long as the closed-source software does not create impediments to doing that, I'd see no violation of letter nor spirit of the GPL.
    – supercat
    Oct 11 at 16:24
  • @supercat " If the automated program does not contain any copyrightable material from the GPL works, it cannot possibly be a derivative work thereof." That's what I think too, but the exact same logic applies to things that people usually consider to produce a derivative work controlled by the GPL (e.g. writing source code that is intended to be dynamically linked to a GPLed library; usually the source code contains no substantial copy of any part of the library and thus would not be a derivative work of the library unless the intention for automated linking itself counts as derivation).
    – Ben
    Oct 12 at 9:23
  • I'm aware that some people make such claims about programs that are designed to interface with documented interfaces of other programs being derivative works of those other programs, but that contradicts court findings that the low-level details of interfaces are not in and of themselves copyrightable works of authorship. Further, a set of machine instructions to automatically link programs is another step further removed from anything copyrightable within GPL code than other kinds of things that have already been adjudicated.
    – supercat
    Oct 12 at 15:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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