一个很小的 Git commit,最近被吵出了一个不小的问题。
KDE 开发者、开源参与者 Akseli Lahtinen 写了一篇短文,标题很直:Stop advertising in your commits。他反对的不是开发者用 AI 写代码,而是在提交信息里写上“Assisted by blabot”“Co-authored-by: slopgpt”这类 AI 工具标记。
看起来像透明披露。落到 commit 历史里,就成了品牌露出。
这件事最该被拎出来的点很窄:开源协作里的技术记录,正在被商业工具挤进来占位置。一个项目的历史,本来是给维护者、审阅者、后来排查 bug 的人看的,不是给工具厂商挂名的。
一个 commit,怎么变成广告牌
Akseli 的判断很简单:commit 是技术信息,不是广告栏。
commit message 原本要回答两件事:改了什么,为什么改。以后有人 bisect、追回归、查责任,看的也是这些。
但 AI 工具署名塞进去后,信息层级就乱了。
| 位置 | 原本用途 | 塞入 AI 署名后的问题 |
|---|---|---|
| commit message | 说明修改内容和原因 | 多了与代码变更无关的品牌信息 |
| Co-authored-by | 标记真实共同作者 | 可能被拿来给工具或 bot 刷存在感 |
| merge request / PR | 讨论上下文、说明风险和审查过程 | 更适合披露是否用了 AI 辅助 |
支持者也不是没有理由。
有人会说,这类标记能让 GitHub UI 显示贡献,也能让审阅者知道代码可能经过 AI 辅助。对开源项目来说,透明当然有价值。维护者需要知道代码来源,尤其是当项目对许可证、生成内容、审查责任有要求时。
但 Akseli 的回应很硬:那仍然是广告。
我觉得这刀不算过分。因为 commit 历史不是朋友圈,也不是工具厂商的成就墙。它是项目的账本。
账本里可以写交易事实,不能顺手贴赞助商 logo。
披露可以有,但别污染技术历史
这里要分清三件事。
开发者用不用 AI,是工作方式问题。项目要不要披露 AI 使用,是治理问题。把 AI 工具名写进每条 commit,是记录污染问题。
这三件事混在一起,就会把“透明”变成“默认挂名”。
更合理的做法很朴素:如果项目要求披露 AI 辅助,就写进贡献指南;如果某个 MR 确实用了 AI 生成、改写或解释代码,就在 MR / PR 描述里说明;如果审阅者需要确认人工审查,也在那里补一句。
可直接写成这样的规则:
- commit message 只写技术变更、动机、影响范围;
- 不在 commit 中加入 AI 工具品牌署名;
- 如需披露 AI 辅助,在 merge request / PR 描述中说明使用范围;
- 责任归提交者,不归工具或模型;
- Co-authored-by 只用于真实承担协作责任的人。
这不是反 AI。恰恰相反,它是在给 AI 进入开发流程留一条干净的路。
古人说,“名不正,则言不顺”。放在这里很贴切。Co-authored-by 原本是给共同作者的,不是给工具做挂名入口的。
工具参与了劳动过程,但它不是承担责任的人。代码坏了,维护者不会去找 blabot 修;许可证出了问题,也不会找 slopgpt 签 DCO。
责任不能被品牌稀释。
对开源维护者来说,这件事最现实的动作不是去吵“AI 好不好”,而是把项目规则写清楚。哪些地方允许披露,哪些地方不允许品牌署名,哪些内容必须由提交者负责。
对贡献者来说,也要改一个习惯:别把 AI 工具自动生成的尾巴原样提交。提交前看一眼 commit message。该删就删,该在 MR 里交代就交代。
关注 AI 编程工具的人,也该把这件事当成一个信号看。工具越深入开发流程,越会试图占据默认位置。补全是一个位置,审查是一个位置,提交信息也是一个位置。
AI 工具真正想抢的,是默认署名权
我更在意背后的激励。
AI 编程工具如果只是安静地补全、重构、解释代码,它的价值在生产力里结算。用户愿意付费,团队愿意采购,账很清楚。
一旦它开始自动往 commit、邮件、消息里塞自己的名字,事情就变了。它不只是在帮你干活,还在争开发流程里的默认署名权。
这和早年邮件底部的“sent from my iPhone”有点像。不完全一样,但机制接近。用户只是发了一封邮件,厂商却顺手拿到了一个传播触点。
今天换成 AI 工具,传播触点变成了开源项目的技术历史。更麻烦的是,commit 历史会被长期保存、被镜像、被搜索、被后来者阅读。这个位置比邮件尾巴更耐久。
天下熙熙,皆为利来。工具厂商当然希望自己出现在更多公开仓库、更多贡献图谱、更多开发者工作流里。问题是,开源维护者没有义务替它们支付这笔注意力成本。
真正的约束在这里:透明披露要服务审阅,品牌署名服务传播。两者长得像,目的不一样。
接下来最该观察的,不是某个项目会不会全面禁用 AI,而是三件小事:
- AI 编程工具会不会默认生成署名尾巴;
- 开源项目会不会在贡献指南里明确禁止 commit 品牌署名;
- 平台 UI 会不会把“AI 辅助披露”和“贡献者署名”分开处理。
如果这些边界不清,维护者会被迫多做一层清理。审阅时要删噪音,合并前要改提交,出问题后还要解释责任归属。
贡献者也会被误导。仿佛把 AI 工具署上名,就完成了负责任的披露。其实没有。责任仍在提交者身上。
所以边界应该定得硬一点:AI 可以参与开发,披露放在该放的地方;commit 只记录技术事实和人的责任。
一个小 commit 不小。它是开源项目记忆的一格。
今天让品牌进去,明天就会有更多工具觉得自己也该进去。到那时,技术历史还在,但读起来会越来越像一条被赞助过的时间线。
