本文来自微信公众号:阿朱说 (ID:azhushuo),作者:吕建伟,题图来自:视觉中国


很多所谓伟大的贡献,其实都是狗屎运,根本没有伟大的规划。


一、Unix


1964年,IBM隆重推出S/360大型机。当时市面上还是IBM和七个小矮人的故事,通用电气、霍尼韦尔也都做计算机。这真实强电和弱电、电气和电子的斗争。


于是通用电气委托贝尔实验室和麻省理工学院一起合作,为通用电气的下一代大型主机开发一套操作系统。但是通用电气太想超越IBM了,所以想搞的功能太多,导致项目失败,项目组解散。


未来的Unix创始人、当时的汤普森,因为项目组解散,他得另外找项目组加入。他一边寻找其他项目,一边还想心痒痒写操作系统。但是因为项目组解散,通用电气把大型主机的支持也撤走了,汤普森无计算机可使用。


他发现贝尔实验室知识产权部门有一台小型机,那台小型机平时就是写写专利申请书,使用量并不大。因为贝尔实验室的主要考核就是专利和论文,这是邀功点啊,所以知识产权部门就拥有了一台小型机。


怎么才能蹭计算机使用呢?他发现知识产权专利部门的人员老抱怨PDP-11上的编辑软件用来写论文专利不好使,而且文件系统比较脆弱,容易异常后丢失信息。


所以汤普森利用圣诞节放假(知识产权部门也休假不用计算机)、老婆回娘家(家里没人管)的三周,一周写好文件系统,一周写好引导程序(为了把Unix文件系统挂接到PDP-11小型机上),一周写好一个编辑器(为了知识产权部门写专利申请书)。Unix就是这样开始有了。


但是为了心痒痒一直使用PDP-11小型机,他又写了分时CPU管理,这样多用户并行工作就实现了,知识产权部门人员在编写专利申请书的时候,汤普森就通过电传打字机连接电缆登录上来,用自己的用户账号继续编写自己的Unix操作系统代码。所以Unix开始有了多用户管理功能。这个功能在当时大型机小型机上都很普遍,因为当时一台计算机太贵了,所以都有多用户分时操作特性。


因为多用户使用,但内存太少,需要开发一个内存管理模块来替代PDP-11的内存管理模块,所以他又写了新的内存管理模块。外设与外设驱动,还是PDP-11的VMS操作系统在管。


二、Linux


Linux的创始人林纳斯在大学上学时,老师用一个类Unix操作系统(Minix)来讲解操作系统原理,于是他也心痒痒想实现一个自己的类Unix操作系统,没想到还真做成了。不过他做的是Linux的内核,而不是咱们普通用户看到的全部的Linux操作系统。


我再返回头给大家延伸说说Unix。在1975年,汤普森在ACM大会发表论文给大家介绍Unix系统,并且在美国高校讲解Unix,因此贝尔实验室同意给高校一份免费开源的教学版Unix,只适用于高校教学和学生学习。对于商业公司也想要Unix,AT&T公司以2万美元的商业授权来搞,所以这也造成了很多商业公司都有自己的商业版Unix,不仅不开源,而且互相直接还有不兼容,一个应用软件写完,如果需要在多个类Unix操作系统上运行,需要在每个操作系统上进行微调才能正常。


1984年,GNU创始人斯托曼发起Unix统一自由运动,并且还创立了一个社会捐款支持的基金会。这个基金会利用捐款基金招募专职程序员。这个基金会出品的软件,比较知名的有:GCC编译器和C标准库glibc、编辑器Emacs、GUI Gnome。


其中最知名的就是Gnome了,主要就是针对封闭商用的KDE。


本来过去的操作系统都是命令行的,我过去使用DOS也是命令行操作系统,尤其服务器操作系统,现在也是命令行,你想啊,服务器平时又不需要普通用户操作,要加入GUI既没有必要又可能造成性能问题和不稳定问题。但是后来人们想用Linux搞桌面操作系统,所以需要GUI了,于是GNU Gnome GUI + Linux 内核,这就成了咱们现在看到的Ubuntu什么的各种发行版。


三、Solaris


咱们再回到Unix说说。当时汤普森在大学给学生们教授Unix课程,有个学生非常积极,这个学生叫Bill Joy。后来他就搞出了伯克利发行版的Unix,简称BSD。他还给BSD添加了CShell软件与Vi编辑器软件。


但是最神最神的是:他和其他几个同学一起创业,创立了Sun公司。这个大神不仅创始了Sun公司商用版本的Unix:Solaris,而且还给Unix操作系统添加了TCP/IP网络功能的实现、NFS分布式文件系统、RPC分布式远程调用中间件。


如果说IBM在1964年发布的S/360是世界上最早的集群云操作系统(可以支持多大16个虚拟机环境),那么Bill Joy在1984年发布的Solaris新版本操作系统,那就是世界上最早的分布式云操作系统。这也给后来OpenStak与Google领导的CNCF云原生技术体系带来了思辨。真是太阳底下没有新鲜事,大家每代人都是一代代重写过去的东西。


四、Java


在大家的眼里,Java是一门编程语言。奇怪,Sun公司一个做操作系统的公司,怎么搞开编程语言了?他擅长吗?另外,你这篇文章不是讲操作系统么,怎么又讲开编程语言了。


其实,Java的核心不在于编程语言,而在于JVM:Java虚拟机。


Java这门编程语言,经过编译器编译,是编译成Java字节码了,是不能被计算机执行的。想要执行,就得需要JVM中的JIT程序,把Java字节码编译成那个计算机芯片型号能执行的二进制程序指令,然后才能被真正执行。


而JVM中除了JIT以外,还有虚拟机的功能,也就是说:JVM可以管理CPU、可以管理内存。


但是,谁来管GUI呢,谁来管文件系统呢,谁来管用户权限安全呢,谁来管网络呢,谁来管外设与外设驱动程序呢?难道这不是一个完整的操作系统所必须的吗?


嘿嘿嘿,不用着急。因为Java和JVM的产生不是给通用计算机使用的,而是给日本千奇百怪的家用电器使用的。你想啊,智能家电,一个电烤箱电饭煲,需要啥GUI、需要啥文件系统、需要啥多用户分时啊,而且也不需要那么复杂的网络通讯和网络管理啊,更没有那么多外设。


所以JVM做成这样,再加一段引导程序,智能家电的芯片就可以启动JVM,JVM就可以执行java代码了。所以说,java本质上算半个操作系统。


那Sun公司为啥要给日本的智能家电设计虚拟机式的操作系统呢?没有办法啊,当时日本的家电种类太多,而且使用的芯片也是极其繁多,而且使用这些家电的用户都是家庭主妇小白用户,你得让这个智能家电的智能程序耐整、不能动不动就崩溃了。


所以,JVM,既可以向下屏蔽了繁多的日本家电芯片,又可以向上屏蔽了狗屎的智能家电控制程序,让这些狗屎程序员怎么写狗屎程序,都不会直接访问CPU、直接访问内存、直接内存指针越界了,而且也不用担心内存分配、内存回收了。大家想想,如果用C语言、C指针,那智能家电的程序那可遭殃了。


但是很不幸,因为当时日本正在和美国竞争,日本希望自己通过打造第三代通信技术、第五代计算机体系、智能家电、智能汽车、智能城市,来产业升级成数字经济,从工业社会进入信息社会。但日本人没有信心打造操作系统,于是日本人到美国寻求帮助,Sun公司就接下了这个需求。然而由于日美贸易战日本惨败、股市房市大跌、GDP停滞发展,日本产业升级失败、日本停止了这些数字经济产业的R&D资助。


Sun公司就把Java项目组给停了。Java创始人高斯林着急啊,和Unix创始人汤普森一样着急,眼看没工作了啊,咋办?


正好有心种花花不红、无心插柳柳成荫。美国互联网爆发了,但是当时HTML的功能太弱了、JavaScript编程语言还没出现,HTML网页都是静态页面,不能打动广大人民群众啊。浏览器厂商网景公司急需一个可以眼前花的东西来吸引广大人民群众。


高斯林双手一举,我可以。其实他是忽悠了网景公司,不过反正Java已经没人要了,死马当活马医,只要你网景要啥,我们都可以改,于是就出现了后来的java Applet。这挺像Google公司Dart编程语言研发失败后,正好遇到了Flutter团队赏识,于是Dart想怎么改就怎么改,只要满足Flutter就好。


五、安卓


2003年,安卓创始人安迪鲁斌接了一个活,就是给相机搞成智能相机。天哪,这不就是90年日本人的想法吗?把普通家电变成智能家电。


所以鲁斌很自然想到的思路就是:重复一遍Sun公司在1990年的套路,用Java给搞个智能相机操作系统。


但是2003年的相机,已经比1990年的电饭煲电烤箱复杂多了,光靠一个Java搞不定智能相机操作系统。所以他又很自然想到了Linux,让Linux去管文件系统、网络、外设与外设驱动。


于是,Java+Linux,就等于了安卓。


但是又很不幸,刚刚搞出来,相机产业大洗牌,鲁斌的活儿没人要了,眼看这个项目组又要解散。这和Unix项目组、Java项目组是多么的相似啊。于是他到处找投资人找接盘侠。


幸好得到了Google联合创始人布林的赏识,当时谷歌如日中天、日进斗金。所以花了区区5000万美元就把安卓收购了。这是2005年的事情。但是谷歌收购了安卓后也不知道拿安卓干嘛,就让安卓自生自灭自己玩着。


2007年,骇世惊俗的iPhone发布,智能手机-移动互联网大幕拉开。谷歌惊呆了,怎么办?怎么应对?


于是,安卓作为一个没人用的系统就被匆忙上马、大力魔改。


六、iOS


既然说到安卓,那就不得不说到iOS。


其实iOS的内核来自好几个操作系统的杂合,不过核心主力来自乔布斯过去自己注资收购的NextStep计算机操作系统。这个操作系统源自FreesBSD,而FreeBSD又源自BSD。嘿嘿嘿,我们是不是又绕回来了。所以我就不多赘述了。


但是我这里要顺嘴提一点的是:乔布斯为啥要买NextStep公司,就是因为乔布斯被苹果公司赶出来了,他发誓要设计一款远超过苹果公司的电脑,这才并购了NextStep公司。而NextStep公司当时已经现金流断了,大家正面临项目组要被解散的地步,所以正愁得找接盘侠。而乔布斯当时离开苹果,因为和苹果董事会记仇生气,所以乔布斯当时卖了一大笔苹果股票,正有的是钱,于是NextStep就把这个金主忽悠来了当了接盘侠。


七、Windows


其实微软也搞过Unix,这个事很多人不知道。


Unix是源自小型机,盖茨是发家于PC机,而且盖茨是发家于编程语言(BASIC)。盖茨并没有做操作系统的经验。盖茨知道操作系统是计算机的核心,所以一直想染指这个领域,但是苦于没有能力啊。于是盖茨就想到了把Unix移植到PC机器上。


但移植,自己也不会啊。盖茨又想到了一招,和会的人合作。这就是微软和SCO合作开发Xenix的故事。


我们要知道,当年AT&T被几经拆分,后来AT&T把Unix版权卖给了网络操作系统厂商Novell,Novell后来生意被微软打的不行了,就把Unix版权后来卖给SCO了。也就是说,现在Unix正脉,正是SCO在下。


而Novell这个干网络操作系统的公司虽然衰了,但是他的CEO却跳槽了,这就是埃里克斯密特,谷歌前CEO,把谷歌推到世界顶峰。谷歌现在兜兜转转搞云服务器没搞成,搞成了分布式云原生,这是不是和Novell网络操作系统思想一脉相承啊。这就是哲学:你是把一台强大的计算机用虚拟机切分成N份呢,还是把若干台普通计算机组织起来进行分布式计算呢?


微软和SCO合作搞事这事,后来微软还如法炮制过。就如同当年微软不会开发数据库,于是和Sybase合作开发PC机上的关系数据库,后来微软在适当时机再把Sybase踢走,于是就有了我们看到的SQLServer数据库。于是我们就看到了2008年Sybase最终被SAP收购,于是我们看到SAP在2010年推出HANA数据库。世间的事情,就是这样弯弯绕绕关联在一起。


当然,微软和SCO搞Xenix最后也没成气候。盖茨只能另辟蹊径,买了一家操作系统的产品,那就是DOS,从此开启了微软操作系统产品线。


当时Apple公司已经推出Lisa GUI窗口系统,已经不是DOS命令行。盖茨知道这是未来,也想搞Windows。于是在DOS的基础上,加上了Windows GUI窗口系统。DOS+Windows,这有点像当年Linux+Gnome一样。


但是,DOS+Windows这个套路,对于普通人还是太难啊。人家Apple电脑是一启动就是图形界面啊。于是,微软花了九牛二虎之力搞出了Windows95,终于大卖。


但是,当时微软搞操作系统,有一个危一个机,危险就是大家由来已久诟病微软的OS不稳定,机会就是盖茨看到了一个正在快速增长的机会市场,那就是x86芯片越来越强大,强大到都可以做服务器了。要知道当年的服务器都可是昂贵的小型机大型机。如果微软能进入服务器软件市场,这可是肥肉市场啊。


瞌睡来了枕头。咱们回想回想当年汤普森发明Unix操作系统的那台PDP-11小型机。对,它就是小型机公司DEC生产的。PDP-11计算机里的操作系统是VMS。而VMS操作系统当时的主力研发负责人是卡特勒。但是卡特勒想做世界上更牛的操作系统,这和DEC的高层产生了分歧,并且取消了卡特勒的新操作系统实验室,所以卡特勒想离职。


盖茨听说了这事,于是三顾茅庐,把卡特勒挖到了微软,顺便把卡特勒在DEC的铁杆核心团队也挖了过来。于是,Windows NT产生了。


其实卡特勒的团队只研发了NT的内核,至于Windows NT的GUI、网络、外设与驱动,都是微软其他的部门研发并集成进来的。而且卡特勒团队本来没想着做新的文件系统,一直在凑合试图使用DOS的FAT文件系统。但是Windows NT研发了太长时间,长达4年之久,市场早就发生了变化,所以NT的研发目标从高移植性改变成了高可用性,这下,新的文件系统不研发不行了,DOS文件系统太脆弱,无法满足高可用。


NT内核在Windows NT Server上大放异彩,然后逐步渗透到Windows 2000(工作站版本和服务器版本),乃至最后在2001年渗透到桌面系统WinXP的内核使用了NT的内核,稳定的个人桌面版Windows终于来临了。


本文来自微信公众号:阿朱说 (ID:azhushuo),作者:吕建伟