找回密码
 立即注册
搜索
查看: 23|回复: 0

[行业轶事] 微软开源了操作系统,里边藏着一个巨大的秘密!

[复制链接]

358

主题

1

回帖

3177

积分

管理员

积分
3177
发表于 昨天 12:01 | 显示全部楼层 |阅读模式 来自 湖北武汉
    微软似乎很喜欢用数字古董来刷情怀。
    八年前,微软开源了DOS v1.25 v2.0 ,两年前,微软开源了v4.0。
640.png
    今年4月底,微软又开源“史上最早 DOS 源码”(86-DOS 1.00 内核以及 PC-DOS 1.00 预览版)。
    这套源码非常重要,它让微软这家西雅图的“小”公司搭上了IBM的快车,直接起飞。
    有趣的是,这套源码并不是从微软高度机密的服务器中导出的,而是从车库的一堆打印纸上翻出来的。
640 (1).png
    这个车库的主人不是比尔盖茨,而是蒂姆·帕特森(Tim Paterson),QDOS的发明人。
    当时蒂姆·帕特森是西雅图计算机产品(简称SCP)的员工,SCP决定采用Intel的8086来组装个人电脑,但是却没有合适的操作系统可用。
    于是蒂姆·帕特森写了一个操作系统,名称叫做QDOS,意思是Quick and Dirty Disk Operating System,Quick and Dirty,这名称,公司竟然叫得出口。
    QDOS被盖茨发现以后,立刻用5万美元买断,并且把作者蒂姆·帕特森也挖了过来,让他把QDOS移植到配有8088 CPU的IBM PC上。
640 (2).png
    因为盖茨要完成和IBM的合同,为IBM即将推出的PC提供操作系统。
    盖茨也真是胆儿大,空手套白狼,他连操作系统都没有,就敢和IBM签合同。
    买过来以后,不能叫QDOS这么难听的名字了,先是改名86-DOS,后来在IBM PC上叫PC-DOS。

纸上的代码
    很多人会好奇,为什么源代码保存在打印纸上?
    在80年代初,没有CVS,SVN,更没有Git,GitHub,当时最常见的存储设备是8英寸,5.25英寸软盘。
    这些软盘容量极小,读写速度慢,容易受磁场、灰尘、划伤影响,长时间使用后容易出现坏道。
640 (3).png
    当时也没有成熟的自动备份技术,软盘损坏,恢复数据往往很困难,因此很多程序员会定期把源码打印出来保存。
    这就像我们现在的 git commit,每打印一次,就是一个“历史版本”。
    这次被开源的代码,就是蒂姆·帕特森从自家车库里翻出来的“纸质 Commit 历史记录”。  
    蒂姆·帕特森当时用的是是一个叫做 SCP 8086机器,虽然这个机器上已经有了最原始的文本编辑器(如 EDLIN)和汇编工具,但是屏幕显示器却非常小,只能显示 24 行文字,单色。
640 (4).png
(找不到SCP 8086的图了,上图是SCP-100)
    这样的机器上当然不会IDE,也不会有语法高亮,没有搜索、diff、多窗口.....
    当你查看的代码比较多的时候,是非常非常痛苦的。
    所以,把代码都打印出来,铺到桌子上,“趴”着看纸上的代码,可以同时看多个模块,可以交叉对比,这反而是一种舒服的姿势。
640 (5).png

铅笔改Bug
    当时很多程序员的工作流程是这样的:
    1.打印源码
    把上千上万行汇编代码全部打印出来,铺满桌子。

    2.肉眼推演
    左手拿 CPU 的手册,右手拿铅笔,一行一行推演:- 寄存器变化- 标志位变化- 内存地址- 中断调用

    3.直接在纸上写补丁
    如果发现逻Bug,为了避免重新编译整个程序(软盘 I/O 慢且耗损磁盘),他们会画圈标记出来,改指令,重算十六进制偏移.....
    在QDOS的打印的源码中,就发现了蒂姆·帕特森把一个ROL指令圈起来,改成了RCL指令。
640 (6).png
    这就是那个年代硬核的“Code Review”!
    更加硬核的是,在 1980 年代早期,很多汇编程序员并不会每次都重新编辑源码并完整重新编译系统。
    由于软盘速度慢、汇编和链接过程耗时、机器内存极小,开发者经常会直接使用 DEBUG、DDT 或机器监视器等底层工具,对可执行文件中的机器码进行“binary patch”。  
    他们会先在打印出来的源码纸上手工计算新的 opcode(例如把某条指令从 ROL 改成 RCL,对应机器码从 D1 D8 改成 D1 D9),然后直接修改 COM/EXE 文件中的对应字节,再写回软盘。  
    在那个年代,这并不被视为“黑客行为”,而是一种非常正常、甚至高效的工程实践。
    (写到这里,我不由想起了一个笑话,一个程序员,用一根针在光盘上“刻”操作系统......)

结语
    今天,当我们坐在4K显示器前,用自然语言给AI下指令让它去写代码,改Bug时,很难想象四十多年前的程序员,竟然要把程序一页页打印出来,趴在桌上一行行地看,然后用铅笔在纸上改Bug。
    但是这些前辈就是用这套笨拙的方式,把PC上操作系统,编程语言一点点地“修”了出来,逐渐构建出了一个坚实的,“抽象”的底座。
    在这个底座之上,PC上的各种软件开始蓬勃发展,抽象程度也越来越高,现在我们无需了解底层硬件,就能用Java、Python、JavaScript愉快地编程了。
    从这个意义上来说,我们得感谢前辈们创造了这个行业,让我们在这个行业有口饭吃。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表