大家好,我是Java1234_小锋老师。
先说结论:这里的“全面禁止”,指的是 OpenJDK 社区不接受含有生成式 AI 产出内容的贡献,并不是禁止开发者使用 AI。你仍然可以私下用 AI 阅读、调试和审查代码,只是不能把 AI 生成的代码、文字或图片提交到 OpenJDK。
一纸禁令,到底禁了什么
2026 年 4 月 9 日,OpenJDK 发布了《生成式 AI 临时政策》。其中最关键的一句话是:OpenJDK 社区的贡献,不得包含全部或部分由大语言模型、扩散模型或类似深度学习系统生成的内容。

这条规则管得很宽。它不只针对 Java 源代码,还包括:
- Git 仓库和 GitHub Pull Request 中的代码、说明与图片;
- 邮件列表里的讨论内容;
- Wiki 页面;
- JBS(JDK Bug System)中的问题描述和评论;
- 测试代码、注释、提交信息等其他贡献内容。
哪怕 AI 生成了 100 行代码,你只手动修改其中 10 行,仍然不能提交。因为最终内容依旧“部分由 AI 生成”。
不过,AI 并没有被赶出开发流程。官方明确允许贡献者私下用它理解代码、定位问题、审查已有实现或开展研究。真正的分界线不是“有没有打开 AI”,而是“AI 生成的内容有没有进入贡献”。
为什么 OpenJDK 如此谨慎
OpenJDK 不是普通应用项目。JDK 位于 Java 生态的地基上,一处看似不起眼的问题,可能影响银行、政务、云服务以及数以百万计的 Java 应用。因此,社区宁可暂时保守,也不愿把不确定性直接交给使用者。

1. 审查者的时间经不起“代码洪水”
AI 可以在几秒内生成几百行结构完整、注释齐全、甚至附带测试的代码。但“看起来靠谱”和“真的正确”是两回事。生成很快,逐行验证却很慢。OpenJDK 的资深审查者数量有限,如果大量低成本生成的贡献涌入,最终消耗的是社区最稀缺的人力。
2. 基础软件不能只做到“多数时候正确”
生成式 AI 擅长给出常见写法,却不一定理解 JDK 内部的兼容性约束、内存模型、不同处理器架构以及几十年积累下来的设计背景。普通项目中的小问题,在 JDK 中可能变成安全漏洞、性能倒退或兼容性事故。
3. 代码权利必须说得清楚
OpenJDK 贡献者需要遵守 Oracle Contributor Agreement(OCA),确认自己拥有贡献内容的相关权利,并能合法授权。生成式 AI 的训练数据可能包含受版权或许可证保护的内容,输出的权利归属也仍有争议。社区很难仅凭代码外观排除风险。
三个使用案例:哪些能做,哪些不能做
案例一:让 AI 写修复代码并提交——不允许
假设开发者让 AI 为参数校验生成了下面的修改,然后直接放进 PR:
/**
* 读取指定位置的元素。
*
* @param elements 元素数组
* @param index 元素下标
* @return 指定位置的元素
*/
static String readElement(String[] elements, int index) {
// 下面的实现即使经过人工改名,只要源自生成式 AI,也不能贡献给 OpenJDK
Objects.requireNonNull(elements, "elements");
Objects.checkIndex(index, elements.length);
return elements[index];
}
代码是否正确并不是判断标准。只要提交内容全部或部分由生成式 AI 产出,就不符合当前政策。手动改变量名、调整格式,或者补几行注释,也不能改变它的来源。
案例二:让 AI 帮忙读懂异常——允许,但不能复制答案
开发者可以把一段现有代码的行为交给 AI 分析,用它梳理调用链、解释异常或提醒自己检查边界条件。随后,开发者应回到源码、测试和规范中亲自验证结论,并独立完成准备提交的内容。
例如,AI 可以提醒你关注下面的整数溢出风险:
/**
* 判断两个整数之和是否超过上限。
*
* @param left 左操作数
* @param right 右操作数
* @param limit 上限
* @return 是否超过上限
*/
static boolean exceedsLimit(int left, int right, int limit) {
// 先提升为 long,避免 int 相加后已经发生溢出
return (long) left + right > limit;
}
但你不能直接把 AI 给出的实现或解释贴进 PR、JBS 或邮件。更稳妥的做法,是把 AI 当作一位提供检查方向的助手,最终依据仍然来自你对代码、测试和规范的独立判断。
案例三:使用传统 IDE 重构——可以
官方 FAQ 说明,拼写检查、语法检查、自动补全和重构功能仍然可以使用,前提是这些功能不基于大语言模型或类似深度学习系统。
例如,用传统 IDE 的“提取方法”功能,把重复判断整理成一个方法,通常不受这项政策限制:
/**
* 判断名称是否有效。
*
* @param name 待检查的名称
* @return 名称是否有效
*/
static boolean isValidName(String name) {
// 传统、确定性的 IDE 重构不属于生成式 AI 内容
return name != null && !name.isBlank();
}
如果同一个按钮背后换成了 LLM 自动生成代码,就不能只看功能名称判断是否合规。关键仍然是它是否使用了生成式 AI。
一张图看懂正确使用方式

这套流程的核心很朴素:AI 可以帮助你提出问题、缩小范围,却不能替你成为贡献者。真正进入 OpenJDK 的每一行内容,都应当有人理解、负责,并且能够说明来源。
这项政策会一直不变吗
未必。OpenJDK 官方把它称为“临时政策”。Oracle 正在起草更完整的生成式 AI 贡献规则,之后还会提交给 OpenJDK Governing Board。也就是说,当前做法更像是在标准、法律和工具都还没有成熟时,先划出一条清晰的安全线。
这也解释了为什么不同开源项目会给出不同答案。项目规模、风险等级、贡献协议和审查资源都不同,适合一个项目的开放策略,不一定适合 JDK 这样的基础平台。
写在最后
OpenJDK 禁止的并不是开发效率,也不是对 AI 的探索,而是把来源不明、责任不清的生成内容直接送进关键基础软件。
站在个人开发者的角度,这条规则或许显得严格;站在维护几十年、服务全球 Java 生态的社区角度,它更像是一种必要的慢。AI 可以是强大的工具,但开源项目的信任,最终仍然要建立在人类能够理解、验证并承担责任的贡献之上。
43万+

被折叠的 条评论
为什么被折叠?



