何かしらのソフトウェアのプラグインに、GPLライセンスが適用されているライブラリを使用する際の注意点
不自由なプログラム向けのプラグインにGPLを適用することはできますか? (#GPLPluginsInNF)
この質問を、あるプログラムとそのプラグインが単一の結合されたプログラムと考えられるときと、別々のプログラムと考えられるときを決定するために読んでください。
もしそれらが単一の結合されたプログラムを形成する場合、GPLの及ぶプラグインと不自由なメインプログラムの組み合わせはGPL違反となることを意味しています。しかし、あなたはこの法的問題を、あなたのプログラムのライセンスに自由でないメインプログラムとのリンクを許可する例外を加えることで解決できます。
より (参照: 2025/06/25 01:12)
あるプログラムとそのプラグインが単一の結合されたプログラムと考えられるのはどのようなときですか?(#GPLPlugins)
(中略)
もしプログラムがプラグインと動的にリンクされており、お互いにファンクションコールを使ってデータ構造を共有している場合、それらは単一の結合されたプログラムを形成しているとみなされますので、その単一の結合されたプログラムは、メインプログラムとプラグインの両方の拡張部分として扱われなければなりません。もしプログラムがプラグインと動的にリンクされているが、相互の通信はプラグインの ‘main’ 関数をあるオプションで起動しその帰りを待つことだけに限定される場合、これは境界線のケースとなります。
より (参照: 2025/06/25 01:20)
引用した上記の文章をまとめると、「動的ライブラリ型のプラグインにGPLライブラリをリンクして頒布する際には、プラグインを読み込むホストソフトもGPLと両立するライセンスでなければならない。」です。
よって、プロプライエタリなソフトのプラグインにGPLを適用すること自体は、全てのコードを自分で書いた場合、例外を書くことで可能である。
しかし、プラグインの作成にGPLなライブラリを使用した場合には例外を勝手に追加することができないため、頒布することはできない。
例えば、AviUtlのプラグインの制作時にGPLライブラリを使った場合には、AviUtl自体のソースコード公開義務がプラグイン製作者に課されるわけだが、プラグイン制作者はその義務を果たせないためGPL違反となる。
これについては、AviUtl周りで実際に問題が発生したようです。具体的には、seraphy氏のx264gui.auoにおいてGPLなx264のリンクが行われていたため、GPL違反ではないか。という炎上騒動があったらしいです。
(まだその頃にはAviUtlのことすら知らなかったので、伝聞です。また、憶測が混じっています)
現在のrigaya氏のx264guiEx.auoは、ただexecしてpipeで送ってるだけみたいなので大丈夫なはずです
L-SMASH Works は FFmpeg を静的/動的リンクするが、GPL違反にならないの?
LSW の AviUtl 関連のソースを読んでみると、「GPLで頒布してはならない」と明記しているので大丈夫です。
https://github.com/Mr-Ojii/L-SMASH-Works/blob/master/AviUtl/lwinput.c#L23
GPLの部分のコードは別の実行ファイルとして頒布し、プロセス間通信を使って呼び出せば大丈夫そう?
それはプログラムがどのようにプラグインを呼び出すかに依ります。メイン・プログラムがforkやexecでプラグインを呼び出し、複雑なデータ構造を共有することで密接な通信をしたり、複雑なデータ構造をやりとりする場合、単一の結合されたプログラムとなるでしょう。メイン・プログラムが単純なforkやexecを使ってプラグインを呼び出し、密接な通信を確立しないのであれば、プラグインは別のプログラムと言えるでしょう。
(中略)
共有メモリを使い、複雑なデータ構造で通信することは、動的なリンクとほとんど同等です。
(参照: 2025/06/25 01:12)
GPL FAQでは「結合メカニズム」(「コミュニケーションのメカニズム」)の例として、プロセス間通信、遠隔手続き呼出し (RPC)、カーネル空間・ユーザー空間の通信やシステムコール、パイプ、execによるプロセス起動などを挙げている。これら「結合メカニズム」を用いてGPLなソフトウェアと接続する場合は、個別のプログラムであるため結合ではないとも見なせるが、そのやり取りするデータの如何によって接続先が二次的著作物であると見なされる余地も残されている(「コミュニケーションのセマンティクス」)。これに対する明確な法廷判断はまだない。
GNU General Public License - Wikipediaより (参照: 2025/06/25 01:12)
「複雑なデータ構造」「密接な通信」「ほとんど同等」あたりの解釈が分かれるため、グレーです。
LGPLライセンスが適用されているライブラリはどうなの?
LGPLは動的リンクならライセンス感染しないので、プラグインに用いても大丈夫です。
2025/06/25 追記
私の解釈ミスがあったため、内容を大幅に変更しました。
#GPL
#プログラミング
#AviUtl