我认为,21世纪大型机操作系统的有趣之处在于:
一方面,科技发展史上曾出现过很多伟大的操作系统、语言、接口和想法,但大多数都被遗忘了。大型机很昂贵,无论是过去还是现在都非常非常昂贵;小型计算机(minicomputer)相对比较便宜,所以它们在完全灭绝之前曾经历过短暂的辉煌;而微型计算机(microcomputer)的价格最低。
所有现代计算机都是微型计算机。虽然经过长年的发展,如今的微型计算机看似很像小型机和大型机,但事实并非如此。就像鸵鸟进化后看起来有点像兽脚亚目恐龙,但实际上它们依然是鸟,没有牙齿,手臂和翅膀上没有爪子,依然是卵生。
微型计算机的一个突出的特征是价格便宜,成本低廉,而且研发费用很低。
但大型机很昂贵,造价很高,租赁和许可成本很高,运行费用也很高,一切费用都很高。如果你很在意成本,那么根本就不会使用大型机。但有人依然出于某种理由而必须使用大型机。
这就意味着即便大型机所服务的市场只有几百个客户,厂商也依然有利可图,而且有足够的资金开发产品并提供支持。
这就导致在如今高度同质化的现代计算环境中,一切都受到了Unix C这个主流技术及其文化的影响。Unix C是DEC小型机的遗留技术,但它深深地影响了DOS、Windows、OS/2甚至WinNT和Unix,它们都有共同的DNA。但是,大型机却是个异类。
过去,我们曾有各种截然不同的系统。比如,经典的Mac和Amiga、搭载了RISC OS的Acorn ARM机器、Lisp机器、Apollo DomainOS机器等等,它们都与DEC/*nix不同,并且以此为特色。按照现代的标准来看,这些系统都很奇怪,而且很异类。
但这些系统都消失了。只有少数系统存活在模拟器和个人兴趣中,但它们不可能再次在行业中占据一席之地。一些以嵌入式系统的形式存在于某些设备的保护壳里。Lisp就只有Emacs在用。还有Smalltalk这种在各种不同的计算机里运行的虚拟机语言。
与此同时,大型机一直活得好好的,纵然被整个行业忽视,却依然存在,而且基本上不受各种技术发展趋势的影响。
大型机有着自己独特的存储架构、网络系统、 I/O 控制器,还有编程语言和内存模型等等,因为它们不得不采用这些独特的技术,它们极少会向主流技术靠拢。它们可以利用主流技术建立网络,如果需要彼此沟通,还可以把自己的协议打包到TCP/IP等。
但是,大型机有自己的客户,有自己的资金来源,对于客户的收入情况了如指掌,还掌握了大量的用户数据,而且一些关键性的任务非它们莫属,因此它们前进的路上没有任何阻力。偶尔也会有不自量力的挑战者,但这对于能够轻易运行几千个Linux虚拟机的大型机来说简直是无关痛痒。
结果就变成了:行业无视它们,而它们也无视行业。
但是,我们本可以在20世纪90年代后期拥有多处理器 BeOS 机器,或者在80年代后期拥有可以轻松支持多任务的基于386架构的OS/2个人电脑,或者能够支持多任务的680x0的机器(而不是Mac),或者其他数百种没有成功的技术中的任何一种。它们都是基于微型计算机的,因此没有足够的研发资金。
相反,如今我们只有很小一部分系统,而且并不是最好的,而是最便宜、最简单、勉强够用的系统,因为人们崇尚“最低限度可行产品”。
当然,还有少数幸存者仍在坚持。
有趣的是,历史的发展总是周而复始。人类所有的文化都是如此,软件亦是如此。想当初,20世纪末期流行的软件只不过是当时最廉价、勉强能用的解决方案。后来它们被更廉价的方案取代了。
我们经历了漫长的算盘和结绳计数的时代,如今已无法回头,而眼前这些由一群自以为是的“软件工程”人员制作出来的垃圾将会变成下一代昂贵的嵌入式或虚拟式垃圾,就像前面提到的那些消失的系统和技术一样。
它们会嵌入到哪些设备中?现如今的“低级语言”就是可以“编译”成“原生二进制文件”的语言。你可以使用这些语言来构建操作系统,并使用虚拟化层次结构来扩展不太可靠、不太方便扩展的技术。
然后在此之上的二级系统的核心是Web技术,以及使用了“JIT”的“动态语言”来解决“跨平台”等问题,这样它们就可以在任何平台上运行,并分割成多个微服务,用“标准协议”连接,从而在“Web规模”的“云”中运行。
技术高手都知道,选择正确的语言和正确的工具,就可以构建出与一级系统相同类型的产品,来代替二级系统,而且不需要花哨的扩展基础设施,因为一台现代机器就可以支持一百万个并发用户,且没有任何问题,几台这样的机器就可以支持数千万个并发用户,而所有这些机器都可以放在一个房间的角落里,正常运行时间长达数十年,不需要任何云。
但是这个方案很难实现,而利用解释语言和庞大的框架拼凑一个“现代系统”要容易得多。