互換性とは「組み合わせて配布できるか」
2つのライセンスに互換性があるとは、それぞれのライセンスが適用されたコードを一つのプログラムに組み合わせて配布するときに、両方のライセンスの条件を同時に守れるという意味です。どちらか一方が他方の条件を禁止していれば、互換性はありません。たとえば GPL は「追加の制限を課さないこと」を求めるので、GPL が許さない追加条件を持つライセンスのコードは GPL のプログラムに入れられません。
互換性には方向がある
寛容型のコードはコピーレフトのプロジェクトに入れられますが、その逆はできません。
- MIT のコード → GPL のプロジェクト: 可能。MIT の表示を維持すれば、結合物全体を GPL で配布できます。
- GPL のコード → MIT のプロジェクト: 結合物全体が GPL の条件に従う必要があるため、「MIT プロジェクト」のままではいられません。
そのため、互換性の表は常に「どのコードを → どのプロジェクトに」入れるのかで読む必要があります。
代表的な組み合わせ
Apache-2.0 と GPL
FSF は、Apache-2.0 は GPL-3.0 とは互換性があるが、GPL-2.0 とは互換性がないと見ています。Apache-2.0 の特許終了条項と補償条項が、GPL-2.0 にはない追加条件だからです。GPL-3.0 は設計段階でこの問題を解決するように作られました。したがって GPL-2.0-or-later のプロジェクトは、結合物を GPL-3.0 で配布すれば Apache-2.0 のコードを使えます。
MPL-2.0 と GNU ライセンス
MPL-2.0 第1.12条は GPL-2.0・LGPL-2.1・AGPL-3.0 とそれ以降のバージョンを「Secondary License」と定義し、第3.3条は MPL のコードとこれらのコードを組み合わせた Larger Work を GNU ライセンスで配布できるようにしています。原著作者が Exhibit B(「Incompatible With Secondary Licenses」)を付けた場合は例外です。
LGPL ライブラリと非公開アプリ
LGPL のライブラリは非公開のアプリで使用できます。その代わり、利用者がライブラリを改変した版に差し替えられる必要があり(動的リンクが最も簡単)、ライブラリ部分のソースとライセンス表示を提供しなければなりません。LGPL のコードをアプリのソースにコピーして混ぜると話は変わり、結合物が LGPL/GPL の条件に従う必要があります。
GPL-3.0 と AGPL-3.0
2つのライセンスは互いの第13条で結合を明示的に認めています。結合物の中で、GPL 部分は GPL の条件に、AGPL 部分はネットワーク経由のソース提供の条件を含む AGPL の条件に、引き続き従います。
EPL-2.0 と GPL
EPL-2.0 は基本的に GPL と互換性がありませんが、原著作者が Exhibit A で GPL などを Secondary License に指定すれば、結合が可能になります。
| 取り込むコード | 非公開アプリ | MIT プロジェクト | GPL-2.0-only | GPL-3.0 |
|---|---|---|---|---|
| MIT・BSD・ISC | 可能(表示) | 可能 | 可能 | 可能 |
| Apache-2.0 | 可能(表示・NOTICE) | 可能 | 不可 | 可能 |
| MPL-2.0 | 条件付き(ファイル公開) | 条件付き | 条件付き(Secondary) | 条件付き(Secondary) |
| LGPL-3.0 | 条件付き(リンク) | 条件付き(リンク) | 不可 | 可能 |
| GPL-3.0 | 不可 | 不可 | 不可 | 可能 |
「結合」はどこまでか
互換性の問題は、コードが一つのプログラムとして結合されるときに生じます。FSF は、同じ実行ファイルにリンクされたり複雑な内部データ構造を共有したりする場合は一つのプログラムとみなし、パイプ・ソケット・コマンドライン引数のような別プログラム間の一般的な通信は、通常、別個のプログラムの「集積(aggregate)」とみなします。ただし、この境界は判例で確定したものではないため、解釈が分かれます。一つのディストリビューションに複数のプログラムを一緒に収録すること自体は結合ではありません。
実務の手順
- 依存関係の一覧を出します(パッケージマネージャーのライセンスレポート機能や SBOM ツール)。
- 各依存関係のライセンスを SPDX 識別子で整理します。
- 自分のプロジェクトのライセンスとの組み合わせを互換性チェッカーで一次確認します。
- 「条件付き」の組み合わせは、条件(表示、リンクの方式、Secondary License の有無)を原文で確認します。
- 不可の組み合わせがあれば、依存関係を替えるか、プログラムを分離するか、自分のライセンスを調整します。
この記事は一般的な情報であり、法的助言ではありません。重要な決定は専門家にご相談ください。
参考資料
- GNU ライセンス FAQ(互換性マトリクス、MereAggregation) — https://www.gnu.org/licenses/gpl-faq.html
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Apache Software Foundation, GPL Compatibility — https://www.apache.org/licenses/GPL-compatibility.html
- Mozilla, MPL 2.0 FAQ — https://www.mozilla.org/en-US/MPL/2.0/FAQ/
- Eclipse Foundation, EPL 2.0 FAQ — https://www.eclipse.org/legal/epl-2.0/faq/