OSSのライセンス

# OSSのライセンス

現代におけるシステム開発の多くで、オープンソースのライブラリやフレームワーク、データベース製品などが利用されていると思います。
私自身もOSSという認識と、フリーで商用利用可能だよな。というぐらいの雑な認識で今まで生きてきてしまったのですが、改めて、OSSの各種リソースは、正しく理解し利用できていたのだろうか？
違反しているケースはないのだろうか？ということが気になったので、調べた内容をまとめました。

**2020.06.06 追記**
最近LGTMの通知がよく来る記事なので何かなと見返してみると、かなり前にまとめたOSSライセンス関連の記事でした。
現在は開発者ではなく、システム開発を依頼する側になってしまいましたが、様々なサービスを作り、運用していく上でも理解が必要なことなので、改めて記事の内容を見返し、修正してみようと思います。

## オープンソースとは

```
オープンソース (英: open source) とは、言葉通りのソースコードへのアクセスが開かれている（ソースコードが公開されている）ことを意味するのではなく、ソースコードを商用、非商用の目的を問わず利用、修正、頒布することを許し、それを利用する個人や団体の努力や利益を遮ることがないソフトウェア開発の手法を意味する。オープンソース・イニシアティブ は、「オープンソース」と名乗るための要件として「オープンソースの定義」を掲げている。
```

### 引用元

「[オープンソース](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9)」『フリー百科事典　ウィキペディア日本語版』。最終更新 2018年3月3日 (土) 09:09　UTC、URL: http://ja.wikipedia.org

OSSのライセンスについて調べているときに、キーワードとして出てくる`著作権表示`ですが、Qiitaの記事を作成する時にもよくあるWikipediaの活用時に、実際にはどのようにWikipediaを引用すればよいのか、正しい引用方法が分かっていなかったので、正しい引用方法を調べて、上記のようにWikipediaの引用元を記載しました。

参考：[ウィキペディアを引用する](https://ja.wikipedia.org/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2%E3%82%92%E5%BC%95%E7%94%A8%E3%81%99%E3%82%8B)

### OSSに関する補足

Open Source Initiativeという組織があり、The Open Source Definition（オープンソースの定義）を10個にまとめている記事があります。

参考：[The Open Source Definition (Annotated)](https://opensource.org/osd-annotated)

1. Free Redistribution(無料の再配布)
    2. ソフトウェアを改変し再配布することに対して費用が発生しない。
2. Source Code(ソースコード)
    3. プログラムにはソースコードが含まれている必要があるよ。
    4. ソースコードも配布する必要があるよ。
3. Derived Works(派生作品)
    4. 再配布したソフトウェア／ソースコードを改変し、さらに再配布することを許可する必要があるよ。
4. Integrity of The Author's Source Code(著作者のソースコードの生合成）
    5. 大元のソースコードと、パッチとして提供されるソースコードどちらも配布する必要があるよ。
5. No Discrimination Against Persons or Groups（人やグループに対する差別の禁止）
    6. 人やグループ（国や企業など）に対し、ソースコードの公開を一部禁止するなどの行為を許可しない。
6. No Discrimination Against Fields of Endeavor（あらゆる活動分野において差別の禁止）
    7. ライセンスは特定の分野に対してプログラムの利用を制限するものであってはならない。
7. Distribution of License（ライセンスの配布）
    8. プログラムに付属する権利は、プログラムが再配布されるすべての人に適用され、それらの当事者による追加のライセンスの実行は必要ない。
8. License Must Not Be Specific to a Product（ライセンスは製品に固有のものであってはならない）
    9. プログラムに付随する権利は、プログラムが特定のソフトウェア配布の一部であることに依存してはなりません。
    10. プログラムがその配布から抽出され、プログラムのライセンス条件の範囲内で使用または配布される場合、プログラムが再配布されるすべての当事者は、元のソフトウェア配布に関連して付与されたものと同じ権利を持つ必要があります。
9. License Must Not Restrict Other Software（ライセンスは他のソフトウェアを制限してはならない）
    10. ライセンスは、ライセンスされたソフトウェアと一緒に配布される他のソフトウェアに制限を課してはなりません。
    11. たとえば、ライセンスは、同じメディアで配布される他のすべてのプログラムがオープンソースソフトウェアでなければならないことを主張してはなりません。
10. License Must Be Technology-Neutral（ライセンスはテクノロジーに中立でなければならない）
    11. ライセンスの規定は、個々のテクノロジーやインターフェースのスタイルに基づくものであってはなりません。

## OSSでざっくり気にすべき分類

OSSのライセンスはMITやGPLなどたくさんの種類がありますが、基本的には以下の2つの分類を理解しておけばいいと思います。

- **コピーレフト型**
- **非コピーレフト型**

上記2つの分類で**共通**しているOSSのルールがあります。
それは、

- **著作権の表示**
 - 著作権表示部分さえ残せば好きに使ってよい。
- **無保証**
 - 利用に際して発生した障害について著作者がその責任を一切負わない。保証しない。

なので、2つの分類における、共通部分は頭に入れつつ、違いを理解すれば良いと思います。

## コピーレフト型と非コピーレフト型の唯一の違い

コピーレフト型と非コピーレフト型の唯一の違いは**ライセンスの継承（ソースコードの公開を含む）**が発生するか否かです。

コピーレフト型は、ライセンスの継承（ソースコードの公開を含む）が発生し、非コピーレフト型は特に気にする必要がありません。

## ライセンスの継承（ソースコードの公開を含む）は何をする？

GPLなどのコピーレフト型を適用しなければいけないソフトウェア開発を行った場合は、
以下のようなことをしなければいけません。

- 新規で開発したソフトウェアもGPLライセンスを採用しなければいけない。
- 新規で開発したソフトウェアのソースコードを公開しなければいけない。
 - ソースコードの公開先は、バイナリなど製品（ソフトウェア）の提供先のみで良い。
 - ソースコードの公開方法は、バイナリなど製品（ソフトウェア）の入手方法と同様の手段で入手できる必要がある。（例えば、メディアによって提供される製品の場合、同様にメディアによって入手できる必要がある。ダウンロードできる製品であれば、ダウンロードできる必要がある。など）


## 著作権表示とは具体的にどうするのか

例えば、jQueryを利用してソフトウェア開発を行う場合、`jquery-*****.js`ファイルの上部にある著作権表示は、一切修正することなくそのままにする必要があります。

```javascript
/*!
 * jQuery JavaScript Library v3.3.1
 * https://jquery.com/
 *
 * Includes Sizzle.js
 * https://sizzlejs.com/
 *
 * Copyright JS Foundation and other contributors
 * Released under the MIT license
 * https://jquery.org/license
 *
 * Date: 2018-01-20T17:24Z
 */
```

ただ、jQueryの場合は**MIT**であるため、**ソースコードの公開義務は発生しない**。
MITライセンスのライブラリなどを利用したシステムを新規開発しても、**ソースコードを公開する必要はありません**。

## 非コピーレフト型

オープンソースでありながら、その制約が一番緩い（厳しくない）ライセンスとして、非コピーレフト型の分類で、以下のライセンスが挙げられる。

- MIT
- BSD
- Apache License V2.0

非コピーレフト型なので、ソースコードの公開義務などが発生しないため、商用利用する際も、著作権表示や無保証であることを理解して正しく利用している限り、特に難しいことを考えずに利用可能です。

## コピーレフト型（GPLライセンス）

取り扱いとして、制限の強いコピーレフト型の中でも、JavaやMySQLなどで採用されているGPLをベースに、コピーレフト型について記載します。

### GPLライセンスのオープンソース又はオープンソースのソフトウェアを利用した場合

#### GPLライセンスに関する参考

参考：https://www.gnu.org/licenses/lgpl-java.html

この記事は、Javaによるアプリケーション開発をおこなった場合について、次のようなことを述べています。

- GPLはすべての派生作品（Javaによる開発をおこなったアプリケーション作品）の全てに対して、GPLにライセンスされることを要求する。→**遺伝性**

参考：https://www.gnu.org/licenses/gpl-faq.html#GPLInProprietarySystem

> GPLの及ぶソフトウェアをプロプライエタリ・システムに組み入れることはできません。GPLの目標は、誰に対してもプログラムを複製や再配布、理解、改変する自由を与えるということです。自由でないシステムにGPLの及ぶソフトウェアを組み入れることが可能なら、GPLの及ぶソフトウェアは自由ではなくなってしまうでしょう。

GPLでライセンスされた何らかのものを、独自の商品（システム）に組み込み、それをソースコード非公開にして配布することは、どうやっても出来ないようです。

他にもGPLに関するFAQが以下のサイトにずらっと揃っています。
https://www.gnu.org/licenses/gpl-faq.html

#### MySQLを利用したシステムを開発した場合

MySQLデータベース製品を利用してソフトウェアを開発した場合ですが、プロセス間通信はGPLに触れないとのこと。
そのため、Webアプリケーションを開発する際のバックエンドとしてMySQLを利用している場合、商用に利用しても開発したソフトウェアのソースコードを公開する義務は発生しない。

MySQLを利用するシステムでは、どういった場合にGPLライセンスを適用しなければならないか。
以下のサイトを参考にすると
https://www.gnu.org/licenses/gpl-faq.ja.html#MereAggregation

`分離したプログラムの間で使われるコミュニケーションメカニズム`によって、コマンドラインやソケット通信などによって利用される場合は、同梱されていると判断されないため、GPLライセンス**範囲外**となるが、同じ実行ファイルに含まれてる場合などは、同梱されているとみなされ、GPLのライセンスが適用されなければならない。

#### Javaを使ってシステム開発した場合

- A社からの依頼により、Javaによる業務用Webアプリケーションを開発して納品
 - A社へはアプリを**配布**しているので、A社に対してソースコードの公開義務が発生。
- B社からの依頼により、JavaによるBtoCのWebアプリケーションを開発して納品
 - B社へはアプリを**配布**しているので、B社に対してソースコードの公開義務が発生。
 - B社から見た一般利用者は、Webブラウザを経由してアプリケーションの機能を利用しているだけなので、**配布**していないことから、一般利用者に対するソースコードの公開義務は発生しない。

### GPLライセンス違反の例

GPLライセンス違反の例として以下の記事があった。

- [Asus Eee PCにGPL違反の疑い](https://japanese.engadget.com/2007/11/25/asus-eee-pc-gpl/)
- [Asus、Eee PCのGPL問題を釈明、全ソース公開を約束](https://japanese.engadget.com/2007/11/28/asus-eee-pc-gpl-statement/)
- [「BusyBox」のGPL違反訴訟でSFCが勝訴、裁判所が製品の販売停止を命じる](https://mag.osdn.jp/10/08/05/1045202)

### GPLの抜け道

GPLでライセンスされたライブラリを利用した製品を開発した場合であっても、**ASP**サービスのように、ネットワークを経由して利用者がシステムの機能を利用する場合、GPLは適用されない。つまり、ソースコードの公開義務などコピーレフトは発生しない。

ポイントとしては、利用者の手元にソフトウェアが**頒布**されているかどうか。というところ。

ただし、javascriptなどのライブラリは、`<script>`タグなどを経由して、利用者のブラウザにダウンロード（キャッシュ）されて使われるため、その行為が**頒布**にあたる行為として見なされる恐れもある。（実際に見なされたケースがあるかは不明）
ですが、よく使いそうなjavascriptのライブラリは、**MIT**が多かったのであまり気にしなくても良いか。。。

- jQuery
 - MIT
- Bootstrap
 - MIT
- vue.js
 - MIT

### コピーレフト型のライセンス補足

GPLなどのコピーレフト型ライセンスは、Webアプリケーションなどで開発したソフトウェアであれば、その利用者に対しソースコード公開義務は発生しないような記載をしました。
ただ、コピーレフト型のライセンスの中で、**AGPL(Affero General Public License)**は最も制限の強いコピーレフト型のライセンスです。
AGPLはネットワーク経由で利用される場合においても、コピーレフトとなるケースが定義されているようです。

参考：[Affero General Public License](https://ja.wikipedia.org/wiki/Affero_General_Public_License)

## 最後に

OSSについていろいろまとめましたが、GPLなどのコピーレフト型ライセンスは特に取り扱う際注意が必要なので、利用には十分気を付けていきたいと思います。

また、あまり難しいことを考えず、Webアプリケーション開発においては、あまりGPL汚染を気にしなくても、そこまで大きな問題になることはなさそうだったので、クライアントへのインストールタイプのソフトウェア開発などを行う場合に、より注意していきたいと思います。