1991年的时候,Linus 还是芬兰的一名大二学生,但是也在这一年,他发布了 Linux 。Linux 如何从一个大学生的业余爱好,通过互不相识的人的不断贡献,成长为目前世界上最为成功的操作的系统的呢?这背后都有哪些故事和理念呢?2001 年的时候,互联网已经起来了,Linux 作为 Web 服务器平台地位已经稳稳当当的了,Linus 做了一个著名的演讲,《 The Origins of Linux 》,https://www.youtube.com/watch?v=WVTWCPoUt8w 。本文是对演讲内容的整理,咱们来听听 Linus 本人怎么说。

Linux 的诞生

Linux 的诞生是很多因素的一个巧合。

第一个因素是80年代的机器是非常简单的,可以完全的理解硬件细节。Linus 从 11 岁开始接触电脑,那是八十年代初,供个人使用的微型计算机才刚刚开始流行, Linus 的第一台机器是一个不是很流行的硬件。能够运行在这个硬件上的软件是非常少的,所以根据 Linus 自己说,作为一个典型的 geek ,他开始用机器码,注意不是汇编语言,而是0和1,来进行编程。Linus 说,如果是2000年以后再学习编程,他肯定不能理解整个硬件结构了,但是在当时,机器真的是非常简单,是可以完全理解硬件细节的。

第二个因素是 Linus 上大学的时候,同时接触到了最主流的硬件,最优秀操作系统和最优秀的编程语言。Linus 后来买了一台 386 机器,也就是最为主流的 Intel x86 系列的硬件。到了1990年,Linus 服兵役结束,准备继续上大学二年级,注意,这时候距离 Linux 发布只有一年的时间了,Linus 还不会使用 C 语言,并且也从来没有听说过 Unix 操作系统。结果大二凑巧就开了 C 和 Unix 的课程。Linus 很快就发现 Unix 比其他任何系统都要优秀。但是当时 Unix 在欧洲还是新事物,学校里面老师都是刚刚开始用 Unix 。作为学生,根本也购买不到 Unix 系统。倒是有一个专门用于教学的类 Unix 系统,叫做 Minix 可以用。于是 Linus 就把 Minix 安装到了自己的386机器上,然后开始学习 C 语言,来逐步完善 Minix 的功能。

第三个因素是 Linus 不小心删除了 Minix 。Minix 毕竟是教学系统,很多功能都不好用。于是 Linus 开始自己开发和增强各项功能,首先 Linus 研究了“任务切换”,改进了终端模拟器。他发现还是需要往硬盘上写东西,所以开始写驱动程序。后来有一次 Linus 自己不小心把 Minix 给彻底删除了。然后他就想,都已经完成了这么多功能了,干脆我以后就不用 Minix 了,直接写一个自己的操作系统。于是从1991年年中决定写 Linux 系统,到0.01版发布,Linus 只用了三个月的时间。

这就是 Linux 诞生的过程了。当对的硬件,对的操作系统架构和编程语言,落到了一个从小就了解机器的每一个硬件细节的孩子手里,一个操作系统的诞生就有了可能。

Just For Fun

1991年底的时候 Linux 已经初步成型了,Linus 就考虑要停止 Linux 的开发,因为他最初想要达成的目标都已经达成了。但是最终他没有停下。

没有停下的当然是有原因的。第一个原因是,Linux 当时已经开源,已经有一些人在研究了。当有人不断跟 Linus 沟通和学习,Linus 发现自己的这个业余爱好开始变得很有意义了。但是根据 Linus 的说法,没有停下的第二个原因,也是真正的原因,是整个开发过程充满了乐趣。Linus 后来还专门出过一本书,叫做 《 Just For Fun 》。

Linux 起步靠的是一个倔强的个性。Linux 的开源,收到好评的同时也引来很多非议。其中最著名的批评来做 Andrew S. Tanenbaum , Andrew 是荷兰自由大学教授,Minix 的作者,而 Linux 早期很多代码其实都是基于 Minix 的,所以 Andrew 也可以说是 Linus 的老师。Linux 和 Minix 一样,都是采用了“单内核”结构,但是 Andrew 公开说,这个设计是错误的,而“微内核”才是正确的。然后他对 Linus 说,你得庆幸你不是我的学生,因为 Linux 肯定拿不到满意的分数。但是 Linus 很有主见,Linux 到现在依然是“单内核”结构。而“微内核“看似高端,但是后来的实践中的确被证明是有问题的。

总之,Linux 的开发并没有停止,从1991年一直到2018年的今天。

社区和共识

后来,Linux 项目开始真正的起飞,大部分代码都是别人贡献的,而不是 Linus 本人写的。2001年的这次演讲中,Unix 之父 Ken Tompson 也在现场,提问环节中,他想让 Linus 结合多年管理 Linux 项目的经验,聊聊社区化设计和社区化开发的经验。

Linus 给出的回答是

It is really all about revolution

翻译过来就是社区化开发完全是一个进化过程。接着 Linus 说,其实人们根本就不能设计软件,因为你永远也不知道用户想要的是什么样的软件,用户自己通常也不知道自己想要什么样的软件。凡是有人参与交互的系统,基本都是这样。比如我们的政治系统,我们也不能设计政治系统。我们可能觉得可以设计政治系统,但是事实不是这样的。政治系统的形成其实是伴随着技术和人们观念的变化而自然形成的,这个过程就跟生物的进化是一样的。

所以说进化过程是不可避免的,不论是在商业公司还是在开源社区。但是两种条件下进化是有区别的。商业公司中,大家会给进化设置一些限制,保证进化朝着既定的目标发展。而像 Linux 这样的基于 GPL 协议发布的开源项目,是根本没有目标的,也或者说是有无数个目标。GPL 协议本身也有限制,但是只是限制如果对软件做出了改进,那么改进也必须要开源。所以 GPL 其实最大化的保证了所有人都能参与到进化过程中来。GPL 对 Linux 的好处就是给出了一个非常清晰的游戏规则,让大家有了一个基本方向。补充一句,GPL ,全称是“公众许可协议”,是自由软件基金会提出的开源协议。

实际中,每一个来贡献 Linux 代码的人都有自己的目的。很多人想让 Linux 成为最好的互联网服务器,也有人要让 Linux 支持超级计算机,Linus 本人一直把 Linux 看成个人工作站。多年来非常让人惊讶的是 Linux 还是 Linux ,社区并没有分裂。Linux 的各个发行版,例如 Ubuntu ,SUSE ,Redhat 都会对 Linux 做出自己的调整,Linus 说这也是很健康的,是开源的一个优势。

总之,Linux 之所以能发展良好,背后是一个社区,同时是一个达成了非常好的共识的社区。

总结

这就是 Linux 崛起的故事,Linux 是人类有史以来最大的软件项目之一,背后没有一个组织严格的公司,但是却发展成了世界上最优秀的操作系统,不能不让我们赞叹开源的巨大力量。