Let's say I have:

  1. A GPL module with linking exception.
  2. A non-GPL module.
  3. A pure-GPL module.

I know that module 1 can be linked with module 2.

My questions are:

  • Can I link module 1 with module 3? That is, module 1 remains GPL-compatible?
  • Can I link module 1 with modules 2 and 3 simultaneously?
  • More specifically, can module 1 read data from module 3 and pass it, in a different format, to module 2?
  • Under what circumstances that would be possible? That is, what interfaces (pipes, shared ring buffers...), what communication semantics would be appropriate, etc.

And let's say that I own modules 1 and 2, so I can make any legal changes or exceptions I want while maintaining the essence of the example.

Briefly, can GPL with linking-exception act as an interface between GPL and non-GPL modules?

up vote 4 down vote accepted

The GPL with some linking exception is still just the GPL, but with extra permissions. These extra permissions only apply to a specific module, and they do not extend to other modules that are only licensed under the GPL, without this extra permission. Therefore, you cannot create your own modules with a linking exception as an isolation layer between GPL and non-GPL modules. You always have to consider the work as a whole.

To discuss your specific examples:

  • Can I link module 1 with module 3? That is, module 1 remains GPL-compatible?

    If you combine GPL+exception with GPL, the combination is GPL. As you must comply with both licenses at the same time, the GPL-without-exception is relevant.

  • Can I link module 1 with modules 2 and 3 simultaneously?

    No, this is not possible. Again, you must comply with all licenses at the same time. So the GPL still applies. You can only publish this combination if you license it under the GPL.

  • More specifically, can module 1 read data from module 3 and pass it, in a different format, to module 2?

    No, this is probably not sufficient. All the modules together still form one program.

  • Under what circumstances that would be possible? That is, what interfaces (pipes, shared ring buffers...), what communication semantics would be appropriate, etc.

    The “mere aggregation” concept is about distributing separate programs together. It does not seem to apply here.

    If the non-GPL code is clearly a separate program, then inter-process communication is fine. E.g. you could wrap the GPL-module (module 3) with a server or command line interface (e.g. module 1). This program must still be licensed under the GPL if you distribute it. But now your module 2 (the proprietary program) can communicate with the wrapper using some IPC mechanism (e.g. pipes or sockets).

Without discussing a details of the GPL, it is easy to get a sense of whether the GPL considers some usage OK if we consider the impact on the freedoms of end users:

  • Is the user free to study the GPL program in its entirety? If you were combining it with non-GPL code, this would no longer be given. If the non-GPL code is a separate program, that is OK.

  • Can the user modify the GPL parts? If modification of the GPL code would require access to the non-GPL code, this wouldn't be possible. However, a separate program can be modified independently.

    This also requires that the two programs communicate over some sensible interface. If they exchange internal data structures or communicate over shared memory, this could indicate that they form one program and are not separate.

  • Can the user distribute copies of the GPL program? If the program were to include non-GPL parts, this would no longer be possible.

The usual disclaimer: This answer follows the position of the FSF, i.e. the GPL authors. They assume that linking two modules together into a single program (even if this linking happens at runtime) creates a derived work, so copyright applies and the GPL license can be enforced for the combined program. However, it is not the GPL but your applicable copyright law which defines what a derived work is. It is therefore possible that in your jurisdiction, using the GPL module through its public API does not create a derived work and you are not bound by the license for the combined software. But unless you know for sure, it is best to play it safe and assume that the GPL does in fact apply.

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.