4

According to the GPL license, when a piece of software links to a GPLed library, the distributed binaries must be licensed under GPL.

There are some corner cases, for example when instead of linking directly, you use a system of plugins, as described here. https://www.gnu.org/licenses/gpl-faq.html#GPLPlugins

There are also some loopholes that allow to use GPL software on cloud services, as the binaries are not distributed and they run on the cloud instance. This is addressed by the AGPL license.

What is the situation when distributing the software in two pieces? One piece (lets call it A) uses the GPL library, and therefore is licensed as GPL, and another piece (B) which is linked to the first using some kind of local network communication.

2
  • Could you please describe how closely the parts A and B are linked together? A way to determine that is described in the GPL FAQ here. I think the FSF believes that it only depends on this criterion, and not if it runs on one or more CPUs, servers, clusters, etc. Feb 22 at 11:24
  • Also note that this is a very FSF-typical interpretation, and courts are bound by the license text, not by some third party (which just randomly happens to have later added explanations to their website, but not to the license text) having thoughts on the license, after having clearly expressed a bias towards wanting GPL being as "infectious" as possible. I personally treat the FSF website with much mistrust. Dear FSF: You're the author of the license; if you want that license to mean something specific, put that in the license. Feb 22 at 11:30

2 Answers 2

2

According to the GPL license, when a piece of software links to a GPLed library, the distributed binaries must be licensed under GPL.

The license says that derivative works need to be GPL-licensed.

Whether or not linking (and in which forms that happens) implies forming a derivative work is not really consistently answered by relevant court cases, even in the U.S., and let's not get started on the fact that there's more jurisdictions that the U.S.

I'd say that you'd be doing well playing it save, and assume the strictest interpretation (the FSF one), but if you have vested business interest in using a different interpretation, then you might be driven to other conclusions (which I don't necessarily share); there is more than one case of precedence for that working out well so far for the people doing it. I think the most prominent case might be Canonical (the Ubuntu company) shipping precompiled kernel modules of CDDL code (for ZFS support). So, because the GPL certainly isn't the best-written license out there, there's a lot of room for individual lawyers and judges to come to different conclusions.

There are some corner cases, for example when instead of linking directly, you use a system of plugins, as described here. https://www.gnu.org/licenses/gpl-faq.html#GPLPlugins

I personally do not share the opinion of the FSF here: if I write, say, a video editor program that has video effect plugins, then the video editor doesn't become a derivative work of the "replace video with blackness" GPL plugin that I might add. FSF's wording is pathologically vague; they argue through "complex data structures"; I'd call a Ethernet/IP/TCP/HTTP2/HTML5+JSON stream a "complex data structure", but it's the classical example for where it's OK to use a non-GPL program (a browser) with a GPL web server. "Complex" is an extremely relative term and has barely any normatively useful character.

There are also some loopholes that allow to use GPL software on cloud services, as the binaries are not distributed and they run on the cloud instance.

That's not a loop hole – that's intentional. The output of GPL programs were never meant to be mandatorily GPL-licensed.

What is the situation when distributing the software in two pieces? One piece (lets call it A) uses the GPL library, and therefore is licensed as GPL, and another piece (B) which is linked to the first using some kind of local network communication.

See the link I gave to the discussion what constitutes derivative works. I'd argue whether the method of linkage (static, dynamic linking, plugin derivative work, shared memory, network, printing-mailing-scanning…) has zero bearing on whether something constitutes a derivative work. Lawyers do argue the same way, but also the opposite way. It seems to be currently not court-settled in any relevant jurisdiction I'm aware of.

10
  • 1
    That's not a loop hole – that's intentional. The output of GPL programs were never meant to be mandatorily GPL-licensed. So if the output of B is text (for example) and stored as a file in /tmp and then read by A, I would say its fine. Of course, this depends on courts, and I'm just a developer, so its difficult for me to judge or even know what is the state of the art. I was just interested in this topic
    – jjcasmar
    Feb 22 at 12:00
  • @jjcasmar I say that output is not subject to the GPL is clearly established, in the GPL's text itself: "The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work." I.e., only if the output is a derivative of GPL code itself. That's not the case for e.g. text files you generate from GNU emacs, or programs compiled with GCC, or man pages generated by GNU gruff, or log files written by GPL programs or… Feb 22 at 12:09
  • 1
    and by the way, therein lies one of the reasons why I think the whole discussion whether (and which forms of) linking constitute building a "derivative work" is completely moot. Seriously, what's the difference between the output of a piece of software in a RAM area or a file? What if the computer the software runs on is a microcontroller and doesn't have a file system? The question is "Is the work a derivative of the GPL work?" not "Can I have a theoretical discussion on all ways software can interact which matters to computer scientists, but not to copyright lawyers or common people?". Feb 22 at 12:12
  • 1
    IMHO: a frontend talking HTTP to a thin GPL-backend just written for the purpose of converting calls to a C library that is under GPL to and from HTTP/REST requests is a derivative work. Linking to a GPL C library just to fulfill that library's needs makes the overall work not necessarily a derivative work of the GPL code. (that's not directly the same, but a bit like the Google vs Oracle Java lawsuit: just because you implement and use an API doesn't mean your work is stealing the original author's intellectual property). Attention, I mean it when I say "IMHO"; this is personal. Feb 22 at 12:15
  • Thanks for all the insights. I guess this is why I didn't studied laws :)
    – jjcasmar
    Feb 22 at 12:20
2

OP: What is the situation when distributing the software in two pieces? One piece (lets call it A) uses the GPL library, and therefore is licensed as GPL, and another piece (B) which is linked to the first using some kind of local network communication.

It's clearly answered by this GPL FAQ entry, especially the bolded part below.

Inter-process communication, such as communication over sockets, would, in most cases, make B an aggregate of A, and so the GPL license of A will not apply to B.

What is the difference between an “aggregate” and other kinds of “modified versions”?

An “aggregate” consists of a number of separate programs, distributed together on the same CD-ROM or other media. The GPL permits you to create and distribute an aggregate, even when the licenses of the other software are nonfree or GPL-incompatible. The only condition is that you cannot release the aggregate under a license that prohibits users from exercising rights that each program's individual license would grant them.

Where's the line between two separate programs, and one program with two parts? This is a legal question, which ultimately judges will decide. We believe that a proper criterion depends both on the mechanism of communication (exec, pipes, rpc, function calls within a shared address space, etc.) and the semantics of the communication (what kinds of information are interchanged).

If the modules are included in the same executable file, they are definitely combined in one program. If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.

By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

Section 5 of GPLv3 talks about "aggregates":

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

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.