Linux操作系统的发展历史
Linux操作系统由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)发明,并在众多网络上松散的“黑客”团队的帮助下得以发展和完善。在介绍Linux操作系统的发展历史之前,我们先介绍一些与Linux诞生和发展密不可分的因素。
UNIX是一款强大的、支持多用户/多任务的操作系统,它支持多种处理器架构,属于分时操作系统。操作系统(Operating System,OS)的概念始于20世纪50年代。当时的操作系统主要是批处理操作系统,没有配备鼠标、键盘等设备,典型的输入设备是卡片机。系统运行批处理程序,通过卡片机读取读卡纸上的数据,然后将处理结果输出。20世纪60年代初,分时操作系统出现。与批处理操作系统不同,它支持用户交互,还允许多个用户从不同的终端同时操作主机。
1965年,美国贝尔实验室(Bell Laboratory)、麻省理工学院(Massachusetts Institute of Technology,MIT)、通用电气公司(General Electric Company)共同参与研发MULTICS(MULTiplexed Information and Computing System,MULTiplexed信息与计算系统)。这是一个安装在大型主机上的分时操作系统,研发的目的是让大型主机同时支持300个以上的终端访问。MULTICS技术在当时非常新颖,然而项目进展并不顺利。因进度缓慢、资金短缺,贝尔实验室选择退出该项目。MULTICS并没有取得很好的市场反响。MULTICS项目最重要的成就是培养了很多优秀的人才,如肯·汤普森(Ken Thompson)、丹尼斯·里奇(Dennis Ritchie)、道格拉斯·麦克罗伊(Douglas Mcllroy)等。
1969年8月,肯·汤普森为了移植一款名为“太空旅游”的游戏,想要开发一个小的操作系统。他在一台闲置的PDP-7上用汇编语言写出了一组内核程序、一些内核工具程序及一个小的文件系统。他的同事称之为Unics(该系统就是UNIX的原型)。因为汇编语言对硬件具有依赖性,Unics只能应用于特定硬件上。如果想将其安装到不同的机器上,就需要重新编写汇编语言代码。为了提高其可移植性,肯·汤普森与丹尼斯·里奇合作,试图改用高级程序设计语言来编写Unics。他们先后尝试过BCPL(Basic Combined Programming Language,基本的组合编程语言)、Pascal等语言,但是编译出来的内核性能都不是很好。
1973年,丹尼斯·里奇在B语言的基础上,发明了C语言,因此他被人们称为C语言之父。肯·汤普森与丹尼斯·里奇合作,用C语言重新改写UNIX的内核,并在改写过程中增加了许多新特征。例如,道格拉斯·麦克罗伊提出的“管道”的概念被引入UNIX。经C语言改写后的UNIX,可移植性非常好。理论上,只要获得UNIX的源码,针对特定主机的特性加以修改,就可以将其移植到对应的主机上。
由于UNIX的高度可移植性与强大的性能,加上当时并没有版权的纠纷,因此很多商业公司开始了UNIX操作系统的开发,研发了许多重要的UNIX分支。
1977年,美国加利福尼亚大学伯克利分校的比尔·乔伊(Bill Joy)通过移植UNIX,开发了BSD(Berkeley Software Distribution,伯克利软件套件)。比尔·乔伊是美国Sun公司的创始人。Sun公司基于BSD内核进行了商业版本UNIX的开发。BSD是UNIX中非常重要的一个分支,FreeBSD就是由BSD改版而来的,苹果的Mac OS X也是从BSD发展而来的。
1979年,AT&T推出了System V第7版UNIX,开始支持x86架构的PC(Personal Computer,个人计算机)平台。贝尔实验室当时还属于AT&T。AT&T出于商业考虑,在第7版System V中特别提到了“不能对学生提供源码”的严格限制。
1984年,因为UNIX规定“不能对学生提供源码”,安德鲁·坦尼鲍姆(Andrew Tanenbaum)老师以教学为目的,编写了与UNIX兼容的MINIX。1989年,安德鲁·坦尼鲍姆将MINIX系统移植到x86架构的PC平台。1990年,Linux的创始人林纳斯首次接触MINIX系统,并立志开发一个比MINIX性能更好的操作系统。
Linux的诞生离不开UNIX操作系统和MINIX操作系统,而Linux的发展离不开GNU计划(GNU Project)。
GNU计划的诞生要早于Linux。GNU计划开始于1984年,其创始人是理查德·马修·斯托曼(Richard Matthew Stallman)。“GNU”是“GNU's Not UNIX”的首字母缩写词,“GNU”的发音为g'noo。GNU计划的目的是开发一款自由、开放的类UNIX操作系统。类UNIX操作系统中用于资源分配和硬件管理的程序称为“内核”,GNU的内核称为Hurd。Hurd的开发工作始于1990年,但是Hurd至今尚未成熟。GNU计划典型的产品包括GCC、Emacs、Bash Shell等,这些都在Linux中被广泛使用。
1985年,斯托尔曼创立了自由软件基金会为GNU计划提供技术、法律以及财政支持。GNU计划倡导“自由软件”。尽管GNU计划大部分时候依靠个人自愿无偿贡献,但自由软件基金会有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。其中非常著名的就是之后被Red Hat兼并的Cygnus Solutions。
为了避免GNU开发的自由软件被其他人用作专利软件,GNU GPL(General Public License,通用公共许可证)于1985年被提出。GPL试图保证用户共享和修改自由软件的自由。GPL适用于大多数自由软件基金会的软件。GNU计划一共提出了3个许可证条款:GNU GPL、GNU LGPL(GNU Lesser General Public License,GNU较宽松公共许可证)、GNU FDL(GNU Free Documentation License,GNU自由文档许可证)。
基于GPL的Free Software中的Free的意思是“自由”,而不是“免费”,所以只要在保证使用者充分自由(可以获取源码,可以修改或者重新发布)的前提下,完全可以收费。例如,Red Hat Enterprise Linux是商业产品,但是它的源码是公开的。CentOS就是在Red Hat Enterprise Linux的源码上,进行重新修改而形成的一个Linux发行版。
开源许可证(Open Source License)种类繁多,其中最有影响力的主要包括GNU系列、BSD系列、Apache系列、MIT系列等。不同类型的开源许可证对权利的保护范围是不一样的,用户需要根据自己的需求谨慎选择。
1991年年底,林纳斯公开了0.02版本的Linux内核源码。Linux的发布迅速吸引了一些“黑客”关注,这些“黑客”的加入使它很快就具有了许多吸引人的特性。1993年,Linux 1.0发行。Linux只是一个内核,而完整的Linux操作系统包括Linux内核和GNU项目的大量软件。1994年,Linux的第一个商业发行版Slackware问世。1996年,美国国家标准与技术研究院确认Linux 1.2.13符合POSIX标准。同年,Linux 2.0发布,并确定Linux的标志为企鹅。
自由软件社区内对Linux操作系统的命名存在一定的争议。自由软件基金会的创立者斯托尔曼及其支持者认为,Linux操作系统既包括Linux内核,也包括GNU项目的大量软件,因此应当使用GNU/Linux这一名称。Linux社区中的成员则认为使用Linux命名更好。