Aikido

現代ソフトウェアにおけるオープンソースライセンスのリスクを理解する

マッケンジー・ジャクソンマッケンジー・ジャクソン
|
#
#

オープンソースはソフトウェア開発史上最高の出来事の一つである。

また、意図せずに法的義務を負うことになってしまう最も簡単な方法の一つでもあります。

ほとんどのチームは、オープンソースの依存関係に大きく依存していることを認識しています。しかし、それらの依存関係がどのライセンスを使用しているか、それに伴う義務は何か、あるいはそれらのライセンスが推移的依存関係やコンテナイメージを通じてどのように伝播するかを正確に把握しているチームは少ないのです。

そのギャップこそが、我々がオープンソースライセンスリスクと呼ぶものです。

オープンソースライセンスリスクとは何か?

すべてのオープンソースパッケージにはライセンスが付随します。そのライセンスは、コードに対して許可される行為と、その見返りとして行わなければならないことを定義します。

ライセンスリスクは、それらの義務がソフトウェアの開発、提供、収益化の方法と矛盾する際に発生します。

一般的な例としては:

  • コピーレフトライセンスは、特定の条件下でソースコードを共有することを要求する場合があります
  • 帰属表示の要件とは、配布物にライセンス条項または著作権表示を含める必要があることを意味します。
  • 制限付きライセンスは、商用利用を禁止したり、通常とは異なる条件を課したりする場合があります。
  • ポリシー違反は、依存関係が御社が許可していないライセンスを使用した場合に発生します

これはオープンソースが危険だという意味ではない。単にライセンスはルールであり、コードが自由であってもルールは依然として適用されるということだ。

一般的なオープンソースライセンスとその主なリスク

ライセンス タイプ よくある場所 留意すべき主なリスク
マサチューセッツ工科大学 寛容な JavaScript、npm、Python 配布物には著作権表示とライセンス条項を含めること。出荷製品では見落とされがちである。
BSD (2条項 / 3条項) 寛容な インフラストラクチャ、ネットワークライブラリ 帰属表示が必要;3項は寄稿者名の推奨目的での使用を制限する
アパッチ 2.0 寛容な Java、クラウドネイティブ、CNCFプロジェクト 帰属表示とNOTICEファイルが必要;特許終了条項を含む
ISC 寛容な システムレベルのツール MITと非常に似ている;帰属表示は依然として必要
GPL v2 強力なコピレフト システムツール、古いライブラリ 組み合わされた作品の一部として配布される場合、ソースコードの公開が必要となる場合があります
GPL v3 強力なコピレフト セキュリティ、暗号通貨、コマンドラインツール 反ティボ化条項および特許条項を追加;企業ポリシーにより頻繁にブロックされる
LGPL v2.1 / v3 弱いコピーレフト C/C++共有ライブラリ 動的リンクは許可されるが、静的リンクや変更はソース開示要件を引き起こす可能性がある
AGPL v3 ネットワーク・コピーレフト データベース、バックエンドサービス ソフトウェアがサービスとしてのみ提供される場合でも、ソースコードの開示を要求できる
MPL 2.0 ファイルレベルのコピーレフト Firefox、いくつかのバックエンドライブラリ ライセンスされたファイルへの変更は開示されなければならない。ファイルの混合は混乱を招く可能性がある。
CDDL 弱いコピーレフト データベース、レガシーJava GPLと互換性がない;ライセンスの競合が再配布を妨げる可能性がある
EPL 2.0 弱いコピーレフト Javaフレームワーク ファイルレベルのコピーレフト; GPLとの互換性の問題
SSPL ソース公開(OSIではない) データベース(例:MongoDBのフォーク) 商用利用制限;一般的にオープンソースとは見なされない
BSL ソース利用可能 データベース、インフラツール オープンソース化には時間差が伴う;商用利用制限は転換時まで適用される
無免許 / パブリックドメイン パブリックドメインのような 小規模ユーティリティ 一部の法務チームは、管轄権の執行可能性が不明確であるため拒否する。
独自開発/カスタム 制限付き ベンダー向けSDK 利用規約により、再配布、改変、または商用利用が禁止される場合があります。

なぜこれがチームを度々不意を突くのか

ライセンス問題の大半は、誤った判断が原因で発生するわけではない。現代のソフトウェアが複雑で多層的、かつ急速に進化しているためである。

ライセンスリスクが見落とされやすい理由をいくつか挙げると:

1. 推移的依存関係は急速に積み上がる

一つパッケージを追加する。そのパッケージがさらに十個を追加する。それらがさらに五十個を追加する。

ツリーのどこかで、依存関係があなたのチームが直接選択することのないライセンスを導入する。それでもあなたはそれを出荷する。

2. ライセンスメタデータは混乱している

パッケージレジストリは完璧ではありません。ライセンスが欠落していたり、誤ってラベル付けされていたり、過度に広範な場合があります。複数のライセンスを記載しているパッケージもあれば、バージョン間でライセンスを変更するパッケージもあります。

単一のメタデータフィールドに依存するだけでは、往々にして不十分である。

3. コンテナは独自の驚きをもたらす

ソースリポジトリはクリーンかもしれませんが、コンテナイメージにはシステムパッケージ、言語ランタイム、ビルドツールが含まれています。

それらにもライセンスが付いています。

4. 監査は意図を問わない

顧客、パートナー、調達チームは、SBOM(ソフトウェア構成材料リスト)とライセンス開示をますます要求しています。「存在に気づかなかった」という回答は、監査時に納得のいく答えとはなりません。

適切なライセンス管理の実践例とは

ライセンスリスクを管理するのに、法学の学位や半年ものプロセスは必要ありません。これをうまく行うチームは、通常、いくつかのシンプルな原則に従っています。

明確なライセンス方針を定義する

許可するライセンス、審査が必要なライセンス、ブロックするライセンスを決定する。 

年に一度ではなく、継続的にスキャンする

ライセンスチェックは、通常のワークフローの一部として自動的に実行される場合に最も効果的です。プルリクエスト、CI、リリースパイプラインは、問題を早期に発見するのに理想的な場所です。

依存関係がリリースされる前にライセンス問題を修正することは、顧客が関与した後に修正するよりもはるかに容易である。

真のリスクを優先する

すべてのライセンス検出結果が同等の注意を払う価値があるわけではない。すべてを重大事として扱うスキャナーは、すぐに背景雑音と化してしまう。

最もリスクの高いライセンスを目立たせ、チームが迅速かつ自信を持って行動できるようにしたい。

監査対応可能な出力を生成する

いずれ誰かがSBOMやライセンスレポートを要求する時が来る。その時は「エクスポート」をクリックするだけで、スプレッドシートの冒険を始める必要はない。

免許執行の実践 

ライセンスの執行は、開発者が既に活動している場所で実施するのが最も効果的である。

実際には、プルリクエストやCI実行時にライセンスチェックが自動的に行われ、別途監査プロセスとして実施されることはありません。依存関係にポリシー違反のライセンスが含まれている場合、チームは対応方法を選択できます:変更をブロックする、レビュー対象としてフラグを立てる、あるいは単に監視するといった対応が可能です。

コードがマージされる前にライセンス問題を表面化させることで、実施を予測可能にし、リリース時や監査時の直前の不測の事態を防ぎます。

Aikido 保険リスクをどうAikido (そしてなぜ信頼できるのか)

Aikido 、正確性、低ノイズ、監査対応性を優先する多層的なライセンス検出Aikido 。


多くのライセンススキャナーは、静的なパターンマッチングや不完全なメタデータに依存することで、大量の誤検知を生成します。時間の経過とともに、これは結果への信頼を損ない、チームがライセンスの検出結果を完全に無視する原因となります。

Aikido パッケージレジストリからの単一の「ライセンス」フィールドにAikido 。現実の依存関係ツリーでは、そのメタデータはしばしば欠落しているか、一貫性がなく、あるいは誤解を招くものです。

代わりに、正確性と 監査 対応性を両立させるよう設計された階層的なプロセスを採用しています:

1) 完全な依存関係とライセンスのグラフを構築します

複数のエコシステムからマニフェストとロックファイルを取り込み、依存関係グラフに正規化します。各依存関係にはレジストリとリポジトリのメタデータが追加されるため、トランジティブ依存関係やコンテナイメージ内のOSパッケージを含め、実際に提供しているソフトウェアの信頼性の高いインベントリを取得できます。

2) 一般的なケースについてはルールを優先する

標準ライセンス(MIT、Apache-2.0、BSDなど)を持つ「退屈な80%」のパッケージについては、Aikido 決定論的な検出Aikido 。これにより高速かつ一貫した動作が実現され、不要なノイズを回避できます。

3) 曖昧または複雑なケースに対するAI分析

ライセンスが不明確な場合(カスタム条項、特殊な書式、メタデータの欠落、複数のライセンスファイルなど)、Aikido AIベースの分析をAikido 、パッケージ内の内容を解釈するとともに、静的ツールでは見落とされがちな義務を特定します。

大規模または非標準的なライセンステキストを処理するため、ライセンスファイルを関連セクションに分割し、モデルが重要な部分(コピーレフト条項、再配布要件、制限付き使用条件など)に集中できるようにします。

4) 高影響エッジケースに対する人間の法的検証

Aikido 検証ステップAikido 、曖昧な結果や重大な影響を及ぼす可能性のある発見事項を法律専門家が再審査できます。これにより、最終的な分類が単なる自動化による最善の努力ではなく、現実世界のライセンス義務を反映することが保証されます。

5) バージョン固有の結果とポリシー適用

ライセンス義務はバージョン間で変更される可能性があります。Aikido 、配布する依存関係の正確なバージョンに対してAikido 、そのデータをポリシー制御に連携します。これにより、チームはCI/CD環境内で直接「許可/審査/ブロック」ルールを適用できます。

Aikido

能力 Aikido ソケット JFrogキュレーション
ライセンス検出手法 ハイブリッド(ルール+AI+法的審査) 静的パターンマッチング メタデータ+ルール
偽陽性
カスタム/独自ライセンス 強い 限定 限定
バージョン固有の解決策 はい しばしば脆い パーシャル
PR-timeの強制 はい はい はい
マルウェア検出 はい いいえ 限定
CVE未登録/CVEなしのリスク はい いいえ 限定
生態系のカバー率 非常に広い JS中心の 広範な
コンテナ内のOSパッケージ はい パーシャル はい

Aikido 、ルール、AIベースの分析、法的検証を組み合わせたハイブリッドアプローチAikido 。これにより、主に静的パターンマッチングに依存するツールよりも、誤検知が少なくなり、カスタムライセンスやプロプライエタリライセンスの処理が向上します。

ライセンス条文のみに焦点を当てるツールとは異なり、Aikido マルウェアやCVE登録前のリスクAikido 検出するため、ソフトウェアサプライチェーンリスクをより包括的に把握できます。対象範囲はアプリケーションの依存関係を超え、コンテナイメージ内のOSパッケージまでカバーします。

Socketは主にJavaScriptエコシステムと静的ライセンス検出に焦点を当てているため、誤検知率が高く脆弱なバージョン管理になりがちです。JFrog Curationはより広範なエコシステムをサポートしますが、カスタムライセンスやCVE以外のリスクへの対応は限定的です。

ライセンスの執行は孤立して存在するものではない。現実世界のサプライチェーンリスクには、マルウェア、侵害されたパッケージ、そしてまだCVEが割り当てられていない新たな脅威が含まれる。Aikido 、その広範な状況の一部としてライセンスリスクに対処するためにAikido 。

最終的な所感

オープンソースライセンスは恐れるべきものではなく、尊重すべきものです。

現代の依存関係ツリーの規模では、手動での追跡は機能しません。ライセンスリスクを先回りして管理するチームは、次の3点を徹底しています。可視化の自動化、真の問題の優先順位付け、開発初期段階でのチェックの統合です。

まさにそれが、私たちが合気道を築いたAikido 。

既存のワークフローにライセンススキャンを組み込む方法を確認したい場合は、数分で試用したり最初のSBOMを生成したりできます。将来のあなた、そしておそらく法務チームも感謝するでしょう。

4.7/5

今すぐソフトウェアを保護しましょう

無料で始める
CC不要
デモを予約する
データは共有されない - 読み取り専用アクセス - CC不要

今すぐ安全を確保しましょう

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要。