游乐游手机版
首页/AI热点日报/热点详情

微软公开45年前DOS源码 当年代码印在打印纸上

类型:热点整理2026-05-31
微软公开了四十五年前的86-DOS1 00源代码,这些代码保存于打印纸而非磁盘。该系统由SCP工程师开发,后经微软授权、买断并演变为MS-DOS。源码经扫描、OCR和人工校对修复,保留了早期开发痕迹,具有极其重要的历史价值。

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

微软公开 45 年前 DOS 源码:当年的代码是一摞打印纸

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、冒号与分号经常被混淆。因此团队必须逐行进行人工校对和修复。

Tim Paterson 在他的工作室中,与一堆 DOS 稿纸的合影。

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 最早的开发历史,一点一点拼凑回来。

来源:https://www.bestblogs.dev/article/9891baee?utm_source=rss&utm_medium=feed&utm_campaign=resources&entry=rss_article_item

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。