1.2 Linux的诞生

1.2.1 塔能鲍姆和他的MINIX

塔能鲍姆安德鲁·塔能鲍姆,全名Andrew Stuart Tanenbaum(1944.3.16– ),生于美国纽约,荷兰裔美籍计算机科学家,1971年加州大学伯克利分校天体物理学博士。随夫人定居荷兰,就职于阿姆斯特丹自由大学,2014年7月退休。编写的MINIX操作系统对Linux操作系统的诞生影响巨大。

安德鲁·塔能鲍姆是荷兰阿姆斯特丹自由大学教授,教授计算机操作系统课程。他编写的教材《操作系统:设计与实现》是关于操作系统的重要著作,很多大学的计算机专业都把它作为教材或者参考书。为了配合这本教材,塔能鲍姆专门编写了能支持当时个人计算机的简化版的UNIX操作系统MINIX(即mini-UNIX)。1987年教材出版时,有关内核、存储管理、文件系统部分的核心代码(共12000行)打印在书中,出版社同时提供完整的源码和编译好的可在软盘上运行的程序作为参考资源。这是一个可以在X86平台上运行的类UNIX操作系统,最初塔能鲍姆希望学生能尽可能方便地获得源代码,而出版社则不愿意,于是双方折中,象征性地收取69美元作为版税(包括书的价格)。2000年4月起,MINIX以BSD版权协议(开源版权协议的一种)发布。而此时其他免费、开源的类UNIX操作系统(如Linux、FreeBSD)已经实用化,MINIX则最终停留在为学生和爱好者提供操作系统模型的阶段。

由于MINIX是为教学目的编写的操作系统,缺乏一定的实用性。但它同时提供了用C语言和汇编语言写的系统源代码,这是自UNIX商业化之后首次提供给程序员系统地分析和学习类UNIX操作系统的源代码的机会。在它的影响下,实用的、免费的操作系统已是呼之欲出。

1.2.2 GNU计划

自由软件的倡导者理查德·斯托曼理查德·斯托曼,全名Richard Matthew Stallman(1953.3.16– ),美国程序员,生于纽约,1974年哈佛大学物理学学士,自由软件运动的发起人,自由软件基金会主席。于1983年9月通过互联网的一个新闻组发布消息称,计划开发GNU操作系统。GNU是GNU is Not UNIX(GNU不是UNIX)的首字母缩写这种递归否定式的定义可能是软件界的一种文化现象。例如:WINE(Wine Is Not an Emulator,一款在Linux上运行的Windows模拟器);LAME(Lame Ain't an MP3 Encoder,一款MP3编码器);甚至PNG(Portable Network Graphics,一种图像文件格式,用于取代当时一种遵从私有版权协议的GIF图形格式文件,也被戏称为Png is Not GIF)。,它将是一个免费的、可自由使用的操作系统,和UNIX兼容。GNU的logo如图1.3所示。UNIX的用户可以很容易地切换到这个操作系统上工作。

图1.3 GNU logo

1985年,Intel的第一款32位处理器芯片80386问世,它是一个成熟的现代处理器(此前的8086不具备存储器保护方式,而80286的保护方式不够完善,不能与实地址方式共存)。这意味着PC家族已具备运行Unix的硬件基础。

同年5月,斯托曼发表了著名的GNU宣言,阐明了GNU的意义,请求社会对GNU计划加以关注和支持。随后斯托曼创立了自由软件基金会(Free Software Foundation,FSF)在英语里,“free”有“自由”和“免费”两个意思。这里取其前者,表示软件可以自由地运行、研究、修改和再分发。自由软件并不意味着免费,它并不排斥商业行为。单纯的免费软件由另一个词freeware指代。,并担任不拿工资的主席。

1989年2月,斯托曼拟定了GNU公共版权协议(GNU General Public License,GPL),作为GNU软件的法律文书。GPL强调软件的自由属性:任何人都可以自由地研究、修改、使用和再分发。它规定:遵循GPL版权协议获得的软件,在发布二进制代码的同时必须要让用户能以同等的权利获得修改的源代码;不允许为软件的再发布增加额外的限制条件。GPL是开源软件界最具影响力的版权协议。

到20世纪90年代初,GNU项目已经开发出许多高质量的免费软件,包括著名的GNU emacs编辑系统、bash shell程序、GNU C编译器GCCGCC原为GNU C Compiler的缩写。后来,随着GCC功能的不断丰富,能够实现对多种编程语言的编译,于是就将正式的名字改成了GNU Compiler Collection。和调试器GDB(GNU Debugger)等。这些软件为Linux操作系统的开发创造了合适的环境,也是Linux能够诞生的基础之一。然而,GNU自己的操作系统内核GNU/Hurd则进展缓慢。随着Linux操作系统的横空出世,GNU将注意力转移到这种新型操作系统上面。Debian GNU/Linux就是自由软件基金会对Linux大力支持的结果。

1.2.3 Linus和Linux

1988年,李纳斯·托瓦兹李纳斯·托瓦兹,全名Linus Benedict Torvalds(1969.12.28– ),生于芬兰赫尔辛基,软件工程师,1996年赫尔辛基大学计算机科学硕士学位,2010年入籍美国。开始了他的大学生活。他在学习计算机操作系统课程时,研究了塔能鲍姆教授编写的教材《操作系统:设计与实现》。在此之前他已购买了一台386的个人计算机,得以将学习的MINIX代码在个人计算机上实施。

李纳斯当初并没想到要写一个操作系统。他在自己的计算机上写了一个小程序,包括两个进程,一个进程打印“A”,另一个进程打印“B”,然后又把A、B改成了别的东西(一个进程读取键盘信息送到调制解调器,另一个进程则从调制解调器读取信息送到显示屏上)。然后就是键盘、显示器、调制解调器的驱动程序,接着就是磁盘驱动程序,再之后就是文件系统。按他自己的话说,当所有这些都具备之后,一个操作系统的内核也就形成了。

最晚到1991年4月,李纳斯就已经开始全身心地投入到MINIX系统的研究中,并且尝试着将一些GNU软件(GCC编译器、bash shell、GDB等)向MINIX移植。1991年8月25日,李纳斯通过互联网向comp.os.minix新闻组发布了一条消息,大致意思是他正在开发一个供386(或者486)使用的免费的操作系统,只是出于个人兴趣,不会很大,也不会像GNU那样专业,希望大家多提宝贵意见,等等。

当时这个操作系统还没有正式命名。李纳斯想的是“Freax”,即free(自由)、freak(怪胎)和x(“UNIX”中的“x”)的组合。当他把程序文件上传到大学的FTP(File Transfer Protocol)服务器上的时候,服务器管理员不喜欢Freax这个名字,也没跟李纳斯商量,就改成了Linux。

同年9月,Linux 0.01版软件界不成文的惯例,小于1的版本号用于标记测试版。内核公布在赫尔辛基大学的FTP服务器上,源代码共10239行这也标志着Linux操作系统的诞生,从此登上计算机操作系统的舞台,对信息技术的发展产生越来越大的影响。

最初发布的Linux遵从私有版权协议,对商业使用有限制,但已经开始受到GNU的影响。Linux 0.01版就包含了一个GNU的软件bash二进制程序计算机系统中,所有的信息都是以二进制形式存在的。这里所说的二进制程序是指从高级语言源码经编译器加工后得到的机器语言程序。人们可以直接读懂源码,但很难读懂机器语言程序。本书中提到的二进制程序或者二进制数据,均指这类可以由机器直接处理、但人们无法直接阅读理解的文件。。在听过理查德· 斯托曼的演讲之后,李纳斯开始接受自由软件的思想。从1992年12月的Linux 0.99版开始,即遵从GNU GPL版权协议发布。GPL版权协议使得Linux以更快、更广泛的方式传播,并且在公众心中留下了美好的印象,得到了全世界计算机爱好者的热心支持。

如今,Linux社区相当活跃,成为一个有成千上万人参与的项目。最初,爱好者们通过邮件将代码发给李纳斯,由他将代码规划到内核中。从2005年(Linux内核纳入git版本控制系统)到2017年,共有来自1400多家企业/社团的超过15000人为内核作出过贡献。现在平均每天仍会收到200次左右的代码提交或修改,每6个月左右就会有一个稳定的新版本向外公布,几乎每两个星期就会有一个子版本的更新以上数据来自Linux基金会2017年度Linux内核发展报告。。2018年8月发布的Linux-4.18版有6万多个文件,2000多万行代码。

Linux以其可靠性和稳定性,迅速进入服务器领域。全世界超级计算机统计网站公布的数据显示,1998年11月,性能最强的前500台超级计算机,99%以上都在使用UNIX,只有1台在使用Linux;次年6月,这个数字上升到17台;而到2018年6月,世界上最强大的500台超级计算机全部使用Linux。

在移动设备上,Linux很早就进入了市场竞争,早期的个人数字助理(Personal Digital Assistant,PDA)、手机上都有它的身影。自从谷歌发布Android系统以后,几乎所有的移动设备生产厂商都开始采用这种基于Linux内核的操作系统打造手机和平板电脑。据全球网站通信流量检测机构statcounter统计,到2018年8月,Android系统的手机市场占有率为72.9%,平板电脑上则几乎与苹果的iOS平分天下。

Linux操作系统虽有不少优势,但在向个人计算机市场普及过程中仍面临着巨大的障碍,桌面系统的Linux普及始终非常缓慢,到2018年也只占2%左右。大量的Windows用户无法在短时间内改变自己的使用习惯。随着移动设备的普及,Linux迎来了新的发展机遇。安装Linux操作系统的服务器配合采用Linux内核或操作系统的互联网设备和移动终端,让人们看到了Linux操作系统在性能上的优势。

Linux的吉祥物是一个名叫Tux的企鹅,身着一袭绅士服装,如图1.4所示。Tux可以解释为Torvalds UNIX。它也恰好是tuxedo(一种男式晚礼服)的缩写。Tux形象最早出现在1996年,创作者是美国程序员拉里·爱温(Larry Ewing)。

图1.4 企鹅Tux

1.2.4 POSIX标准

POSIX(Portable Operating System Interface,缩写中的字母X只是为了发音方便,不对应任何单词)是为了保持计算机系统之间的兼容性,由IEEE和ISO/IEC共同制定的一系列相互关联的标准的总称。该标准基于现有的UNIX实践和经验,定义了应用程序编程接口(Application Programming Interface,API)、命令行以及其他应用,保证应用程序在源代码一级上在各操作系统之间的可移植性。此标准源于20世纪80年代中期的一个项目,该项目曾试图将AT&T的System V和BSD UNIX系统的调用接口之间的区别加以调和。

第一个POSIX正式标准在1988年公布。POSIX在IEEE的编号是IEEE 1003,对应的国际标准化组织编号是ISO/IEC 9945。

90年代初,正是Linux刚刚起步的时候,这个标准为Linux提供了极为重要的参考,使得Linux能够在标准的指导下进行开发,并能够与绝大多数UNIX系统兼容。在最初的Linux内核代码中(0.01版、0.11版),就已经为Linux与POSIX标准的兼容做好了准备。1996年,美国国家标准技术局的计算机系统实验室确认Linux 1.2.13版符合POSIX标准。正式通过POSIX认证的系统不多,主要有AIX、UnixWare、Solaris,包括Linux在内的多数开源操作系统并没有参加正式的POSIX认证。