OpenJDK 发布生成式 AI 使用临时政策指南
OpenJDK 社区发布政策声明,为开源项目使用生成式 AI 工具提供方向指引。
OpenJDK 社区发布政策声明,为开源项目使用生成式 AI 工具提供方向指引。
生成式 AI 领域正在快速发展。它带来了提升开发者生产力的诱人机遇,但也带来了风险:增加审查者的负担,威胁安全性与信息安全,以及引发知识产权问题。
Oracle 作为 OpenJDK Community 的企业发起方,正在起草一份完整政策,用于规范生成式 AI 工具在 OpenJDK 贡献中的使用。Oracle 将在适当时候向 OpenJDK Governing Board 提交这份政策。在完整政策正式实施之前,Governing Board 已批准以下临时政策:
OpenJDK Community 的贡献不得包含由大型语言模型、扩散模型或类似深度学习系统部分或全部生成的内容。这里所说的内容包括但不限于 OpenJDK Git 仓库、GitHub pull request、电子邮件、wiki 页面和 JBS issue 中的源代码、文本与图像。
OpenJDK Community 的贡献者可以私下使用生成式 AI 工具,帮助理解、调试和审查 OpenJDK 代码及其他内容,也可以将其用于开展与 OpenJDK Project 相关的研究,但前提是不得贡献由此类工具生成的内容。
这项临时政策旨在鼓励大家以能够控制风险的方式使用生成式 AI 工具,同时让我们积累更多经验,为完整政策的制定提供参考。
从本质上讲,生成式 AI 工具可以轻易生成大量看似合理的代码,并配上看似合理的测试,但这些代码仍可能是错误的;即使代码本身正确,也可能设计不佳,因而难以维护。审查此类代码提交,很容易耗尽人工审查者本就有限的时间。因此,一些开源社区已经限制甚至禁止提交由生成式 AI 工具创建的代码。
从本质上讲,生成式 AI 工具可以轻易生成大量看似合理的代码,并配上看似合理的测试,但这些代码仍可能是错误的;即使代码本身正确,也可能设计不佳,因而难以维护。审查此类代码提交,很容易耗尽人工审查者本就有限的时间。因此,一些开源社区已经限制甚至禁止提交由生成式 AI 工具创建的代码。
由 OpenJDK Community 开发和维护的 JDK,是 Java Platform 的主要实现。它处于全球企业、政府及其他组织关键任务系统的基础位置。安全性与信息安全至关重要。看似合理但实际上错误的代码,会让这些关键属性面临风险。
由 OpenJDK Community 开发和维护的 JDK,是 Java Platform 的主要实现。它处于全球企业、政府及其他组织关键任务系统的基础位置。安全性与信息安全至关重要。看似合理但实际上错误的代码,会让这些关键属性面临风险。
Oracle Contributor Agreement(OCA)要求,贡献者必须拥有每项贡献的知识产权,并且能够不受限制地将这些权利授予 Oracle。然而,大多数生成式 AI 工具都使用受版权和许可证保护的内容进行训练,其输出可能包含侵犯相关版权和许可证的内容,因此贡献此类内容将违反 OCA。生成式 AI 工具的用户是否拥有该工具所生成内容的知识产权,目前仍是诉讼中的争议焦点。
Oracle Contributor Agreement(OCA)要求,贡献者必须拥有每项贡献的知识产权,并且能够不受限制地将这些权利授予 Oracle。然而,大多数生成式 AI 工具都使用受版权和许可证保护的内容进行训练,其输出可能包含侵犯相关版权和许可证的内容,因此贡献此类内容将违反 OCA。生成式 AI 工具的用户是否拥有该工具所生成内容的知识产权,目前仍是诉讼中的争议焦点。
不是。正如政策中所说,欢迎你使用此类工具帮助理解、调试和审查 OpenJDK 代码及其他内容。来自其他社区的经验表明,对于拥有大型代码库的成熟项目,生成式 AI 工具真正擅长的领域是分析现有代码,而不是创建新代码。这也符合我们迄今为止的经验。
不是。正如政策中所说,欢迎你使用此类工具帮助理解、调试和审查 OpenJDK 代码及其他内容。来自其他社区的经验表明,对于拥有大型代码库的成熟项目,生成式 AI 工具真正擅长的领域是分析现有代码,而不是创建新代码。这也符合我们迄今为止的经验。
这个词旨在强调,你可以自己使用此类工具,但不能贡献它们生成的内容。这并不意味着你不能与同事分享并讨论此类工具的输出。在分享这类内容时,可以考虑添加醒目的说明,明确标识其由 AI 生成。
这个词旨在强调,你可以自己使用此类工具,但不能贡献它们生成的内容。这并不意味着你不能与同事分享并讨论此类工具的输出。在分享这类内容时,可以考虑添加醒目的说明,明确标识其由 AI 生成。
可以,只要这些功能并非基于大型语言模型或类似的深度学习系统。
可以,只要这些功能并非基于大型语言模型或类似的深度学习系统。
可以。这显然属于使用生成式 AI 工具审查内容,因此没有问题。
可以。这显然属于使用生成式 AI 工具审查内容,因此没有问题。
不可以。你的贡献仍然包含部分由 AI 生成的代码。
不可以。你的贡献仍然包含部分由 AI 生成的代码。
可以。我们很快会重新配置 Skara,在 GitHub 上每个 pull request 的正文中添加一个复选框。创建 pull request 时,你必须勾选该复选框,以确认自己的贡献符合这项政策。wiki 中提供了更多详细信息,其中包括如何将该复选框添加到现有 pull request 的正文中。
可以。我们很快会重新配置 Skara,在 GitHub 上每个 pull request 的正文中添加一个复选框。创建 pull request 时,你必须勾选该复选框,以确认自己的贡献符合这项政策。wiki 中提供了更多详细信息,其中包括如何将该复选框添加到现有 pull request 的正文中。
这取决于该服务的使用条款,因此归根结底是一个法律问题。请注意,许多此类条款会严格限制服务的使用方式。请根据实际情况咨询你自己的律师或雇主的律师,并确保 Project 中的所有利益相关方也都咨询过适当的律师。
这取决于该服务的使用条款,因此归根结底是一个法律问题。请注意,许多此类条款会严格限制服务的使用方式。请根据实际情况咨询你自己的律师或雇主的律师,并确保 Project 中的所有利益相关方也都咨询过适当的律师。
在 Reviewer 这一角色下,你本就应该尽最大努力确保收到的贡献符合 OpenJDK Community 的政策和惯例。通常来说,不可能可靠地区分人类生成的内容与 AI 生成的内容。但是,如果你发现证据表明某项贡献中的内容由生成式 AI 工具创建,那么你有责任将这一事实告知贡献者。如果贡献者没有积极回应并删除相关内容,请将此事报告给相应的 Project Lead。
在 Reviewer 这一角色下,你本就应该尽最大努力确保收到的贡献符合 OpenJDK Community 的政策和惯例。通常来说,不可能可靠地区分人类生成的内容与 AI 生成的内容。但是,如果你发现证据表明某项贡献中的内容由生成式 AI 工具创建,那么你有责任将这一事实告知贡献者。如果贡献者没有积极回应并删除相关内容,请将此事报告给相应的 Project Lead。
有时线索非常明显。例如,贡献者从个人 fork 发起 pull request,而该 fork 中的 commit message 包含一行 Co-Authored-By 尾注,将功劳归于某个特定的生成式 AI 工具。有时线索会更加微妙,例如贡献者在 pull request 对话或电子邮件中的评论采用了闲聊式、冗长的风格,与其过去的写作风格不符。其他线索还包括带有多个标题的高度结构化评论、代码中不必要的注释、毫无必要的防御式编程,以及 emoji 字符的使用。生成式 AI 工具正在快速演进,因此今天有效的判断线索,明天可能就不再有效。一般来说,如果 pull request 中的某些内容显得诡异地热情或一丝不苟,那么你看到的可能就是 AI 生成的内容。
有时线索非常明显。例如,贡献者从个人 fork 发起 pull request,而该 fork 中的 commit message 包含一行 Co-Authored-By 尾注,将功劳归于某个特定的生成式 AI 工具。有时线索会更加微妙,例如贡献者在 pull request 对话或电子邮件中的评论采用了闲聊式、冗长的风格,与其过去的写作风格不符。其他线索还包括带有多个标题的高度结构化评论、代码中不必要的注释、毫无必要的防御式编程,以及 emoji 字符的使用。
生成式 AI 工具正在快速演进,因此今天有效的判断线索,明天可能就不再有效。一般来说,如果 pull request 中的某些内容显得诡异地热情或一丝不苟,那么你看到的可能就是 AI 生成的内容。