依存関係
オープンソースライセンスコンプライアンス
オープンソースは無料で使えますが、無条件ではありません。すべてのパッケージにはライセンスがあり、オープンソースライセンスコンプライアンスとは、製品にどのライセンスが含まれているかを把握し、それらが求める条件を満たすことです。そうしたライセンスの大半は、チームの誰も選んでいない依存関係を通じて入り込みます。
更新日
このページは一般的な情報であり、法的助言ではありません。特定の製品に関する判断については、弁護士にご相談ください。
オープンソースライセンスの種類
| 種類 | 例 | 主に求められること |
|---|---|---|
| パーミッシブ | MIT、BSD、Apache-2.0 | 著作権表示とライセンス表示を残す。Apache-2.0には特許に関する条項もある。 |
| 弱いコピーレフト | LGPL、MPL-2.0 | ライセンスされたコンポーネント自体への変更を共有する |
| 強いコピーレフト | GPL-2.0、GPL-3.0 | それと一緒に配布するソフトウェアを、ソースとともに同じ条件で提供しなければならない |
| ネットワークコピーレフト | AGPL-3.0 | 強いコピーレフトと同じで、さらにユーザーがネットワーク経由でソフトウェアを利用する場合にも適用される |
| ソースアベイラブル | BUSL、SSPL | オープンソースではない:ソースは公開されているが、利用が制限される |
コピーレフトライセンスとは?
コピーレフトライセンスは、配布するものが同じ条件のままであることを条件に、ソフトウェアの使用、変更、共有を認めるライセンスです。オープンソースをオープンなまま保つための仕組みです。商用製品にとってのリスクは、強いコピーレフトのコンポーネントを自社のコードにリンクすると、自社のコードも公開しなければならないのかという問題が生じうることです。
それが当てはまるかどうかは、コンポーネントの使い方と製品の提供方法によって決まります。顧客に配布するソフトウェアは社内ツールよりも影響を受けやすく、SaaS製品は通常GPLの配布条件は回避できますが、AGPLの条件は回避できません。
よくあるコンプライアンスリスク
- 推移的なライセンス。パーミッシブなパッケージが、コピーレフトのパッケージに依存していることがあります。直接の依存関係だけを確認していると、これを見落とします。
- 表示の欠落。ほとんどのライセンスは帰属表示を残すことを求めており、表示ファイルの入れ忘れが最もよくある違反です。
- ライセンスの変更。プロジェクトは新しいバージョンでライセンスを変更することがあるため、アップグレードによって条件が変わる可能性があります。
- 宣言と実態の違い。パッケージのメタデータが誤っていたり不完全だったりすることがあり、ベンダリングされたコードが独自のライセンスを持つこともあります。
- デューデリジェンス。買収を検討する企業や大口顧客は、多くの場合急な期限でライセンスのインベントリを求めてきます。
準拠を保つ方法
- ポリシーを定める。製品の種類ごとに、許可するライセンス、レビューが必要なライセンス、禁止するライセンスを決めます。
- インベントリを作成する。SBOMは、推移的依存関係を含め、各コンポーネントをそのライセンスとともに一覧にします。
- 自動でチェックする。CIでポリシーを適用し、新しい依存関係が監査の段階ではなく、追加された時点で失敗するようにします。
- 義務を果たす。表示ファイルを生成し、ライセンスが求める場合はソースを提供します。
- 記録を残す。インベントリをリリースごとに保存します。問われるのはたいてい、すでに出荷したバージョンについてだからです。
ライセンスコンプライアンスソフトウェアの役割
ライセンスコンプライアンスは、ソフトウェアコンポジション解析の標準的な一部です。ツールはコンポーネントを特定し、そのライセンスを報告し、ポリシー違反を指摘します。ツールによって深さが異なります。
- 宣言ライセンス:ほとんどのツールは、各パッケージがメタデータで宣言している内容を読み取ります。高速で、一般的なケースをカバーできます。
- 詳細なライセンススキャン:FOSSAとBlack Duckはコード内のライセンス文も解析し、帰属表示レポートや法務レビューを支援します。CRACIとFOSSAの比較とCRACIとBlack Duckの比較をご覧ください。
- 無料のツール:多くのSBOMジェネレーターとSCAスキャナーは、宣言ライセンスを無料で報告します。おすすめのSCAツールをご覧ください。
CRACIの位置付け
CRACIはビルドの中で宣言ライセンスを扱います。GitHub Actionsのランナーとして、ジョブが取り込むすべてのパッケージを記録し、それぞれに宣言ライセンスが付くため、コピーレフトライセンスを製品に入り込む前に検出できます。ライセンスポリシーのルールでライセンスに応じてビルドをブロックでき、CycloneDXとSPDXのSBOMエクスポートには各コンポーネントの宣言ライセンスが含まれます。CRACIはパッケージが宣言する内容をもとに動作するため、法務レビューのワークフローやライセンス文の解析が必要な場合は、専門ツールを併用してください。
オープンソースライセンスコンプライアンスに関するよくあるご質問
オープンソースライセンスコンプライアンスとは何ですか?
使用するソフトウェアにどのオープンソースライセンスが適用されるかを把握し、表示を残す、ソースコードを共有するといった条件を満たすことです。
コピーレフトライセンスとは何ですか?
配布するものが同じ条件のままであることを条件に、ソフトウェアの使用と変更を認めるライセンスです。最もよく知られた例はGPLです。
GPLのコードを商用ソフトウェアで使えますか?
使えます。ただし、それを含むソフトウェアを配布する場合、そのソフトウェアのソースをGPLで提供しなければならない可能性があります。コードの組み合わせ方が重要になるため、個別のケースについては法的助言を受けてください。
コピーレフトはSaaSにも適用されますか?
GPLの条件は一般に配布によって発生し、SaaSは通常それを回避します。AGPLは、ネットワーク経由でソフトウェアを利用するユーザーにも条件を広げることで、そのギャップを埋めています。
商用利用に最も安全なオープンソースライセンスは何ですか?
MIT、BSD、Apache-2.0などのパーミッシブライセンスが、求める条件が最も少ないものです。それでも表示は残す必要があります。
依存関係のライセンスはどう確認すればよいですか?
推移的依存関係と宣言ライセンスを含むSBOMを生成するか、SCAツールを使います。CIでポリシーを適用し、新たな違反があればビルドが失敗するようにします。