1.1 GNU/Linux历史和文化
1.1.1 GNU/Linux是Linux的全称
GNU/Linux是Linux的全称,通常大家都习惯于将GNU/Linux简称为Linux(本书采用其简称Linux)。也许正是大家习惯于使用简称,所以就淡忘了其全称。严格说来Linux只是一个内核(Kernel),如果没有GNU提供的丰富软件什么也干不了,而大家使用的各种Linux发行版本其实只是Linux内核配以GNU丰富的应用的软件而已,所以作为一个Linux使用者,首先要知道Linux的全称——GNU/Linux,这很重要。至于GNU是怎么一回事,会在后面详细介绍。
1.1.2 Linux前传
Linux的起源可以追溯到操作系统的鼻祖——UNIX。1969年,AT&T贝尔实验室的Ken Thompson(图1-1所示)开始利用一台闲置的PDP-7计算机开发一种多用户、多任务的操作系统。没过多久,Dennis Richie也加入了这个项目,并吸取了麻省理工学院更早的一个名为MULTICS操作系统项目失败的教训。在他们二人的共同努力下,UNIX诞生了。
图1-1 C语言之父——Ken Thompson(右一)
早期UNIX是用汇编语言编写的,但从其第三个版本开始,他们为了提高系统的可移植性和开发效率,专门为UNIX开发了一种崭新的编程语言——C语言,并用C语言重新编写大部分代码。
通过这次重新编写,UNIX得以移植到更为强大的DEC PDP-11/45与11/70计算机上运行。在UNIX发展早期,其源代码是公开的,并且开发文档也十分详细,所有这些都为人们进行进一步的研究提供了方便,因此UNIX很快成为当时欧美各大高校讲解操作系统的蓝本,成为当时校园最流行的操作系统。不仅如此,加州大学伯克利分校还根据UNIX源代码开发出了鼎鼎大名的BSD,即UNIX著名“变种”之一。不过好景不长,从UNIX的Version 7开始,AT&T将UNIX商业化,更换了许可协议,不再允许先前自由开放的做法。
为了方便教学和研究,1997年图灵奖(计算机界的诺贝尔奖)的获得者Andrew S. Tanenbaum(Linux创始人Linus的老师)以Version 7为蓝本开发了基于Intel X86平台的Minix,Andrew S. Tanenbaum照片如图1-2所示。此外,Andrew Tanenbaum还著有一本被世界各大高校广泛采用的经典操作系统教材——《现在操作系统》(《Modern Operating System》,如图1-3所示)。
图1-2 Linux创始人Linus的老师- Andrew S. Tanenbaum
图1-3 操作系统的经典之作——Modern Operating System
Minix与Version 7在系统调用级兼容,但没有任何UNIX代码。因此,可以不受AT&T许可协议约束,不仅如此,Minix还公开源代码,允许用于教学科研目的。
相关链接:Linux启蒙者——Minix
可能是Linux过于光彩夺目,掩盖了其启蒙前辈Minix的风采,以至于大家对它知之甚少,了解它的人寥寥无几,所以下面就为大家详细地介绍一下Minix的近况吧。
最新的Minix是3.0版本,其官方网站地址为http://www.minux3.org。此外,这个版本的图形用户界面也于2007年1月10日正式发布,这样Minix就不仅仅是一个教学系统了,它的实用性大大增强了,应用范围也越来越广,Minix的Logo如图1-4所示。
图1-4 Minix可爱的Logo
感兴趣的朋友,可以从Minix 3官方网站下载其发行的CD版本,该版本中包含了其源代码。需要说明的是,最新的Minix 3和Minix 1、Minix 2有较大差异,Minix 1和Minix 2主要用于教学目的,而Minix 3的目标是其不仅用于教学,还可以用于流行的嵌入式系统。它具有稳定、可扩展和安全等特点,继承了Minix的“优良”传统,最新版本依然开放源代码,其核心代码只有4000余行,却支持POSIX、TCP/IP、X-Window及C/C++等多种主流协议和编程语言,并支持多用户和多进程这些高级特性,Minix 3如图1-5所示。
图1-5 Minix 3简约界面
1.1.3 Linux传奇
而Linux,则源于一个芬兰赫尔辛基大学学生——Linus Torvalds(Andrew Tanenbaum的学生)的简单需求:由于当时的UNIX是十分昂贵的操作系统,而Linus Torvalds当时只是个学生,并希望能在个人电脑上使用类似UNIX的系统,所以Linus在上大学时主要使用Minix。在使用中Linus对Minix许多地方都不是很满意,但由于受到Minix协议的限制,无法修改和完善,后来Linus决定自己编写一个操作系统,他以自己熟悉的Minix和UNIX作为原型,在一台Intel 386 PC上开始了他的工作。
由于Linus的进展很快,受工作成绩的鼓舞,他决定将这个项目通过互联网与其他人分享,于是在1991年10月,21岁的Linus在USNET新闻组——comp.os.minix上发了文章。这篇文章的内容如下:
Hello everybody out there using minix – I'm doing a(free)operating system(just a hobby,won't be big and professional like gnu)for 386(486)AT clones. This has been brewing since April,and is starting to get ready. I'd like any feedback on things people like /dislike in minix,as my OS resembles practical reasons among other things. I've currently ported bash(1.08)and gcc(1.40),and things seem to work. This implies that I'll get something practical within a few months,and I'd like to know what feathers most people would want. Any suggestions are welcome,but I won't promise I'll implement them:-)Linus(torvalds@kruuna.helsinki.fi)Ps. Yes – it's free of any minix code,and it has a multi-threaded fs. It is NOT portable(uses 386 task switching etc),and it probably never will support anything other than AT-hard-disks,as that's all I have.
其中比较重要的内容翻译过来是:“我正在写一个类似Minix的基于AT-386的免费操作系统,现在终于到了可用的状态,我愿意公开代码以便使它得到进一步的发展……”
也就是因为这篇文章,Linux才开始了以后的快速发展。其实此时发表的版本,也就是第一个Linux内核的Release(正式版本)——Linux Kernel 0.0.2。从上面的文章可以了解到Linus Torvalds本人设计Linux的初衷以及Linux的精神:
Linux是基于Andrew Tanenbaum开发的Minix,但Linux比其更加开放和自由。
最初,Linux是以Linus的386硬件平台为设计平台,但目前Linux支持的平台几乎涵盖了所有的主流硬件平台,例如Intel X86系列、AMD64系列、IBM PowerPC系列和Sun SPARC系列。需要注意的是,虽然Linux和UNIX有很大的渊源,但Linux并没有包括标准UNIX的源代码,它是按照公开的POSIX标准重新编写的。不过,Linux使用了大量的GNU软件。
Linux从1991年发布到互联网以后,得到了越来越多的黑客、程序员的青睐和支持。他们来自于世界各地,通过互联网,无私地为人类奉献自己的智慧,正是他们积极地推动了Linux的高速发展,成就了一个自由软件世界。经过这么多年的高速发展,Linux无论从可用性上还是功能上都日趋成熟,基本形成了与UNIX、Windows三分天下的局面。
由于Linux是由Linus开发的,所以这个操作系统的名称自然也以Linus's UNIX来命名,它的英语发音类似于“丽尼克思”,重音在第一个字上,大家可以模仿Linus Torvalds本人的Linux发音,该文件可从UbuntuChina互动社区下载,下载地址为:http://www.ubuntuchina.com/Download/Book01/Linux.wav,其内容是:“Hello,This is Linus Torvalds and I pronounce Linux as Linux.”同时Linux以一只可爱的企鹅作为自己的Logo,它的名字叫做Tux。
相关链接:多姿多彩的Tux
简约版的Tux
Google和Tux
Tux和Ubuntu
Tux和Kubuntu
Tux和Ruby
背景知识:为什么Linux的Logo是一只企鹅
为什么Linus要选一只企鹅作为自己的Logo呢?这里还有一个有趣的故事:
当年Linus Torvalds去澳大利亚旅游,见到一些企鹅,但是当Linus伸手去抚摸其中一只时,不幸被咬了一口,这使得他对这种可爱的动物留下了深刻的印象。虽然被企鹅咬过,但Linus仍对这只小动物情有独钟,以至于后来要为Linux设计一个Logo时,Linus力排众议选择了一只憨态可掬的企鹅作为Linux的Logo。
1.1.4 GNU和Linux的关系
上面提到Linux的全称是GNU/Linux,其严格说来只是个内核(Kernel)而已。内核主要负责管理、分配计算机软件和硬件资源,具体包括管理和控制硬件设备、内存管理、虚拟文件系统、系统进程等比较核心和底层的工作。
随着内核的发展,其功能范围已经不仅仅局限于此,还实现了很多其他重要功能,如声卡驱动功能ASLA、网络包过滤功能Netfilter、虚拟化支持功能KVM等,但这不包括大家经常使用的程序,如浏览器、OpenOffice.org办公套件、多媒体播放或制作程序,以及系统和网络维护管理工具等。与这些程序相比,内核就显得“底层和原始”得多了。
需要强调的是,一个优秀的操作系统,不仅需要强大的核心功能,更需要众多优秀的应用程序,否则仅有一个好的内核,也是无法充分发挥其优秀功效的。
讲到这里,就不能不提著名的GNU(Gnu is Not UNIX)项目了,可以说正是这个著名项目才有了后来轰轰烈烈的自由软件运动。GNU项目创立于1984年,创始人为Richard Stallman,其近照如图1-6所示。
图1-6 Richard Stallman近照
Stallman先生1974年毕业于哈佛大学,获得物理学BA学位。1971年,年轻的Stallman进入麻省理工学院(MIT)人工智能实验室工作,成为软件共享社区的重要成员。作为实验室的系统黑客,Stallman的工作就是改进系统。在20世纪70年代中期,当时的软件是鼓励自由复制,而计算机业的传统就是一切为人人所共享。但好景不长,20世纪70年代末,以微软公司创始人Bill Gates的《至电脑业余爱好者的一公开信》为标志,以世界知识产权组织制定的《伯尔尼公约》为框架,软件进入了版权时代,这种制度是通过一个偶然的事件影响了Richard Stallman先生。
事情是这样的,当时施乐(Xerox)公司赠送了一台激光打印机给实验室,要知道20世纪70年代的激光打印机大得如吉普车一样,放置这么一个庞然大物就成了问题,最后发现只有实验室的9楼有地方放下它,激光打印机的打印速度自然没得说,只是一旦出了问题,哪怕只是像卡纸这样的小问题,人们都不得不爬上九楼,于是乎,一天的工作时间就这样爬上爬下,这谁受得了,好在施乐公司随激光打印机附带了驱动程序,实验室的人就把控制打印的驱动程序功能做了修改,问题才得以解决。但到了1978年,一切都改变了,施乐又送了一台名为Dover的新打印机给实验室,可这次,他们不再提供打印机的驱动的源代码。Staman先生想获得驱动代码,从而改进打印机功能,结果被严正拒绝,由此,Stallman再也无法说不公开协议是纯洁清白的了。
Stallman希望做一名程序员并能为这个社会作出更大的贡献,所以他认为当时最需要的是开发一个自由的操作系统来改变这种状态,于是GNU项目应运而生,通过从其采用程序设计中递归方式命名就可以看出,其目标是开发一个类UNIX但又不是UNIX的免费操作系统。该项目包括内核、Shell和应用程序等多个项目,几乎涵盖了应用的方方面面。这里着重介绍的是GNU的内核Hard项目,由于其开发过程中因种种原因而一再滞后。而这时,恰好Linux诞生了,填补了GNU应用平台的空缺。
Linux免费的内核推出后,由于其宽松的授权,允许用户或厂商自行定制内核和应用程序的特性,再加上GNU数量巨大、功能丰富的应用程序,所以很多厂商或个人纷纷推出自己的定制和组合方案,这就构成了我们当今能够看到的丰富多彩的Linux发行版本。所以不论Linux发行版的名称或开发厂商是什么,它们都同属于Linux范畴,因为它们有着相同的内核。这个内核就是源自Linus Torvalds维护Linux Kernel项目,其官方网站地址为http://www.kernel.org/,最新的内核都在这里发布,对于内核“喜新厌旧”的朋友可以来这里下载最新的内核进行编译和升级。
相关链接:如何知道系统的自由程度?
如何知道自己的Ubuntu系统安装了多少自由软件呢?使用VRMS测试一下就知道了,VRMS即Virtual Richard M. Stallman(虚拟Richard Stallman)的简称,它可以检测出你的系统中到底安装了多少非自由软件,以自由软件所占百分比作为度量,这样,通过VRMS来了解自己使用了多少非自由软件。
VRMS在基于Debian的系统上可以使用如下命令安装:
$apt-get install vrms
在安装VRMS后接着执行如下命令即可了解你的Ubuntu系统安装了哪些非自由软件。
$vrms
背景知识:自由软件和开源软件有什么不同?
很多初学者对这个问题都很困惑,到底有什么不同呢?自由软件拥有“使用、复制、修改、发布”四大自由,而任何一个符合上述四大自由的软件都可以被称为自由软件。为了落实四大自由,Stallman设计了一套不同于著作权(Copyright)授权模式——Copyleft。这套制度最大的特色有两个:
● 使用者可以免授权金来执行、重制与散布该程序,并且同样免授权金地取得程序原始码;
● 任何基于程序原始版本所开发出来的修正版本(modificaiton)仍然必须使用相同的授权条款。
需要注意的是,这一切的基础是建立在著作权制度之上,所以自由软件仍然是有著作权的软件。Copyleft制度落实为具有授权条款文字就成为了GNU/GPL。
而开源软件则是一个从自由软件分化出来的一个商业概念。由于Stallman先生成功的开创了自由软件的事业,自由软件的概念已经深入人心,众多自由软件日渐流行,新一代的黑客们受到鼓舞,纷纷投入商业领域,当然他们是第二代的黑客,他们一方面呼应自由软件的精神,一方面又积极拥抱商业世界,于是乎,持有这种概念者就将自由软件的标签改成了所谓的“开源软件”。
开源软件看起来似乎和自由软件兼容,但Stallman先生认为,两者最大的区别就是自由软件将自由精神放在首位,但对于商业化的开源软件来说,自由(free)和免费(free)是同一词。为了避免纷涌而来的投资者被Stallman的自由理念吓跑,所以,新一代黑客和商人们就联手打造了一个所谓的开源软件新概念,将Stallman的自由理念和GNU项目屏蔽起来。
无论如何,Stallman先生依然是自由软件的核心和精神领袖,虽然,在Stallman先生发起的这场自由软件革命已经完全超越了他所能驾驭的范围,在这场金钱和精神的较量中并没有取得他想要的最后胜利,但他所倡导的热情和献身精神,以及他所缔造的GNU,已经给予我们足够多的物质和精神财富!
本书不刻意区分自由软件和开源软件,只是需要大家了解其两者的区别。
相关链接:关于GNU
GNU Logo(角马):
GNU官方网站:http://www.gnu.org/。
GNU标准发音:http://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg。
2008年和2009年,Rchard stallman先生出席两届哲思软件峰会来,宣传其自由软件思想。
1.1.5 流行的Linux发行版
虽然到目前为止,世界上大概有三百多种Linux发行版,可以用多如牛毛来形容。这么多的Linux发行版,对打算从其他系统转换过来的用户,尤其是初学者来说,可能会感到困惑,如何选择一个适合自己的Linux发行版本;而即便是多年的Linux用户也没有时间和精力去挨个尝试。对此,著名的DistroWatch(http://distrowatch.com/)网站,从众多Linux发行版中遴选出10个最为流行的Linux发行版本,这无疑是一个很好的参考。
表1-1 最流行的Linux发行版本Top 10
DistroWatch将Linux发行版在Linux用户群体中的广泛使用度作为衡量的标准,因此十分客观和权威。
图1-7为十大Linux发行版本的Logo集合,下面我们就详细地介绍一下国内比较流行的版本。
图1-7 十个最流行的Linux版本
1.1.6 Linux的特点和优势
与其他操作系统相比,Linux还具有以下特色:
1. 可靠性高
实践证明,Linux是能够达到主机可靠性要求的少数操作系统之一,许多Linux主机和服务器在国内和国外大中型企业中每天24小时,每年365天不间断地运行。这是Microsoft Windows Server等操作系统所不能比拟的。2006年,HP公司宣布关闭了最后一台非Linux/UNIX主机系统,整个企业的所有信息处理以及数据业务支撑全部由Linux/UNIX主机来承担。
2. 伸缩性强
Linux系统是世界上唯一能够在嵌入式设备、个人计算机、服务器、小型机直到大型机上运行的操作系统,没有其他操作系统能够做到这一点。此外,采用SMP、MPP和Cluster等技术,使得有些Linux发行版支持CPU数目多达1024个以上,这就使得Linux平台扩充能力有了进一步提高。
3. 良好的开放性
这是Linux系统最重要的特征之一,也是Linux强大生命力所在。开放系统的概念已被计算机业界普遍接受,而且成为今后发展的主要趋势。所有的计算机厂商都声称自己的产品是开放系统,而且开放的概念也在不断发展和完善,几乎所有的系统都能在其中找到自己的位置。但程序上是有明显差别的,我们认为系统最本质的特征应该是其所有技术的规格说明是可以公开并且自由使用的,而且是不受某一家具体厂商所垄断并控制的。Linux是最能充分体现这一本质特征的开放式操作系统,正是这种较为彻底的开放性,使Linux的发展充满动力和生机。
4. 强大的网络功能
实际上,Linux诞生于互联网,并且也是依靠互联网才迅速发展起来的,因此Linux具有强大的网络功能也就不足为奇了。它支持所有标准互联网协议(事实上,Linux是第一个支持IPv6的操作系统),可以轻松地与TCP/IP、LANManager、Windows for Workgroups、Novell Netware或Windows NT网络集成在一起,还可以通过以太网或调制解调器连接到Internet上。由于低成本、高可靠、丰富的Internet应用软件,Linux成为互联网服务提供商ISP中最流行的服务器操作系统。任何Linux发行版都提供了电子邮件、文件传输、网络新闻等服务软件,使得Linux不仅能够作为网络工作站使用,更可以充当各类服务器,如应用服务器、文件服务器、打印服务器、邮件服务器、新闻服务器等。
5. 强大的数据库支持
由于Linux系统对各种数据库,特别是关系型数据库管理系统提供了强大的支持能力,因此诸如Oracle、Informix、Sybase、DB2、MySQL、PostgreSQL等主要数据库厂商都将Linux作为首选的优质运行支撑平台,并且在此基础上创造出极高的性能价格比。其中典型代表项目就是LAMP平台。
1.1.7 Linux应用领域
1. 互联网应用架构和网络服务
网络服务器是Linux的一项重要应用。以Linux、Apache、MySQL和PHP组成的应用架构成为互联网上与Sun的J2EE架构、微软的.NET架构相提并论的流行架构。此外,Linux可以轻松提供WWW、DNS、防火墙、FTP、邮件等多种服务,而且这些服务都继承了UNIX高稳定性、高安全的特点,成为服务器的首选操作系统平台。
Ubuntu从其6.06版本开始推出了稳定性、安全性都很高的Ubuntu Server,其独特的LAMP安装模式可以令LAMP复杂的搭建和配置过程变得十分简单。
2. 数据库服务器
对于企业应用来说,数据库就是企业的大脑,它存储了所有的关键商业数据信息,以及相关的商业处理过程,而这些都是企业应用的热点。Linux中有大量优秀的开源数据库供大家选择:从嵌入式数据库mSQL,到中小型企业需要的MySQL,以及大型企业需要的企业级数据库PostSQL一应俱全,满足企业用户全方位的需求。此外,Oracle的Oracle 11i和IBM DB2 8等大型企业级数据库都有相应的Linux版本,尤其是Ubuntu已经率先通过了IBM DB2的全面测试,由此可证明Ubuntu在数据库领域具有雄厚的实力。
3. 软件开发
由于Linux内置了丰富的开发和调试工具,如著名的C/C++编译器GCC及强大的调试工具GDB,在程序员中广泛流行多语言集成开发工具Eclipse及Java创始人维护的著名Java集成开发工具NetBean等。随着Java在2006年年底的开源,J2EE将成为继LAMP之后Ubuntu支持的第二个成熟、通用的软件架构,所以Ubuntu是软件开发以及嵌入式开发人员的首选开发环境。
4. 日常工作
Linux的易用性和可用性越来越好,安装简单,使用便捷,应用丰富使得Linux在日常工作中应用越来越广泛,尤其是Ubuntu的出现,使得易用性和用户体验更上一层楼,在办公领域、多媒体、图形图像处理、互联网应用方面等方面均有不俗表现,和Windows下类似软件相差无几,是免费的工作站。