1. シェルなどで、コマンドとして実行するだけなら、自由に使える
つまり、呼び出した・呼び出されたアプリは、
パイプなどでお互いに通信していても、完全に別物

A | B | C
仮にBがGPLでも、A,CはGPLの影響を受けない

2. でも、共有ライブラリ(dll, so)内の関数を呼び出すと、
呼び出された関数は、同じプロセス内で動くし、
同一のアプリとなる

3. 個別の関数を呼び出さず、ただGPLアプリを実行して、
返り値だけを受け取る場合は、グレーゾーン
1. に似ている

4. また共有メモリによるプロセス間通信も、
双方は別のプロセスとなるが、GPL側のデータ構造などを、
調べた上で開発しているため、
GPLの恩恵を受けているので、GPLに従うべき