整理 | 褚杏娟
近期,一个开源社区因创始人因使用 AI 生成代码而在闹分裂。
只要你随便逛下《Doom》粉丝的开发圈,八成能碰到好几百个基于 GZDoom 做的东西,要么是游戏模组,要么是 WAD 文件,甚至还有完整的商业游戏。但最近,GZDoom 背后的开源社区因创始人兼维护者 Cristoph Oelckers(社区称为 Graf Zahl)承认在代码库中加入了未经测试的 AI 生成代码而分裂,抗议者们创建了分支 UZDoom。
Graf Zahl 为自己辩护称,自己只是用 AI 生成了对游戏底层功能并不重要的“样板代码”(Boilerplate Code)。但抗议者坚称 AI 代码在整个开源项目中无容身之地,其中的一大原因是 AI 代码的许可证未知,可能与 GZDoom 使用的 GPL 许可证不兼容。
“在‘怎么合作’这事上,我们跟他早有矛盾,有的是最近才出现的,有的则都忍了快 20 年了。思来想去,最好的办法就是搞个分支。” 开发者 Nash Muhandes 在 DoomWorld 论坛上写道,“我跟大部分同行一样,不想看着 GZDoom 的家底断了。所以才觉得,不如靠分支继续开发,顺便换个模式,别再像以前那样,大家以后合作可以透明。”
1社区对创始人的“怨气”已久
1993 年,id Software(美国软件公司,主要从事电子游戏及引擎开发)推出了《Doom》(游戏:毁灭战士),这是电子游戏史上最长寿的系列之一,横跨多个世代, 推出了无数移植版、合集、扩展包和重制版。
当时 id Software 完全没料到,自己打造出了一款史上最受欢迎、最具影响力的游戏。游戏刚上线,文件服务器就被蜂拥而来的下载用户挤爆;多人联机模式更是让网络频频瘫痪,可把各地管理员愁坏了。两年后,它的安装量甚至超过了 Windows 95 系统。
1997 年 12 月,id 公开了《Doom》的源代码。这一下,玩家们再也不用忍受低帧率、有限的色彩 palette,或是因屏幕几何面过多就崩溃的引擎,大家开始自己打造 “更好的《Doom》”:支持真彩色的版本、为关卡设计师新增功能的版本、更适配自定义内容的版本,既能保留原作内核,又能玩出全新花样。
在 1997 年源代码公开后涌现的众多移植版本中,ZDoom 是最关键的之一,它提供了不计其数的功能。提到《Doom》的玩法模组,ZDoom 绝对是绕不开的移植工具。ZDoom 有不少衍生版本,其中 GZDoom 最出名。
2005 年,由 Graf 开发的 GZDoom 首个正式版发布,它最大的亮点就是搭载了炫酷的 OpenGL 渲染器,能实现 “房间叠房间” 的立体效果、动态光影,甚至支持 3D 模型。
ZDoom 的开发一直持续到 2016 年 12 月,之后便停止更新,接力棒交到了 GZDoom 手中。现在要是有人想玩《Doom》模组却不知从何入手,十有八九会被推荐 GZDoom。虽说其他移植版本也有忠实用户,但论人气,GZDoom 远超同类。
但是这些年, GZDoom 开发圈对 Graf 的管理项目方式早有不满。
“Graf 在《Doom》社区里算不上人缘多好的角色。虽说他对 GZDoom 的贡献很大,但出了名的傲慢又精英主义。”有人这样评价。
2010 年,仅仅因为一场关于显卡兼容性的争论,他直接停更了 GZDoom。好在这没持续多久,停更后很快有人做了备份,2014 年 Graf 又重新接手了开发。
2017 年,开发者 anotak 推出的模组 lilith.pk3 获得了当年 Doomworld 论坛举办 的“卡克奖”(Caco Wards),Graf 对此非常愤怒,在他眼里 lilith 获奖简直是在侮辱他的 “招牌”,他直言卡克奖就是 “圈子里的人情奖,跟奥斯卡一个德性”,还为自己偏爱的一款模组只拿到亚军耿耿于怀。巧的是,那款叫《Waterlab GZD》的模组正是为 GZDoom 量身打造的。
当时很多人开始担心 Graf 会不会干脆彻底停更 GZDoom,因为他的 Doomworld 账号还有登录记录,但只是偶尔上来看看,其他人也联系不上他。最后显示,他只是正好去度假了,但这个巧合把开发团队吓坏了。
通常,成员休假会跟团队其他人说一声,但其实 GZDoom 整个开发过程中,他们彼此沟通本就很少,发不发 “休假通知”,对所有人来说没有什么区别。
这次 UZDoom 闹分裂,直接原因是 Graf 最近更新 GZDoom 时,明着用了 AI 写的代码。虽说外人一般看不出代码是不是 AI 写的(Graf l 自己也在 GitHub 上提过这点),但这次他自己标注了出来,代码注释写着 :“这是 ChatGPT 教我的,用来测 Linux 的深色模式”。
这直接让开发者吵翻了。有人说:“这代码就是扒来的,来路不明,我们根本没法确认它符不符合 GPL 协议。”
后来,Graf 虽说删了这段有问题的代码,可据说还想抹掉痕迹 —— 强行推送更新,把相关讨论全删了。
Graf 觉得自己的做法没什么问题,他认为 AI 写的只是 “样板代码”,不会影响游戏核心功能。“要是用 AI 写项目专属的核心代码,我肯定不放心,” 他写道,“但这次不一样,就是测测系统配置的表层逻辑,网上随便搜都有,手动写得费 10 倍劲。”
但是社区很多成员并不买账:他们认为这种开源项目,根本不该用 AI 工具。“要是这项目以后靠 ChatGPT 之类的生成式 AI 写‘垃圾代码’,那我只能退出了。”GitHub 用户 Cacodemon345 说道。
2核心开发们被气走,分叉项目
周二,用户 the-phinet 在 GitHub 上提了个报告:既说了 AI 生成代码的争议,也指出 Graf 推出 GZDoom 更新时,那种 “自上而下” 的模式有问题。
恳请 @coelckers 停止直接向主分支推送代码。
如果 61123d8(注:代码提交哈希值)需要 “补充说明”,那它本该先作为草稿 PR 提交。你推送的代码根本没经过测试,留下 “之后再测试” 的备注简直荒谬 —— 一旦合并进代码库,这事只会被抛到脑后。
用大语言模型(LLM)帮你写代码,很可能违反了 GPL 协议。
你口口声声在意 git 历史记录 “整洁”,但记录里全是你反复修改的痕迹,原因就是这些改动压根没和团队商量,比如 59b5676、ec8e0e6、028a830 这几次提交。
你还把不少重要改动藏在提交记录里,这让大家都很担心 —— 怕你哪天突然把他们依赖的功能给删掉。
我们是一个团队,你这么做,完全是在无视同伴的感受。
我知道这是你的项目,你有权做任何决定。但恳请你别再直接推送,而是发起 PR,等维护者确认后再合并。这不仅能树立好榜样,也能给维护者和其他开发者留出时间审核你的工作。
对此,Graf 的回应挺冲:“有本事你自己去分叉。”
这话一出来,直接惹怒了不少 GZDoom 社区的开发者。
社区贡献者 Boondorl 愤怒地表示:
呵,你就等着吧,这事我们肯定要搞清楚。你这通操作,直接把 GZDoom 搞砸了。
你不仅明说要用生成式 AI 写的代码——这十有八九违反 GPL 协议,毕竟现在越来越明确,AI 生成内容因为不是“法律意义上的人”创作,根本不受版权保护——还暴露了自己在代码库上的险恶用心:随时都能把这种没测试过的垃圾代码推上来。按你的逻辑,只要能编译通过就万事大吉?哦,对了,搞不好在你眼里,连编译通过都不用。
说真的,你当初别碰这项目,让真正有经验的人来解决问题,情况都比现在好一万倍。我们刚招了个全身心投入的 Unix 开发者,就因为你和你那烂透的领导方式,人家直接走了。
真是绝了。你终于不掺和后,项目本来顺风顺水。GZDoom 的进展快到我们都决定要升级到 5.0 版本,你当初也同意了,毕竟加了那么多超赞的功能。结果你莫名其妙回来才几天,项目就彻底完蛋,所有人都在跑路——谁也不想卷进你要在代码库上掀起的这堆烂摊子。
之前快一整年,你没往主分支推过那些搞崩一切的垃圾重构,项目在经历了几轮糟糕的开发周期后,终于重新站稳了脚跟。现在这情况,我估计我们没人会留下来了。要知道,Jay、Marcus 和我是 5.0 版本大部分新功能的开发者。看来你很快就要尝到得罪“后勤人员”的惨痛教训了。
好好享受你这死透的项目吧,估计你巴不得一个人慢慢折腾,这样终于没人催你做事、跟你吵了。你真是给整个 ZDoom 的遗产丢脸。说真的,我希望这事之后 GZDoom 能直接从主站上下架,我敢肯定,管理员们睡醒看到这堆烂摊子,能气炸了。
“Graf,我真是受够你了。”开发者 SanyaWaffles 表示:
我已经听说了最近的事,说实话,你这副法西斯做派,对一个本在稳步推进工作的团队搞强权压制,真让我恶心。你回来掺和,根本就是受不了自己领导不了项目,所以才跑来对所有人指手画脚。
我再也不支持 GZDoom 了。我会试着用自己分叉的版本凑合用,但你这一下坑惨了无数依赖这个引擎的开发者。你真是个彻头彻尾的混蛋,可真是 “谢谢你” 啊。
开发者 Kevansevans 也气愤地表示:
Graf,你到底发什么神经?消失一整年,回来就把一堆成果全否了;一个随便搜搜就能解决的问题,非要用生成式 AI 这种破玩意儿;别人提出合理质疑,你还让人家哪儿凉快哪儿待着?这引擎现在的状态前所未有得好,可你这态度,就跟恨别人碰你那宝贝代码似的。
“有本事你自己去分叉”?
你以为我怎么知道这些的?有人真这么做了——分叉了项目。结果你在人家的 Discord 服务器上大发雷霆,就因为自己说了不算;之后还把人家没写完的代码原封不动抄过来,连改都懒得改;等你这通成年人的脾气发完不管用,就从好几个服务器里退群了。
实际上,在 ZDoom 的 Discord 社区里,管理员 Agent_Ash 发了个更新:新分支 UZDoom 会兼容老版 GZDoom 的存档和模组,以后还会加新功能。更关键的是,UZDoom 要 “改变开发模式 —— 结构更稳,合作更正常,不再让单个‘项目负责人’独大”。
在讨论 UZDoom 的 Reddit 帖子里,Muhandes 说得更具体:“UZDoom 要废掉‘一个人说了算’‘要么听我的要么走’的模式。以后谁提交代码,都得走‘合并请求’流程,还得经过同行仔细审核,全程透明 —— 没人能直接往主分支塞代码。”
根据 Muhandes 的帖子,新分支的开发成员“是由一群仍对 GZDoom 充满热情的人组成。”“在过去 1-2 年里,我们持续为其提交更新、安全修复和 PR。其中包括 Jay、Gutawer、Boondorl、TehRealSalt,以及新加入的 Marcus—— 他对 Unix 系统相关的开发尤为热衷,而这正是 GZDoom 长期以来迫切需要投入精力的领域。可能还有一些人我没在帖子里提到,但‘懂的都懂’。”
据悉,UZDoom 将继续秉持 GZDoom 的初衷 —— 既保持对旧有内容的兼容性,同时也为创作者提供实用有趣的功能。最初,游戏模组和存档将实现 100% 兼容。但随着 UZDoom 新增更多模组开发功能,且新模组开始使用这些功能,它们可能就无法在 GZDoom 中运行了。
“我 20 多年的心血啊,说夸张点,那是我一辈子的热爱,从没见过它垮得这么彻底。”Muhandes 还在 Bluesky 上补充说道。
虽说 GZDoom 不会就此没了,但 Agent_Ash 觉得:“以后 UZDoom 大概率会成为这款引擎的‘主力版本’。” 至于 Graf ,要是他想给 UZDoom 帮忙,大家也欢迎,“但 UZDoom 不会让他管,新功能加不加、怎么改,他说了不算。”
一款 32 年前的老游戏,它的现代引擎移植项目居然闹得这么僵,从中可以看出 Doom 对好几代粉丝的影响有多深。现在还不确定,这场分裂会给 Doom 开发圈带来什么影响,但有一点很清楚:在开源游戏开发圈,用 AI 写代码,已经成了不少人没法妥协的 “红线”。
参考链接:
https://arstechnica.com/gaming/2025/10/civil-war-gzdoom-fan-developers-split-off-over-use-of-chatgpt-generated-code/
https://github.com/ZDoom/gzdoom/issues/3395
声明:本文为 InfoQ 整理,不代表平台观点,未经许可禁止转载。