一枚 2MB ROM,来自 1991 年的 HP LaserJet 打印机扩展卡。三十多年后,它没有只躺在收藏柜里,而是被 pagetable 作者塞进 retro-ps 模拟器,在浏览器里继续解释 PostScript 文件。

这事反常,反常得有点好看。

我们已经习惯了软件短命:云服务改 API,网页应用换入口,旧客户端被登录、证书、订阅状态卡死。可这枚 HP C2089A “PostScript Cartridge Plus” 里的 Adobe 参考解释器,version 2010.118,今天还能对它负责的语言交付结果。

这枚 ROM 到底跑起来了什么

这不是 Adobe 官方发布的新产品,也不是把老打印机拍成怀旧视频。

retro-ps 做的是一件更窄、更硬的事:让 1991 年 LaserJet II/III 使用的 PostScript Cartridge Plus ROM,在现代模拟环境里运行。用户可以在命令行或浏览器里输入 .ps 文件,由客户端完成渲染,不需要服务器参与。

问题答案
ROM 来自哪里HP C2089A PostScript Cartridge Plus,面向 LaserJet II/III
年份与容量1991 年,2MB ROM
里面是什么Adobe 自家的 PostScript Level 2 参考解释器,version 2010.118
retro-ps 做什么模拟运行这枚 ROM,支持命令行和浏览器端渲染
和 Ghostscript 有何不同Ghostscript 是替代实现;这里跑的是 Adobe 当年的参考实现本身
渲染在哪里发生客户端,无服务器

今天当然有 Ghostscript。对大多数现代工作流,它更常用,也更现实。

但 retro-ps 的价值不在“又造了一个 PostScript 工具”。它有意思的地方是:跑起来的不是兼容实现,而是 Adobe 当年的参考解释器本体。

这也决定了它的边界。

它处理的是 PostScript Level 2 解释器问题,不是完整现代打印系统。不要把它想成现代 PDF 工作流的替代品,也不要把 PostScript 说成没有版本差异。更准确的说法是:这枚 ROM 对它当年的目标语言实现,仍然可复原、可运行、可验证。

还有一个现实限制:ROM 获取和版权不能被轻轻带过。项目展示的是模拟运行能力,不等于 ROM 可以随意分发。

对懂一点打印、排版、模拟器的人,这已经够有信息量。对做数字保存和基础设施的人,信息量更大:有些软件不是老了就死了,死的是它依赖的那套世界。

技术关键:它伪造了一台“够像”的 LaserJet

原来的 LaserJet III 不是一块孤立 ROM。

它有 Motorola 68000、8 MHz、1MB 系统内存,可扩展到 4MB。卡带 ROM 会映射进 CPU 地址空间,再通过内存映射寄存器和打印引擎通信。

retro-ps 手里没有完整打印机。它做的是给 ROM 造一个能骗过它的世界。

它模拟 M68K/68020 CPU,提供 16MB RAM;伪造 LaserJet 主板的软陷阱;提供打印机型号字节、IPC 字节流、引擎状态轮询;再假装打印引擎已经完成,让卡带内部状态机继续往下跑。

也就是说,它不是只“打开一个文件”。它是在重建 ROM 需要相信的环境。

原 LaserJet III 约束retro-ps 的处理现实影响
300 DPI可提高 DPI可做更高分辨率渲染
固定纸张可任意纸张不再被老打印机纸路卡住
0.25 英寸硬件边距可无边距输出更自由
约 16000 像素轴向上限仍受 ROM 限制Letter 纸约可到 1450 DPI

这里要把分寸拿稳。

300 DPI、边距、纸张大小,很多属于当年打印机硬件边界。retro-ps 放宽的是外壳,不是把 PostScript Level 2 改造成新语言。

这对实际使用者意味着什么?

开发者可以把它当成一个复现老 PostScript 行为的工具,尤其适合测试、研究、数字保存。做生产环境的人则该谨慎:版权、输入文件安全、格式覆盖范围、现代 PDF/打印链路兼容性,都不能靠情怀抹平。

企业如果还有旧文档归档、旧排版文件、老系统输出的 .ps 文件,这类项目的价值在“能不能还原当年的解释行为”。但采购或迁移决策不该因此延后。它是研究和保存工具,不是打印基础设施采购建议。

真正刺痛今天软件的,是寿命差距

我更在意的不是“浏览器里跑老 ROM”这个炫技点。

真正刺眼的是寿命差距。

这枚 ROM 像老机器里的活化石。但它不是博物馆藏品,而是仍能执行契约的工业零件。输入是 PostScript,输出是栅格图。接口清楚,环境封闭,目标稳定。

契约还在,软件就没死透。

今天很多产品正好反过来。功能看着更强,依赖链却越来越长:云端账号、远程 API、权限服务、订阅状态、模型版本、浏览器策略、后台配置。任何一环变了,用户手里的“产品”都可能变形。

“天下熙熙,皆为利来。”这句放在这里并不是骂街。软件变短命,不只是工程师偷懒,而是激励变了。

云服务需要持续收费。平台需要控制入口。产品团队需要推动迁移。稳定、离线、可复现,很多时候不是 KPI,甚至会削弱平台控制力。

这就是老代码给今天的提醒:长期可用不是靠口号,是靠边界设计。

对开发者,最具体的动作不是去崇拜旧软件,而是少写模糊契约。文件格式、接口版本、离线能力、导出路径、降级策略,要提前说清。能稳定十年的接口,比一年三次“智能升级”更值钱。

对企业技术负责人,最该重估的是依赖风险。买一个云产品,不只是买功能,也是在买它的续约条件、接口稳定性、数据迁出难度和供应商心情。合同里写不清,系统里又不能离线跑,后面就会变成迁移成本。

这次 retro-ps 不证明旧软件天然更好。旧软件也有漏洞、版权、格式时代性和运行边界。它只说明一件事:边界窄、定义硬、环境可复原的软件,寿命会长得惊人。

接下来最该看的变量也很明确。

不是 retro-ps 能不能变成大众工具,而是这类项目能不能稳定复现更多老格式、老解释器、老运行环境;以及今天的新软件,愿不愿意给用户留下同样清楚的契约:离线能不能跑,数据能不能带走,版本变化能不能追溯。

如果这些问题都答不上来,产品再智能,也只是租来的雾。

一枚打印机 ROM 能穿过三十多年,不是因为它神奇。它只是守住了边界。今天的软件如果连这一点都做不到,热闹归热闹,寿命未必比一块老卡带更长。