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

原始链接在: 微软公开 45 年前 DOS 源码:当年的代码是一摞打印纸 - 小众软件

早些时候,微软发布了一篇名为《续写早期 DOS 开发的故事》的文章,公开了目前发现的最早的 DOS 源代码。来自 45 年前的纸质打印稿。@Appinn


目录

86-DOS 1.00 是什么?

1980 年,一家叫 Seattle Computer Products(SCP)的小公司正在卖基于 Intel 8086 的电脑板卡。

机器有了,但没有系统。

当时他们手里唯一能配套卖的软件,只有微软帮忙写的 BASIC-86。但用户既没法方便地管理文件,也没法正常加载和运行软件,所以机器一直卖得不太好。

(早期计算机,开机直接进入 BASIC,并没有操作系统的概念)

后来,公司里的工程师 Tim Paterson 干脆自己动手,用几个月时间快速写了一个新系统,最早叫 QDOS(Quick and Dirty Operating System),后来改名成 86-DOS。

它原本只是一个为了“先让机器能用起来”的临时方案,却刚好赶上了 IBM PC 诞生前夜。

微软如何买到了 DOS?

那时候,IBM 正在开发第一代 IBM PC,而微软自己又没有现成的操作系统,于是微软找上了 Seattle Computer Products,获得了 86-DOS 的授权,后来又直接买下了全部权利。

  • 1980年12月,微软以2.5万美元的价格从西雅图计算机产品公司,购买了86-DOS的非独占许可证。
  • 1981年5月,微软聘请蒂姆·帕特森(Tim Paterson)将该系统移植到IBM PC上。
  • 1981 年 7 月,微软以 5 万美元的价格从 SCP 购买了 86-DOS 的全部版权。
  • 微软随后把 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 和 I、: 和 ;,于是又需要人工逐行校对、修复。

OCR、空格与源码恢复

还有个更麻烦的问题:空格。当这些老打印稿重新整理成源码文件时,空格在哪里,有几个,都是问题。

早期汇编代码非常依赖固定列宽,指令、参数、注释通常都要严格对齐。一旦 OCR 把空格、Tab 或字符间距识别错位,整段代码的布局就会乱掉。

比如下面的指令、参数、注释,都要严格对齐(现代显示都很难对齐啊):

LABEL     MOV AX,BX
          INT 21H

而 1980 年代的打印稿,又大量使用固定空格进行排版。甚至连当年开发过程中划掉的代码、临时修改、注释痕迹,也尽量保留了下来。

最后,他们才把这些资料重新整理成今天的 GitHub 仓库。

这次公开的,是“目前发现的最早 DOS 源代码”。

缺失的一块

Rich Cini 在分析源码时发现,部分内容存在缺失:有些地方会突然少掉几行代码,部分注释也出现了中断。

他认为这些缺失不像 OCR 识别错误,更像是在早年源码传输过程中就已经出现的问题。并推测当年 SCP 向 Microsoft 传输源码时,可能发生过串口传输错误。

被修复过的 1.00

Rich Cini 还发现,这次公开的“86-DOS 1.00”内核,其实已经修复了 STORE Bug,因此功能上更接近后来的 1.01。这部分代码修改时间,可能已经晚于最初的 1.00 版本。

当代码还保存在打印纸上

Rich Cini 说,对他来说,最特别的,是能与那些亲历 PC 革命早期的人交流。当年的很多开发者,并不觉得自己正在“创造历史”。

这些项目对他们来说,更像是一份工作、一个项目,或者一种兴趣爱好。

那时候还没有 Git、GitHub 和云同步,很多源码真正留下来的方式,只是一摞摞连续打印纸。

谁也没想到,45 年后,人们还会重新翻出这些打印稿、软盘和 listing,试着把 DOS 最早的开发历史重新拼回来。


原文:https://www.appinn.com/microsoft-open-45-year-old-dos-source-code-paper-listing/

参考链接:

  1. Tim Paterson’s DOS Source Listings
  2. Continuing the story of early DOS development
  3. Tim Paterson’s DOS Source Listings and Other Things
  4. 86-DOS