The closed source commercial software (CSCS), will just make system(3) calls to GPL applications.
The user machine will run CSCS and it will call these GPL applications, in realtime, in the very same way a user could use the command line and call the very same applications. Even a log of such actions could be provided, and user could replicate these actions manually.
In Java it would be like: Runtime.getRuntime().exec("echo Hello");
In C it would be like: system("echo Hello");
The point is, the CSCS is calling a GPL application to just generate realtime output, and in a predetermined way and hard coded on it, so CSCS depends on GPL app to work.
The GPL application is NOT a library. Is a regular command line application.
And, I am NOT going to distribute any GPL application (neither its sources) packaged together with CSCS. It will just depend that the OS have such GPL apps already installed. Also, CSCS can run with at least the version of the GPL application that was used in the development time (or newer), so it will NOT depend on a specific GPL app version to run.
1) Can the CSCS remain closed source on this sole specific situation?
2) Or should CSCS only use statically generated output from GPL applications, being prevented to use them in realtime, if it wants to remain closed source?
3) Alternatively could be created a LGPL software composed by scripts like ls -l $1
whose parameters would be dynamic data provided by any application including this CSCS. In this case, all the logic of these scripts would be exposed and reusable by anyone, therefore not proprietary. So, such "protocols" would all be LGPL. Can that be done? Or this would simply fall under something like indirect use of GPL sofware, and so GPL would infect every application using it (including this very LGPL software, forcing it to become GPL)?
I would appreciate also excerpts confirming the answer, thanks!
PS.: I have read this Can I use GPL software in a commercial application, and it doesnt seem to answer my specific question.
And, I need to know this before I can consider any kind of realtime GPL application usage on my software.
Linking: https://softwareengineering.stackexchange.com/a/161938/112610
I was unable to avoid linking this: https://meta.stackexchange.com/a/91116/222324
Another Link: https://softwareengineering.stackexchange.com/a/211357/112610
Obs.: (2 days after, considering all commented tips and answers) These may contain the answer:
A) I think this very question could actually be "What is a GPL derived work?" considering the "Networked Systems" section.
B) See "Mere Aggregation" in the GPL FAQ "pipes, sockets and command-line arguments are communication mechanisms".
PS.2: just as a final disclaimer, we all here seem to not be lawyers, and even if you do it all correct in this line, and even if you are sure of your license interpretations, something you do not expect may happen, https://softwareengineering.stackexchange.com/a/158925/112610
system(3)
and what is your program doing. Is the "protocol" between them specific to your application or not?ls
, just usestat
&readdir
syscalls instead. Or consider making all your application as GPLv3 free software