一个叫Brian Raiter的程序员,网名breadbox,最近把自己压在个人主页角落里的三个老程序连源码一起挂了出来:一个功能有限的康威生命游戏、一个清理GDI资源泄漏的调试工具、一个Mastermind猜数字游戏。三个程序都是他上世纪90年代业余时间写的,运行环境是Windows 3.1x,许可证是GPL。作者自己在页面里说得很直白:1997年之后他就没再写过Windows程序了。
这不是一条新闻,更像一次迟到近三十年的“交作业”。但代码里留下的技术细节,比程序本身有意思得多。
三个老程序,一段16位到32位的笨办法
生命游戏那个程序里有一处细节值得停下来看:16位C代码混合调用32位汇编,靠的是一个叫WINMEM32.DLL的桥接组件。这不是随便哪个DLL都能干的事——它是Windows 3.x SDK自带的工具,只在386增强模式下才能工作,作用是分配32位内存、把32位指针转换成16位程序能认的“别名”、并在32位段里执行代码。想用它,开发者得把这个DLL跟自己的程序一起打包分发,微软不负责帮你带。
这背后是一个尴尬的历史时刻:386芯片已经能跑32位指令,但主流应用程序生态还锁在16位的Win16 API里。程序员想沾一点32位的性能红利,只能靠WINMEM32.DLL这种“打洞”式的工具在两个世界之间搭桥。
同一份代码里还有DIB(设备无关位图)颜色格式转换、以及“非平凡的小调色板管理”——这两件事放在今天的图形编程里基本不存在了。今天的显示器随便就是真彩色,调色板这种资源要精打细算分配给不同颜色的年代早就翻篇了。GDI Rescuer这个小工具本身也是那个年代的产物:Win16环境下GDI对象(画笔、字体、位图等图形资源)用完不释放是常见毛病,这才需要一个专门工具去扫描、找出被程序遗弃的资源。
检索不出秘闻,才是这类稿子的诚实起点
如果你指望这篇文章挖出什么“breadbox失踪的黑历史”或者“隐藏彩蛋”,大概会失望。多轮检索下来,能找到的第三方信息基本都是对原页面的转述或索引,没有独立于原文的实质新事实。唯一站得住脚的增量,是WINMEM32.DLL的官方SDK文档背景——这个属于通用行业知识,不是针对这三个程序的“新料”。
旧代码不缺内容,缺的是被读懂的耐心。
这恰恰说明了这类内容该怎么读:它不是等着被“扒”出秘密的悬案,而是一段可以直接对照着看的技术标本。价值不在“发生了什么新鲜事”,而在“当年的限制条件长什么样”。
谁会在意这三个压缩包
复古计算爱好者会关心这些程序能不能在DOSBox、86Box或者Wine里跑起来——原文本身没给出验证结果,这一点目前只能存疑。老一代Win16程序员看到调色板管理和DIB转换,大概会想起那种“每一份内存都要精打细算”的日子,跟今天云端调用几乎不计成本的开发方式完全是两套逻辑。
- 风险.muppetlabs.com这类个人域名一旦停止维护,代码和说明文字可能随时从互联网上消失,检索工具目前也无法确认压缩包链接是否仍能下载。
对软件保存社区而言,这才是真正该盯的变量:不是这三个程序本身值多少钱,而是像这样的个人页面有没有被镜像到Internet Archive或者GitHub这类更抗腐蚀的地方。链接腐烂不是抽象概念,是这类历史资料随时可能真实发生的结局。
