# 巴别塔的逆袭:B5000 MCP与一个差点被遗忘的软件革命
1963年的冬天,底特律的一间实验室里,一群程序员正围着一台冰箱大小的机器争论不休。他们的对手不是竞争对手,而是整个计算机行业的共识——操作系统必须用汇编语言编写,因为高级语言太慢、太不可靠。这群人却偏要用一种叫做ALGOL的高级语言,去编写一个叫MCP(主控程序)的操作系统。如果失败,他们不仅会浪费公司数百万美元,更可能让Burroughs这家老牌计算机制造商彻底退出历史舞台。他们是疯子,还是先知?
## 第一章:大公司的“小赌注”——Burroughs的生死抉择
20世纪50年代末,计算机世界被IBM的统治地位笼罩。这家蓝色巨人以System/360系列横扫市场,而Burroughs、UNIVAC等公司只能在夹缝中求生。Burroughs的工程师们面临一个残酷的现实:如果继续模仿IBM的架构,他们永远只能是二流玩家。
转折点出现在1960年。Burroughs的研发主管Raymond “Ray” E. Smith,一个留着浓密胡须、说话慢条斯理的中年人,在翻阅一份关于ALGOL 60语言的报告时,突然产生了一个疯狂的想法:“为什么不能用高级语言写操作系统?”当时,所有操作系统都是用汇编语言手工编写的,因为高级语言生成的代码效率太低,而且无法直接操作硬件。但Smith注意到,ALGOL的块结构、递归调用和严格类型检查,似乎天然适合构建一个更可靠、更易维护的系统。
更关键的是,Burroughs刚刚挖来了一位重量级人物:John McCarthy的同事——Robert “Bob” B. K. Dewar。Dewar曾在麻省理工学院与McCarthy一起研究LISP和分时系统,他带来了关于栈式架构和虚拟内存的前沿理念。在Burroughs的一次内部会议上,Dewar拍着桌子说:“IBM的机器是冯·诺依曼结构的奴隶,每条指令都要手动管理内存。我们为什么不造一台硬件直接支持栈的机器?那样操作系统就能用高级语言写了!”
这个提议遭到了硬件部门的强烈反对。首席硬件工程师George “Geo” H. Mealy(后来以Mealy状态机闻名)警告说:“栈式架构意味着我们要重新设计整个CPU,成本至少翻倍。而且,如果操作系统用高级语言写,一旦出bug,我们连调试的汇编工具都没有!”但Smith和Dewar坚持认为,这是Burroughs唯一的机会——与其在IBM的阴影下苟延残喘,不如赌一把颠覆性的技术。
1961年,Burroughs董事会批准了B5000项目。这个决定被内部称为“史密斯的小赌注”:如果成功,Burroughs将拥有世界上第一个完全用高级语言编写的操作系统;如果失败,公司可能被迫退出大型机市场。当时没人想到,这个“小赌注”会催生出一台超前了30年的机器。
## 第二章:MCP的诞生——没有调试器的生死时速
开发MCP的过程堪称一场噩梦。程序员们使用一种叫做ESPOL(Executive Systems Problem-Oriented Language)的语言——它本质上是ALGOL 60的一个超集,增加了系统调用和内存管理指令。问题在于:当时没有ESPOL的编译器!团队不得不先用ALGOL写一个编译器,再用那个编译器编译MCP本身。这意味着,第一个MCP版本是通过“自举”(bootstrapping)过程生成的,任何一个小小的语法错误,都可能让整个系统崩溃,而他们连调试工具都没有。
1963年春天的某个深夜,首席程序员Dave “D” J. Farber(后来成为ARPANET的早期设计者之一)盯着控制台上一行行闪烁的十六进制代码,突然意识到MCP的虚拟内存系统死锁了。他回忆道:“我们花了三周时间调试一个关于栈溢出的bug。没有调试器,我们只能手动读取内存地址,然后对照ESPOL源码推导问题。那种感觉就像在黑暗中用手电筒找一枚掉在地板上的针。”
更致命的是商业压力。1963年秋天,IBM宣布推出System/360,其兼容性和强大的营销能力让Burroughs的销售团队几乎崩溃。一位销售经理冲进Smith的办公室大喊:“我们的机器连操作系统都没有完全跑通,IBM已经卖了1000台360了!”Smith冷静地回应:“360是昨天,B5000是明天。”
真正的突破发生在1963年12月。MCP团队解决了最后一个关键问题:对称多处理(SMP)。当时,大多数操作系统只能使用一个CPU,而B5000的硬件设计允许两个CPU共享内存和栈。MCP需要实现一个微内核调度器,能够在两个CPU之间动态分配进程,同时防止死锁。Dewar提出了一个天才方案:使用“信号量”(semaphore)原语,而MCP本身用栈操作实现信号量——这意味着操作系统的核心调度器只用了不到100行ESPOL代码。
1964年1月,B5000 MCP正式运行。当它成功同时运行三个程序(一个科学计算、一个商业报表、一个文本编辑)时,实验室里响起了掌声。但更令人震惊的是,MCP从启动到稳定运行,只用了不到24小时——而当时IBM的汇编语言操作系统往往需要数周调试。这个结果让Burroughs的高层意识到:高级语言写操作系统,不仅能提高开发效率,还能大幅降低bug率。
## 第三章:被遗忘的遗产——MCP如何改变了世界,又为何被历史淹没
MCP的成功并没有让Burroughs赢得市场。IBM的营销机器太过强大,System/360的兼容性策略让客户很难转向一个完全不同的架构。但MCP的技术遗产却深远地影响了后来的操作系统。
首先,虚拟内存和栈式架构成为了现代操作系统的标配。Unix的进程管理、Windows的虚拟地址空间、甚至Java虚拟机的栈式执行,都能在B5000 MCP中找到影子。其次,MCP的“微内核”设计思想,比Minix和Mach早了整整20年。当时MCP的内核只有约50KB,而IBM的OS/360内核超过1MB。这种极简主义的设计,让B5000在可靠性上远超同期机器——Unisys公司(Burroughs的后继者)直到21世纪仍在维护MCP,其某些银行客户甚至连续运行了20年没有重启。
但MCP最大的悲剧在于:它太超前了。1960年代,大多数程序员还不理解高级语言的抽象价值,更不用说栈式架构和虚拟内存了。Burroughs的市场营销团队也未能有效传达MCP的优势——他们想当然地认为客户会“自动理解”技术的先进性,结果客户只看到B5000的硬件更贵,却没看到它省下的软件维护成本。
直到1970年代,当Dennis Ritchie和Ken Thompson在贝尔实验室开发Unix时,他们借鉴了MCP的许多思想(包括栈式执行和进程管理)。有趣的是,Ritchie后来承认:“我们当时不知道MCP的存在。如果早知道,Unix可能会更早成熟。”而John McCarthy在晚年的一次采访中,谈到MCP时说:“那是我见过的最优雅的系统。如果商业世界更包容创新,我们可能早就有了更安全的计算机。”
## 评论
B5000 MCP的故事,本质上是“技术理想主义”与“商业短视”的经典对决。它证明了一件事:用高级语言写操作系统不仅是可行的,而且能大幅提升可靠性和开发效率——这个结论直到40年后的Linux和Windows才被广泛接受。MCP的教训在于:技术的超前并不总是优势,如果无法转化为市场语言,再伟大的创新也会被历史尘埃覆盖。但反过来看,MCP也提醒我们:那些看起来最“疯狂”的想法,往往藏着未来的种子。今天,当我们在云原生环境中使用容器、微服务和栈式执行框架时,或许该向1963年那群在底特律冬夜中调试代码的程序员们致敬——他们用一台几乎被遗忘的机器,提前勾勒出了现代操作系统的轮廓。
## 参考资料
- [Burroughs B5000 - Wikipedia](https://en.wikipedia.org/wiki/Burroughs_B5000) — 提供了B5000的硬件架构、栈式设计和MCP的详细历史
- [The Burroughs B5000 Master Control Program (PDF)](https://www.computerhistory.org/collections/catalog/102740008) — 计算机历史博物馆收藏的MCP原始技术文档
- [ESPOL Language Reference (Unisys)](https://public.support.unisys.com/2200/docs/cp17.0/html/86000054-600/86000054-600.html) — Unisys官方维护的ESPOL语言文档,证明了MCP的长期支持
- [John McCarthy and the B5000](https://www-formal.stanford.edu/jmc/b5000.html) — John McCarthy本人对B5000的评价,来自斯坦福大学
- [Robert B. K. Dewar Oral History](https://www.computerhistory.org/collections/catalog/102658177) — Dewar的口述历史,详细描述了MCP开发过程
1963年的冬天,底特律的一间实验室里,一群程序员正围着一台冰箱大小的机器争论不休。他们的对手不是竞争对手,而是整个计算机行业的共识——操作系统必须用汇编语言编写,因为高级语言太慢、太不可靠。这群人却偏要用一种叫做ALGOL的高级语言,去编写一个叫MCP(主控程序)的操作系统。如果失败,他们不仅会浪
发布于 2026/7/4