Linux管理与开发实用指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Linux背景知识

作为一名Linux用户,对于Linux相关名词和历史如果不能如数家珍,那就太不可思议了。本节会介绍GNU、POSIX标准等相关名词。这些名词在本书后续章节也会提及,所以应该对其有初步的了解。本节还会介绍Linux从蹒跚学步到光彩夺目的全部过程。

1.1.1 Linux名字的由来

据Linux的作者Linus Torvalds在其自传《Just For Fun》一书中所说,在一开始并不想用Linux。因为这个名字听上去像是Linus的UNIX,这样好像有点自负。在开始开发时,Linus准备的名字是Freax(Freax的英文含义是怪诞的、怪物、异想天开等)。而其FTP的管理员Ari Lemke坚持认为这个名字很不好,于是用他自己的方式将内核代码放到FTP站点上,并坚持要用Linux这个名字,所以该操作系统内核就以Linux这个名字被广为传播。

Linux的吉祥物是一只名字叫做Tux的企鹅,如图1.1所示。1994年发表Linux正式核心1.0的时候,开发者们建议Linus Torvalds为Linux内核选择一个吉祥物。Torvalds的妻子想到的吉祥物是企鹅,因为Linus喜欢企鹅,小时候去动物园时还被一只企鹅咬了一口!于是就建议在想不到其他吉祥物的情况下,干脆就以这只企鹅来当吉祥

物!这个建议得到大家的赞同。而且为了特别起见,这只名为Tux的企鹅的样子还是很有特色的。仔细观察就会发现其喙与璞均为黄色,而不是常见的白色。

图1.1 Linux的吉祥物Tux

Linux的注册商标理所当然属于核心技术的掌握者Linus Torvalds所有。不过,律师William R. Della Croce可不这么认为;1996年他声明Linux商标属于自己所有,各大发行版需向自己支付版权费。他的商业意识显然用错了地方,在各方努力下,他与Linus达成了庭外和解,Linux的版权重新分配给了Linus,Linus也重申了Linux将永远开源的承诺。

1.1.2 自由软件库GNU

GNU这个名字是GNU’s Not UNIX(GNU不是UNIX)的递归缩写。这是GNU成立时为了表示与商业UNIX系统的差别,而特别采用的名称。GNU发音为Guh-NOO(作为单词的gnu其意思是角马,发音与单词new相同)。

GNU计划(其标志如图1.2所示)是由Richard Stallman在1983年9月27日发起的,其目的是建立一个与UNIX兼容、软件丰富,且可自由使用的软件库(包括操作系统内核)。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。

图1.2 GNU的标志

GNU的软件与UNIX系统兼容,因为两者均符合POSIX标准。最初GNU的软件是参照UNIX来编写的,所以GNU也可看做是商业UNIX软件的一个自由实现,一般的UNIX软件在GNU中都有一个对应的同名软件。

由于GNU软件遵循GPL协议,所以发布时须同时提供源代码。这一方面保证了软件的衍生版本与原始版本的兼容性(UNIX没有开源,所以在最初的代码衍生的几个UNIX商业版本之间出现许多重大的不同);另一方面顶尖的软件高手不断对代码进行修改,所以使得GNU软件的功能不断增强。另外,由于GNU软件的质量比之前UNIX的原始版本软件还要好,后来许多UNIX系统上也安装了GNU软件;同样由于GNU软件性能优良,还被广泛地移植到Windows和Mac OS等各种操作系统上。

GNU是个软件的组合,其不仅是鼓励软件开发者开发GNU的软件,还大量吸纳着其他优秀的自由软件,如TeX和X Window。所以GNU软件资源极为丰富且功能强大。GNU拥有大量的应用软件,但GNU的目标是创建一个完整的操作系统,而当时缺少的就是一个自由的操作系统内核。Linux的出现弥补了这个空白。然后Linux与GNU丰富的软件结合形成了极其旺盛的生命力,发展极为迅速,也达成了GNU最初的理想:实现一个完全自由的操作系统。

所以采用Linux内核,加上GNU软件库中软件的操作系统应该被称为GNU/Linux。或许GNU觉得不能采用自己的内核是个遗憾,所以GNU自己的内核也在开发中;该内核名为Hurd,目前已发布了三个版本。

1.1.3 标准程序接口POSIX

POSIX(Portable Operating System Interface for Computing Systems)是由IEEE和ISO/IEC开发的一个标准。该标准描述了操作系统的调用服务接口,用于确保符合该标准的应用程序可以在多种操作系统上移植运行。

由于早期各大UNIX系统之间的软件和系统调用并不兼容,1980年一个UNIX用户组(usr/group)试图将AT&T的系统V和Berkeley的BSD系统的调用接口统一,并于1984年产生了/usr/group标准,这就是POSIX标准的前身。1986年4月IEEE公布了试用标准,在1988年9月第一个正式标准(IEEE 1003.1-1988)被批准,该标准即是POSIX.1标准。

1989年POSIX的工作被转移至ISO/IEC社团,以将其制定成ISO标准。1990年POSIX.1与已经通过的C语言标准联合,正式批准为IEEE 1003.1-1990(也是ANSI标准)和ISO/IEC9945-1:1990标准。

POSIX.1标准仅包括了基本的系统服务,但仅包括这些内容还不足以保证程序的可移植性。因此1990年IEEE POSIX的其他标准制定工作也开始进行,计有命令与工具标准(POSIX.2)、测试方法标准(POSIX.3)、实时API(POSIX.4)等,这些标准涵盖了计算机系统的各个方面。

POSIX对于Linux来说,有着重要的意义。因为Linux从一开始就遵循该开放标准,这保证了Linux与其他UNIX系统的兼容。在0.01版的Linux源代码/include/unistd.h文件中就已经定义了几个有关POSXI标准要求的常数符号,并且在注释中写道:“OK,这也许是个玩笑,但我正在着手研究它呢。”

1.1.4 GPL许可证

GPL是GNU General Public License(GNU通用公共许可证)的缩写形式,其要求软件发布时必须同时发布源代码,并允许任何用户能够以源代码的形式将软件复制或发布给别的用户。如果一个软件使用了遵循GPL许可证的任何软件的一部分,那么该软件也必须继承GPL许可,因此而成为GPL软件,也就是说必须随该软件一起发布源代码。

基于GPL的软件允许商业化销售,但必须再开放源代码,这个特点多少限制了软件的商业价值。因为有的安全软件如果公布了源代码会大大降低其安全性,有的专利算法也会由于公布源代码而失去商业价值。因此对GPL持批评态度的人也大有人在,他们认为“GPL是一种病毒,因为它具有太强的传染性了”。

一般来说,GPL具有如下的特性。

● GPL授予软件用户(程序接受人)以下权利,或称“自由”:以任何目的运行此程序的自由;以学习程序工作机理为目的,对程序进行修改的自由;再发行复制件的自由;改进此程序,并公开发布改进的自由。

● GPL只在程序再发布时发生效力。如果修改后只供自己的使用,不发行的话对软件的修改可以不开放源代码。而且该许可只对软件本身有效力,而对软件的输出并无效力(除非输出的是软件本身)。如用户张三使用开源软件书写的文档,用GIMP处理的图片,用BLENDER建立的3D模型,这些文件著作权属于张三,而不是属于GIMP或blender的开发者。

● GPL并不是免费的代名词。GNU的创建人就是凭借销售其开发的Emac软件获得较为丰厚的收入后,才有充足的精力和财力创建GNU组织的。GPL并不排斥对自由软件进行商业性质的包装和发行,也不限制在自由软件的基础上打包发行其他非自由软件。任何接受GPL许可证的接受人都有修改、复制、再发行作品或作品的演绎版本的授权。许可证接受人可以对此项服务收取费用,反之亦然。这一点是GPL与其他禁止商业用途的自由软件许可证的最大不同。Stallman认为自由软件不应限制其商业用途,同时GPL也清楚地说明了这一点。

● 遵循GPL许可的软件不一定就可以任意传播,因为有些软件有其正式的版权,GPL在发布软件或者复制软件时声明了限制条件。但是,从用户的角度来看,这些条件对于自由使用并没有什么影响。

● GPL许可证文本的版权属于自由软件基金会。但遵循GPL许可的软件著作权属于作者所有,只有著作权所有者才有权利对于违反许可证的行为提起诉讼。

● 尽管Linux内核也属于GPL范畴,但GPL并不适用于通过系统调用而使用内核服务的应用程序。通常把这种应用程序看做是内核的正常使用,同样,一个软件对其他GPL程序接口进行调用,可以认为并未使用GPL软件,就不必受GPL许可证的约束。

Copyright规定了所有者的权益,而GPL有Copyleft条款,意思是遵守该协议的著作人将放弃版权。对于使用者而言,只要使用时遵守GPL,就可以无视Copyright。如果使用者不遵循GPL协议,那么Copyright就发生作用,著作权所有人可以对侵权行为发起诉讼。在美国已经有人打赢了类似的官司。

说明

在Linux发展过程中,本节所介绍的几个名词所代表的意义对于Linux来说有着极其重要的作用。GNU发展出了丰富的软件,Linux提供了系统内核,相得益彰,于是GNU与Linux的发展走上了快车道。而POSIX标准的提出无疑给Linux一个和当时主流的计算机世界接轨的机会,让符合POSIX标准的程序可以在Linux中运行无疑大大提高了Linux系统的生存能力和影响力。GPL则为GNU软件的发展立下了汗马功劳,其使得GNU软件具有开放性与一致性,也提高了GNU软件的质量。

1.1.5 Linux发展史

Linux现在的发展极其迅速,其拥有许多发行版,桌面市场占有率也在逐步上升,服务器市场更是占据了大部分的市场份额。这些成绩离不开那些早期的Linux的缔造者和爱好者,他们一直为Linux的发展做着无私的奉献,我们不应该忘记他们和一些有纪念意义的历史时刻。Linux的迅速发展得益于互联网、GNU,其基础则是UNIX和MINIX,所以,在提及Linux历史时不得不提及这些要素。下面是Linux及其相关技术的历史介绍。

1987年,由于当时强大的UNIX采用商业发布模式,不允许发布源代码。这种情况对于学习操作系统的学生来说是一个很大的困难,因为其无法接触到操作系统的核心实现。Andrew Tanenbaum教授有感于此,从1984年开始编写与UNIX功能类似,并完全兼容的MINIX。这是一个多平台的mini UNIX版本,所以称为MINIX,其在发布时带有完整的源代码。

1991年8月25日,芬兰赫尔辛基大学的一名学生Linus Torvalds在comp.os.minix张贴了如下内容:

      “使用MINIX的用户大家好:
        我正在写一个(免费的)基于 386(486)机器的操作系统(只是个人爱好,代码不会太大或专业
    到像GNU)。这个系统从4月开始酝酿,现在已经准备好开始写了。我希望MINIX用户给我喜欢或不喜
    欢的MINIX的特性,我的操作系统和MINIX在许多特性上(采用MINIX文件系统)很相像…欢迎任何
    建议,虽然我不一定会采纳。
        Linus(torvalds@kruuna.helsinki.fi)
        附注:当然,这个操作系统没有使用一行MINIX源码,拥有多线程的文件系统。由于使用了 386
    的任务切换特性,所以该操作系统没有可移植性,并且只能使用AT硬盘。”

这段话的背景是:当时MINIX用户对于MINIX有许多的建议与意见,而MINIX的开发者Tanenbaum教授教学任务繁重,无法及时响应这些建议。所以才有了Linus说希望MINIX的用户给他建议。

1991年10月5日,Linus在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核系统的诞生(Free minix-like kernel sources for 386-AT)。这段消息可以称为Linux的诞生宣言,并且一直广为流传,因此10月5日可以称得上是Linux的生日。该版本包括简单的磁盘驱动程序和一个文件系统,可以运行bash和gcc编译器,但该系统并没有良好的用户界面以及文档。在此之后,该系统引起了各地hack的注意,并以每两个星期出一次修正版的速度成长。

1994年3月14日,第一个正式版本1.0发布;而Linux的讨论区也从comp.os.minix中独立出来成为alt.os.Linux,而后又更名为comp.os.Linux。后来由于访问者数量越来越多,又将此区分为许多组comp.os.Linux.*。

同年,Marc Ewing建立Red Hat Linux,用以解决Linux易用性方面的问题。Red Hat发行版包含Linux内核、第三方软件、文档,以及初级技术支持等,售价为50 美元,由于其解决了Linux的易用性的问题,Red Hat迅速成为领先的Linux发行版。

1996年2月9日,Linux 2.0版发布。同年,美国国家标准技术局的计算机系统实验室确认Linux 1.2.13版(由Open Linux公司打包)符合POSIX标准。

1999年1月26日,Linux 2.2发布;GNOME 1.0发布;支持Linux 2.2的Red Hat 6.0发布;IBM推出全面支持Linux计划;HP宣布支持Linux。由此可见,这些大公司在十年前已经纷纷宣布支持Linux了。与此同时,各软件巨头也提供了软件的Linux接口;这样,Linux的用户也就可以调用软件了。这些现象的出现,说明Linux的影响已经不局限于技术极客,在商业领域也开始拥有了足够的影响力。

现在,Linux已经拥有Red Hat、open SUSE、Ubuntu等许多大的发行版,小的发行版有数百种。同时,其在其他领域如嵌入式领域也有了很大的发展,内核也已发布到2.6.24版。