从1960年代起,Linux相关技术就一直处于研发之中,一直到1991年Linux才正式诞生。在这三十多年的发展过程之中,kernel的发展起源于Unix,系统工具软件主要来自于FSF。它们的发展如下图所示:
上个世纪六十年代,那个计算机还没有很普及,只有少数人才能使用,而且当时的计算机系统都是批处理的,就是把一批任务一次性提交给计算机,然后就等待结果。并且中途不能和计算机交互。往往准备作业都需要花费很长时间,并且这个时候别人也不能用,导致了计算机资源的浪费。
为了改变这种情况,贝尔实验室(Bell Labs)、麻省理工学院(MIT)以及通用电气(GE)的研究人员联合起来在MIT协同研发一个分时(time-sharing)操作系统,这个系统称为Multics(Multiplexed Information and Computing Service)——简单来说就是实现多人同时使用计算机的梦想。
由于项目太复杂,加上其他原因导致了项目进展缓慢,1960年代末期,Bell Labs决定不再继续研发Multics并撤回了其研发人员。
1969年,为了能玩上基于multics系统的“sapce travel”游戏,Ken Thompson为微型计算机PDP-7研发了一个操作系统:Unics(Uniplexed Information and Computing Service),后来取其谐音,就称其为“UNIX”了。
在为Unics取名时,Ken Thompson参考了Multics的命名:
Multics特点:同时为多个用户提供多种功能(offer many features to multiple users at the same time);
Unics特点:同时只为一个用户特供一种服务(used by one person at a time。Moreover, each part of the system was designed to do only one thing andtodoitwell.)
后来Unix这个小操作系统就在Bell实验室内部流行开,并经过不断地改良最终在1974年7月Unix发展到第5个版本,Bell实验室公开了Unix,结果引起了学术界的广泛兴趣并对其源码索取。所以,Unix第五个版本就以“仅用于教育目的”的协议,提供给各大学作为教学之用,成为当时操作系统课程的范例教材。各大学公司开始通过Unix源码对Unix进行了各种各样的改进和拓展。
1977年,在伯克利大学就职的Bill Joy,推出了一份以第六版为基础,加上一些改进和新功能而成的Unix。并命名为BSD(Berkeley Software Distribution伯克利分发版),开创了Unix的另一分支:BSD系列。于是乎Unix就有了两个分支,一个就是BSD系列的分支,一个就是Bell Labs本身发放的分支。
1979年,AT&T意识到UNIX的潜力,决定将来销售UNIX的商业版本,并要求所有BSD用户购买UNIX授权(license)。
80年代,在DARPA(the U.S. Defense Advanced Research Projects Agency)支持下,伯克利教授Bob Fabry继续研究BSD。
在商业领域,UNIX System V作为Unix的主力。
1982年,AT&T发行UNIX System III (“System Three”)。1983年,AT&T发行UNIX System V(“System Five”)。
1980年代,其他的unix系统都是基于BSD或UNIX System V或是两者结合。
1979年,Unix走向了商业化,如果想继续使用就需要购买授权,一份授权4万美元,在昂贵的授权费用下,很多大学不得不停止对其研究,导致上课都不知道讲什么了。于是在1987年荷兰有个大学教授 Andrew Tanenbaum(Vrije Universiteit in Amsterdam)写了一个专用于教学的系统:Minix,该系统兼容UNIX Seventh Edition,而且所有源代码是公开的。当Minix流传开来之后,世界各地的研发者纷纷开始研究使用并改进,希望把改进的东西合并到Minix中,但是安Tanenbaum觉得他的系统是用于教学的,不能破坏纯净性,于是拒绝了。
1991年,Linus Torvalds(林纳斯.托瓦兹)在参考Andrew Tanenbaum了的著作《Operating Systems: Design and Implementation》后,写了一个名为Linux的操作系统,并公布到了互联网。可能是表达对安德鲁的不满吧(为什么不接受大家的好意呢?你让大家的满腔热情往哪放呢?),于是Linus发布了一个帖子,大概就是说:我写了一个操作系统的内核,但是还不够完善,你们可以以任何姿势使用,不收费,也可以帮助我一起修改。帖子发出后引起了强烈的反响。在大家的努力下,于1994年Linux的1.0版本正式发布。
与Minix不同的是,Linux采用的是monolithic kernel,Minix采用的是microkernel。
Linux为什么会引起如此强烈的反响呢?这就要从另一个人说起,那就是 Richard Stallman。Stallman不仅是一个程序员,还是一名有思想的社会批评家。他认为将UNIX变成一个公司专有的商业化的操作系统是对他作为一个创造者的社会权利的限制。商业化的操作系统不允许对其进行共享或修改,不仅反社会,而是不道德、错误的。而这种问题的解决方案就是从头开始编写UNIX下的软件,并且可以自由发行。
1984年1月,Stallman从麻省理工人工智能实验室辞职,投身于该项目,短时在间内,他吸引了一批程序员。在1985年,他们启动了一个称为自由软件基金会(Free Software Foundation,FSF)的组织。Stallman的指导原则是:“计算机用户应该能够自由地修改软件以适应自己的需求,并且可以自由地分享软件,因为帮助他人是基本的社会责任”。
Computer users should be free to modify programs to fit their needs, and free to share software, because helping other people is the basis of society.
重要的是理解Stallman所谈论的“自由软件”的含义,它所指的不是免费,而是自由。任何人都可以对自由软件进行检查、修改、共享以及发行。但是根据Stallman谈话的意思,如果有些人对他们的软件服务收费,或者要求其他人对软件发行付费,这也没什么不对。Stallman是这样解释的:“free speech, not free beer”。
因为单词“free”即指自由又指免费,所以多少有点含糊。为了避免任何潜在的混淆,自由软件现在称为开放源码软件(Open Source Software)。
因为任何计算机的核心都是操作系统,所以Stallman为FSF指定的第一个目标就是创建一个能够自由共享并可以被任何人修改的操作系统。为了使新操作系统能够自由发行,Stallman意识到操作系统必须从头开始编写。
为了能够平稳地融入到当时流行的编程文化中,因此Stallman决定新的操作系统应该与Unix兼容,也就是说它看上去就像Unix一样,并且能够运行Unix程序。按照他曾经工作过的编程社区的传统,Stallman为还没有构建的操作系统齐了一个古怪的名称:GNU。
GUN是一个递归缩写,就是GUN IS NOT UNIX。就是说Unix是流氓,我不是。
GNU自己的内核Hurd,因为理念太先进了,研发进度很缓慢。但是,FSF的程序员们经过勤奋工作,创建了大量的兼容于Unix系统的开放源代码的软件。例如,文本编辑器(Emacs)、C编译器(gcc)、C++编译器(g++)、调试器(gdb)、Unix shell(Bash)、……。
在1980年代后期,Stallman在创建自由软件方面已经积累了一定的经验,他认为如果要创建一大批的自由软件,那么它需要一个合适的许可证协议,并在这个许可证协议下发行该软件。为了这个目的,他提出了非盈利版权(copyleft)这一理念。为了实现非盈利版权这一思想,Stallman提出并编写了通用公共许可证(general public license、GPL),并于1989年发布。
GPL的核心是:在软件上应用GPL协议后,任何人可以发行该软件、查看源代码、修改该软件并发行修改后的软件。此外,GPL协议要求任何重写发行软件(包括修改后的版本)的人,都不能剥夺软件的自由使用或者添加自己的限制。
我们再次回到Linus Torvalds的Linux。Linux为什么会引起如此强烈的反响呢?因为Unix有版权,爱好编程的狂热分子在研究Unix的时候很容易吃上官司 ,而Linux是遵循GPL协议的,可以免费使用,让那些技术大牛尽情的施展。于是Linux提供内核(kernel),GUN提供外围的工具软件,就这样GUN/Linux诞生了。
从此之后,几乎所有的Linux Distributions都是在GUN/Linux系统上研发出来的。
我们已经知道:从1991年Linux发布了Linux 0.01起,Linux成了了自由软件的主流,那么,在商业化道路上的Unix是否有可自由共享的版本呢?答案是显而易见的。
BSD是1980年代两大Unix主流之一(另一是System V)。BSD是加利福尼亚大学伯克利分校计算机科学系开发的,自1980年起,由计算机科学研究小组(Computer Science Research Group,CSRG)管理与开发。
1980年代末,BSD酷爱者开始对AT&T公司对Unix的商业化运作感到不满。基于这一原因,CSRG制定了一个目标:完全重写所有基于AT&T公司的BSD部件。这样可以使BSD摆脱AT&T的法律制约。
1989年,CSRG提供了第一个全部开放源代码的BSD发行版——Networking Release 1(更正式的称号是4.3BSD NET/1)。NET/1包含了很多独立自主的网络工具,但是系统并不是完全独立的(也就是包含了UNIX的代码)。
1991年,CSRG发行了一个新颁布的BSD——NET/2。除了6个内核文件外,BSD中的所有内容都完全属于自己了。
1992年,Bill Jolitz重新编写了最后6个有问题的文件,并为PC创建了一个新版本的BSD。他将这个操作系统称为386/BSD,并且开始通过Internet发行。伯克利分校的圣神目标——一个与AT&T公司UNIX无关的操作系统实现了。最终,BSD可以在全球作为开放源代码的软件自由发行。
在很短的时间呢,386/BSD流行起来,而且维护它的人数日益递增。但是,Jolitz拥有一份全职工作,他没有时间处理所有提交的补丁和增强。基于这一原因,一组志愿者接管了这项工作。该小组所做的第一件事就是将该操作系统重命名为FreeBSD。
刚开始,FreeBSD只能运行在PC硬件上。有一些用户希望在其他类型的机器上运行BSD,因此人们成立了一个新的小组,该小组的目标就是尽可能地将FreeBSD移植到许多其他类型的计算机上,这个新小组提供的版本称为NetBSD。
1990年代中期,NetBSD小组又分出另一个小组,该小组主要关注安全和密码学问题。这个小组的操作系统称为OpenBSD。
可以看出,BSD的自由世界里只有3个主要的发行版:FreeBSD、NetBSD、OpenBSD。这与Linux世界差别很大。在Liunx世界里,差不多有数百个不同的发行版。
BSD是完全的开源软件,也可以通过Internet自由发行,那么,为什么是Linux成为快速流行起来的Unix版本呢?
原因有二:首先,Linux基于GPL协议发行,对Linux所做的任何事情都属于全世界。而BSD许可证没有GPL严格,在BSD许可证下,允许使用BSD创建新产品而不共享该新产品。所以,许多程序员喜欢使用Linux。Linux比BSD更成功的第二个原因在于Linux发行时机上。因为Linux Torvalds在1991年发行了Linux内核,而386/BSD直到1992年才发行,所以Linux在发行时间上占得先机。结果是,Linux吸引了大量正在焦急地等待全球第一个自由版本Unix的程序员。
创新是以前人的成果为基础的。因为以往的技术不满足现在的需求,所以才会对以往的技术进行更新、改造或重建以适应最新的要求。这才是应该遵循的规律。就个人体会而言,我国高校的科研却是建立在“拍脑门”的基础上的。为了所谓的科研,想出一个课题,然后就凭空制造各种论据来证明。最后的结果是,每年各大高校发表了大量的论文,这些文章不仅没有起到“抛砖引玉”的作用,反而将真正的“珍珠”掩盖在“垃圾”之中,即使有人有真正的需求,也没法在充斥着无用论文的海洋中找到拥有宝藏的“小岛”。
科研继承体系没有建立,创新如“无根之木、无源之水”,虚假繁荣,恍若盛世。
[1].Harley Hahn’s Guide to Unix and Linux [M]
[2].哈利哈恩. Unix & Linux大学教程[M] 张杰亮,译. 北京:清华大学出版社,2010
[3].Linux的起源:从一个故事说起[EB/OL]. http://blog.csdn.net/qq_35523593/article/details/63683856