I know that according to GPLv2 if my non-GPL program links and calls internal functions of a GPL program, my own proprietary program must then be open-sourced (if it's distributed).

But suppose that there's an interpreted script program (e.g. in Python) that is a self-contained, non-binary executable, so I can execute the program like so:

./gplprogram.py --arg 4

That returns some output. Suppose that I want my non-GPL commercial program to use an internal function (i.e. it's not publically exposed) make_calc(value) of gplprogram.py without having to release my proprietary non-GPL program's source code. What I do is modify gplprogram.py to take a parameter --make_calc VALUE that interfaces with the internal make_calc() function.

The result is in my non-GPL program I can call the GPL program like so, and it will return value of make_calc():

./gplprogram.py --make_calc 99

This is not calling an internal routine. It's just calling the program and getting it's output, just like calling echo '2+2' | bc -l in a non-GPL program and using the output wouldn't infect your program with the GPL.

Now I bundle my non-GPL program with the modified gplprogram.py and distribute this to customers. Obviously I release the modified source code of gplprogram.py under the GPL, but am I legally bound to release my proprietary program's source code? If I'm not bound, isn't this a kind of loop-hole?

  • 6
    This question might address some of your concerns. I'm not sure we could call your question a duplicate, though, because you have an additional twist: modifying the GPL program to create a feature only you need.
    – user44761
    Oct 1, 2015 at 14:22
  • 3
    I don't have time to write up a proper answer, but the gist is: that linking is not okay, and consuming the output is, is a myth. Neither the GPL nor the law say anything about linking. It's about whether or not your program is derived from the GPL program, where "derived" is a legal term that is deliberately left open to the interpretation of the courts, precisely in order to avoid creating accidental loopholes due to overly precise wording. Note that e.g. nVidia does something very similar to what you describe: they have a GPL'd Linux kernel module which implements a public API, and a … Oct 1, 2015 at 14:47
  • 3
    … proprietary driver which communicates with this API. Obviously, nVidia's lawyers think this is okay, whereas many Linux kernel developers and some Open Source / Free Software lawyers think it's not. Linus tolerates it because he feels that getting into a fight with nVidia would be a net loss for the Linux end user community, however, that does not necessarily mean that he himself deems it okay. Oct 1, 2015 at 14:50
  • 1
    Is your proprietary program usable and useful without the GPL program? If not, your code might be considered a derivative work.
    – Craig
    Oct 1, 2015 at 19:36
  • 1
    Unless an alternative exists it would be easy to argue that your program is a derivative work.
    – Craig
    Oct 2, 2015 at 16:40


Browse other questions tagged or ask your own question.