1.3 Linux操作系统的发行版
一般而言,我们平时使用的各类Linux操作系统都是基于Linux内核的发行版。发行版的数量非常多,目前流行的发行版就超过100个,如果加上一些曾经流行过、现在已经消失的发行版,数量更是惊人,恐怕没人能真正精确地统计出来。正因为如此,很多用户在刚开始接触Linux操作系统的时候,就被Linux操作系统的内核、版本号、发行版名称等专业术语“劝退”了。因此,本节主要介绍Linux内核和发行版之间的关系,为读者理清头绪,然后在此基础上介绍目前知名的部分Linux发行版。
1.3.1 Linux内核与Linux发行版
前文提到,托瓦兹开发的Linux操作系统只是一个内核。目前,Linux内核由托瓦兹的开发小组维护,遵循GPL协议。Linux内核可以管理计算机,但是缺少应用程序,Linux用户需要额外安装很多软件,这就导致用户使用Linux操作系统特别麻烦。对于操作系统,如果没有软件和应用程序,那么它是不完整的。因此,想要使用操作系统,就需要给它安装各种软件,如开发软件、编译器、办公软件、网页浏览器、娱乐软件、社交软件等,仅依靠内核是不行的。
一方面,Linux实质上只是操作系统的内核,缺少了应用程序;另一方面,尽管GNU Hurd开发缓慢,但是各种GNU组件和程序却异常丰富。两者结合发布就成了顺理成章的事。因此,就有人(或机构、社区等组织)把Linux内核、各种应用软件(如GNU操作系统的各种软件和工具)和文档打包在一起,外加一些系统管理和配置工具,组合成Linux发行版(Linux distribution)来发布。随着用户需求的增多,发行版的种类也在逐渐增加,配套的软件从只有GNU操作系统提供的自由软件,到各种商业和非自由软件,发布者也从个人或团体发展成了社区或厂商。
现在,一款常见的Linux发行版主要包含了Linux内核、C/C++程序库、虚拟终端(Shell)、图形系统、桌面环境或窗口管理器、浏览器、办公软件,以及各类定位不同用户的专门的软件工具。Linux发行版通常是ISO格式(也可以称为镜像),可以刻录到光盘中、写入U盘中或者直接通过ISO文件来安装和运行。
在Linux操作系统的发展进程中,多种多样的Linux发行版起到了巨大的推动作用,它们让人们了解并使用Linux操作系统,为Linux操作系统的进步持续做出贡献。从本质上讲,用户可以通过查找、下载、编译、安装和集成大量基本工具来构建Linux操作系统,满足了用户构建可运行的Linux操作系统的需求。一旦有了发行版,系统构建的任务就由发行版的创建者承担,同时构建者的工作也可以与成千上万的用户共享。几乎所有的Linux用户都会通过发行版第一次体验Linux操作系统,即使在熟悉了Linux操作系统之后,大多数用户也会继续使用发行版。实际上,很多用户把Ubuntu、Fedora等发行版称为Linux操作系统是不恰当的,它们是Linux内核和各种软件包的集合。尽管不同Linux发行版的外观和体验各不相同,但它们用的都是相同的Linux内核,因此本质上它们都属于“Linux操作系统”的范畴。一般而言,发行版会被定期更新,也会有自己的版本号,发行版的版本号和Linux内核的版本号是相互独立的。在发布发行版的新版本时,通常也会使用相应新版本的内核,确保系统的性能和兼容性。一些常见的Linux发行版标识如图1-14所示。
图1-14 一些常见的Linux发行版标识
尽管发行版的重要性很明显,但很少吸引开发人员的注意。这是因为构建发行版既不容易也不有趣,而且需要构建者付出大量不懈的努力来保持发行版的更新。从头开始构建系统是一回事,确保系统易于安装、在各种硬件配置下都可用、提供好用的软件以及能不断保持自我更新又是另一回事。目前,世界上有数百个发行版,但是能得到用户长久认可的发行版并不多。
Linux和GNU/Linux
严格意义上来说,“Linux”一词只能指代Linux内核,但在日常生活中,人们已经习惯把各类发行版统称为Linux操作系统。实际上,这个称呼是欠妥的,因为发行版中只有内核属于Linux自身项目,其他的软件都来自其他项目。尽管内核很重要,但它只是操作系统中的一个重要软件。
因为大多数Linux发行版中都包含了来自GNU操作系统的大量软件,所以斯托曼对人们把操作系统简单地命名为Linux操作系统感到非常不满。后来,为了维护GNU工程对Linux操作系统发展所作出的贡献,一些发行版的发布者就把发行版的名字改成“GNU/Linux”,这个名字得到了斯托曼和不少用户的认可,于是沿用至今。不过,“最权威”的人士—— 托瓦兹本人一直是拒绝“GNU/Linux”这个称呼的,不是出于他对改名的不满,而是他觉得发行版包含的软件并不是全都来自GNU工程,而且“GNU/Linux”也不容易记忆和传播。因此,在本书中,如不加特殊说明,Linux泛指GNU/Linux和Linux发行版。
1.3.2 常见的Linux发行版
Slackware是世界上第一个Linux发行版,发布于1993年。在此之后,Debian和Red Hat等发行版相继诞生。目前世界上存在的Linux发行版有数百种,其中大多数发行版都借鉴了Slackware、Debian和Red Hat的思想,或者说是基于他们衍生出来的(当然有些发行版也有全新的设计思想)。根据著名的Linux发行版统计网站的统计数据,主流的发行版主要有Ubuntu、Fedora、Manjaro、Arch Linux等。其中,Ubuntu、Debian和Manjaro等是较常被使用的Linux发行版。本节对9个比较出名的、用户评价较高的Linux发行版进行简要介绍。
1.Slackware
Slackware由帕特里克·沃尔克丁(Patrick Volkerding)创建,最初发布于1993年,是最古老的Linux发行版,20世纪90年代中期,由于没有其他竞争对手,Slackware一度拥有80%的市场份额。待Red Hat问世后,情况发生了变化。如今,Slackware的受欢迎程度远不及过去,并不是因为Slackware不好,相反它仍然是一个顶级的Linux发行版,但是因为Slackware是高度可定制的,而不是用户友好的,最终影响了Slackware的流行范围。Slackware没有刻意模仿Red Hat那样主要依靠鼠标移动和点击的操作方式,而是尽力保持UNIX系统的风格,把系统的控制权尽量多地移交给用户,让他们知道系统的具体执行情况。此外,Slackware也没有详细的更新计划,一旦新版本完成,就会被自然发布。
Slackware是以简洁性和稳定性为第一要素的高级Linux发行版,它自带了流行的软件包以及各个领域中优秀的软件产品,同时通过自身优秀的软件包架构给用户带来了专业级别的灵活性。KISS(Keep it simple, stupid)是Slackware坚信的原则,简化一切,让所有软件包提供简洁的(并不简陋的)功能,这令Slackware能够保持长期、稳定的发展。考虑到KISS原则,Slackware舍弃了部分复杂的功能,如它的安装方式采用基于文本选项的菜单式交互界面,并没有提供图形用户界面(因为图形化的交互界面不够简洁)。由于Slackware有着极其出色的稳定性,它在服务器领域享有很高的声誉,赢得了用户的一致好评。而在桌面领域,Slackware也始终能吸引一批喜爱它的用户。
2.Debian
Debian的创始人是德国计算机科学家伊恩·默多克(Ian Murdock),他于1993年创建了这个系统,当时他还是普渡大学的一名大学生。这个系统一直被认为是最正宗的Linux发行版。Debian主要通过命令行方式来操作,但也提供方便的图形化操作方式。Debian的优秀很大部分要归功于它的APT(Advanced Package Tool)软件包管理器,APT软件包管理器可以从很大程度上解决软件的依赖问题。作为一个遵从开放和分布式开发模式的发行版,Debian拥有超过17,000种不同的软件包,并且伴随着新软件的问世,总会有相应的deb包(Debian软件包格式的文件扩展名)出现。
Debian通常有3个发行版:稳定版(可以用在绝大多数地方,包括搭建服务器)、测试版(部分软件还处在测试阶段)和不稳定版(采用最新版的软件,可能会产生兼容性和稳定性方面的问题)。经过不稳定版的测试,测试版较为稳定,也支持不少新技术,可以看作是稳定版的前身。不稳定版为最新的测试版,包含最新的软件包,但是也有相对多的漏洞,适合桌面用户,且版本代号永远是sid。
3.Red Hat Linux
Red Hat Linux由马克·尤因(Marc Ewing)创建,发布于1993年。由于他公司的名字是红帽(Red Hat),因此他直接用这个名字来命名他的Linux发行版。尤因发现当时Linux发行版(如Slackware)的安装、配置和软件包管理缺乏易用性,尽管这对高级开发人员而言很容易,但对普通用户来说难度太高了。因此,他把注意力集中在缺少技术能力的用户市场,为用户提供解决方案。Red Hat Linux的出现推动了Linux发行版的商业化发展。与此同时,红帽公司充分认可自由软件思想,红帽公司的软件都遵循GPL协议。对于寻求技术支持或帮助的个人或企业,红帽公司为他们提供有偿的技术支持,依托于此,红帽公司在商业界取得了成功,后来成功上市。
目前,Red Hat Linux是最被用户广泛使用的Linux发行版。Red Hat Linux主要有两大系列:Fedora系列和Red Hat Enterprise Linux(RHEL)系列。Fedora系列是社区版,采用最新的Linux内核和最新的应用软件。RHEL系列则比较注重产品的稳定性和可靠性,往往是在Fedora系列里经过验证的、可以稳定工作的软件才能进入RHEL系列。由于Red Hat Linux的影响比较大,所以很多社区或者公司也经常以红帽公司的产品为蓝本,修改并推出自己的Linux发行版,如CentOS Linux就是RHEL的重新编译发行版,几乎和RHEL一模一样,所以其稳定性和可靠性也非常出色,常常被用来当作邮件(如EMOS)或者NAS存储系统(如Openfiler)的专用版。在易用性方面表现非常出色的Mandrake(现在的Mandriva)也是根据Red Hat Linux修改而来的,其他以红帽公司的产品为蓝本的发行版还有国内的红旗Linux、中标普华Linux等。
4.Ubuntu
Ubuntu的创始人马克·沙特尔沃思(Mark Shuttleworth)少年得志,大学毕业没多久就把自己创办的公司以近 6 亿美元的价格售出,成为南非最富有的年轻人之一。他创建的Ubuntu以惊人的发展速度席卷Linux世界,特别是在桌面端,Ubuntu赢得了很多用户的支持。Ubuntu每半年就推出一个新版本,还有长期支持(LTS)版本,即使使用Ubuntu构建服务器,也不用担心缺少技术支持。
Ubuntu是一个基于Debian开发的新兴Linux发行版,自2004年10月发布第一个版本以来,短短几年,已经跃居为最热门的Linux操作系统之一。Ubuntu开发团队对Ubuntu的用户承诺会永远免费,即使是企业级版本也不会追加额外的费用。Ubuntu社区是目前Linux阵营下最为活跃的社区。Ubuntu在Debian的基础之上构建,它不仅继承了Debian中大量精选的软件,而且还保留了强大的APT软件包管理器,这对于喜爱该工具的用户有着极强的吸引力。Ubuntu拥有超过16,000种丰富的软件资源,可同时满足家庭和商业环境的需求。不仅如此,Ubuntu在直观性和易用性上也广受好评,它提供了易于使用的图形化安装程序和桌面环境,这让很多用户都选择从Ubuntu开始踏入Linux的世界。此外,Ubuntu还提供了一个较好的翻译架构,使得Ubuntu具备较好的中文支持。
5.Arch Linux
2002年,贾德·维内(Judd Vinet)受到Slackware、CRUX和Polish Linux等发行版的简洁性和优雅性等特性的灵感启发,创建了Arch Linux。后来,维内为Arch Linux编写了pacman软件包管理器,用于处理软件和应用程序的安装、更新以及删除等操作。2007年,贾德退出了Arch项目组,由亚伦·戈利费斯(Aaron Griffin)担任项目负责人。2020年,利文特·波利亚克(Levente Polyak)接替亚伦成为新一任负责人,并持续至今。多年来,Arch Linux一直在社区爱好者的开发和支持下持续发展。
Arch Linux是一款自主开发的通用型GNU/Linux发行版,并且为适配64位计算机进行了专门的优化。Arch Linux聚焦于系统的简洁和优雅,遵循KISS原则,并遵循DIY(Do it yourself,自己动手)原则。初次安装的Arch Linux是一个最小化的基本系统,采用命令行用户界面(没有提供图形用户界面),用户可以根据自己的需求和喜好在此系统上自由地进行系统配置、安装各类软件工具,从而搭建最理想的桌面环境。因此Arch Linux适合有一定基础的用户使用(这也是本书首先带领读者学习和使用Manjaro发行版的初衷)。Arch Linux采用“滚动式”更新,因此它并没有和其他发行版一样每隔一段时间就有新的版本发布。相反,只要用户使用简单的命令更新系统,那就能保持最新的版本。
6.Manjaro
Manjaro是Arch Linux的一个衍生版本,用户可以选择一种Manjaro提供的桌面环境来安装使用。由于搭配了图形用户界面,Manjaro降低了用户使用的难度,对新用户较为友好。Manjaro诞生于2011年,是一个较新的发行版。由于Manjaro具备精美、稳定、可靠及易用等特性,因此它迅速得到了大量用户的喜爱,很多认同Arch Linux哲学、但缺少Arch Linux使用经验的新用户都会选择Manjaro。除了通用计算机平台,Manjaro还支持ARM嵌入式平台。
Manjaro继承了Arch Linux的pacman软件包管理器,可以使用Arch用户软件仓库(Arch User Repository,AUR)的软件包,而且Manjaro还维护着自己的独立软件仓库,这使得Manjaro的软件数量很多。Manjaro还提供了很多特有的系统辅助工具,如硬件检测工具、设置管理器等,给用户带来了“开箱即用”的良好体验。尽管如此,Manjaro并不仅仅是一个面向新用户的发行版,它还为有经验的用户提供了可配置的安装方式,这些用户同样可以基于Manjaro来自由搭建自己的操作系统。
7.Gentoo Linux
Gentoo Linux是一款极具特色的发行版,用户可以为它配置和优化每一个需要安装的应用程序和软件,使得系统和程序的性能能够达到极致。Gentoo Linux给予用户自由选择的权利,用户可以用他们想要的方式来定制操作系统,例如如何编译软件、如何安装操作系统、使用哪种窗口管理器等,这一切都得益于Portage(软件管理工具)。Portage被认为是Gentoo的核心单元,它不仅可以用于安装软件,也可以搜索最新的可用软件包,还可以帮助用户更新操作系统及其所有软件。Portage的高度灵活性和庞大功能使得它时常被誉为Linux下最好的软件管理工具。
Gentoo Linux是一款基于源代码的发行版,它要求用户利用Portage,从源代码开始配置和安装每一个系统组件,如Linux内核、系统日志、文件系统、网络工具和引导程序等,每一步都由用户来做出选择,从而能最大化发挥系统的性能,这也正符合了Gentoo Linux把自由和选择交给用户的初衷。从源代码处安装Gentoo Linux有两个优点:一是能让用户深刻体会到Linux操作系统“超强的定制性”;二是优化本机编译,大大提高整体性能,CPU的潜能可以被发挥至极限。当然,由于编译软件(尤其是编译大型软件)很耗时,所以这也成为了Gentoo Linux的遗憾之处。和Arch Linux类似,Gentoo Linux同样不适合刚入门的Linux用户。
8.Fedora Linux
Fedora Linux是一款自由开源的Linux发行版,它是一个易用、强大、创新的操作系统。Fedora由社区维护和发行,社区成员主要由世界各地优秀的开发人员组成,并得到红帽公司的支持。该社区以用户为中心,提倡协作和共享,并以创新作为Fedora发行版最主要的特点。Fedora系列是Red Hat Linux的一个重要系列,它主要面向个人用户领域。RHEL系列则面向企业商用领域。相对于RHEL系列,Fedora系列在设计上更为创新和前卫。最新的开源技术和功能会率先出现在Fedora中,因此Fedora的更新相对更为频繁,大约每6个月就会有新的版本出现。当新技术和新功能趋于成熟,红帽公司会把它们加入到RHEL系列中,因此Fedora更像是一个“探险者”。对想要在第一时间内体验最新技术的用户来说,Fedora有着极大的吸引力。需要注意的是,因为Fedora侧重关注最新的技术,所以系统稳定性会有所缺失。
9.Deepin
Deepin(深度)是一款由国内的深度开源社区(依托于武汉深之度科技有限公司)打造的、面向桌面端用户的Linux发行版。Deepin“本土”的特色令它在国内非常流行,有着广泛的用户基础。深度开源社区积极参与开源运动,并秉持“拥抱开源、回馈开源”的理念,致力于Linux在桌面领域的推广。Deepin的一大特点是它的软件仓库(应用商店),目前它提供近40,000种应用软件,其中包含了数十种原创精品软件以及部分国内用户常用的软件,如深度桌面环境、深度录屏、QQ、微信、美图秀秀等,这些都是国内用户在日常工作中几乎都会用到的。
Deepin更新很快,几乎每隔几周就会有小更新,小更新主要修复软件bug;每隔2~3个月就会有大更新,大更新主要为系统增加新的技术和功能。正因为如此,Deepin发行版正变得越来越好,Deepin系统不仅美观易用,而且流畅稳定。目前深度开源社区还在积极开发Deepin发行版,并面向国内外用户发布。除中国用户外,Deepin在欧洲和美洲等地也有大量用户,而且数量上已经比国内用户更多,这也正体现了Deepin的含义—— 对人生和未来的不断追求和探索。
理查德·斯托曼与Linux的故事
从1990年到1993年,由于Hurd内核不断延期,GNU工程一直处于矛盾状态。一方面,由于对Hurd的要求过高,GNU工程师在设计时好高骛远,把目标从开发一个成熟的操作系统转移到开展操作系统方面的研究;另一方面,据理查德·斯托曼(GNU工程和自由软件基金会的创始人)描述,他因病没能全身心投入到Hurd团队中,导致GNU工程中各个部分之间缺乏有效的沟通,影响了开发速度,同时他们也确实低估了Hurd内核的开发难度。此时,Linux内核已经按GPL发布而且发展得很快。斯托曼一开始并没有特别关注Linux,或者说他在主观上一直回避Linux。但到了1993年,这一情况发生了变化。
1993年,伊恩·默多克开始开发自己的Linux发行版—— Debian。他认为Linux不仅是一套软件,而且还代表了一套完整的开发模式。这种开发模式涉及一个分布式的、通过互联网联系起来的开发队伍,每一个成员提供很小的元件,将它们组装起来就能构成一个整体。这种思想和托瓦兹公开Linux内核的思路一样,任何人都可以参与进来,共同创建一个内核。Debian的决策过程也是参照Linux的,当面临决策时,默多克会和大家讨论,再由他做出最终决定。这种开发方式吸引了很多对Debian项目感兴趣的人,其中就包括斯托曼。他从Debian开始逐渐了解Linux,由于Hurd内核一直没能发布,Linux内核正好可以成为GNU工程的内核候选。斯托曼的介入对Debian的发展很重要,从1994年到1995年,他的自由软件基金会赞助了Debian的早期开发。他的加入让Debian项目成为了当时的一个明星项目,各方面的支持开始源源不断地涌入。当然,作为一个理想主义者和顽固主义者,斯托曼和默多克的不少决策并不一致,这在一定程度上影响了整个团队的协调。斯托曼甚至还想把Linux的名字修改成LiGNUx,当然最终没有成为现实,后来改用“GNU/Linux”这个相对自然的名字。
KISS原则
很多发行版都秉承KISS原则。由于KISS原则经常被应用在UNIX操作系统的设计中,因此也被称为“UNIX哲学”。KISS是“keep it simple, stupid”的缩写,意思是“保持简洁和笨拙”。KISS原则是指在设计中应注重简约的原则,UNIX操作系统中的工具就是最好的例子,这些工具只做一件事情,但通过管道将他们连在一起时却能完成许多复杂的工作,当然这也和UNIX操作系统的“文本化协议”息息相关。单从设计角度上来说,“简洁”就是一个程序的功能要尽可能地单一,不要想着这个程序能胜任所有工作,到头来却发现一个简单的工作都完成不了,还经常出现bug。另外,开发人员在技术上的虚荣心也是导致程序复杂度很高的原因。为了展现自己的技术实力,他们经常使用复杂的算法去实现简单的功能,最后出了问题自己也解决不了,修改这种本可以避免的错误就是在浪费时间。所以,需要降低代码复杂度,保持代码简单、有用。难于理解、维护和扩展的代码就是复杂的代码,计算机编程的本质就是控制复杂度。除了程序设计,KISS原则也应用在软件开发、动画制作、摄影和工程等领域。