四月初 OpenJDK 挂出一份临时政策,没什么人转发。八月初 The Register 写了一篇,帖子在 Hacker News 上冲到五百多分,三百七十多条评论。
中间隔了四个月。变的不是政策,是有人把它跟另一句话摆在了一起。
那句话是拉里·埃里森说的——甲骨文的创始人,八十出头,还自己站在公司大会的台上讲产品的那个老头。去年在 Oracle AI World,他讲:Oracle 写的代码,不是 Oracle 写的。是我们的模型在写。我们只告诉模型这个程序要干什么,它自己想出一步一步怎么做——那个我们平常管它叫"程序"的东西,是模型写的。
四个月后,同一家公司禁止 AI 生成的内容进入 OpenJDK。
不只是源码。文本、图片都算,Git 仓库、GitHub 上的 PR、邮件、wiki 页面、JBS 上的 issue,全算。
政策原话是:贡献中不得包含由大语言模型、扩散模型或类似深度学习系统全部或部分生成的内容。
部分。
一百行里 AI 写了十行,你把那十行改了再交——还是不行,因为它仍然是"部分生成"的。
这条在实操上意味着什么,写过代码的人都清楚:你没法证明它,也没法否认它,它是一条写在纸上、但在任何一次真实的代码审查里都没有办法被验证的规定。
允许的那一半反而很宽松。你私下用 AI 读代码、调试、审查、做研究,随便用。拼写检查和 IDE 的重构功能也行,只要底下不是大模型。
过程随你。产出不能进仓库。
执行方式是 Skara 里的一个复选框。Skara 是 OpenJDK 那套自动审 PR 的机器人,往后提交的时候勾一下,确认自己符合政策。
就这样。
我在政策文本里翻到一句话,觉得比禁令本身有意思得多——OpenJDK 自己承认,人写的和 AI 写的通常很难分辨。承认完,它建议审查者留意"AI 生成内容的典型痕迹"。
一个你亲口承认自己认不出来的东西,你禁了它,然后靠人自己勾一个框。
这不是技术管控。
我的读法是,它管的是出事之后谁签的字。
设想三年后有人拿着版权官司找上门,说 JDK 里某段代码是模型从他的项目里学去的。OpenJDK 现在有东西可以指——那个复选框。你勾了,你说了没有。责任就从项目挪到了提交者身上。
禁令改变不了 AI 代码进不进得来。它改变的是进来之后,法务往哪边看。
如果你觉得这个读法太犬儒,那就看 GraalVM。
GraalVM 是 Oracle Labs 底下的项目,跟 OpenJDK 一样归 Oracle,签的是同一份 Oracle 贡献者协议,面对的知识产权风险一模一样。四月中它明确说可以用 AI——起草、转换、解释、审查、总结代码和文档,都行。注明用了哪个模型是可选的,鼓励但不强制。
它参照的是 Linux 内核那份 AI 编程助手政策,比内核还松一点。
核心原则一句话:提交的人对内容全权负责,包括 AI 写的那部分。你得看懂、验对、能替它辩护,不能推给工具。
同一家公司。同一份法律风险。两个相反的结论。
那份临时政策没解释为什么 AI 代码给 Oracle 自己的产品用可以,进 OpenJDK 就不行。
我猜它解释不了,因为答案不太体面。
GraalVM 出问题,是 GraalVM 的问题。JDK 出问题——全世界的银行核心系统、交易所、政务平台,底下跑的是这个东西。它是 Java 的参考实现,别人照着它做。Oracle 的产品写砸了,Oracle 自己扛;JDK 写砸了,扛的人不在这个房间里。
所以这两份政策的差别不是法律分析出来的,是风险偏好摆出来的。同样一件事,一个项目赌得起,另一个赌不起。
赌不起的那个,选了一个它自己都知道拦不住的办法。
我理解。换我可能也这么干——明知道拦不住,也得有个东西挂在门口,让所有人知道这道门是关着的。
还有一层,比责任划分更值得想。
开源项目的准入门槛一直是"代码好不好"。你交的东西够好,谁写的不重要——这几乎就是开源的定义。写出 Linux 的那个 Linus 不关心你是谁,他只关心那个补丁能不能过。
现在 OpenJDK 加了一条:代码是谁写的。
不是因为它突然在乎出身。是因为"好不好"这件事,在入口处已经判断不了了。政策自己给的第一条理由就是这个——AI 能飞快产出看着挺像样、实际是错的或者不安全或者没法维护的东西,审查负担全甩给了 reviewer。
以前提交一份烂代码是有成本的。你得先花时间把它写出来。
这个成本一直是过滤器。它筛的不是质量,是认真程度——但它一直很管用,因为不认真的人懒得动手。
成本没了。
过滤器也就没了。
于是只能往前挪一格,从查东西挪到查人。这一格挪出去,开源那套"代码自己会说话"就少了一块——少的那块不大,但它在地基上,而地基上的东西一般要过很多年才看得出来少了会怎么样。
Redis 的作者 antirez——就是当年一个人写出那个几乎所有互联网公司都在用的内存数据库的意大利人——去年说过一句:别陷入反 AI 的炒作,编程已经被永远改变了。
他说得对。
OpenJDK 也没错。它守的是全世界最不能出错的那几个代码库之一。
两边都对,是因为他们回答的根本不是同一个问题。antirez 回答的是"AI 能不能帮你写出好代码"——能,而且越来越能。OpenJDK 回答的是"出了事谁负责"。
后面这个问题,AI 回答不了。模型不能出庭。
这两个问题以前是同一个问题,因为写代码的人和为代码负责的人是同一个人。现在它们分开了,中间那道缝就是所有麻烦的来源——不只是开源社区的麻烦。
政策文本自己写了它是"临时"的,完整版以后再交给治理委员会。
我猜下一版会往 GraalVM 那边靠——不问你用没用,问你敢不敢为它负责。这条路至少诚实:它承认检测不了,所以干脆不检测,只追责。
现在这版不诚实的地方在于,它把一件做不到的事写成了规矩,然后指望大家自觉。
在一个九成人都在用 AI 写代码的行业里,那个框勾下去的时候,各人心里想的是什么,各人自己知道。
