📘

いまさら振り返る2021年のmimemagicのライセンス問題とは

2021/12/22に公開

これはなに?

この記事は、iCARE Dev Advent Calendar 22日目の記事になります。

2021年を振り返って印象に残っていたmimemagicのライセンス問題を記事にしたものです。
(当時記事にしようとした下書きが残っていたので有効活用したかったというのもある)

当時の大まかな状況

mimemagic内のファイルがGPLライセンスを持つ別ライブラリのコピーファイルだった為、ライセンス伝播によってmimemagic > marcel > activestorage > railsという風にGPLライセンスとなる事が判明しました。

当時のmimemagic(0.3.5以前)はMITライセンスで頒布されていたので、0.3.6(GPLライセンス)をリリース後に0.3.5以前のライブラリの配信を停止されました。

結果Railsアプリケーションは、依存関係にあるgemのinstallができない、アプリケーションがGPLライセンスとなるという問題が発生しました。
(その後もmimemagicの破壊的な変更や、0.3.6も配信停止になる等けっこう二転三転してました)

GPLライセンスだといけないのか?

SaaSのようなASP(Application Service Provider)であれば問題はない、パッケージなどの頒布物の場合だと問題がある。
以下MITとGPLのライセンスの違い

MIT

無償で制限無く扱える。
作者と著作権者は問題が起きても責任を負わない。

頒布されたものを利用してプログラムを再頒布する場合には以下2点を満たす必要がある
・ 著作権の表示
・ ライセンスの全文の表示

MIT-LICENSEのようにファイルとして含まれている場合もありますがソースコード上に直接記載しても大丈夫です。

GPL

プログラムの実行/複製/改変/頒布が行える。
作者と著作権者は問題が起きても責任を負わない。

頒布されたものを利用してプログラムを再頒布する場合の主な条件
・ 著作権の表示
・ ライセンス条文の表示
・ GPLライセンスで頒布する必要がある(コピーレフト)

GPLライセンスである以上、プログラムの実行/複製/改変/頒布が行える必要があるのでソースコード等の公開義務が発生します。

ただしSaaSのようなASPの場合はこのコピーレフト条項に縛られません。
この条項回避についてはGPLv2ではASP loopholeとして抜け道のような扱いでしたが、GPLv3では著作物の伝達に関して明言しており、「ネットワークを通じて複製を転送することなくやり取りをするのは伝達ではない」となっているので問題ありません。
https://www.gnu.org/licenses/gpl-3.0.en.html

GPLv2がASPに対してコピーレフトが適応されない課題を解決するために派生したライセンスとしてAGPLがあります。
こちらはネットワークを介したサービス提供の場合でもソースコードの開示の義務が発生するので注意が必要です。

問題となったfreedesktop.org.xmlとは

script/freedesktop.org.xml自体はMIMEタイプのデータベースでshared-mime-infoのコピーファイルでした。
こちらの行でGPLライセンスであることが明記されています。

問題の終結

結局marcelからmimemagicを削除して、代わりにApache LicenseであるApache Tikaを使用することでMITライセンスを維持できるように修正されました。

Apache Tikaから持ってきたファイル

Apache License

Apache License

実行/複製/改変/頒布が行える。
頒布される二次的著作物が同じライセンスで提供されることを要求しない。
作者と著作権者は問題が起きても責任を負わない。

再頒布する場合の主な条件
・ Apache Licenseのコードが使われていることを表示
・ 何らかの修正がある場合は、その旨を追加で表示
・ ソース形式で頒布する場合は、著作権、特許、商標、および帰属について告知する必要がある
・ 「NOTICE」に相当するテキストファイルが含まれている場合は該当のファイルを含める必要がある

https://licenses.opensource.jp/Apache-2.0/Apache-2.0.html

まとめ

当時はGPLライセンスがASPの場合はこのコピーレフト条項に縛られないことを把握した段階で情報を追うのをやめていたので改めて振り返って学びが多かったです。
基本的にライブラリ等の頒布物は自己責任での利用になるので新たなライブラリを利用するさいには気にかけていきたいですね。

明日は@krpk1900_devさんの記事ですね、楽しみ

Discussion