この記事では、たまにソフトウェア開発者から問い合わせのある「DockerとGPLライセンスの関係」について整理してみたいが、その前置きとして「Dockerって何なの?」という点を噛み砕いて説明しておきたい。
Dockerとは
Dockerとは、ソフトウェアの実行環境をDockerイメージとしてパッケージ化して配布し、そのイメージから「コンテナ」と呼ばれる実行環境を起動できる仕組みである。
通常、ソフトウェアを動かすためには
- OS
- ライブラリ
- 依存パッケージ
- アプリケーション本体
といった複数の要素を正しくインストールする必要があるが、この環境構築はかなり面倒である。
OSが違う、依存パッケージが足りない、といった場合だけでなく、ライブラリのバージョンが違うといった理由でも動かないという問題が起きやすい。
Dockerは、この問題を解決するためにアプリケーションとその実行環境を丸ごとパッケージ化するというわけである。
ここで顧客への配布形態として登場するのが、DockerfileとDockerイメージという概念である。
Dockerfileとは
Dockerfileとは、コンテナを作るための手順を記載したファイルである。
いわば「コンテナのレシピ」のようなものであり、どのOSを使い、どのパッケージをインストールし、どのアプリを配置するかを記述する。
Dockerfile自体は、あくまでビルド手順を記述したテキストファイルにすぎない。
Dockerイメージとは
Dockerfileを実行して作成されるのがDockerイメージである。
Dockerイメージは、OS、ライブラリ、アプリケーション など(開発環境を含めたアプリケーション一式)を含んだ完成済みのソフトウェア環境である。
これを配布すれば、受け取った側は一から開発環境を整える必要なく「コンテナ」としてソフトウェアを動かすことができる。
このようにDockerは、ソフトウェア配布を非常に便利にする技術である。
しかしその一方で、GPLソフトウェアが含まれている場合のライセンス関係が問題になることがある。
以下では、DockerとGPLの関係を整理する。
DockerとGPLライセンスとの関係
DockerfileやDockerイメージを配布する場合、パッケージな中にGPLソフトウェアが含まれているとライセンス義務が発生するのではないか、という点が問題になる。
結論から言えば、以下の整理になる。
| 条件 | GPL義務 | |
|---|---|---|
| Dockerfileのみを配布する場合 | GPL義務は基本的に発生しない | |
| Dockerイメージを配布する場 | GPLソフトと自社ソフトが単なる集積(aggregation) | 自社ソフトの開示義務なし |
| GPLソフトと自社ソフトがリンクして一体のプログラム | 自社ソフトにもGPL義務が及ぶ可能性あり | |
以下、それぞれ説明する。
Dockerfileを配布するだけの場合
Dockerfileは、コンテナイメージを作成するためのビルド手順書にすぎない。
このDockerfileにはGPLプログラムそのものは含まれておらず、単に「ビルド時に取得する」という指示が書かれているだけである。
この場合、配布しているのはあくまでビルド手順であり、GPLプログラムそのものを配布しているわけではない。
したがって、通常はGPLのソースコード提供義務は発生しない。
Dockerイメージを配布する場合
一方、Dockerイメージをそのまま配布する場合は事情が異なる。
Dockerイメージは、内部にOS、ライブラリ、アプリケーションなどを含む実体のあるソフトウェアパッケージである。
そのため、配布物にGPLプログラムが含まれていれば、そのGPL部分についてはライセンス義務が発生する。
ただし、ここで重要になるのが 「単なる集積」かどうかである。
単なる集積の場合
例えば、Dockerイメージの中にGPLライセンスのLinuxツールと自社開発のアプリケーションが入っていたとしても、両者が独立して動作するだけなら、これはGPL上の「単なる集積」に該当する可能性が高い。
この場合、GPL部分のソースコード提供義務はあるが、自社のプロプリエタリコードを公開する必要はない、という整理になる。
リンクしている場合
問題になるのは、自社プログラムがGPLプログラムとリンクしている場合である。
この場合、そのプログラムはGPLソフトウェアの派生物と評価される可能性がある。
その結果、プログラム全体がGPLの条件に従う必要が生じ、自社プログラムのソースコードに対しても開示義務が発生する、というリスクが生じる。
ポイント
Dockerイメージの配布の場合は通常のソフトウェア配布の判断と相違ないが、ポイントとなるのは、いわゆるレシピに相当するDockerfileのみの配布であれば、Dockerイメージ内にGPLソフトウェアを含んでもDockerイメージ内のソフトウェアのGPL義務を免れるという点である。
もちろん、Dockerfile自身にOSSライセンスが含まれれば、それに遵守する必要はあるが、それはDockerイメージ内のソフトウェアのライセンスは別問題である。