Open14

GitHub Copilot のセキュリティ・ライセンスに関する懸念の調査メモ

GitHub Copilot を業務で利用するとなると、以下の 2 つの懸念がある。

  1. 自社のプライベートなコードが GitHub Copilot に送信され、学習モデルとして使われ、外部に流出してしまわないか
  2. 自動生成されたコードが学習モデルとなった public なコードのライセンスを侵害してしまわないか

1 については、コードの一部なら大きな問題にはならないと思われるが、もし一時的にエディタに貼っていたクレデンシャルが送信されて外部流出してしまう可能性があるのであればリスクが低いとは言いづらい。
2 については、ライセンスを侵害すること自体がリスクである。それに加えて、GitHub Copilot がよそのライセンスを侵害する可能性があることがあとから発覚した場合、それまでに GitHub Copilot を使って書かれたコードすべてを精査しなくてはいけなくなる可能性があるのもリスクと考えられる。

1 については、GitHub Copilot 公式サイトで以下のように書かれている。

Will my private code be shared with other users?
No. We use data, including information about which suggestions users accept or reject, to improve the model. We follow responsible practices in accordance with our Privacy Statement to ensure that your code snippets will not be used as suggested code for other users of GitHub Copilot.
(翻訳)私のプライベートコードは、他のユーザーに共有されますか?
いいえ。我々は、モデルを改善するためにデータ(どの提案をユーザーが受け入れるか、または拒否するかについての情報を含む)を、使用します。我々は、あなたのコードスニペットが GitHub Copilot の他のユーザーへの提案コードとして使用されないように、プライバシーステートメントに従って責任ある行動をとります。

これを見る限りでは、GitHub Copilot ユーザーが手元で書いてるプライベートなコードが外部に流出するリスクはなさそうに見える。

他には、プライベートなコードをそもそも送らない設定があるのかが気になるところ。調べると、GitHub の個人の Settings → GitHub Copilot に以下のような設定が存在するのが気になる。

Allow GitHub to use my code snippets for product improvements *
Allow GitHub and its affiliates to use my code snippets to research and improve Copilot suggestions, related models and product features. More information in Privacy FAQ.
(翻訳)GitHub が私のコードスニペットを製品改善のために使用することを許可する
GitHub とその関連会社が私のコードスニペットを使用して、Copilot の提案、関連モデル、製品機能を調査・改善することを許可する。詳細はプライバシー FAQ へ。

Privacy FAQ には以下のように書かれている。

How can I control the use of my data collected by Copilot?
GitHub Copilot gives you certain choices about how it uses the data it collects. User engagement data, including pseudonymous identifiers and general usage data, is required for the use of GitHub Copilot and will continue to be collected, processed, and shared with Microsoft and OpenAI as you use GitHub Copilot. You can choose whether your code snippets are collected and retained by GitHub and further processed and shared with Microsoft and OpenAI by adjusting your user settings. Additional information about the types of telemetry collected and processed by GitHub Copilot can be found in What data does GitHub Copilot collect? below.
You can also request deletion of GitHub Copilot data associated with your GitHub identity by filling out a support ticket. Please note that future data collection will occur with continued use of GitHub Copilot, but you can control whether your code snippets are collected, processed, and retained in telemetry in your Copilot user settings.
(翻訳)どうすれば Copilot が収集した私のデータの使用を制御できますか?
GitHub Copilot は、収集したデータの使用方法について、あなたにいくつかの選択肢を提供します。ユーザーエンゲージメントデータ(仮名の識別子や一般的な使用データを含む)は、GitHub Copilotの使用に必要であり、GitHub Copilot を使用すると収集、処理され、Microsoft と OpenAI に共有されます。あなたは、ユーザー設定を調整することにより、あなたのコードスニペットを GitHub が収集・保持し、さらに処理されて Microsoft と OpenAI に共有されるかどうかを選択できます。GitHub Copilot に収集・処理されるテレメトリーの種類についてのさらなる情報は、下記の「GitHub Copilotはどのようなデータを収集するのですか?」にあります。
あなたは、サポートチケットに記入することで、あなたの GitHub アイデンティティに関連する GitHub Copilot データの削除を要求できます。GitHub Copilot を継続して使用すると、将来的にデータ収集が発生することに注意してください。しかし、Copilot のユーザー設定で、コードスニペットを収集、処理、テレメトリーに保持するかどうかを制御できます。

これらを見ると、個人設定を変更することでこちらの手元のコードスニペットを GitHub Copilot の改善に使われることはなくなりそう。

しかし、FAQ の General には以下のようにも書かれている。

How does GitHub Copilot work?
OpenAI Codex was trained on publicly available source code and natural language, so it works for both programming and human languages. The GitHub Copilot extension sends your comments and code to the GitHub Copilot service, and it relies on context, as described in Privacy below - i.e., file content both in the file you are editing, as well as neighboring or related files within a project. It may also collect the URLs of repositories or file paths to identify relevant context. The comments and code along with context are then used by OpenAI Codex to synthesize and suggest individual lines and whole functions.
(翻訳)GitHub Copilotはどのように動きますか?
OpenAI Codex は、一般に公開されているソースコードと自然言語で学習させたので、プログラミング言語と人間の言語の両方で動作します。GitHub Copilot 拡張は、あなたのコメントとコードを GitHub Copilot サービスに送信します。そして、以下の Privacy で説明するように、コンテキストに依存します。つまり、編集中のファイルや、プロジェクト内の隣接するまたは関連するファイルのコンテンツに依存します。また、関連するコンテキストを識別するために、リポジトリの URL やファイルパスを収集することもあります。コンテキスト内のコメントとコードは、OpenAI Codex によって、個々の行や関数全体を統合して提案するために使用されます。

ここまでを見ると、個人設定で自分のプライベートなコードを GitHub Copilot の改善には使わないように設定できるけど、そもそもコードサジェストのために情報を送信する必要があるので、データ送信自体を完全に止めることはできなさそうに見える。

1 の懸念についてまとめると、GitHub Copilot を利用しているユーザーの手元のプライベートなコードが他のユーザーに共有されることはないと考えられる。しかし、手元のコードは、GitHub Copilot 側に送信される。
GitHub Copilot に手元のコードが送信されることのリスクをどう捉えるかは人によって意見が分かれそうではあるけど、個人的には許容範囲内に思う。

ここからは 2 の懸念について調べていく。

https://www.theverge.com/2021/7/7/22561180/github-copilot-legal-copyright-fair-use-public-code
The Verge による 2021/07/07 の記事。

GitHub の元 CEO である Nat Friedman は、以下の見解を示している。

In general: (1) training ML systems on public data is fair use (2) the output belongs to the operator, just like with a compiler.
(翻訳)一般的には、(1) 公開データを用いた機械学習はフェアユースの範疇である、(2) 出力はコンパイラと同様にオペレータに帰属する。

一方で、US でも公開データによる機械学習をフェアユースとする判例はないとのこと。
類似の判例としては、Google Books が 2 億冊以上の本の文字検索データベースを作ったことは、読者や著者に広く利益をもたらすとして、最高裁はフェアユースの主張を支持したとのこと。
なので、公開データを機械に読み込ませるところまではあまり問題にならないと考えられるのでは、とのこと。

しかし、機械の出力についてはまだ曖昧で今後明らかになっていくもので、機械学習の出力によって著作者から奪ったものがあればその支払いを命じられる可能性はある、とのこと。

https://atmarkit.itmedia.co.jp/ait/articles/1903/27/news013.html
@IT による 2019/03/29 の記事。これは日本での著作権法の話。(GitHub Copilot はサーバーが海外にあるはずであり、日本の法律が適用されない部分もあるので、参考までに)

柿沼氏が重要視するのは「著作権法第三十条の四」だ。この条文により「情報解析」を目的とする場合は、著作権者の利益を不当に害しない場合において、方法を問わず、著作物を利用できる

ここから、単純に機械学習に公開データを使うこと自体は著作権法上の問題はないと考えられる。(ただし記事中にもある通り、サイトの利用規約違反になる可能性はあるし、そのデータを利用することで著作権者の利益を侵害する場合は著作権法上でも問題になりうる)

「データセットを基に生成されたAIモデルは誰のものか?」は、「『AIモデル(学習済みモデル)』という言葉の意味をどう定義するかによるが、『学習済みパラメーターが組み込まれた推論プログラム』と定義すると、学習データを提供した者ではなく、AIモデルを開発(創作)した者がAIモデルに関する各種知的財産権を持つことになると思われる」

公開データを機械学習したモデルは、モデル開発者側が知的財産権を持つことになる。

「AIモデルが生成したコンテンツの権利は誰が有するのか?」は、「日本の著作権法は、著作物として保護されるには『人間が創作すること』が前提になっているので、モデルが完全に自律的に生成したコンテンツは、著作権が発生しないことになる。そのため、生成されたコンテンツは誰でも利用できることになるだろう」

機械学習から完全に自動で生成されたコンテンツには著作権が発生しない。(生成後に人の手によって改変されたらまた違う話になると思われる)

「AIモデルが生成したコンテンツがAIモデル生成に利用した著作物(入力データ)の1つに偶然似てしまった場合、当該著作物の著作権侵害にならないのか?」については、「AIモデル生成に利用したデータ著作物(入力データ)と全く無関係に出力された訳ではなく、入力データにアクセスしていることは間違いないため、著作権侵害に関する要件の一つである『依拠性』があると判断され、著作権侵害になる可能性がある。ただし、ここはさまざまな考え方があり得るところなので、確たる結論は出せない」

そして、やはり機械学習から生成されたコンテンツについては学習データと完全に無関係ではなく、依拠性があると判断され著作権侵害になる可能性がある。しかし、やはり明確な結論は出せないとされている。

https://aws.amazon.com/jp/blogs/aws/now-in-preview-amazon-codewhisperer-ml-powered-coding-companion/
https://aws.amazon.com/jp/blogs/machine-learning/introducing-amazon-codewhisperer-the-ml-powered-coding-companion/
AWS から出た GitHub Copilot 風サービス、Amazon CodeWhisperer の記事。

こちらは OSS だけでなく、Amazon 内部のリポジトリや API ドキュメント、フォーラムを学習データにしているとのこと。
現在はプレビュー期間中で、無料。
JetBrains, VSCode, AWS Cloud9 などから利用できる。
Python, Java, JS をサポート。

そして、既存の学習データに似ているコードスニペットが生成される場合は、利用者にそのスニペットの元となるリポジトリとライセンス情報が通知され、自分のコードに取り込むかの判断材料になる。

また、ステレオタイプに基づいたバイアスをコードから排除する技術も実装されてるとのこと。(詳細はちょっとよくわからない)

https://storialaw.jp/blog/8267
自然言語系 AI サービスの提供事業者が著作権侵害の責任を問われるかについての記事。

GitHub Copilot の自分の懸念は利用者側が著作権侵害になるかなのでちょっとずれるけど、書かれてる法的解釈はとても参考になる。

https://felixreda.eu/2021/07/github-copilot-is-not-infringing-your-copyright/
GitHub Copilot は著作権を侵害しないとする 2021/07/05 の記事。筆者は元欧州議会議員で著作権の改革に関わった人。

テキスト&データマイニングは著作権侵害ではないし、生成される短いコードスニペットは独創性を認められなさそう、とのこと。また、著作権を拡大解釈すると機械的に大量のパターンのコードスニペットを生成して著作権を主張される危険性とかも出てくるので危険、という話。

https://fossa.com/blog/analyzing-legal-implications-github-copilot/
オープンソースのコンプライアンスなどの分野でソフトウェア企業を支援することを専門とする IP 弁護士 Kate Downing 氏に Copilot について質問した 2021/07/14 の記事。

まず、GitHub のコードを使って学習するのは、コードのライセンスに関わらず、利用規約で製品の改善のために使うことを同意していることになるので、著作権を侵害しない、とのこと。GitHub 以外のコードを使うのはフェアユースか裁判所で判断してもらう必要があるけど、Google Books の事例があるから有利、でも法廷で決着するまではわからない、とのこと。

次に、GitHub Copilot が生成するコードについて。こちらは、コードが長くて複雑になるほど著作権で保護される可能性が高くなるとのこと。逆に、短ければ独創性を認められない。また、実際にコーパスのコピーであるかも重要とのこと。なんにせよ、現状で確信を持って評価はできない、とのこと。

予防策としては、明らかに他のコードからコピーされたコード(それっぽいコメントが付いているとか)の提案は使用しないようにするとか。

https://matthewbutterick.com/chron/this-copilot-is-stupid-and-wants-to-kill-me.html
GitHub Copilot はオープンソースを侵害するとする 2022/07/25 の記事。

GitHub のドキュメントの以下の部分で、IP スキャンをユーザーの責任としているけど、IP スキャンをするために必要なコードのライセンス情報を追跡できないようにしていることを問題視している。

You are responsible for ensuring the security and quality of your code. We recommend you take the same precautions when using code generated by GitHub Copilot that you would when using any code you didn't write yourself. These precautions include rigorous testing, IP scanning, and tracking for security vulnerabilities.
(翻訳)あなたのコードのセキュリティと品質を確保するのはあたなの責任です。GitHub Copilot で生成されたコードを使用する際は、自分で書いていないコードを使用するときと同じ予防措置を取ることをおすすめします。これらの予防措置には、厳密なテスト、IP スキャン、セキュリティ脆弱性の追跡が含まれます。

これに対し、コードのライセンス情報を検証可能にすることを提案している。Chain of Custody という考え方らしい。

GitHub Copilot の設定には、パブリックなコードに完全に一致する提案をブロックするオプションがある。

これをブロックするように設定すれば著作権侵害のリスクを緩和できる可能性があると考えられる。しかし、ブロックする設定にしたところで完全に著作権侵害を防げる保証はない。(元のコードと完全一致でなくなれば著作権侵害ではなくなる、という単純な話ではないはずなので)

また、この設定をチームメンバー全員に強制することは保証できない。

ここまで 2 の懸念についていろいろ調べたが、やはり現時点で明確な判断は難しいと思った。

まず、GitHub Copilot が生成したコードに創作性が認められるか、というのが一つの論点になりそう。ただし、生成されたコードを見て創作性が認められるかを素人が判断するようなものではないと思われる。なので、これについてはなにかしら公式な見解が示されるまでは、創作性が認められるかもしれないし、認められないかもしれない、と考えるしかなさそう。

次に、生成されたコードがライセンス侵害にならないか検証できるか、という論点が考えられる。Amazon CodeWhisperer みたいに元となるコードのライセンス情報が表示されるような改善はあれば嬉しいところ。(ただし、Amazon CodeWhisperer が表示する情報がどこまで正確なのかとかはわからない)

とはいえ、普段チームメンバーが書いたコードをレビューするときにライセンス侵害していないか気にしているかとか、Stack Overflow のコードを参考にするときにそのコードの創作性を気にしているかとか言われると、感覚的に怪しい以上のことは判断できていないと思われる。じゃあ Copilot が生成するコードも同じぐらいの注意を払えば十分なのかというと、やはり断言は難しい。

リスクがどれぐらい高そうかというと、実際に著作権侵害が認められるかというと個人的にはとても可能性は低そうに思うけど、もしも認められた場合のリスクが大きいのが悩ましいところ。(倫理的にも思うところがあるだろうし)

やはり公式から GitHub Copilot を使用しても著作権侵害にはならないという法的根拠が示されるか、生成されたコードに対してこういう注意を払えば十分ですよという公式見解が示されないと、まっとうな会社の法務からは GitHub Copilot を使っていいよとは言いづらいだろうなという感想。GitHub 社にはもう少し情報を出してほしいところ🙏

ログインするとコメントできます