ソフトウェアライセンスでヒヤッとした事例から学んだ教訓

こんにちは、エンジニアリングマネージャーの渡辺(@mochi_neko_7)です。

少し前にTwitterで、GitHub CopilotがLGPLライセンスのコードをライセンス表記なしに出力する、という話が話題になったのをご存じですか?

これを見て、最近リリースしたばかりの弊社プロダクトのSYNMN

synmn.biz

の開発でもとあるライブラリを導入する際にソフトウェアライセンスに関してヒヤっとした事例があったことを思い出しました。

結果的にリリース前に解決ができたため問題はなかったのですが、これをきっかけに自身のソフトウェアライセンスに対する危機意識が高まったこともあり、記事化して振り返ってみたいと思います。

遭遇した事例

SYNMNでは動画コンテンツをメタバース空間内で使用できる機能を仕込んでいるのですが、動画プレイヤーにはUnity標準のものではなく、AVPro VideoというAsset Storeで販売されているライブラリを使用しています。

このライブラリはWindows、Android、macOS、iOS、UWP、WebGLとかなり幅広いプラットフォームに対応しているのが特徴の一つなのですが、その各プラットフォーム別にネイティブライブラリを内部で使用していることもあり、内部で多くの3rd Partyライブラリを使用しています。

AVPro Video自体はAsset Storeで販売されていることもありStandard Unity Asset Store EULAというライセンスに準拠しますが、このライブラリを使用したアプリケーションを配布する際には内部で使用しているライブラリのライセンスにも準拠する必要があります。

つまりライセンスは依存関係をもつので、使用するライブラリ自体のライセンスが問題なくても、その内部で使用しているライセンスもきちんと確認をする必要があります。

当時ver2.5.1の時点でAVProが内部で使用しているライブラリを入念に確認をしていたのですが、HapAVFoundationというライブラリが更にその内部でREAL-TIME YCOCG DXT COMPRESSIONというコードを含んでいて、そのライセンスがGNU Lesser General Public License(LGPL)と表記されていることを発見しました。

実際に発見をしたのは自分ではなく同僚のベテランエンジニアの方なのですが、その方がソフトウェアライセンスに詳しいこともあり、問題の発覚に至りました。

LGPLライセンスはどう問題なのか

LGPLライセンスの公式のリンクはこちらです。

opensource.org

LGPLライセンスの解説などはこちらなどを参照してください。

office54.net

GPLライセンス(およびその緩和版のLGPLライセンス)の恐ろしい特性はCopy Left、つまり「GPLライセンスのプログラムを使用した場合、制作物もGPLライセンスで配布する必要がある」というものです。

もし自作のソフトウェアにGPL/LGPLライセンスのソースコードを組み込んだ場合には、(LGPLは条件付きですが)組み込んだソフトウェア自体もGPL/LGPLライセンスで「公開」する必要があるため、特にソースコードを公開したくない商用のソフトウェアを開発する際にはかなり注意する必要があります。

今回の件ではLGPLの緩和条件である「動的リンクで使用する場合は例外」が、AVPro Video自体がDLLなどのバイナリーにビルドされていることもあり、自身で直接確認することができませんでした。

開発元に問い合わせた結果

LGPLライセンスの緩和条件が確認できない以上、そのままライブラリを組み込むのはリスクがあります。

分からないものは仕方がないので、開発元であるRenderHeads社にメールで問い合わせをしました。

やり取りは英語だったので意訳になりますが、返答は「REAL-TIME YCOCG DXT COMPRESSIONは使ってないけど、macOSのプラグインにリンクが残っているから、次のリリースで削除するよ」というものでした。

そして問い合わせから約9日後にはver2.5.2がリリースされ、無事該当の変更が取り込まれ、AVPro VideoからLGPLライセンスのコードが完全に取り除かれました。

github.com

Removed LGPL licensed code dependency from HapInAVFoundation

まとめ

今回遭遇した事例をまとめると以下になります。

  • UnityのAsset Storeで購入したライブラリにLGPLライセンスの表記を含むことが発覚
  • 調査するも、LGPLライセンスの緩和条件に該当するか判明せず
  • 開発元に問い合わせると、使用はしていないものの部分的にリンクが残っていることを確認
  • 次のリリースで修正をしてもらう

そしてこの出来事から得られた教訓は以下になります。

  • ソフトウェアライセンスは原文をちゃんと読んで内容を確認すること
  • ソフトウェアライセンスにも依存関係があるので、内部で使用しているライブラリのライセンスもきちんと確認すること
  • GPL/LGPLライセンスは特に取り扱いが注意なので、見かけた場合にはきちんと確認をすること
  • 確証が得られない場合は開発元に問い合わせること

ソフトウェアライセンスは適切に扱わないとソースコード開示の事態につながってしまったり、会社や開発者の信用を損なってしまう恐れがあります。

最近のOSSではMITライセンスなど比較的緩いライセンスが用いられることも多いですが、今回登場したLGPLライセンスなど種類によっては取り扱いの注意が必要なものもあるため、外部のライブラリやアセットを利用する際には入念に確認をしたほうがよいでしょう。

また逆に自身の書いたコードやリポジトリにちゃんとライセンスを明記することも重要です。

自分もまだまだ勉強不足な部分も多いので、今後もソフトウェアライセンスには気を配っていきたいと思います。