オープンソース ライセンスの問題は単純であると同時に複雑であり、注意しないと細部に巻き込まれやすくなります。
少し前に、2 つのライセンスに互換性があると言うとき、何を言っているのかという問題に遭遇しました。どのように判断するか?
たとえば、最も一般的な 2 つのライセンス、MIT と GPL-3.0、1 つは緩いライセンス、もう 1 つは厳格なライセンスです。これらには互換性がありますか?
互換性がある場合、なぜ互換性があるのでしょうか?
長い間考えた後、私はそれを理解しました。
1. ライセンスの互換性とは何ですか?
いわゆる相性とは、二つの物を一緒にすると衝突しないか、一緒にできるかどうかのことを指します。
例えば:
ソフトウェア A のライセンス要件は次のとおりです。私のソフトウェアを使用する場合、毎日 3 キロメートル以上走らなければなりません。
ソフトウェア B のライセンス要件は、私のソフトウェアを使用し、1 日あたり 1 キロメートルを超えて走行することはできません。
これら 2 つのソフトウェアは、ライセンス要件が競合するため、一緒にリリースできません。
B のライセンス要件が次のように変更されたとします。
私のソフトウェアを使用する場合は、毎日 5 キロ以上走らなければなりません。
競合はなく、A と B を結合し、B のライセンスに従ってリリースできます。
2. MIT と GPL には互換性がありますか?
さて、本題に戻りましょう。
たとえば、ソフトウェア A は MIT、ソフトウェア B は GPL-3.0 (以下、GPL) ですが、この 2 つのソフトウェアをまとめて C としてリリースすることはできますか?
AとBの間には呼び出し関係があり、無関係にまとめられるわけではないことに注意してください。
私は3つの可能性を考えました:
C は非常に大きく、主なコンポーネントは B で、A はモジュールとしてのみ使用されます。
著者は非常に小さな B を書き、非常に大きな A を呼び出しました。
著者は A の何かを直接変更し、それを B と呼びます。
これらの状況は非常に異なって見えますが、ライセンスの観点からは本質的に同じであり、すべて A+B=C です。
では、C は何とともに配布されているのでしょうか? また、次の 3 つの可能性があります。
C は GPL に基づいてリリースされています
MIT とともにリリースされた C
C は、公共の場であっても、他のプロトコルとともにリリースされます。
どれが機能し、どれが機能しないのでしょうか? 私の答えは次のとおりです。
MIT が許可しているため、C は GPL に基づいてリリースできます。
C は、MIT でリリースすることはできません。GPL では、C 独自の派生物を MIT でリリースすることが許可されていないためです。
他のライセンスを使用したい場合は、詳細に分析する必要があり、AGPL (これは GPL-3.0 の第 13 条に記載されています) を
使用できる可能性がありますが、おそらく使用できないでしょう。
3、分析する
まず第一に、次のことを理解する必要があります。
C は A の派生であり、B の派生でもあります。
A からは A を B に加えて C が形成され、B からは B に A を加えて C が形成されるためです。
たとえば、B には 1,000 行があり、A には 10 行しかないなど、不合理に感じることもありますが、C が A の派生であると言うのは直感的に間違っています。
しかし、定義上、これは事実であり、A はそれ自体が 10 行から 1010 行に変更されたと完全にみなすことができます。
C は派生版なので、派生版の 2 つのライセンスの要件を見てみましょう。
MIT のデリバティブに対する要件は、A の著作権と MIT ステートメントを反映することです。
派生物に対する GPL の要件は、C 全体が GPL に基づいてリリースされなければならないということです。
これら 2 つの要件は矛盾しますか?
衝突しないでください。C を GPL に従って公開し、同時に A の著作権と MIT ステートメントを反映することができます。
4. 具体的にはどのような規定が関係していますか?
MIT 契約をよく読んでください。その要件には次のものが記載されています。
出典: https://opensource.org/licenses/MIT
英語を読みたくない場合は、私が書いた中国語版の解釈を読むことができます: MIT協定の契約の精神について語る
実は、MITは著作権表示、MITライセンスの表示(MITへのリンクの表示もOK)
が義務付けられています。
さらに、MIT はサブライセンス (サブライセンス) を許可しているため、C (内部の A を含む) を GPL に基づいてリリースする合理的な根拠があることに注意してください。
GPL 契約を詳しく見てみましょう。第 2 条によると、GPL はサブライセンスを許可していません。つまり、派生製品は GPL のみを使用できます。
引用元: https://spdx.org/licenses/GPL-3.0-only.html
第 5 条によれば、デリバティブ全体として GPL に基づいてリリースする必要があるため、C も GPL に基づいてリリースする必要があり、C の A についても同様です。
例外として、第 13 条では、GPL は AGPL と互換性を持つことができる、つまり、GPL-3.0 ソフトウェアと AGPL-3.0 ソフトウェアの組み合わせは全体として AGPL-3.0 の下でリリースできると述べています。
さらに詳しく知りたい場合は、私が書いた「GPLv3 Interpretation in Human Words」を読むことができます。
5. それで、どうすればいいでしょうか?
A (MIT を使用) と B (GPL を使用) をマージして C を形成する場合。
C を配布するときは、ドキュメントまたはコードに次のことを目立つように反映する必要があります。
1. LICENSE または COPYING ファイルを使用して宣言するなど、C が GPL によって認可されていることを説明します。
2. C が A を使用していること、A の著作権について説明し、A が MIT ライセンスを使用していることを説明します。一方で、それは文書に記載されなければなりませんが、他方では、A の著作権と MIT 契約はコード内に保持されなければなりません。
その際、MIT も GPL も侵害されません。C を使用したい場合は GPL に従う、A のみを使用したい場合は MIT に従う、という人もいます。
6. 例
GitHub で netdata というソフトウェアを見つけました。これはこの記事で説明した状況に当てはまります。
ソフトウェアは次の場所にあります。
https://github.com/netdata/netdata
これは GPL に基づいてリリースされていますが、そこで使用されている一部のサードパーティ ソフトウェアは MIT からのものです。
ソフトウェア ウェアハウスのホームページおよびルート ディレクトリにある LICENSE ファイルには、ライセンスが GPL3 であると記載されています。しかし同時に、このソフトウェアではサードパーティ製のソフトウェアが使用されているとも述べられています。
上記のサードパーティ ライセンスを開くと、これらのサードパーティ ソフトウェアの出典、著作権、ライセンス情報が明確に示されていることがわかります。
上記は一部のスクリーンショットですが、実際には 30 以上のソフトウェアがあり、そのほとんどが MIT 製です。
コードでは、netdata の作成者はあえていい加減なことをしていません。たとえば、d3pie ソフトウェアへの参照のコード ヘッダーは次のようになります。
それは問題ありません。
謝辞: この記事の作成にあたっては、友人の Sun Zhenhua 氏に多大な協力をいただきました。
もう 1 つ: この記事では、MIT と GPL-3.0 の互換性についてのみ説明しています。ライセンス間の互換性関係について詳しく知りたい場合は、「 」と返信して、情報通信研究機構が主導する「オープンソース ライセンス互換性ガイド」を入手してください兼容
。 。
文|魏建帆