AI 生成程式碼的授權合規
AI 生成程式碼的法律和合規風險,包括授權污染、版權暴露,以及程式碼生成工具的組織治理。
概述
AI 程式碼生成引入了安全團隊必須理解的新類別法律和合規風險。當 LLM 生成程式碼時,它從訓練資料中的模式汲取靈感,這些訓練資料包括在各種授權下的數十億行程式碼,包括 GPL 等 copyleft 授權。生成的程式碼可能複製訓練資料的實質部分,潛在地引入組織不知情的授權義務。
這不是假設性風險。GitHub Copilot 已成為集體訴訟(Doe v. GitHub, Inc.)的主體,指控其在未歸屬的情況下複製授權程式碼。使用 AI 程式碼生成工具的組織必須評估和管理 AI 生成程式碼包含受版權保護材料或引入授權義務的風險。
法律環境
版權和 AI 生成程式碼
AI 生成程式碼的法律地位涉及幾個未解決的問題:
-
訓練資料版權:模型是否以構成合理使用的方式在受版權保護的程式碼上訓練?這正在積極訴訟中。
-
輸出版權:AI 生成的程式碼是否可以獲得版權保護?美國版權局已表示純粹 AI 生成的內容不可版權,但透過人類-AI 協作生成的程式碼可能可以。
-
授權繼承:如果 AI 輸出實質上複製了 GPL 授權的程式碼,輸出是否繼承了 GPL 義務?法律學者意見不一,但風險規避的組織應將其視為可能。
-
歸屬要求:許多開源授權(MIT、BSD、Apache 2.0)需要歸屬。AI 工具通常不提供生成程式碼的歸屬。
LicenseRisk 資料類別模型化 AI 生成程式碼的授權風險場景。四個主要場景:
- AI 生成的程式碼匹配 GPL 授權項目(嚴重):GPL 要求衍生作品在 GPL 下分發。如果 AI 輸出是 GPL 程式碼的衍生物,接觸該程式碼的整個程式碼庫可能需要 GPL 授權。補救措施:刪除或重寫匹配的程式碼。
- AI 生成的程式碼匹配 AGPL 授權項目(嚴重):AGPL 將 GPL 延伸到網路使用。如果生成的程式碼在網路服務中,AGPL 可能要求發布整個服務原始碼。
- AI 生成的程式碼匹配 MIT 授權項目但缺少歸屬(中等):MIT 授權要求包含版權聲明。缺少歸屬在技術上是違規。
- AI 生成的程式碼來源未知(低):直接風險較低,但程式碼可能匹配尚未識別的授權項目。
AI 工具授權比較
AIToolLicenseProfile 資料類別比較各工具的法律特徵:
| 工具 | 訓練資料來源 | 賠償保護 | 提供歸屬 | 風險摘要 |
|---|---|---|---|---|
| GitHub Copilot | 公開 GitHub 儲存庫 | Copilot Business/Enterprise 可用 | 否 | Business 客戶有 IP 賠償;個人方案無 |
| Cursor | 取決於底層模型(OpenAI、Anthropic) | 取決於模型提供商 | 否 | 依賴上游模型提供商的政策 |
| Claude Code | Anthropic 訓練語料庫 | 某些企業方案可用 | 否 | 企業協議可能包含 IP 條款 |
| Aider | 使用所選模型提供商的 API | Aider 不提供(開源工具) | 否 | Aider 本身 MIT 授權但不涵蓋生成程式碼 |
偵測:程式碼相似性分析
CodeSimilarityScanner 類別掃描 AI 生成程式碼與已知授權程式碼的相似性:
normalize_code:通過刪除注解和標準化空白來標準化程式碼以進行比較。
fingerprint_code:使用 50 個符元的滑動視窗生成滾動雜湊指紋。每個視窗的 SHA-256 雜湊前 16 個字元作為指紋。
check_similarity:根據指紋資料庫檢查程式碼,計算重疊分數。對重疊超過 30% 的項目返回匹配結果,按相似度排序,評估風險(GPL/AGPL + 高相似度 = 嚴重)。
scan_project_for_license_risk 函式掃描整個項目的授權污染,跳過 node_modules 和其他排除目錄。
與現有工具的整合
Shell 掃描管線整合了三個工具:
- ScanCode Toolkit:開源授權偵測,標記包含 GPL 的檔案
- Git grep:識別包含 AI 生成標記的檔案(「Generated by」、「Copilot」、「ChatGPT」、「Claude」)
- NOTICE 和 LICENSE 檔案:檢查歸屬檔案的存在
逐字複製偵測
VerbatimDetector 類別偵測 AI 生成程式碼何時可能是來自訓練資料的逐字複製:
check_for_copyright_headers:在程式碼中搜索版權/授權標頭模式(Copyright (c)、Licensed under、Permission is hereby granted 用於 MIT、GNU General Public License 用於 GPL 等)。在 AI 生成程式碼中發現的版權標頭強烈表明逐字複製。
estimate_originality:根據版權標頭存在(低原創性)、特定項目注解(中等原創性)或無特定指標(高原創性)評估原創性和授權風險。
_has_project_specific_comments 函式搜索引用其他項目的注解(# from、# based on、# adapted from、# see)。
治理框架
組織政策的五個要素:
-
工具批准:所有 AI 程式碼生成工具在部署前必須獲得法律和安全團隊批准。維護帶有授權特徵的批准工具列表,審查服務條款的 IP 條款,驗證賠償覆蓋範圍。
-
開發人員培訓:所有使用 AI 程式碼工具的開發人員必須完成授權合規培訓。培訓涵蓋 copyleft 風險識別,開發人員了解如何使用授權掃描工具。
-
程式碼審查流程:AI 生成的程式碼必須經過與第三方程式碼相同的授權審查。在 CI/CD 管線中自動授權掃描,對掃描器標記的程式碼進行人工審查。
-
事件響應:處理在 AI 生成程式碼中發現授權違規的流程。立即隔離違規程式碼,24 小時內通知法律團隊,制定補救計劃(重寫、授權或刪除)。
-
記錄保存:維護 AI 程式碼生成工具使用和授權合規決定的記錄。記錄哪個工具生成了哪段程式碼,保留授權掃描結果,記錄有理由的政策例外。
generate_compliance_checklist 函式為使用 AI 程式碼生成的項目生成 10 項合規清單,涵蓋工具批准、IP 賠償、掃描配置、NOTICE 檔案更新、培訓完成等。
實際緩解策略
| 風險 | 緩解措施 | 優先級 |
|---|---|---|
| GPL 程式碼複製 | 使用 ScanCode Toolkit 進行自動掃描 | 嚴重 |
| 缺少歸屬 | 追蹤 AI 生成程式碼,掃描授權標頭 | 高 |
| 版權侵權 | 啟用 Copilot 重複偵測過濾器 | 高 |
| 未知授權暴露 | 定期全程式碼庫授權掃描 | 中 |
| 開發人員不了解 | 授權合規培訓計劃 | 高 |
| 無賠償保護 | 與 IP 覆蓋談判企業協議 | 中 |
| SaaS 中的 AGPL 污染 | 阻止 AGPL 匹配建議,掃描 CI/CD | 嚴重 |
參考資料
- Doe v. GitHub, Inc. — 關於 Copilot 授權合規的集體訴訟 — https://githubcopilotlitigation.com/
- US Copyright Office, Copyright Registration Guidance: Works Containing Material Generated by Artificial Intelligence — https://www.federalregister.gov/documents/2023/03/16/2023-05321/
- ScanCode Toolkit — 開源授權偵測 — https://github.com/nexB/scancode-toolkit
- GitHub Copilot Terms of Service — IP and License Provisions — https://github.com/features/copilot
- OWASP Top 10 for LLM Applications 2025 — LLM05: Supply Chain Vulnerabilities — https://genai.owasp.org/llmrisk/
- Software Package Data Exchange (SPDX) License List — https://spdx.org/licenses/
為什麼 AGPL 授權對在網路服務中部署的 SaaS 應用程式特別危險?