OSSライセンスを理解する〜OSSを安全に利用するための基礎〜

# オープンソースソフトウェアを安全に利用するための基礎

某ネットワーク機器販売代理店のGPL炎上事件が旬な話題だが､改めてOSSを活用する上でオープンソースソフトウェアライセンスの基礎についてまとめる


## ソフトウェアの配布形式

ソフトウェアの配布形式には **オープンソース** と呼ばれる形式と **プロプライエタリ** と呼ばれる形式がある


### オープンソース･ソフトウェアとは

オープンソースソフトウェア (以下OSS(Open Source Software))

利用者の目的を問わず､ソースコードの使用･調査･再利用･修正･拡張･再配布が可能なソフトウェアの総称
**著作物に対する権利を放棄したわけではない** ←ここ大事

代表的なソフトウェアに GNU/Linux や MariaDB, PostgreSQL などがある


### プロプライエタリ･ソフトウェアとは

プロプライエタリ･ソフトウェア = 私有ソフトウェア

ソフトウェアの入手・使用・改変・複製などに関する権利をソフトウェアの配布者が所有し、利用者の権利を制限的にする
バイナリで配布されることが主だが、ソースコードの使用権を購入することも可能

代表的なソフトウェアに Microsoft Windows などがある

macOS もプロプライエタリ･ソフトウェアに分類されるが､ BSDから派生したという経緯から Darwin と呼ばれるOSSの側面とAppleが権利を所有するプロプライエタリの側面を持つ

また､フリーソフトやフリーウェアと呼ばれる無料で利用できるソフトウェアも入手や改変､再配布などに関する権利をソフトウェア配布者が所有している場合､プロプライエタリ･ソフトウェアに分類される


## OSSライセンスとは

OSSの使用･改変･再配布に課される誓約であり､大きく以下3つの内容の組み合わせから構成される

- OSSはその性質上ソフトウェアや二次著作物は元の作者でも制御できない形で頒布されるため､ソフトウェアは有用であるが作者は責任を持たないよといった誓約
- 作者名や著作権名を表示する誓約(著作権表示条項)
- ソースコードを改変して再頒布する場合は同じライセンスで配布する誓約（コピーレフト条項）


### 2種類のOSSライセンス

OSSライセンス自体はコピーレフト系とコピーセンター系の2つに分類できる

#### コピーレフト系

権利を意味する Copyright の対義語(要するにダジャレ)

- ソースコードを公開して、誰でも自由に利用・複製・再配布及び二次創作できるようにするライセンス形式
    - 裏を返すと、自由な利用・複製・再配布及び二次創作を制限してはならない
- 利用や改変を行った場合、該当箇所または全てのソースコードを公開する義務が発生する (今回問題となったコピーレフト条項)

GPL, LGPLが該当する

#### コピーセンター系(パーミッシブ･ライセンス)

Right と Left があるなら Center があってもいいじゃないか(要するにダジャレ)

- ソースコードを公開して、誰でも自由に利用・複製・再配布及び二次創作できるようにする
- コピーレフトとは異なり、**利用・改変したソースコードを公開する義務はない**
- 一般的には｢非コピーレフト｣や｢パーミッシブ(寛容)｣と呼ばれる(以下パーミッシブ･ライセンス)
- 著作権表示条項が課されている場合が多い

BSD License, MIT License などが該当する


## 主要なOSSライセンスの紹介

### GPL (GNU General Public License)

- コピーレフトライセンス
- 無保証である
- 著作権表示を保持しなければならない
- 誰でも自由に複製・改変・頒布することが許可されている
- リバースエンジニアリングを禁止してはならない
- GPLライセンスのソフトウェアやプログラムを使用した場合、その制作物もGPLライセンスで配布しなければならない

代表的なソフトウェアに GNU/Linux や VLC がある他､炎上の発端となった OpenWrt も GPL である
我が家で活躍しているA○ubaの500円APも､ROMを書き換えてOpenWrtを導入し､電波は出さずWebサーバとしてセカンドライフを謳歌している(Webエンジニアなので)

![IMG_4013.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/c7119078-f452-dc83-05db-97dd6d16a303.jpeg)

### LGPL (GNU Lesser General Public License)

- コピーレフトライセンス
- GPLをベースに成約を緩くしたライセンス (以下GPLとの差分)
    - 動的リンクをした場合、リンク元にはLGPLライセンスを適用しなくてもよい
        - ただし、静的リンクの場合はLGPLが適用される
    - 動的リンクをした場合、元のコードに対するリバースエンジニアリングを禁止してもよい

動的リンク: *.dllや*.soのように実行時にライブラリをリンクする方式
静的リンク: コンパイル時にライブラリをリンクし､ライブラリ自体が実行ファイルに含まれる方式

代表的なソフトウェアに glibc や OpenOffice.org, FFmpeg (コンパイルオプションによる) がある


### BSD License

- パーミッシブ･ライセンス
- 誰でも自由にソースコード及びプログラムを自由に利用、改変、再配布できる
- 公開したソースコード及びプログラムは著作権情報とこのライセンスを表示しなければなりません

代表的なソフトウェアに BSD がある

#### BSDスタイルのライセンス

BSD License をベースに作成されたBSDスタイルのライセンスが数多く存在し､これらは｢BSD風ライセンス｣や｢パーミッシブ･ライセンス｣と呼ばれる

macOS Catalina で Bash の代わりに BSDスタイルライセンスの Z Shell がデフォルトシェルとなったのは Bash のライセンス形式である GPL を嫌ったためではないか？というのが理由の一つに推測されている


### MIT License

- パーミッシブ･ライセンス
- 非常に制約の緩いライセンスであり､誰でも自由にソースコード及びプログラムを自由に利用、改変、再配布できる
- 公開した作品に著作権表示および本許諾表示を入れなければならない

代表的なソフトウェアに X Window System がある


### Apache License

- パーミッシブ･ライセンス
- MIT LicenseやBSD Licenseでは言及されていなかった特許の適用や商標の利用について言及されており、企業にとって使いやすくなっているライセンス

代表的なソフトウェアに Apache HTTP Server や LLVM(LLVM例外付き) がある

## デュアルライセンスについて

1つのソフトウェアを異なる複数のライセンスの元で配布する形態を指す。
複数のライセンスが提供されるのは以下の理由である

- ライセンス間の互換性の確保(後述)
- 市場細分化のためのビジネスモデル
    - 個人・OSSプロジェクト向けには、コピーレフトライセンス
    - 企業・商用向けには、プロプライエタリライセンス

## ライセンスの互換性

ライセンスや配布形式には互換性や適合性があり､Aのライセンス要件を満たそうとするとBのライセンス要件を満たさなくなるといったことが起こりうる

例えば一つのアプリケーションで MIT License と BSD License のライブラリを組み合わせた場合､それぞれのライセンスを表示や著作権表示条項を満たすだけでコンフリクトを起こすことはないが､ MIT License と GPL を組み合わせる場合､ GPL のコピーレフト条項が適用され､ GPLライセンスで配布することが求められる｡これを俗に ｢**GPL汚染**｣ と呼んだりするが､GNUプロジェクトがOSSのみならずITの普及や発展に大きく寄与していることは紛れもない事実であるため汚染という呼び方はいささか品がないように思う｡

話は逸れたが､プロプライエタリ･ソフトウェアとの共存や商用利用においてGPLが厄介な存在となってくるのも事実であり､コピーレフトなソフトウェアやライブラリが不適切に使用されていないか､他のライセンスとコンフリクトを起こしていないかについての確認は必須である｡

ちなみに､Apache License 2.0 では GPL とのライセンス互換性を改善する修正が行われており､ Apache License 2.0 と GPLv3 は適合性がある

## まとめ

気づかぬうちにGPLなどのコピーレフトソフトウェアが含まれていたなんてことは希によくある事故の一つだが､ソースコードの公開義務を負ったり某代理店のケースのように対応を誤ると炎上してしまうなど企業側のリスクとなることがある

開発者目線では､ライブラリやミドルウェアを導入する際にライセンスを確認する､レビューにライセンスを含めることやライブラリ管理ツールを導入するなど利用しているソフトウェアのライセンスやバージョンや脆弱性管理など日頃から意識できると安全にOSSを利用できると思う

OSSを活用することでOSS含めたコンピュータの利用促進や更なる発展に繋がることを願う