こんにちは。てぃろです。
先日公開した以下の記事でOSSライセンスを調べていた話をしました。
今回はそのためにFOSSAというサービスを使って、どんなふうにライセンス情報を調べていたのか紹介します。
ただ、ここではFOSSAのサービスの全体感を紹介しません。より詳しく紹介されているQiita記事があるので、それはこちらに譲ります。
OSSライセンスは、両立性をチェックしよう
OSSは無料で公開されているソフトウェアですが、無料で公開されているからこそ開発者が定めたライセンスにきちんと準拠して使うことが必要になります。もし、ライセンスに準拠しない使い方をすると、それは開発者に不利益をもたらすリスクがある非常に危険な行為です。
だからこそ、自分もOSSを公開するにあたっては、使用しているOSSのライセンスをしっかりと理解してどうすればライセンスに準拠できるのか?を調べていく必要があります。
OSSライセンスはめちゃくちゃたくさんの種類があって、それぞれがどんな許諾がされているライセンスかを理解することは結構大変です。そのためここでは細かなOSSライセンスの種類には触れません。
が、そもそもライセンスの何をチェックすればOSSを公開しても問題ないと言えるのでしょうか?
それは、使用しているOSSライブラリと自身のOSSのライセンスに両立性があることをチェックすること、です。
要するに、使用中のライブラリで許されていないことを許可してはいけないので、自分が許可していいことをちゃんと把握しよう、ということです。
では、使用しているOSSがどのようなライセンスをつけて公開されているかを調べていきましょう。
使用しているライブラリのライセンス調査にFOSSAを使う
OSSライブラリは非常に有用なので、自然と多くのライブラリを使っていくことになります。
これは単純に自分が使っているライブラリの数ではなく、ライブラリが使っているライブラリや、ライブラリが使っているライブラリが使っているライブラリや…(以下、無限ループ)…も対象になることがあります。
このように使用するライブラリは間接的なものもふくめて非常に膨大になるため、すべて手作業で調べることは現実的に不可能です。
そこで、このような使用中のOSSを調査できるツールをググってみると、以下のような非常に有用な記事が見つかりました。
ここではFOSSAをというサービスが中心に紹介されていますが、それ以外のツールも一覧されているので、興味がある方はそちらも覗いてみてください。
今回は、これらのツールの中でもSaaSで使いやすそうなFOSSAを使って見ようと思います。
FOSSAにGithubでログインする
それではFOSSAを使っていきます。
サインアップなどは画面の指示に従えば迷うことはないと思います。
今回は、すでにGithubに存在していたリポジトリに対してスキャンをかけたかったので、Githubのアカウントでログインしました。そうすれば、リポジトリへのアクセス権の付与もスムーズにできます。
リポジトリがOrganizationに属するものの場合には、Github側の画面で[Settings] -> [Application]と進んで、以下のFOSSAの画面を開き、右下のボタンでそのOrganizationへのアクセスを許可するかを設定します。
自分に許可の権限がある場合には「Grant」になり、これを押下すればすぐにFOSSA上で参照可能になります。一方、「Request」になっているものは許可の権限がない場合なので許可の権限がある人に連絡するようにしましょう。
ちなみに、この許可の設定はGithubにログインするときの画面でも表示されますので、そこでチェックしてしまってもよいでしょう。
その他詳細は、FOSSAの公式ドキュメントを参照してください。
リポジトリのライセンス情報をスキャンする
試しにスキャンしてみると以下のように検出されました。
よく見てみると、LICENSEファイルだけでなくあらゆるファイルをスキャンして、その中に含まれるライセンス表示を余すところなく見つけてくれています。
リポジトリによっては、かなりの量になるので最初のスキャンは結構根気のいる作業になります…。
では、ここからはスキャンの結果をどのように見ていけばよいか少しだけ見ておきます。
ISSUES
上記の画面はISSUESです。ここでは事前に決められたポリシーに従って操作が必要な問題を示してくれています。
今回は特にポリシーで「Flag for Reviews」に設定されているライセンスについて表示されています。これはつまりもともとこれらのライセンスについては目視確認をするように設定されているということです。
デフォルトで存在しているポリシー「Standard Bundle Distribution」を見てみると、たしかにレビューを要求されたライセンスは「Flag for Reviews」に入っていました。
そこで、ここでは内容をレビューし問題なさそうであれば「Resolve」を押下して解決してしまえばよいみたいです。
ちなみに、ここで表示されたISSUEの結果は、Github Actionにも連携されています。そのためここで何か見つかった場合、Github Actionの実行も失敗することになります。ライセンスチェックをCIに入れられるなんて素敵。
つまり、この画面ではOSS開発時に混入しては困るOSSライセンスをCIの中で常にチェックすることができるというわけです。
LICENSES
次にLICENSESタブを見ます。
ここでは今回のソフトウェアではどのようなライセンスが使われているかを間接的なライセンスも含めてすべて表示してくれます。
ここで見つかったライセンスをもとに、どのようにすればライセンスに準拠できるのか?をすべて明示してくれます。
この画面でやってくれるのはここまでで、ライセンスへの準拠状況のチェックまではしてくれません
さらに言えば、ライセンスの両立性のチェックもしてくれません。しかし、ライセンスをすべて出してくれるだけでも本当にありがたいので、これをもとにライセンス両立性をチェックしていけばよいと割り切って使いましょう。
SaaSサービスなので、今後のアップデートに期待ですね。
OSSライセンスの両立性は事例を見つつ、専門家に頼ろう
ここまでで自分たちが使っているOSSの一覧がわかったので、両立性について調べてみましょう。
ただ、特に両立性の問題になるのは伝播性を持つGPL系のライセンスです。これらについてはOSS界隈では非常に注意が必要としていろんなところで調査方法や、両立性が破綻してしまった場合の対処法などをまとめてくれていたりします。
まず、GPLライセンスを発行しているGNUの公式ドキュメントを見てみましょう。日本語は少しわかりにくいですが、ここでGPL系のライセンスについて何と両立性(互換性)があるかを公式の見解としてみることができます。
次に、経済産業省の調査文書などです。少し調査時期は古いように思えますが、肝心のGPL v3などについての調査や、過去の係争に関する報告書が上がっています。OSSライセンスを調べる理由の一つに係争リスクをなくすことがあるので、本当に心配な場合にはこのあたりの文章を法務部門の人と一緒に確認するのがいいと思います。
他にも経産省で調査された様々な企業の管理手法をまとめた資料もあったりします。
このように少し調べてみれば、参考になる資料は大量に出てきます。そのためある程度であれば問題なさそうな使い方などわかりそうにも思えます。
しかし、OSSライセンスはあくまで著作権に関する話であって、法律の素人なエンジニアには本当に問題ないかを判断することはできないと思います。
OSSを扱うエンジニアとして最低限のライセンスに関する知識やどういうリスクがあるものなのか理解することは重要ですが、本当に問題ないかを判断するには法律の専門家に頼るのが安全なのではないでしょうか。
まとめ
今回はFOSSAのサービス内容の一部を紹介しつつ、OSSの両立性の調べ方について少しだけヒントをご紹介しました。
別記事で書きましたが、OSSの両立性は最悪OSS公開ができない事態を招きます。私の場合にはOSS公開する気が当初なかったことも原因でOSS公開できないライブラリ構成になっていたわけですが、最初からOSS公開を目指している場合には、FOSSAのようなOSS調査ツールとOSS利用に関する知識を身に着けた上で、開発を進めるのがいいのでしょう。
FOSSAを使っていくとしたら、少し具体的なとして以下のように運用が考えられると思います。
- 最初に公開したいOSSのライセンスを決める
- FOSSAにそのOSSライセンスで使えないライセンスが混入しないようルールを作る
- Githubでリポジトリを作る
- FOSSAにそのリポジトリを連携する
- CIが実行されるたびに、ライセンスチェックがされたら、ルール通りに使ってはいけないライセンスが入っていないか確認する
これからOSSを公開しようとしている、OSSを作ろうとしているという人にとって少しでもOSS公開の障壁を減らすような情報を提供できていたらうれしいです。
(おまけ)公開予定のソフトウェアに対してライセンスを表示してみる
ここまで使っているOSSのライセンスの話ばかりしてきましたが、結局公開するソフトウェアをどのライセンスで公開するのか?というのも重要な話です。
どれにするかについては使っているライセンスやソフトウェアの使用目的、組織の方針などもあるでしょう。
ここでは、ライセンスをどれにするか決めたら、それをどう表示するか?を書いていきます。
実はGithubにはライセンス表示をサポートする機能があります。
まず、リポジトリを作成するときです。作成時にLICENSEファイルを作成するか選択する項目があるので、そこから選択してしまえば作成されます。
詳しくは、以下の記事をご覧ください。
ただ、今回はすでに開発中のリポジトリに対して追加したいのでこの機能は使えません。
そこで、ここからLICENSEファイルをあとから追加する方法を紹介します。
LICENSEファイルそのものはただのテキストファイルなので、どこからでも追加可能ですが、そのテンプレートの作成がGithub上から可能です。
GithubのWeb上の画面からファイル追加で進めていくと、以下のようにライセンスに応じたLICENSEファイルを作成することができます。
詳しい手順は、公式ドキュメントを参照してください。