『GPLになる』って何!?
先日の無料セミナーで、あるフレーズを久々に聞きました。
GPLのライブラリを使ったら、GPLになるのですね?
確かに、GPLのライブラリをリンクした状態でそのアプリを頒布する場合、そのアプリはGPLの条件を満たすためにソースを開示しなければなりません。そういう意味で、『GPLになる』という表現を使われているのでしょうが、細かく確認すると、正しい表現ではないのですね。
今回はその辺を確認してみましょう。
1. 何が『GPLになる』のか?
あなたが開発したプログラムAが、GPLのライブラリBをリンクして作成したアプリCを作成した場合、プログラムAがGPLになると勘違いしている人がいます。
確かに、アプリCを頒布する場合、GPLで利用許諾する必要がありますが、プログラムAがGPLになるわけではありません。
プログラムAのソース開示が必要になるという意味では、GPLになったかのように見えますが、以下のような違いがあります。
- アプリCを頒布してソース開示したプログラムAについて、その後、プログラムAに非GPLのライブラリDをリンクして作成したアプリEを作成して、これを頒布する場合、プログラムAのソース開示は必要ありません。GPLのプログラムの著作権を何も行使していませんから。
- 同様に、プログラムAがGPLのライブラリBを動的リンクし、作成したアプリFをライブラリBを含まない形で頒布した場合も、プログラムAのソース開示は必要ありません。GPLのプログラムの著作権を何も行使していないからです。
つまり、プログラムBからプログラムAへGPLが感染するような事象はリンクによって起こっているわけではありません。そういう意味で、『GPLになる』という表現は適切でないのです。
2.なぜ、『GPLになる』のか?
まず、前提として、GNUでは以下のように述べています。
ほとんどの自由ソフトウェアのライセンスは、著作権を元にしています。
自由ソフトウェアとは? - GNUプロジェクト - フリーソフトウェアファウンデーション
この著作権を元にしているという意味はどういうことかというと、「著作権法上、プログラムの著作権は著作者(開発者)が専有しています。その著作権を行使する際には、著作者の許諾が必要です。その許諾条件を記載し、条件を満たせば著作権の行使である頒布が許諾されます。」ということです。
GPLのライブラリBを使うプログラムAを開発して、AとBを含む大きなプログラム・アプリCを作成して頒布する場合の条件は、例えば、GPLv2では、以下の条文で許諾されます。
2. あなたは自分の『プログラム』の複製物かその一部を改変して『プログラム』を基にした著作物を形成し、そのような改変点や著作物を上記第1条の定める条件の下で複製または頒布することができる。ただし、そのためには以下の条件すべてを満たしていなければならない:
https://licenses.opensource.jp/GPL-2.0/GPL-2.0.html ただし、節を条に変更
そのときの条件に以下のような条件があります。
b) 『プログラム』またはその一部を含む著作物、あるいは『プログラム』かその一部から派生した著作物を頒布あるいは発表する場合には、その全体をこのライセンスの条件に従って第三者へ無償で利用許諾しなければならない。
https://licenses.opensource.jp/GPL-2.0/GPL-2.0.html ただし、契約書をライセンスに変更
そのため、「その全体」であるアプリCをGPLの条件で受領者に再頒布することを許諾することが、アプリCを頒布する条件になっています。
アプリCの著作者、つまり、ライセンスを指定する権利者は、その開発者ですから、その条件を受け入れることができなければ、ライブラリBを頒布できないだけです。ローカルに実行することは何も著作権侵害になりませんし、ライブラリBを含まない形でアプリC(実態はプログラムA)を頒布することも、ライブラリBの著作権に抵触しませんので、GPLの条件を満たす必要もありません。
『GPLになる』というと、自動的にGPLになるようなイメージになってしまいます。しかし、このような道理でするので、あくまでも、アプリCの開発者であるあなたが、アプリCの著作者として、ライブラリBの再頒布条件の受け入れるか否かを選択するものなので、『GPLになる』という言い方は不適切と言えます。
3. ソース開示が必要な理由
『GPLになる』わけではないのに、プログラムAのソース開示が必要な理由は何でしょう?
「いやいや、アプリCとして受領者にGPLで再頒布を許諾しているからでしょ」と勘違いしている人が多いかと思います。
ソースを公開しないバイナリプログラムにGPLを付けて公開した場合、ソースが入手できませんから、自由ソフトウェア、つまり、オープンソースソフトウェアではありません。しかし、GPL違反とか著作権侵害になるわけではありません。GPLは受領者に再頒布を許諾するものですから、その条件は、自分自身が頒布する行為には掛かりません。
そこで、GPLには、以下のような条件があります。
2.…a) …b)…c)…
https://licenses.opensource.jp/GPL-2.0/GPL-2.0.html ただし、契約書をライセンスに変更
…しかし、あなたが同じ部分を『プログラム』を基にした著作物全体の一部として頒布するならば、全体としての頒布物は、このラインセンスが課す条件 に従わなければならない。
ということで、「全体としての頒布物」であるアプリCを頒布する際には、アプリCにも「このライセンスが課す条件」であるGPLに従わなければなりません。そして、アプリCをバイナリで頒布する場合、GPLv2第3条の条件も満たす必要があります。
- あなたは上記第1条および2条の条件に従い、『プログラム』(あるいは第2条における派生物)をオブジェクトコードないし実行形式で複製または頒布することができる。ただし、その場合あなたは以下のうちどれか一つを実施しなけれ ばならない:
a) 著作物に、『プログラム』に対応した完全かつ機械で読み取り可能なソースコードを添付する。…あるいは、
https://licenses.opensource.jp/GPL-2.0/GPL-2.0.html ただし、節を条に変更
b) 著作物に、いかなる第三者に対しても、『プログラム』に対応した完全かつ機械で読み取り可能なソースコードを、頒布に要する物理的コストを上回らない程度の手数料と引き換えに提供する旨述べた少なくとも3年 間は有効な書面になった申し出を添える。…
そのため、バイナリ形式でアプリCを頒布する場合は、アプリCに含まれるライブラリBはもとより、プログラムAも「ソースコードを添付する」か「申し出を添える」ことにより、この条件を満たす必要があります。なお、このa)またはb)の条件を満たすことを、長いので、合わせて私は「ソース開示」と呼んでいます。
2024.11.20 姉崎章博