认可的时刻悄无声息地到来了。一名开发人员正在构建一个人工智能代理来协助进行依赖管理,他观察到系统显示了一个软件包推荐。这个包很晦涩:不到 12 个 GitHub star,两年多没有提交,一个 README 是一次性编写的,从未修改过。毫无疑问,这也是他自己的作品。他多年前发表过但基本上被遗忘的东西。
这次经历并不完全是指责,也不完全是奉承。它以一种更特殊的方式让人迷失方向:人工智能知道一些关于他的事情,而他从未告诉过它。它在庞大的公共存储库中的某个地方遇到了他的工作,它已经接受过培训,吸收了代码中嵌入的模式和决策,现在正在完全不同的环境中复制这些决策——他自己使用不同的工具为不同的目的构建了这些决策。这个循环在他没有意识到或参与的情况下关闭了。
摄入量
现代面向代码的大型语言模型背后的训练语料库并不小。 GitHub Copilot 是由 Microsoft 和 OpenAI 开发的 AI 结对编程工具,接受了数十亿行公开可用代码的训练,该数据集本质上包含大量的质量、新近度和意图。 Code Llama、StarCoder 等模型以及 GPT-4 和 Claude 等通用系统中嵌入的代码生成功能利用了来自 GitHub、npm、PyPI、Stack Overflow 和各种文档存储库的类似广泛集合。
结果是,开发人员公开发布的任何内容(上传的任何包、发布的任何答案、提交的任何自述文件)基本上都有合理的概率出现在至少一个主要人工智能系统的训练数据中。开发人员积累的劳动、小型实用程序、固执己见的库以及半成品实验,构成了人工智能编码工具用来了解软件是如何制作的重要部分。
“训练语料库并不抽象。它是数百万工作开发人员的劳动积累——小型公用事业公司、固执己见的图书馆、周四下午发布的半成品实验。”
许可证说了什么,没说什么
大多数公开可用的代码都带有开源许可证。麻省理工学院许可证管理着很大一部分公共存储库,授予使用、复制、修改、合并、发布、分发、再许可和销售软件副本的许可。 Apache License 2.0 添加了明确的专利授予和归属条款。两者都是宽容的。早在当前一代人工智能开发工具出现之前,两者就已被广泛使用。
这些许可证并不是针对法学硕士培训而编写的。这不是一个法律技术问题——这是对背景的观察。 2017 年,一位开发人员在 MIT 下发布了一个小型实用程序,当时正在考虑其他开发人员使用、分叉或构建该实用程序。该许可证已针对直接重用的世界进行了校准:您获取我的代码,您使用我的代码,许可证控制您可以用它做什么。该代码成为商业人工智能产品训练中的数据点的场景(该产品随后在开发人员所在的市场中竞争)并不是许可证编写者考虑的用例。
预期使用与实际使用之间的差距是否构成法律问题仍然存在真正的争议。 2022 年针对 GitHub、微软和 OpenAI 提起的集体诉讼称,Copilot 的培训和输出侵犯了开源许可以及代码未经归属地使用的开发人员的权利。 2024 年 6 月,一名联邦法官驳回了大部分索赔,包括主要的 DMCA 版权侵权指控,理由是 Copilot 的输出与原告的作品不够相同。两项较小范围的索赔(违反合同和违反开源许可)仍然活跃,并于 2025 年 4 月向第九巡回法院提起了 DMCA 上诉。诉讼仍在继续,但法律格局已经发生了对被告有利的重大转变。与此同时,开发商在尚未跟上技术发展的合法环境中运作。
公开与同意
这个故事中的开发者公开发布了他的软件包。这个选择很重要。他决定将他的工作放到一个共享空间中,为他所属的生态系统做出贡献。没有人从他身上拿走任何简单意义上的任何东西。包裹是可以找到的;人工智能找到了它。
但“公开”和“同意用于此特定用途”之间存在有意义的区别,而当前的人工智能培训架构在很大程度上打破了这种区别。推理是:你公开了;可用的公共手段;可用的意思是可以使用。这种逻辑就其本身而言是连贯的,但它回避了“公共”在实践中意味着什么的问题——这是一个依赖于上下文的概念,总是涉及对受众是谁以及他们将如何处理材料的一些期望。
当开发人员在 GitHub 上发布代码时,隐含的受众是其他开发人员。隐式用途是读取、分叉、运行、适应。隐含的社会契约是一种相互贡献——开发商向公地提供一些东西;其他人将东西捐献给公地;每个人都受益。使用该代码作为商业系统的训练数据,该系统对来自公共资源的功能的访问进行收费,这在社会契约中的地位有所不同,即使正式的许可证条款没有明确禁止这一点。
这一发现的现象学
使这个案件具有故事价值的主要因素并不是法律层面。这就是体验本身——与你自己的作品相遇的具体质感,通过你用来构建新东西的系统反映出来。
开发商建造了一些东西。他把它放到了世界上。他继续前进。多年后,在不同的环境中使用不同的工具工作时,这项工作再次出现——不是作为他召唤的东西,也不是作为他检索到的东西,而是作为系统根据自己学到的相关知识自行浮现出来的东西。人工智能知道他的工作。他不知道人工智能知道他的工作。这种不对称——人工智能知道他的工作,但他不知道——是当前的结构条件。
这不是传统意义上的抄袭。人工智能没有逐字复制他的代码。它推荐了他写的一个包,从某些方面来说,这更接近于引用而不是盗窃。但引用意味着承认,而这里没有承认——没有向开发人员发出任何信号表明他的贡献已被吸收,他无法知道它已经发生,直到它意外地出现在他自己的工作流程中的那一刻。
这种开发者的经历越来越普遍,尽管具体形式各不相同。开发人员记录了他们自己在 Stack Overflow 上的答案,这些答案在人工智能生成的回复中复制——在某些情况下是逐字的,在其他情况下是轻微解释的——没有归属或致谢。这种现象已在 Stack Overflow 自己的元论坛上进行了详细讨论,其中贡献者指出了向社区免费提供答案与将这些答案转化为商业产品之间的不对称性。其他人发现他们的文档风格在编码助理建议中重现,或者注意到人工智能似乎对他们开发的库或方法特别熟悉——除了对他们的公共贡献进行培训之外,这种熟悉没有明显的来源。
这种现象已经开始在开发者社区中引起讨论,尽管它尚未凝聚成连贯的政治或法律运动。与出版商起诉人工智能公司或唱片公司对模型开发者提出版权索赔的引人注目的案件不同,个人开发者的故事缺乏吸引持续法律关注所需的机构影响力。包裹很小。开发商数量众多。对每个人的伤害都很分散,很难用具体的伤害来表达。
这种分散性并不意味着它在哲学上变得无趣。总的来说,主要人工智能编码工具的训练语料库是软件开发如何工作的肖像——约定、惯用语、提交消息和问题线程和自述文件中编码的辩论。它是由个人贡献行为组装而成的集体工件,每个贡献行为都是在不包括此结果的假设下做出的。
这起案件的表面之下潜藏着一个奇怪的含义。如果开发人员过去的贡献嵌入到他们今天使用的工具的训练数据中,那么开发人员和工具之间的关系就不仅仅是用户和工具之间的关系。从某种意义上说,该工具是由开发人员之前的工作塑造的。它提出的建议在某种程度上受到了开发人员多年前在不同背景下做出的决策的影响,在某种程度上是无法量化的。
这在哲学上很有趣,但难以实施。它不赋予开发商任何特定的权利或补救措施。它不会以任何可追踪的方式更改输出。但这表明开发人员代理和工具代理之间的界限并不像界面所暗示的那样清晰。该工具不是中性工具。除其他外,它是产生它的社区的压缩和转换版本——包括那些在压缩或转换中没有发言权的人。
缺乏法律补救措施并不是问题的结束
开篇故事中的开发商几乎肯定没有可行的法律主张。该包裹是公开的。许可证是允许的。在涉及从公开材料中提取训练数据的案件中,法院追究责任的速度很慢,而且最有可能成功的法律理论——通过记忆和复制侵犯版权、违反许可条件——很难适用于输出是建议而不是复制代码的情况。
但缺乏法律补救措施并不能消除根本问题。它只是重新定位它。如果法律不能解决人工智能培训背景下的同意意味着什么的问题——人工智能系统的开发者对接受培训的人负有哪些义务(如果有的话)——那么答案就必须来自其他地方:来自社区规范、来自平台政策、来自开发者生态系统不断发展的社会契约,而开发者生态系统仍在解决其欠成员的问题。
看到人工智能推荐自己被遗忘的软件包的开发人员十有八九不会提起诉讼。他将思考,在这个世界已经改变了你所提供的东西的方式的时代,将工作投入到世界意味着什么。
这是一个比诉讼更小的故事。对于经历过这一事件的人们来说,这也是更直接的问题。
(这是一个未经编辑的、自动生成的故事,来自联合新闻提要。 八方新聞 工作人员可能没有更改或编辑内容文本。)