まず目的を決める
ライセンスの選択は好みではなく、自分が何を望むかの問題です。ほとんどの人は、次の2つの目的の間のどこかにいます。
- できるだけ多く使われたい — 企業の製品、他のオープンソース、非公開のアプリなど、どこにでも気軽に入ってほしいなら寛容型が有利です。
- 改良が公開で還元されてほしい — 誰かが自分のコードを改変して配布するなら、その改変も公開されてほしいと望むならコピーレフトが合います。
寛容型: 幅広い採用、少ない摩擦
MIT、BSD、ISC、Apache-2.0 は、表示の維持程度しか求めません。ほとんどの企業の法務部門が事前承認リストに載せているライセンスなので、導入が速いです。その代わり、誰かがコードを改変して非公開の製品に入れても止められません。
寛容型の中での選択は、主に次の2点です。
- 特許: 明示的な特許許諾と特許報復条項が必要なら Apache-2.0、そうでなければ MIT。
- GPL-2.0 との互換性: Apache-2.0 は GPL-2.0-only のプロジェクトに入れられないというのが FSF の立場なので、Linux カーネル周辺のエコシステムでは MIT・BSD が便利です。
コピーレフト: 公開の連鎖
GPL は結合したプログラム全体、LGPL はライブラリ、MPL はファイル単位で公開義務を課します。サーバーで動くソフトウェアであれば、AGPL が GPL の空白を埋めます。コピーレフトを使うと、一部の企業は利用や貢献をためらうことがあります。特に AGPL は、多くの会社が社内ポリシーで利用を制限しています。これは意図した効果かもしれませんし、望まない副作用かもしれません。
エコシステムの慣行も無視できない
ライセンスは、コミュニティの慣例と合っているほうが摩擦が少なくなります。
| エコシステム | よく使われるライセンス | 備考 |
|---|---|---|
| JavaScript(npm) | MIT, ISC | 小さなパッケージが多く、短い寛容型が好まれる |
| Rust(crates.io) | MIT OR Apache-2.0 | Rust 自体がこのデュアル方式 |
| Python(PyPI) | MIT, BSD-3-Clause, Apache-2.0 | 科学計算の分野では BSD-3 が多い |
| Go | BSD-3-Clause, MIT, Apache-2.0 | Go の標準ライブラリは BSD-3 |
| Linux カーネルモジュール | GPL-2.0-only | カーネルと結合するには事実上必須 |
| デスクトップの GNU ツール | GPL-3.0-or-later | GNU プロジェクトのデフォルト |
| C/C++ ライブラリ | LGPL, MIT, BSL-1.0 | リンクの方式が選択に影響 |
決定のためのチェックリスト
- 依存関係の確認: すでに使っているライブラリのライセンスが選択肢を制限していないか確認します。GPL のライブラリと結合したプログラムを配布するなら、選択肢は GPL と互換性のあるライセンスに絞られます。
- 所属の確認: 業務で作成したコードは通常、会社が著作権者です。会社のオープンソースポリシーで定められたライセンスがあるか確認します。
- 利用形態: インストール型か、ライブラリか、サービスかによって、コピーレフトの効果が変わります。
- 貢献の方式: 外部からの貢献を受け付ける予定なら、後でライセンスを変えるのが難しくなることを念頭に置きます。複数の人の著作権が混ざるからです。
- 収益モデル: 商用ライセンスを別途販売する予定なら、コピーレフト+商用のデュアルライセンスとコントリビューターライセンス契約(CLA)をあわせて検討します。
ひとことでまとめると
- 広く使われることが最優先 → MIT(特許が心配なら Apache-2.0)
- ライブラリの改良は還元してほしいが、使う側は自由に → MPL-2.0 または LGPL-3.0
- すべての派生プログラムが公開されてほしい → GPL-3.0
- サーバーソフトウェアの改変版まで公開されてほしい → AGPL-3.0
- 何の条件も設けたくない → 0BSD、Unlicense、CC0
選択ウィザードでこれらの基準に質問形式で答えると、候補と理由を表示します。
この記事は一般的な情報であり、法的助言ではありません。重要な決定は専門家にご相談ください。
参考資料
- choosealicense.com — https://choosealicense.com/
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Rust のライセンス(MIT OR Apache-2.0) — https://github.com/rust-lang/rust