早些时候,微软发布了一篇名为《续写早期 DOS 开发的故事》的文章,公开了目前发现的最早的 DOS 源代码。来自 45 年前的纸质打印稿。@Appinn目录86-DOS 1.00 是什么?微软如何买到了 DOS?86-DOS 与 PC-DOS45 年前的源代码是如何整理出来的?Tim Paterson 的打印稿OCR、空格与源码恢复缺失的一块被修复过的 1.00当代码还保存在打印纸上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、: 和 ;,于是又需要人工逐行校对、修复。蒂姆-帕特森(Tim Paterson)在他的工作室里与一堆 DOS 稿纸。OCR、空格与源码恢复还有个更麻烦的问题:空格。当这些老打印稿重新整理成源码文件时,空格在哪里,有几个,都是问题。早期汇编代码非常依赖固定列宽,指令、参数、注释通常都要严格对齐。一旦 OCR 把空格、Tab 或字符间距识别错位,整段代码的布局就会乱掉。比如下面的指令、参数、注释,都要严格对齐(现代显示都很难对齐啊):LABEL MOV AX,BX INT 21H 而 1980 年代的打印稿,又大量使用固定空格进行排版。甚至连当年开发过程中划掉的代码、临时修改、注释痕迹,也尽量保留了下来。最后,他们才把这些资料重新整理成今天的 GitHub 仓库。项目地址:https://github.com/DOS-History/Paterson-Listings/这次公开的,是“目前发现的最早 DOS 源代码”。缺失的一块Rich Cini 在分析源码时发现,部分内容存在缺失:有些地方会突然少掉几行代码,部分注释也出现了中断。他认为这些缺失不像 OCR 识别错误,更像是在早年源码传输过程中就已经出现的问题。并推测当年 SCP 向 Microsoft 传输源码时,可能发生过串口传输错误。被修复过的 1.00Rich 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/参考链接:Tim Paterson’s DOS Source ListingsContinuing the story of early DOS developmentTim Paterson’s DOS Source Listings and Other Things86-DOS相关阅读34 个大类,超过 400 个「macOS 绝赞开源应用」列表Syntax Highlight – 为 macOS 经典功能快速查看添加代码高亮,超过 150 种新文件类型微软的 150 款免费软件[部分,待更新]从零开始理解 Git|纯手工打造 Git 仓库|太长可以不看用电脑控制 Android 手机的 Scrcpy 拥有更易使用的图形界面了©2021 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 3659b075e72a5b7b1b87ea74aa7932ff 点击这里留言、和原作者一起评论[ 点击前往获取链接 ]