微软近期发布了一篇题为《续写早期 DOS 开发的故事》的官方博客,首次公开了目前已知最早期的 DOS 源代码。令人惊讶的是,这些代码并非存储在硬盘或软盘中,而是以 45 年前的打印纸形式保存至今。

86-DOS 1.00 究竟是什么?
让我们回到 1980 年。当时一家名为 Seattle Computer Products(简称 SCP)的小型初创公司,正忙于销售基于 Intel 8086 芯片的电脑板卡。
硬件虽然有了,但缺一个关键组件——操作系统。
那时,他们唯一能随硬件提供的软件只有微软协助开发的 BASIC-86。用户购买后,既无法方便地管理文件,也无法正常加载和运行程序,因此产品销量一直不佳。
(早期计算机启动后直接进入 BASIC,根本没有操作系统的概念)
随后,SCP 的工程师 Tim Paterson 决定亲自着手开发。他用几个月时间快速编写了一个新系统,最初命名为 QDOS(Quick and Dirty Operating System),意为“匆忙拼凑的操作系统”,后来更名为 86-DOS。
这套系统原本只是一个“先让机器能工作”的临时方案,却恰巧赶上了 IBM PC 问世的前夜。
当时 IBM 正在研发第一代个人电脑,而微软自己手中并没有现成的操作系统。于是微软找到 SCP,先是获得了 86-DOS 的授权,随后索性直接买断了全部权利。整个流程的时间线非常清晰:
- 1980 年 12 月:微软花费 2.5 万美元,从 SCP 取得了 86-DOS 的非独占使用许可。
- 1981 年 5 月:微软正式聘请 Tim Paterson 本人,负责将系统移植到 IBM PC 平台。
- 1981 年 7 月:微软以 5 万美元的价格,从 SCP 手中买断了 86-DOS 的全部版权。
- 随后,微软将该系统授权给 IBM,最终演变为 PC DOS 1.0。
- 该许可协议还允许微软将 DOS 销售给其他公司(关于这部分,又是一个有趣的故事了)。
不过,故事并未就此结束。后来 SCP 认为微软在购买 86-DOS 全部权利时,有意隐瞒了 IBM 已经是大客户的事实,用明显偏低的价格(5 万美元)拿走了系统,于是将微软告上了法庭。
1986 年,当陪审团已经开始讨论判决结果时,双方选择庭外和解。微软最终向 SCP 支付了约 92.5 万美元,以此彻底解决与 DOS 相关的所有授权争议。
此后,86-DOS 被改造为 IBM PC 使用的 PC-DOS,并逐渐发展为我们后来熟知的 MS-DOS。
86-DOS 与 PC-DOS 的关联
参与源码恢复与校对的 Rich Cini 在对比中发现,86-DOS 与后来的 PC-DOS 之间并非像许多人想象的那样“完全不同”。大量代码、程序结构甚至注释都能直接对应。
话说回来,当年的源码保存方式与今天截然不同。许多资料根本不存在于磁盘文件中,而是以打印出来的 listing(程序清单)形式保存。部分源码后来经过传输、复制和重新打印,不同版本之间自然会留下细微差异。
45 年前的源代码是如何整理出来的?
45 年,确实是一段极其久远的时光。从 2026 年倒推 45 年,正好是 1981 年。
本次微软在 GitHub 上公开的核心代码,几乎全部采用 Intel 8086 汇编语言编写,源码文件以 .ASM 后缀名为主。
最关键的是,这些代码并没有存放在硬盘中,而是老老实实地保存在打印纸上。
Tim Paterson 的打印稿
86-DOS 的原始作者 Tim Paterson 当年保留下来的,是一摞摞连续的打印纸。这些纸上不仅有源码、汇编列表、调试记录,还包含了大量手写的修改痕迹。
DOS History(DOS 历史)保存团队的工作流程如下:首先将这些老旧打印稿重新扫描,然后借助 OCR 工具将图片转换为文本。然而问题来了——由于年代久远,许多字符已经模糊不清,OCR 识别错误相当频繁,例如数字 0 与字母 O、数字 1 与字母 l、冒号与分号经常被混淆。因此团队必须逐行进行人工校对和修复。
OCR、空格与源码恢复
还有一个更加棘手的难题:空格。当这些老旧打印稿被重新整理成源码文件时,空格的位置和数量成为令人头疼的问题。
早期汇编代码对固定列宽的依赖非常强。指令、参数、注释通常需要严格对齐,一旦 OCR 将空格、Tab 字符或间距识别错位,整段代码的布局就会完全乱掉。
就像下面这种,指令、参数、注释必须严格对齐(说实话,用现代编辑器显示都很难对齐):
LABEL MOV AX,BX INT 21H
而 1980 年代的打印稿又大量使用固定空格进行排版。最终,团队连当年开发过程中被划掉的代码、临时修改以及注释痕迹也尽量保留了下来。
最后,这些资料才被重新整理成今天我们在 GitHub 上看到的仓库。
这次公开的,确实是“目前发现的最早的 DOS 源代码”。
缺失的一块
Rich Cini 在分析源码时发现,部分内容存在缺失。有些地方会突然少掉几行代码,部分注释也出现了中断。
他认为这些缺失并非 OCR 识别错误,而更像是早年源码传输过程中就已经出现的问题。他推测,当年 SCP 向微软传输源码时,可能发生过串口传输错误。
被修复过的 1.00
Rich Cini 还注意到,这次公开的“86-DOS 1.00”内核其实已经修复过一个名为 STORE 的 Bug,因此功能上更接近后来的 1.01 版本。这部分代码的修改时间可能已经晚于最初的 1.00 版本。
当代码还保存在打印纸上
Rich Cini 曾表示,对他而言,最特别的体验是能够与那些亲历 PC 革命早期阶段的人交流。当年的很多开发者并不觉得自己正在“创造历史”。
这些项目对他们来说更像是一份工作、一个项目,或者仅仅是一种兴趣爱好。
那时候还没有 Git、GitHub 和云同步,许多源码真正被保留下来的方式,不过是一摞摞连续的打印纸。
谁也没想到,45 年后,人们还会重新翻出这些打印稿、软盘和 listing,试图把 DOS 最早的开发历史,一点一点拼凑回来。
