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?

  • 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. – curiousdannii Jul 10 '15 at 13:21
  • Thanks to @curiousdannii - I edited the question to be more concise – Hans Demski Jul 10 '15 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. – Free Radical Jul 10 '15 at 13:30
  • 2
    @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 '15 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. – curiousdannii Jul 10 '15 at 13:32
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.

  • This is what I was afraid of! Nevertheless thank you for clarification. – Hans Demski Jul 10 '15 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 '15 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. – Abhi Beckert Aug 24 '15 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.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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