ソフトウェアライセンスのスペクトラム - どうやって選ぶか

ソフトウェアのライセンスにはさまざまなものがあります。一方で，ライセンスを濫造することは慎しまれるべきです。したがってソフトウェアを公開するときには既存のライセンスの中から適するものを選ぶことになります。この記事では，さまざまなライセンスを「スペクトラム」に沿って並べ，ソフトウェアにどのライセンスを選ぶべきかの参考にしていただけたらと思います。以下文章で現われる括弧内のライセンス表記は SPDX です。

## ライセンスの概念

ソフトウェアのライセンスとは，著作権を根拠とし，著作権のあるソフトウェアに対し，特定の条件に従うことを条件にその使用 (コピー，再配布，改変) を許諾するものです。

### フリーソフトウェア (自由ソフトウェア)

FSF (フリーソフトウェア財団) は，一定の基準を満たしたライセンスを自由なものであるとして「フリーソフトウェア」ライセンスとして認定しています。これはほぼ「オープンソースライセンス」と同義なもので，OSS を開発するときにはここに含まれるライセンスを使用するべきです。その条件には以下のようなものがあります。[^1]

> A program is free software if the program's users have the four essential freedoms:
> - The freedom to run the program as you wish, for any purpose (freedom 0).
> - The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
> - The freedom to redistribute copies so you can help others (freedom 2).
> - The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

日本語訳：

> あるプログラムが自由ソフトウェアであるとは、そのプログラムの利用者が、以下の四つの必須の自由を有するときです:
> - どんな目的に対しても、プログラムを望むままに実行する自由 (第零の自由)。
> - プログラムがどのように動作しているか研究し、必要に応じて改造する自由 (第一の自由)。ソースコードへのアクセスは、この前提条件となります。 
> - ほかの人を助けられるよう、コピーを再配布する自由 (第二の自由)。
> - 改変した版を他に配布する自由 (第三の自由)。これにより、変更がコミュニティ全体にとって利益となる機会を提供できます。ソースコードへのアクセスは、この前提条件となります。 

これを満たすライセンスには，例えば，GNU GPL, GNU LGPL, GNU AGPL, Apache 2.0 License, MPL などがあります。

[^1]: https://www.gnu.org/philosophy/free-sw.html#fs-definition

### ソフトウェア向きのライセンス vs. その他のライセンス

ソフトウェア向きのライセンスとは，ソフトウェアに適用することを前提に作られたものを指します。そうでないライセンスとして有名なものでは，Wikipedia などで使われている Creative Commons (クリエイティブ・コモンズ) のライセンスがあります。こうした非ソフトウェア向けのライセンスは，ソフトウェア本体と干渉を引き起こさない限りにおいてドキュメントや画像などのリソースに使用することができます。FSF は，ドキュメント向きに GFDL というライセンスを公開しています。

### コピーレフト

コピーレフト (copyleft) とは，copyright をもじって作られた言葉で，著作権を逆手に取って二次著作物の自由を保証しようとすることを指し，この性質を持つライセンスのことをコピーレフトライセンスといいます。具体的には，改変または拡張された二次著作物も自由でなければならないという条件をライセンスに課すことです。

## ソフトウェアライセンスのスペクトラム

```
強いコピーレフト - 弱いコピーレフト - 非コピーレフト
(GPL) - (LGPL) - (MPL) - (Apache 2.0)
```

### 強いコピーレフトライセンス

- GNU GPL
- GNU AGPL (ネットワーク越しの公開を再配布と同様にみなすので，最もコピーレフトが強い。)

### 弱められたコピーレフトライセンス

- GNU LGPL (GPL 互換でないソフトウェアにも動的リンクできるようにしたライブラリ向けライセンス。)

### 弱いコピーレフトライセンス

- MPL (Mozilla Public License)

:::note info
おまけ

### 非ソフトウェア向けのコピーレフトライセンス

- クリエイティブ・コモンズ 表示・継承ライセンス (CC-BY-SA)

:::

### 非コピーレフトのライセンス

- Apache 2.0 License
- MIT License
- BSD License, 2 clause or 3 clause

## ライセンスの互換性

あるライセンス (A) で公開されたソフトウェアを別のライセンス (B) で公開するソフトウェアで使用することができるとき，A は B と互換であるといいます。

:::note warn
注意
強いコピーレフトの代表的なライセンスである GPL 系列のライセンスは，強力な自由を保証する副作用として，同じライセンスの異なるヴァージョンへの互換性を有していません。混乱を避けるため，これらのライセンスを使用するときには，例えば「GNU GPL version 3.0, or any later version」などと指定して後のヴァージョンを明示的に許可するべきです。
:::

弱いコピーレフトである MPL は明示的に，GNU GPL 2.0 以降および GNU LGPL 2.1 以降との互換性を認めています。_この帰結として，GNU AGPL 3.0 以降とも互換です。_[^2]

:::note warn
注意
コピーレフトの代表的な非ソフトウェアライセンスである CC-BY-SA は，明示的に GNU GPL 3.0 との互換性を認めていますが，__特定のヴァージョンと互換にしているだけ__なので，`GPL-2.0-or-later`/`GPL-3.0-or-later` とは__互換でありません。__GPL のソフトウェアに含めるリソースは本体と同じライセンス，または CC-BY または `MPL-2.0`/`Apache-2.0` でライセンスするべきです。
:::

[^2]: 要出典。

## ライセンスを如何に選ぶべきか

以下は著者の個人的な推奨です。

1. ネットワーク越しに動作するソフトウェアには AGPL が向いています。 (`AGPL-3.0-or-later`)
1. そうでないソフトウェアには一般に GPL 3.0 以降を推奨します。 (`GPL-3.0-or-later`)
1. GNU GPL 2.0 および GNU LGPL 2.1 との互換性が必要なソフトウェアは GPL 2.0 / LGPL 2.1 以降でライセンスしましょう。(`GPL-2.0-or-later`/`LGPL-2.1-or-later`)
1. 強いコピーレフトを許容できず，また GNU GPL 2.0/3.0 両方の互換性が望まれる場面では MPL 2.0 が優れています。 (`MPL-2.0`)
1. コピーレフトを排したい場面，あるいはごく小規模でコピーレフトを適用するまでもないソフトウェアには Apache 2.0 License (`Apache-2.0`) を使用するといいでしょう。これは GNU GPL/AGPL/LGPL 3.0 以降と互換ですが，GNU GPL 2.0 とは互換ではありません。従って `GPL-2.0-or-later` のプロジェクトで Apache 2.0 License のライブラリを使用すると違法ではありませんが，プロジェクト全体のライセンスが実質的に `GPL-3.0-or-later` になってしまいます。
1. これを避けたいときは，MPL 2.0 と Apache 2.0 License のデュアルライセンス (`MPL-2.0 OR Apache-2.0`) にすることを推奨します。こうすることで，Apache 2.0 License により非コピーレフトのプロジェクトにも使用でき，GPL 2.0/3.0 とも共に互換になります。

## まとめ

| ユースケース | 推奨 |
|:-:|:-:|
| ネットワークで動作するソフトウェア | `AGPL-3.0-or-later` |
| 一般のソフトウェア | `GPL-3.0-or-later` |
| 強いコピーレフトを避けたい | `MPL-2.0` |
| 非コピーレフトのプロジェクトで使用したい | `MPL-2.0 OR Apache-2.0` |
| ソースコード以外のリソースのライセンス | 本体と同じライセンス<br/>または `CC-BY-4.0`<br/>または `Apache-2.0`/`MPL-2.0` |
| ソフトウェアに含まれない著作物 | `CC-BY-SA-4.0` |