「先丢注释,再丢游戏」:《三维弹球》消失背后是一笔维护账

| | 1 次浏览

对于许多在学校机房里摸过 Windows XP 的人来说,《三维弹球:太空军校生》大概是比 IE 浏览器更鲜活的记忆,发射球、按住 Z 键蓄力、看着球在斜坡和弹射器之间穿梭。然而从 Windows Vista 开始,这款游戏悄然消失。多年来流传的说法是它牵涉法律纠纷。近日,微软资深工程师 Raymond Chen 给出了一个远没有这么戏剧化的答案:不是律师的问题,是工程的问题。

事件要点

据 Windows Latest 报道,Raymond Chen 回顾了当年的经过,脉络大致如下:

  • 微软在开发 64 位版 Windows XP 时,需要把数百万行 32 位代码移植到 64 位环境,《三维弹球》也在清单之内。
  • 移植完成后出现了一个诡异的 Bug:游戏开始时弹球正常落入发射器,随后直接穿过弹簧,从球桌底部掉出场外,游戏完全无法进行。
  • 这款游戏并非微软自研,而是由外部公司编写(其原版《Full Tilt! Pinball》出自工作室 Cinematronics)。代码大多没有注释,微软内部没有人真正理解其工作方式,团队甚至定位不到碰撞检测代码在哪里。
  • 面对"花好几天时间研究别人没写注释的代码"这个选项,微软的选择很干脆:不修了。于是 64 位系统不再附带这款游戏,Vista 时代它彻底退出。

背景:这不是法律故事,是一笔维护账

这个故事有趣的地方在于,它把一个几乎所有软件团队都会遇到的困境讲得极其具体:看不懂的遗留代码,本质上是负资产

微软向来以对向后兼容的执着著称,Raymond Chen 本人就是这种文化的代表人物之一,他的博客 The Old New Thing 记录了大量为陈年应用保留怪异行为的案例。但即便在这样的公司里,兼容性也有价码。《三维弹球》没有任何战略价值,只是预装的休闲小品,为它投入数天工程师时间去逆向理解外部代码,在项目排期上显然不划算。"我们没法花好几天研究代码"——这句话背后的逻辑,是纯粹的成本核算,而不是怀旧情怀。

更耐人寻味的是后续。微软不愿意付的成本,社区用另一种方式付了:GitHub 上长期存在一个《三维弹球》反编译项目,爱好者们从二进制逆向还原源码,做出了在现代 64 位 Windows、Linux 乃至其他平台上原生运行的版本。企业按机会成本计算投入,开源社区按兴趣计算投入,同一份代码在两套账本下得到了完全不同的命运,这大概是"数字保存"最有说服力的案例之一。

顺带一提,放在今天,这件事还多了一层新变量。让 AI 阅读几万行无注释的遗留代码、定位碰撞检测逻辑、提出修复方案,成本已经比 2000 年代初低了一个数量级。当年"花几天"的账,现在未必还算不过来。但这只改变单个决策的成本曲线,改变不了教训本身。

简短点评

《三维弹球》被删不是悲剧,而是一款软件正常的代谢,没有维护者和文档的代码,失去的从来不只是功能,而是被修复的资格。真正值得记住的是那个悖论:写代码时省下的注释和文档,最终会以数倍的代价向接手的人讨回来。对于任何采购第三方代码或接手外包项目的团队,"我们没法花好几天研究代码"这句话,或许应该贴在合同评审栏的正上方。

评论(0)

暂无评论,来写第一条吧。