Ask HN:还有谁因为业务离不开,仍在维护一台 DOS 机器?

查看原文 HN 讨论

文章摘要

这是 HN 用户 mlaux 发起的一个 Ask HN 帖子,获得近 300 分、300 多条评论。他的问题很直接:你现在是否在用、或者认识有人还在用下面这些东西?

他说自己不卖东西,只是在为一个想法做调研:怎样让这些系统在现代硬件上继续跑下去。

提问者的构想。 在后续回复里,mlaux 讲清楚了他想做的东西。现成的免费方案(DOSBox、86Box、QEMU 等)已经足够让人「在新硬件上把老程序跑起来」,这一点他并不打算重复。他设想的是一个 DOS 运行时/模拟器,对每一次 DOS 中断调用和 I/O 端口访问做详尽记录并挂上钩子。这样一来,DOS 程序更新一个 .DBF 文件时,工具可以自动往 SQLite 表里插入对应行,相当于在业务照常运转的同时,悄悄建起一份现代数据库;GPIB 数据也可以转发给现代的 USB 适配器。他刻意回避周期精确的底层模拟,只针对最流行的几套商业软件按需补兼容性怪癖。对于有人说这是「每个客户都要定制、AI 也帮不上忙」的小众市场,他回答说这两点对他反而是好事,只有「客户都没钱」这一条让他发愁。

评论区成了一场老系统故事会。 大多数回复并没有回答商业可行性,而是纷纷讲出自己见过的「古董」:核电站、航空模拟器、羊毛检测站、歌剧院字幕、教堂钟楼、木材场收银台……这些故事共同勾勒出一个现实:在工业、医疗、实验室和小企业里,老系统之所以还在,往往是因为硬件接口锁死、软件没有源码、重新认证成本极高,或者干脆就是「它从来没坏过」。讨论也延伸到了几个更大的话题:关键基础设施该不该升级、监管认证为何让「复刻旧硬件」比「重写软件」更便宜、以及如何写出能用 50 年的软件。

HN 评论精华

核电站里的 Amiga 模拟器。 整个帖子最受关注的是 freeli 的故事:某核电站直到 2007 年还有一台 Windows NT 4.0 机器,负责显示控制棒的状态(插没插、插了多少,仅显示不控制)。原始软件是上世纪 80 年代电站投运时为 AmigaOS 写的。Amiga 早已买不到,原机也不知何时坏了,于是 90 年代中期电站买了一款英国公司开发的、运行在 NT4 上的 AmigaOS 模拟器。后来那家公司倒闭了,而 NT4 是最后一个允许模拟器直接访问那块产生状态信号的硬件的 Windows 版本,之后的版本一升级就坏。重新认证新系统太麻烦,电站选择维持现状,备用硬件从 eBay 上买来,就堆在旁边的架子上。他当时的任务是向 IT 审计员解释这台机器为什么没装杀毒软件。追问之下他补充,硬件是一块带外接接口的定制 ISA 卡,模拟器自带直接驱动它的程序。

这个故事引出一串讨论。曾当过反应堆操作员的 CobaltFire 说一点也不意外,他接触过更原始的系统:控制棒位置靠电刷圆柱上的电阻测量,每次停堆都要清洁、校准。rcxdude 谈到审计的荒诞:很多审计条款写得非常死板,审计员理解的规则和书面规则常常互相矛盾,有时还有不成文的「个人偏好」。jabl 一句话概括:「每台 Windows 都必须装杀毒」只是个打勾项,不需要思考。JdeBP 则指出,真正值得担心的是备件和在用机器放在同一个物理位置。

该不该升级关键设施? 用户 sajithdilshan 认为政府不花钱现代化核电站简直疯狂,这种管理疏忽才是核事故的根源,并把切尔诺贝利归因于用了过时技术。这个观点遭到普遍反驳。onion2k 说安全和可靠来自对系统的理解,一个你了如指掌的老系统往往比新系统更安全,风险在于懂它的人离开、备件断供或周边环境变化,人们几乎总是升级得太早或太晚。HPsquared 纠正说,切尔诺贝利 4 号机组投运才 3 年,RBMK 设计比如今仍在建造的压水堆还新。IG_Semmelweiss 搬出林迪效应:经受住时间考验的东西,预期还能活得更久。elzbardico 说如果不考虑元件老化,他宁愿相信 70 年代的 PDP-11 或跑 MS-DOS 的 PC-XT,没有 GHz 总线、多级缓存和推测执行,一旦证明能跑几年,就没理由跑不了 50 年。也有人站在另一边:jodrellblank 用多伦多有轨电车为例,说「没坏就别修」的结果可能是到处是手动道岔、配件图纸随厂房一起烧掉。

复刻硬件比重写软件便宜。 Froedlich 讲了一个朋友的经历:某航空公司的飞行模拟器整套软件(包括编译器和操作系统)都经过 FAA 认证,老旧的大型机到了寿命,市面上找不到兼容硬件,重新认证软件的成本和时间又是天文数字。最后在 FAA 同意下,他们请硬件公司用现代芯片把旧大型机「克隆」了一遍。有人质疑这不可能,mitxela 回应说定制芯片没那么贵,几百万美元就能做设计加十万片,对大公司完全可及;vincent-manis 举了 Xerox PARC 当年自造 MAXC 来仿真 PDP-10 的先例;jasomill 提到 IBM 在 1983 年就推出过用 68000 加定制微码模拟 System/370 的 PC XT/370。mitxela 还用了个比喻:蛋糕配方和烤箱,哪个需要更多正确性证明?配方必须对,烤箱只要能保持温度。starky 不同意,说烤箱之间差异巨大,安全关键系统里硬件细节同样要命。

怎样写出能活 50 年的软件? throwaway2037 由此发问。回答五花八门:dmos62 说「开源,或者不买没有源码的东西」;jl6 建议用流行语言、严格遵守定义良好的 API、用通用硬件、去掉「恶性的小聪明」、写清每部分为什么这样做;inopinatus 反驳说「流行」也包括 JavaScript 和 PHP,他更倾向「普适且长久」,几十年来这意味着 C;very-old-sw 却说自己几十年前的 C 程序如今已编译不过,老 Fortran 的某些写法也早被淘汰。从事电网变压器行业的 ninalanyon 给出了最工程化的回答:写好规格说明、版本控制和完全离线的构建流程,消除不透明的二进制块,所有东西都要有纸质文档并标注版本号。他所在的行业里,设备用了 50 年送回来修,还能查到原始图纸和物料清单。

ISA 能不能挂到 USB 或虚拟机上? andix 问 8 MHz 的 ISA 总线能否经 USB 接给虚拟机。labcomputer 解释了难点:很多老 ISA 驱动是以总线极限速度直接读写卡上寄存器,每次访问不到 1 微秒;USB4 常被引用的延迟约 20 微秒,模拟出的 ISA 卡最多也就 50 kHz 左右。Teknoman117 补充,他疫情期间做过一个 KVM 加速的 386EX 模拟器,每次 I/O 都要触发 VM exit,结果比真硬件还慢。也有人贴出 ISASTM 这类 ISA-over-USB 的开源项目。

真实在用的案例。 帖子里有大量第一手见闻:

不止是 DOS。 很多人讲的是 OS/2、SCO UNIX、Windows XP 甚至更老的系统:pumplekin 提到一家富时 100 公司还有台 1993 年装的 SCO UNIX,IP 栈还是有类地址;lormayna 在一次评估中发现 OS/2 Warp 机器在控制 CNC;Aldipower 指出德国铁路的一代 ICE 列车上还跑着 DOS 和 Windows 3.11;eqvinox 补充,德铁最老的在役信号楼直到 2025 年 12 月才退役,它 1899 年开始服役。K0balt 写了一篇极长的「探险记」:2019 年他去阿拉斯加费尔班克斯一家零售店换 UPS,穿过一间半废弃的监控室,在后屋发现一台积满灰尘、硬盘咔咔作响的 Pentium Pro 服务器,用令牌环网线连着轮胎服务区的终端。几个月后,那家西尔斯百货永久关门。

对提问者商业想法的冷静回应。 smackeyacky 认为,还在用这些设备的人已经有了自己的应对策略(哪怕有缺陷),宁可等到退休也不会为一个「不是问题的问题」花钱,而且这些客户普遍没钱。alightsoul 指出在用户眼里电脑和它控制的机器是一体的,本质上是嵌入式系统,会随设备一起更换。Postosuchus 说 HN 可能是错误的受众,这里的人不会容忍供着一台神圣的老电脑,早就自己迁移了。至于「AI 时代几分钟就能重写」的说法,asciimov 回应说容易的部分早已被替换,真正的障碍是 ISA 卡、硬件狗这类锁死的接口,而且几天就能重写的程序,验证可能要花好几个月;tclancy 讽刺道:当然可以,只要你还有完整文档、规格一直及时更新、有好的测试套件,还懂行业知识。saidnooneever 则讲了一个关于效率的故事:一位会计坚持用全键盘操作的 DOS 程序,说自己每天干 5 到 10 分钟就够,换成网页界面得干一整天,找来的程序员却每次都交出网页版。