生成AIでソースコードを作成した場合、意図せずOSSが混入してしまう場合がある。
OSSライセンスの再配布・表記義務・改変条件に沿う必要性から、これらOSSおよびOSSライセンスは検知しておくことが求められる。
実務上はツールでコードスニペットをスキャンするのが有用であるが、「どれくらい一致していたら、そのOSSを使っていると判断できるか?」は、慎重に扱うべきポイントとなる。
法的・実務的な判断ポイント
ソースコードの著作権侵害に関しては下記の通りまとめているものの、今のところ、具体的な法律上の行数基準はない。
プログラムのソースコードが著作権法上の保護対象に含まれる(著作権法第10条第1項第9号)ことはよく知られているが、ではこれをどこまで利用す...
そこで、実務上は主に以下の観点で判断することとなるかと思う。
「創作的表現」の有無が重要
著作権上の保護対象は、「創作的表現」であり、単に短い定型コード(例:forループ、import文など)は保護されない。
しかし、短いならOSSを使っていないと判断するのは早計である。
たとえ5~10行程度でも特定OSSの独自ロジックや特徴的な関数構造 に一致していれば、利用している疑いは生じる。
逆に、仮に多くの行が一致していても、単純なユーティリティや一般的実装(例:バブルソート) なら著作物性は低く、OSS利用とは断定できない。
コードの著作権に関する判例
下記判例は著作権侵害に関するものである上、日本と米国の判例が入り交じっており、あくまで参考という位置づけだが、コードの一致する行数は客観的な事実として参酌されつつも、それのみをもってOSSライセンスの適用可否が決まるものではないと考えることができるかと思う。
測量業務用ソフトウェア事件(一審)東地 H19(ワ)24698
- ソースコードの記載が全く同一であるもの
- 実質的に同一であるもの(会社名の置換え,変数名,フォーム名等,プログラムとして機能する上で、その名称の違いに意味のない違いであり、これらの違いがプログラムの表現として実質的な意味を持たないもの。)
の割合が全体の90%を下ることはないことを理由に、被告プログラムと原告プログラムは、原告プログラムの作成者の個性が表現された部分について、実質的同一性ないし類似性が認められる、と判断している。
Oracle v. Google (2010-2021)
GoogleのAndroidで、OracleのJava APIを利用する際に11000行ものコードをコピーしていたと訴えられていたが、このAPIはプログラマーが広く利用しているものとして、最高裁は米国著作権法上の「フェアユース」に該当すると判断した。
ある判事は、「ここでOracleの著作権の権利行使を認めることは、公衆に損害を与えるリスクがある」と述べた。
参考になる実務基準(業界慣行・ツール判断)
| 判断軸 | 内容 |
|---|---|
| 行数・一致率 | 多くのスキャンツールは 20~30行連続一致 や 70〜80%の一致率 を「要警告」と扱う |
| ファイル名・関数名 | 関数名・コメント・API呼び出しがOSSの構造ごと一致している場合はもっと早く警告 |
| 特徴的パターン | アルゴリズムの順序・変数名・コメントまで一致 ⇒ 実質コピーの可能性大 | TD |
スニペットスキャンの実務ガイド
「何行」一致は目安の1つであり、ポイントは「特定OSSの創作的ロジックかどうか」となる。
行数に囚われず、疑わしい一致が出た段階で、ライセンスを確認するのが最も安全である。
| リスク | 特徴 | 対応 |
|---|---|---|
| 低 | 一般的な構文・短い定型コード | 無視可能(著作物性なし) |
| 中 | 特定OSSの関数名・処理が部分一致 | 出典確認・必要に応じライセンス確認 |
| 高 | 例えば30行以上一致、特徴的構造・コメント一致 | OSS利用の可能性大・要ライセンス確認 |