书名:轻松学Linux:从Manjaro到Arch Linux
ISBN:978-7-115-59619-2
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 王 荣
责任编辑 傅道坤
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书主要讲解Linux操作系统的相关知识,从Manjaro操作系统入门,然后逐步深入,重点围绕Arch Linux操作系统展开,旨在为读者打造简单易学、内容丰富且具有较强实用性的Linux操作系统入门书。
本书的主要内容包括Manjaro操作系统的安装和使用、常用的Linux命令与命令行、系统管理与系统工具的操作、Arch Linux操作系统的安装和使用、窗口管理器与桌面环境的配置和使用、Linux操作系统的维护和高级应用,以及Wine与虚拟机的使用等。本书将理论与实践相结合,带领读者快速搭建并使用Arch Linux操作系统,帮助读者提升工作效率。此外,本书穿插了Linux操作系统的相关人物、简史、技术背景等丰富知识,能够让读者更加全面地了解Linux操作系统。
本书适合想要入门Linux操作系统、搭建个性化的Linux操作系统的读者阅读,也可作为高校相关专业的参考教材。
Linux操作系统自诞生至今,已被全世界无数的人使用过,其开发人员不计其数。但是对更多人来说,它的身上总围绕着一种神秘的色彩。人们觉得它难以使用,好像只有专业人士才学得会。尽管现在Linux操作系统已经有了图形化的用户界面,但是人们想要用好它,还是需要学习和掌握各类命令。不论是对“命令行”的恐惧,还是对“难以使用”这类传闻的耳濡目染,都令想要入门或者尝试Linux操作系统的爱好者望而却步。
目前,市面上有很多讲解Linux操作系统的著作和教材,不过这些图书要么重点介绍命令行或技术操作细节,要么着重于程序设计与开发,要么太过关注工具的具体使用,对读者的技术背景和学习毅力要求很高,这些困难容易让读者半途而废。正因为如此,本书以一款简单而易用的Linux发行版—— Manjaro(Arch Linux的衍生发行版)为基础,从最简单的安装到上手使用,一步步带领读者进入Linux操作系统的世界。在读者有了一定基础后,再学习Arch Linux操作系统的安装与使用,就能够全方位地了解Linux操作系统的功能和特点,最终按照自己的喜好搭建一款属于自己的Linux操作系统。自由性与可定制性是Linux操作系统的最大特色,也是本书要呈现的主要内容。
本书的内容分为3个部分,共8章,下面详细介绍一下本书的组织结构。
第一部分将从UNIX操作系统的诞生开始,讲述与它相关的历史、人物与故事,并过渡到Linux操作系统,重点让读者学会安装并使用Manjaro操作系统。在此过程中,读者不仅能够学会Linux操作系统的日常操作,也将初步掌握命令行工具的使用方法,为后面的学习打下基础。
第一部分对应第1章、第2章和第3章的内容。第1章介绍Linux操作系统的诞生与发展,第2章介绍Manjaro操作系统的安装与使用,第3章介绍Linux命令的相关知识。
第二部分将带领读者开始学习Arch Linux操作系统。之所以选择Arch Linux操作系统,不仅仅是因为它和Manjaro 操作系统使用相同的软件包管理器,更是因为它可以最大限度地体现Linux操作系统的特色—— 可定制性。因此,这部分内容会围绕“搭建配置”这一主题展开,为Arch Linux操作系统安装图形界面与各类应用程序,让读者从中学习到Linux系统的可定制性。
第二部分包含第4章、第5章和第6章。第4章介绍Linux操作系统及其系统管理与系统工具的操作与使用,第5章介绍Arch Linux操作系统的安装与使用,第6章主要介绍Linux操作系统的图形界面的实现方式与X Window系统。
第三部分将会在第二部分的基础上,讲述如何更方便地使用Arch Linux操作系统。尽管操作系统本身有很多可深究的知识,但是让它为用户提供服务才是更重要的。因此,这部分内容将围绕“高级应用”这一主题展开,为读者讲述使用Arch Linux操作系统时的一些高级技巧。由于很多软件仅支持在Windows系统上运行,因此,为了满足用户在Linux操作系统中也能使用Windows系统及其相关应用程序的需求,这一部分还会介绍如何在Linux操作系统中协作运行Windows应用程序等相关内容。
第三部分涉及第7章和第8章的内容。第7章探究Linux操作系统的高级应用,涉及系统完善和源代码的编写与使用,第8章主要介绍Wine和虚拟机的安装与使用。
目前,讲解Ubuntu、Red Hat等Linux发行版的图书有很多,但是还没有专门介绍Arch Linux发行版的图书。事实上,Arch Linux操作系统有着相当多的优点,本身也拥有很可靠的性能,在全球范围内都有着广泛的用户基础。因此,本书主要以搭建一个个性化的Arch Linux操作系统为目标,为读者讲述Linux操作系统的各类知识。事实上,Arch Linux操作系统并不是“用户友好的”,它的使用是有难度的。作为Linux操作系统的入门书,本书尽量从最基础的知识开始讲述,几乎不涉及太多专业知识,读者可以轻松阅读本书。读者可以在有了一定知识储备的基础上,再开始真正地搭建Arch Linux操作系统。
看书和学习总是很耗费精力,学习技术知识更是乏味。为了尽量降低这个过程所带来的疲惫感,本书干货满满,既有技术内容,又在相关内容的描述过程中穿插一些人物、简史等背景故事,可以缓解学习带来的枯燥感和疲劳感,让读者能更容易地坚持下来,持之以恒地完成本书的学习。
本书适合想要入门Linux操作系统(尤其是Arch Linux操作系统)的读者阅读,也适合想要搭建个性化的Linux操作系统的读者阅读,还可作为高校相关专业的参考教材。
由于作者水平有限,书中难免会出现错误或者不准确的地方,恳请读者批评指正。在阅读过程中,如果读者有任何意见和建议,都可以通过邮箱(w190614128r@126.com或者wangr@wxit.edu.cn)与作者交流。
本书由异步社区出品,社区(https://www.epubit.com)为您提供相关资源和后续服务。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
扫描下方二维码,您将会在异步社区微信服务号中看到本书信息及相关的服务提示。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书技术审校等工作,可以发邮件给本书的责任编辑(fudaokun@ptpress.com.cn)。
如果您来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015 年 8 月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
信服务号
由于Linux操作系统与UNIX操作系统有着紧密的联系,因此这一部分会先介绍UNIX操作系统的发展历程与相关人物,再逐步介绍Linux操作系统的诞生和发展,以及与Linux操作系统相关的重要事件。在引导读者安装Manjaro操作系统之后,通过安装和使用Manjaro操作系统上的常用软件,带领读者初步学会Linux操作系统的桌面操作方法。最后介绍Linux操作系统中最基本也是最重要的交互方式:命令和命令行,让读者了解常用命令的使用方法,为读者学习后续的内容打下基础。
第一部分包含如下3章内容。
● 第1章 Linux操作系统:诞生与发展
● 第2章 开始入门:安装和使用Manjaro操作系统
● 第3章 学习命令:开始了解Linux操作系统
1991年,林纳斯·托瓦兹(Linus Torvalds)发布了Linux操作系统,至今已有30多年的历史,它和Windows操作系统一样,是一个有着广泛应用基础和较高市场占有率的操作系统。Linux操作系统在服务器市场中一直广受欢迎,近来在个人计算机市场中也深受好评,取得了很大的成果。
Linux操作系统自发布以来,已发展成为计算机领域的一支关键力量,为证券交易设备、移动设备、消费电子设备、超级计算机等提供重要的技术支撑。不可避免地,我们会把它与Windows操作系统相比较,这样就可以让读者更全面地了解Linux操作系统。综合比较近几年的全球超级计算机500强榜单,运行Linux操作系统的计算机占比一直都在90%以上,运行UNIX操作系统(及其衍生系统)的计算机约占8%,而运行Windows操作系统的计算机只有不到2%,这也从侧面反映出Linux操作系统的高性能和可靠性。本章将从Linux操作系统的诞生开始,向读者介绍Linux操作系统的发展简史和特点等内容。最后,以当前较为热门、好用的Manjaro 操作系统为例,带领读者安装并使用该系统,学习Linux操作系统的基本命令,一步步进入Linux操作系统的世界。
操作系统是一种特殊的软件(或程序),它是用户和计算机的接口,也是人机沟通的桥梁。用户通过操作系统提供的交互界面来使用计算机。操作系统位于应用程序和计算机硬件的中间:一方面,操作系统控制着应用程序的运行;另一方面,操作系统又管理着计算机的硬件资源。在这个过程中,操作系统把硬件抽象成一种资源,并以系统接口的形式提供给应用程序。此外,操作系统一般也会自带各类实用工具,方便用户进行各类操作,如程序开发、程序运行、系统访问、文件管理、数据处理、网络通信等。总而言之,操作系统能让计算机更易于使用,同时也能更有效地管理计算机资源。
自20世纪50年代中期批处理操作系统(常被认为是第一代操作系统)诞生以来,操作系统已经发展了将近70年。批处理系统可以让计算机处理器按顺序批量执行用户的任务,提高了计算机的利用率。在执行单个任务的过程中,处理器时常需要等待外围设备反馈的结果,于是多道批处理操作系统应运而生。该系统可以在处理器等待外围设备反馈的时间间隔里,切换执行另一个任务,这样可以有效提升批处理的效率。
当时计算机庞大且昂贵,普通用户根本无力购买自己的计算机,因此很多用户只能共享一台由专门的操作员负责操作的计算机。普通用户把需要处理的任务交给操作员,等待一段时间后才能取回运行结果。尽管多道批处理操作系统已经大大缩短了用户等待的时间,但是用户还是需要排队来依次使用计算机。如果能让用户直接访问计算机,用户和操作系统的交互无疑就会更加高效。
分时操作系统的出现解决了这个问题。分时操作系统允许多个用户通过终端访问系统,并轮流分配给每个用户一小段时间来使用计算机。由于轮流的速度很快,感觉就像是多个用户在同时使用一台计算机。当时较为著名的分时操作系统是由麻省理工学院开发的兼容分时系统(Compatible Time-Sharing System,CTSS)。该系统简单而高效,让每位用户在使用时都感觉是独占了整台计算机。尽管CTSS很成功,但是其功能相对简单,于是麻省理工学院开发出了一个更好的操作系统—— Multics。Multics被认为是现代计算机操作系统的始祖,计算机操作系统的发展可以分为以下3个阶段。
(1)UNIX操作系统的诞生与发展。UNIX操作系统吸收了CTSS和Multics的许多先进思想。UNIX操作系统早期在贝尔实验室流行,后来又被提供给大学和一些公司使用。不同的机构各自都对UNIX操作系统开发了新功能,因此UNIX操作系统出现了很多衍生版本。不论是操作系统研究领域还是商业应用领域,UNIX操作系统都有着显著的影响力。
(2)计算机操作系统迈入图形化时代。随着个人计算机的诞生,可视化操作系统也应运而生,其中macOS操作系统和Windows操作系统最为著名。它们对用户更为友好,同时也对现代社会文明的发展产生了深远的影响。
(3)Linux操作系统的诞生与演进。与商业化的macOS操作系统、Windows操作系统相反,Linux操作系统因其开放源代码的特性而异军突起,并在全世界软件人员的合力开发中取得了长足发展,在科学研究、工程应用、嵌入式开发等领域都得到了广泛的应用。
真正意义上的操作系统出现在20世纪60年代初期,主要是指计算机制造公司为自家生产的大型计算机/小型计算机而编写的分时操作系统。此外,麻省理工学院的“黑客”(这里主要指计算机爱好者和程序爱好者)们为当时的计算机主机开发了兼容分时系统(CTSS),让约30位用户可以联机使用。在1965年前后,麻省理工学院开始设计Multics。由于设计该操作系统是个大项目,因此麻省理工学院联合美国通用电气公司和贝尔实验室一起进行开发工作。Multics和CTSS有着类似的观念,即让人们可以更方便地通过操作系统去做一些真正有价值的工作。不过到了1969年,由于Multics的设计目标过于复杂、开发进度迟缓,贝尔实验室退出了该开发项目。
肯·汤普森(Ken Thompson)是贝尔实验室的工程师,他参与了Multics的开发项目,还为Multics写了一个名为“太空旅行”(Space Travel)的游戏,该游戏乐趣十足,得到了不少同事的赞扬。但没有了Multics,该游戏也就无法再运行了。于是,在他们退出Multics开发项目之后不久,由于肯·汤普森的工作需求以及他想要继续体验该游戏的愿望,肯·汤普森在同事丹尼斯· 里奇(Dennis Ritchie)的协助下,在一台小型计算机PDP-7(如图1-1所示,当时PDP-7是性价比很高的计算机,售价72,000美元)上用汇编语言开发了一个极其简单的操作系统。当时还没有给该操作系统取名,于是他们的同事布赖恩·柯林汉(Brian Kernighan)提议道:“Multics有包罗万象的功能,而新系统顶多择一而从,应该用Uni来替代Multi,就叫这个新系统为UNICS。”(multics有复杂、多数的意思,unics有单一的意思,UNICS就是相对于Multics的一种戏称,后来被改名为UNIX)。
图1-1 小型计算机PDP-7,运行第一版UNIX操作系统的机器
1973年,肯·汤普森和丹尼斯·里奇把UNIX操作系统移植到了实验室新买的PDP-11上。由于移植操作系统需要对用汇编语言编写的操作系统进行完全重写,因此他们打算用更高级的语言来重新开发UNIX操作系统,方便以后的移植工作。此前,肯·汤普森已经开发出了B语言。B语言是他专门为PDP-7而设计的编程语言,由于其语法接近BCPL而得名。但是B语言并不适合PDP-11,因此丹尼斯·里奇对B语言进行了扩充,并将新的语言命名为“New B”(简称NB)语言,最后它逐渐演变成了C语言。在丹尼斯·里奇给C语言添加了结构体(struct)类型之后,他们用C语言和少量汇编语言成功重写了UNIX系统。在此之前从来没有人用高级语言编写过操作系统,这成为了操作系统历史上的一个里程碑。至此,UNIX操作系统成长为一个可移植的操作系统,这令其传播更为方便。UNIX操作系统和C语言的组合很快被应用于极为广泛的计算作业,其中的很多应用完全超出了设计者的预期。当时的UNIX操作系统属于AT&T公司的贝尔实验室,贝尔实验室一开始并未重视UNIX操作系统,因为UNIX操作系统本来就不是正式项目,也就没想着用它来营利。此后,UNIX操作系统和其源代码被免费提供给各大高校使用。不仅如此,贝尔实验室还和学术界(主要是加利福尼亚大学伯克利分校)合作开发UNIX操作系统,使得UNIX操作系统在各大高校快速传播开来。
对UNIX操作系统而言,1977年是具有特殊意义的一年。在这一年,学术界的顶尖院校—— 加利福尼亚大学伯克利分校,以UNIX第6版为基础,在系统中添加了许多先进的特性,并以“Berkeley Software Distribution”为名对外发行,也就是1BSD,1BSD的发行也正式开创了BSD系列。BSD系列是UNIX操作系统中一个很重要的分支(苹果公司的macOS操作系统实际上就源自此分支)。1979年,在UNIX第7版发布后不久,AT&T公司意识到UNIX操作系统的商业价值,收回了UNIX操作系统的版权,企图将UNIX操作系统变为商业化的产品。自此,UNIX操作系统分为两大阵营,即以AT&T公司为代表的System V(基于UNIX第7版开发的商业UNIX版本)和以加利福尼亚大学伯克利分校为代表的BSD,各自蓬勃发展。
BSD操作系统
BSD的全称是Berkeley Software Distribution(也被称为BSD UNIX),是由加利福尼亚大学伯克利分校计算机系统研究小组(CSRG)开发的基于UNIX的操作系统,其中包含了有关UNIX操作系统的诸多研究成果。早期的大部分BSD代码是以UNIX第6版代码为基础的。在比尔·乔利兹(Bill Jolitz)和琳恩·乔利兹(Lynne Jolitz)等几位BSD开发小组关键成员的努力下,他们根据开源软件许可协议开发出了386BSD。后来,很多评论家在比较了386BSD和林纳斯·托瓦兹(Linux操作系统之父)的早期成果之后,都认为386BSD将会成为个人计算机史上最重要的类UNIX操作系统。不过就目前而言,Linux操作系统显然比386BSD(及其衍生版本)要更受欢迎。
1993年,比尔·乔利兹这一重要成员退出了386BSD项目,使得该操作系统面临被终止的危险。好在几位项目组的开发人员在商量后,决定继续开发该项目,但是对于如何确定开发方向,却存在两种不同的声音。于是,386BSD项目就衍生出了两个分支:NetBSD和FreeBSD。NetBSD的目的是设计一个多平台系统,让它可以在几乎任何计算机架构上运行;FreeBSD则着重于开发一款高性能和高可靠性的操作系统,不仅可以使服务器稳定且高效地工作,还可以让个人计算机成为一台高性能的工作站。此外,OpenBSD也比较流行。OpenBSD是在1996年被推出的,它的设计理念是创造一个注重安全性的操作系统。与此同时,OpenBSD极度重视源代码的质量,内核源代码的任何修改都需要经过审阅。
除了以上3个主流的BSD操作系统,还有两个基于FreeBSD的衍生操作系统。一个是DragonFly BSD,它的设计目标是提供一个比FreeBSD更优秀、支持对称多处理器的操作系统,并使内核能直接支持通用集群系统,以取得更好的计算效果。另一个是大家熟知的macOS操作系统,该系统的核心被称为Darwin,它内部的部分组件源自BSD(主要是FreeBSD),如文件系统、网络组件和POSIX接口等。由于macOS操作系统引用了FreeBSD的源代码,因此从技术上来说,一部分macOS操作系统衍生于FreeBSD。当然,现在的macOS操作系统已经超出了FreeBSD的代码框架,完全进行了个性化设计。macOS操作系统不仅具备和FreeBSD一样的高性能和高可靠性,而且提供了简洁易用的图形用户界面,得到了很多用户的青睐。
到了19世纪80年代中后期,UNIX操作系统逐渐形成了两大流派:一支是商业派,另一支是非商业派。商业派是以AT&T公司为代表的System V,不公开源代码的商业派视源代码为商业机密,甚至不允许大学使用UNIX操作系统源代码。非商业派则是以加利福尼亚大学伯克利分校为代表的BSD,本着学术交流的目的,拥护软件开源,鼓励代码共享,促使UNIX操作系统广泛传播。当然,在BSD上开发商业版也是被允许的,比如苹果公司的macOS操作系统就是基于BSD被开发的,但是macOS操作系统是闭源的。
伴随着UNIX操作系统的商业化,AT&T公司规定大学不允许把UNIX第7版及以后版本的源代码开放给学生学习和使用。对于AT&T公司的这种规定,不仅是学生,甚至连很多开发人员都感到失望和遗憾,因为他们都认为过度的商业化并不利于UNIX操作系统的发展,更不利于操作系统领域的发展。这也间接导致了非商业派和商业派围绕UNIX操作系统进行的版权斗争。
当时,对广大个人用户而言,版权战争的最终结果其实并不重要,重要的是学生在学校上课时不再能够使用UNIX操作系统,因此对操作系统的教学只能停留在原理层面,实际操作很难展开,这无疑让想要学习操作系统的学生感到十分沮丧。1987年,为了能让学生学习并开发操作系统,阿姆斯特丹自由大学的安德鲁·S. 塔能鲍姆(Andrew S. Tanenbaum)教授编写了主要用于教学的Minix操作系统。为了避免版权纠纷,安德鲁教授没有使用UNIX操作系统的核心源代码,所以Minix操作系统是一个类UNIX操作系统。由于该操作系统主要用于教学,因此这个系统很简单,却并不实用。
Minix操作系统
Minix操作系统的第1个版本发布于1987年,安德鲁教授创建Minix操作系统的目的是让学生学习UNIX操作系统。为了保证兼容性,Minix操作系统使用和UNIX操作系统一样的系统调用,但没有使用UNIX操作系统的任何源代码。出于学术的严谨性,安德鲁教授采用微内核来编写Minix操作系统,这使得Minix操作系统的设计思想非常先进,并且安德鲁教授开放了Minix操作系统的完整源代码,因此Minix操作系统从一开始发布就吸引了很多用户。
UNIX第6版发布于1975年,一经发布,该版本就在高校内部迅速传播开来。1977年,来自新南威尔士大学的约翰·莱昂斯(John Lions)教授逐行为UNIX第6版的源代码写了评注。全世界有数百所大学开始把约翰·莱昂斯教授的评注作为学习UNIX第6版的参考教程。后来在UNIX第7版推出后,AT&T公司的政策被改变了,禁止再将操作系统的源代码公开给学生,因此操作系统的教学也退回到了理论教学模式。出于对这种状况的失望,安德鲁教授才决定自己开发一个和UNIX操作系统类似的操作系统。1984年,安德鲁教授对将要创建的操作系统进行了详细的理论设计。在完成理论设计后,他就开始正式编写Minix操作系统。因为该操作系统的编写主要是出于教学目的,所以其基本内核非常简单,但是这并不意味着编写Minix操作系统是一件容易的事。经过两年的辛苦努力,前后花费数千个小时,安德鲁教授终于在1986年基本完成了Minix操作系统的编写。1987年,Minix操作系统随安德鲁教授的著作Operating Systems: Design and Implementation(《操作系统:设计与实现》)被一同发布了出来。
Minix操作系统一经发布,就取得了成功,不仅因为该操作系统提供源代码,还因为有一本详细介绍该操作系统工作原理的图书,用户在使用操作系统的同时,还能学习操作系统的设计和实现方法,这在当时是一个创举。Minix操作系统在学生、计算机爱好者和开发人员群体中都受到了极大的欢迎。后来,安德鲁教授和他的团队改进了Minix操作系统的网络通信等功能,使该操作系统能支持更多的处理器和计算机平台,兼容POSIX接口标准。他们于1997年发布了Minix 2,同时把《操作系统:设计与实现》也更新到了第2版。2006年,他们又把Minix操作系统和《操作系统:设计与实现》更新到了第3版(目前的最新版本),从第3版开始,Minix操作系统的重心转移到了科学研究,更关注嵌入式领域,不过它依然适合用来教学。
1980年之前,基本上只有大学、科研机构和大型企业才会拥有计算机,因此当时使用计算机的用户几乎都是“专家级”,他们一般都有高超的编程技巧,也都属于专业用户。此时的操作系统都是基于命令行用户界面进行开发的。随着集成电路的发展,大规模和超大规模集成电路逐渐普及,计算机在缩小体积的同时,其性能也越来越强。
1981年,IBM公司开发的个人计算机(personal computer,PC)诞生了,它面向个人用户,在个人计算机市场进行拓展,想要吸引到更多的普通用户。然而,普通用户并没有非常高超的计算机操作技巧,这就对操作系统的易用性提出了较高的要求。于是,基于图形界面的操作系统应运而生。
1983年,VisiCorp公司为IBM公司的PC设计了一款具有图形用户界面(graphical user interface,GUI)的VisiOn操作系统(VisiOn是可移植的操作系统,但是从未被移植过),其界面如图1-2所示。VisiOn操作系统简洁直观,易于操作,对普通用户非常友好。
1984年,苹果公司推出Macintosh操作系统(后来演变为macOS操作系统),System 1.0的界面如图1-3所示,它具备图形化操作界面的设计能力,用户可以使用鼠标进行操作,为操作系统产业界带来革命性的变化。
图1-2 VisiOn操作系统的界面
图1-3 System 1.0的界面
1985年,微软公司发布了Windows操作系统的首个公开发行版本(同样是为IBM公司的PC而设计的)。图1-4展示了Windows 1.01的启动界面和运行界面,它具有彩色显示功能,绝大多数操作都可以用鼠标来控制,不仅如此,该操作系统还提供了常用的应用程序,如计算器、记事本、时钟等小工具。
图1-4 Windows 1.01的启动界面和运行界面
在这些操作系统中,苹果公司的macOS操作系统实际上就是(部分)来源于UNIX操作系统的FreeBSD版本,是UNIX操作系统阵营向普通用户进军的主力。macOS操作系统的图形化操作界面和应用程序,降低了普通用户使用操作系统和计算机的门槛。
Windows操作系统
微软公司的Windows操作系统曾出现在1983年的BYTE杂志上,并在1983年秋季的计算机经销商博览会(COMDEX)上得到了大力推广。Windows操作系统的发行是对GUI环境(如VisiCorp公司的VisiOn操作系统、苹果公司的macOS操作系统)的一种响应。Windows 1.0具有协作式多任务处理、平铺窗口、兼容DOS(磁盘操作系统)程序等功能,可以在当时的DOS上运行。到了1987年,微软公司发布了Windows 2.0。Windows 2.0在Windows 1.0的基础上添加了重叠窗口、菜单快捷键、VGA支持,以及受IBM公司的界面设计原则影响而更改的用户界面。在Windows 2.0之后,微软公司曾考虑过放弃Windows系统,并和IBM公司合作开发OS/2(OS/2是IBM公司为其第二代个人计算机PS/2研制的新一代操作系统)。由于很多方面的理念存在不同,因此微软公司最终放弃了OS/2的开发,与IBM公司的合作宣告失败。
后来,微软公司利用与IBM公司合作获得的系统开发经验和技术,开发了自己的Windows 3.0。Windows 3.0是第一个获得重点开发和商业推广的系统,它将Windows 2.0的8086、80286和80386模式组合到一个软件包中,用类似于OS/2的程序管理器和文件管理器代替了MS-DOS Executive(程序管理器)。Microsoft Office的方便易用和成功表现也使得Windows 3.0的市场反应更加出色。从这时开始,用户逐渐转向Windows平台,OS/2的市场份额不断被Windows操作系统蚕食。在此之后,微软公司相继推出了Windows 95、Windows 98和Windows Me等操作系统,带来了更强大、更稳定、更实用的桌面图形用户界面,Windows操作系统成为有史以来最成功的操作系统之一。
1993年,微软公司推出了Windows NT,最初面向服务器市场的第一个版本是Windows NT 3.1。Windows NT与通信服务紧密集成,提供文件和打印服务,能运行客户端/服务器应用程序,也内置了Internet/Intranet功能。Windows NT的其他改进包括新的辅助功能选项、新增语言和区域设置、NTFS文件系统和加密文件系统等。Windows NT 4.0和Windows NT 5.0是Windows NT 3.0系列的后续产品。从Windows NT 5.0开始,微软公司不再使用“NT”作为操作系统的名称,而将“NT”作为内核名称隐藏起来(如Windows 2000就是基于Windows NT 5.0开发的)。目前很多用户所使用的Windows操作系统基本上都是基于Windows NT架构设计的,如Windows XP(基于Windows NT 5.1),Windows Vista(基于Windows NT 6.0),Windows 7(基于Windows NT 6.1)和Windows 10(基于Windows NT 6.4,后改为Windows NT 10.0)。
Windows操作系统具有现代化的设计风格,界面整洁美观,尽量简化了各类操作,确保用户可以轻松使用计算机。同时,Windows系统也具有相当高的可靠性和良好的兼容性,能够在多种硬件平台上安全、稳定、高效地运行。
随着大量基于可视化操作界面的操作系统问世,个人计算机(PC)迅速发展,不仅性能越来越强大,而且普及度也越来越高。不过,可视化操作系统由商业公司开发,大多是直接安装在计算机上的,在降低了用户使用门槛的同时,也封闭了内在的复杂软件设计。由于这些可视化操作系统都是商业软件,因此操作系统的设计原理和源代码无法被学生和开发人员学习或使用。要想学习操作系统的具体实现,Minix操作系统仍然是当时的第一(甚至是唯一)选择。
1991年,这一情况发生了改变,在这一年,林纳斯·托瓦兹拥有了他人生中第一台配有Intel 80386中央处理器的个人计算机。他在新电脑上安装了Minix操作系统的386版本用于学习,但是他很快就发现该操作系统的虚拟终端无法满足他的要求。因此,托瓦兹决定自己编写一个终端仿真程序,顺便学习一下这台计算机的硬件工作原理。一段时间后,终端仿真程序就完成了。托瓦兹马上又对它进行改进,加入了磁盘驱动和文件驱动等功能。随着对终端仿真程序的不断改进,托瓦兹意识到自己不仅是在编写应用程序,而是在开发一个操作系统。
出于对编程的热爱,以及对Minix操作系统在功能新增上过于保守的不满,托瓦兹萌生了一个想法—— 开发一个比Minix操作系统更好、功能更全面的操作系统。因此,托瓦兹在借鉴和学习Minix操作系统的基础上,从终端仿真程序开始,逐步编写出了一个新的操作系统内核,最终推出了Linux操作系统。尽管Linux操作系统在一定程度上学习和借鉴了Minix操作系统,但是两者在设计思想上并不相同。Minix操作系统是微内核的设计,而Linux操作系统则采用与UNIX操作系统一样的宏内核设计方式。关于微内核与宏内核的区别,将在本章的1.2.2节中进行阐述。
利用大学的暑假时间,托瓦兹正式开始了“开发一个比Minix操作系统更好的操作系统”的编程之旅。经过几个月的全身心投入,1991年9月17日,托瓦兹完成并首次公开了Linux的第一个版本,版本号是0.01,编写该操作系统大部分都采用了C语言,其main函数如图1-5所示。
图1-5 Linux 0.01中的main函数
Linux 0.01是第一个可以运行的Linux操作系统,但是它还存在着很多bug,比如当内存消耗过大系统就会死机等。因此,1991年10月初,托瓦兹独自把这个内核开发到0.02版。除了修复上一版的bug,这个版本已经可以运行GCC、Bash和一些应用程序了。1991年11月初,他又发布了Linux 0.03。后来,由于一个小小的失误,托瓦兹的计算机中原本安装的Minix操作系统无法启动了,因此他就把11月底发布的新版本定为0.10版,并且安装到了自己的计算机上。几周后他又发布了Linux 0.11,操作界面如图1-6所示,该版本的已经在某些功能上强于当时Minix操作系统的386版本,而且已经被认为是一个类UNIX的内核。直到今天,依然还有很多人学习并研究Linux 0.11,通过它来了解现代操作系统,学习操作系统的设计思想。
图1-6 Linux 0.11的操作界面
1992年1月,托瓦兹在发布Linux 0.12的时候,除了改进代码,还更改了版权声明,自此,Linux操作系统开始使用通用公共许可证(GPL)。原来的许可规定不允许用户在把Linux操作系统复制或拷贝给他人时收取任何费用,改用GPL后则取消了这方面的限制,在更利于系统传播的同时也更能保证Linux操作系统自由和开源的属性。在此之后,Linux操作系统就被很多爱好者所共同开发,成为一款开放的操作系统。1992年3月,继Linux 0.12之后,托瓦兹直接发布了Linux 0.95,因为他感觉距离正式的Linux 1.0已经十分接近了。1992年5月,Linux 0.96发布,该版本首次包含了对X Window(UNIX操作系统上的一个图形界面,本书第6章将会详细介绍这些内容)的支持。1992年10月发布的Linux 0.98.2支持了部分TCP/IP协议。至此,Linux操作系统拥有了网络连接的功能。Linux 0.99发布于1992年12月,从版本号上看,它已经和1.0正式版非常接近了。托瓦兹希望Linux 1.0拥有一个能可靠运行的TCP/IP模块。但是在1993年初,TCP/IP开发并没有像预期的那样顺利,内核的更新和发布变得相对缓慢。自1993年9月底开始,Linux操作系统的版本不断更新,平均每几天就有一个新版本发布。
终于,到了1994年3月13日,Linux 1.0正式发布,该版本为Linux操作系统加入了完整的网络联网功能,并且能够支持基于i386单处理器的计算机系统。Linux内核的大小也从刚开始的63 KB变成了1 MB。不到1个月,托瓦兹推出了Linux 1.1,从这时开始,内核开始有稳定版和开发版的区分。稳定版是小数点后面为偶数的版本,如 1.0、1.2,稳定版会修补一些明显的错误,而没有添加新的特征。开发版是小数点后为奇数的版本,如1.1、1.3,该版本通常带有一些新功能。1995年3月,Linux 1.2问世。
在Linux 1.3.x系列之后,托瓦兹直接发布了Linux 2.0,而不是Linux 1.4。该版本发布于1996年,相比更早的版本,该版本支持多体系,也支持多处理器,有了一次重大意义上的提升。多体系意味着Linux操作系统可以从英特尔平台转向更广泛的平台,多处理器则可以让Linux操作系统的应用范围拓展到微型计算机、大型计算机甚至超级计算机。Linux 2.0的发布,意味着Linux操作系统已经逐渐走上成熟。从一开始Linux操作系统只能运行在个人计算机平台,到现在发展成为一个几乎完整的类UNIX内核。Linux 2.0拥有TCP/IP联网技术,支持X Window(图形环境)系统,也支持多处理器和几种完全不同的体系结构。
此后,托瓦兹于1999年和2001年分别发布了Linux 2.2和Linux 2.4。在整个Linux 2.x系列中,Linux 2.6的时间跨度非常大,从2.6.10(2003年12月发布)到2.6.39(2011年5月发布),涉及30个大版本。总的来说,从Linux 2.6开始,每个大版本的开发时间跨度大概是2~3个月,每个大版本中都有或多或少的功能改变。Linux 2.6.x系列在不断提高性能和安全性,如具备多处理器配置、64位计算和高效率线程处理等能力。
2011年7月,为了纪念Linux操作系统诞生20周年,托瓦兹宣布在Linux 2.6.39发布之后,内核版本号将提升到3.0。从Linux 3.0开始,版本号的命名规则发生了变化。内核版本号采用“X.Y.Z”的表示方法,其中X表示主版本号,Y表示次版本号,Z则表示修订号。次版本号的奇偶数不再代表开发版或稳定版,而是随着版本更新而自然增加。此后内核的开发版会以“-rc”结尾,而稳定版则只有数字。
Linux 4.0发布于2015年4月。2019年3月,托瓦兹在内核邮件列表上发布了Linux 5.0,邮件内容如图1-7所示。
图1-7 托瓦兹发布Linux 5.0的邮件内容
截至2021年12月,最新的稳定版版本号是Linux 5.15.9,如图1-8所示。根据Linux基金会(Linux Foundation)的《2020年Linux内核历史报告》,Linux 0.01包含88个文件和10,239行代码,Linux 5.8则包含了69,325个文件和28,443,673行代码。由此可见,Linux操作系统的发展是非常迅速的。
图1-8 kernel.org网站的Linux内核下载页面
其实在Linux 1.0以后,大部分代码就不再由托瓦兹本人编写,他的角色已逐渐从开发人员变成了技术领导者。不过,对于版本号的发布以及代码的整合,托瓦兹都有着最终的决定权。到目前为止,有数以万计的开发人员为Linux操作系统编写过代码,他们有的是个人开发人员,有的是来自1,700多家不同公司或机构的开发人员。有关内核的最新信息,读者可以访问Linux内核官网来获取。
在刚发布Linux之前,托瓦兹给他的内核起了一个奇怪的名字,叫作“Freax”,它是自由(Free)和古怪(Freak)的结合体,由于这个名字从来没有被正式启用过,因此内核就被命名为托瓦兹开发时使用的名字—— Linux。在Linux 2.0发布的时候,还有一个官方吉祥物—— 一只名为“Tux”的企鹅,从此Linux操作系统拥有了自己的标识,如图1-9所示。
图1-9 Linux操作系统的标识和官方吉祥物Tux
该标识由平面设计师拉里·尤因(Larry Ewing)创作。该标识的由来众说纷纭,有一种说法是托瓦兹曾被澳大利亚动物园里的一只企鹅咬了一口,由托芙(托瓦兹的妻子)提出用企鹅作为Linux操作系统的标识,也有一种说法是该标识是由托瓦兹的女儿提出的。还有一种“民间”的说法是:企鹅来自南极,而南极又是全世界所共有的一块陆地,这也代表Linux操作系统是所有人的操作系统。然而据托瓦兹所说,开发操作系统“只是为了好玩”(来自于托瓦兹的自传书《只是为了好玩》)。
Linus Torvalds
托瓦兹的全名是林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds),他设计并开发了Linux内核,被人们称为“Linux之父”。1969年12月28日,托瓦兹在芬兰的赫尔辛基市诞生。在他大约10岁左右,托瓦兹就接触到了计算机,这台计算机是他的外公为了工作需要而购买的。随着使用的深入,他开始学习BASIC和汇编语言。1988年,托瓦兹进入赫尔辛基大学学习计算机科学。1990年,托瓦兹第一次接触到UNIX操作系统,并且学习了关于UNIX操作系统的课程,这门课程配备的教材就是安德鲁教授的《操作系统:设计与实现》,托瓦兹通过这门课程学习了编写操作系统的基本思想。
1991年,还是大学生的托瓦兹自己编写了Linux操作系统内核,并把它的源代码公布到学校网站上,并通过用户的反馈来持续更新它。30多年过去了,Linux操作系统已经成为目前最大的开源操作系统之一,而且它还在不断进步、不断更新,托瓦兹也仍然领导着Linux项目。现在,几乎在所有的计算领域中都可以看到Linux操作系统的身影,大到超级计算机、服务器等设备,小到智能手机、智能穿戴设备。托瓦兹创造了一个时代,他让开源软件被人们熟知,让更多的人为开源软件做出贡献,开源的路也走得越来越远、越来越平稳。
Linux操作系统是开源软件,每个人都可以免费使用,尽管有很多基于Linux操作系统的商业化产品,但是托瓦兹对于Linux操作系统本身却没有任何商业化的想法。托瓦兹说:“我没有考虑过让Linux操作系统商业化。目前,开源对Linux操作系统的发展贡献很大,开发人员社区也很成熟。坦白讲,我也不擅长做这个。我喜欢通过开源让各地的开发爱好者们参与其中,做他们擅长做的事。这也意味着我可以专注于技术,而其他人可以帮忙推广。在很长一段时间里,我不让自己进入跟Linux操作系统有关的营利性公司,于是进入了一家跟Linux操作系统毫无关联的创业公司,这样就不会让我的个人主观偏好影响到工作。过去10年,尽管我做的是跟Linux操作系统相关的工作,并且也因此获得薪水,但是为了不参与到带有倾向性的竞争中,我加入了一家非营利组织(Linux基金会)。这样,我的‘维护者’的角色就能得到大家的认可。”
尽管托瓦兹已经为Linux操作系统持续工作了30多年,但是他依然对这个项目充满热情,并对内核中持续出现的新技术和新创新感到兴奋和惊叹。我们在学习Linux操作系统的同时,也应该学习托瓦兹这种一直向前的精神。
Linux操作系统能够在服务器上长时间保持稳定而高效的工作,同时,Linux操作系统也受到PC端的持续关注。近年来,随着图形用户界面的不断改进,Linux的易用性也变得越来越好,许多用户都在学习使用Linux操作系统。综合来看,Linux操作系统有如下7点突出优势。
● 获取成本低。Linux内核是免费发布的,基于Linux内核开发的各类发行版基本上也是免费发布的。尽管也有商业化的Linux操作系统,但是它们一般是按需收取技术支持和服务费用的。哪怕是运行在服务器上的Linux操作系统,也基本上不向用户收取或少收取费用。
● 稳定和可靠。Linux操作系统的内核和系统组件不仅能在工作的数月内保持稳定,而且在长时间的运行中也能保证性能没有明显下降。同时,Linux操作系统也能够在CPU满负荷状态下持续工作,极少出现系统故障。另外,Linux操作系统在进行系统升级、驱动安装、参数配置等操作之后,除非要用到某些关键词的内核功能,否则在正常情况下无须重新启动系统。
● 多用户和多任务。Linux操作系统支持多个用户使用同一台计算机,并且通过权限来保护不同用户的文件,防止相互影响。多任务则是现代操作系统的一大特点,Linux操作系统允许多个程序(进程)同时且独立地运行。
● 多种用户界面。Linux操作系统可以支持纯命令行界面(也称为字符界面)的操作,一般适用于经验丰富的用户,这对于远程控制、服务器操作都非常便利。同时,Linux操作系统也支持图形用户界面的操作,且适用于任何用户,方便用户通过鼠标点击、触摸屏的方式操作计算机,对用户很友好。不论是命令行界面还是图形界面,用户都可以对Linux操作系统进行自由配置,满足用户的个性化需求。
● 支持多种平台。Linux操作系统可以在多种平台上运行,如x86、x64、ARM、LoongArch64、Alpha等多种计算机处理器平台,小到笔记本计算机,大到特大型机、超级计算机,都能运行Linux操作系统。此外,它也支持各类嵌入式平台,如机顶盒、路由器、交换机、掌上游戏机等。
● 开放源代码。Linux操作系统是开源系统,任何人都可以方便地从网上免费获取Linux内核源码。人们可以自由地修改代码、添加功能,通过编程来进一步了解操作系统的工作原理,遇到困难时还可以通过指导手册、帮助文档、论坛和网络资源来寻求答案。通过学习Linux源代码,很多使用C语言进行开发的工程师、学生、研究人员可以快速提高开发能力。开源Linux操作系统适用于用C语言进行开发的用户,它是一个极好的C语言进阶编程教学示例。不仅如此,Linux操作系统也接受任何人提交的修复和升级补丁,使得整个系统更加稳定和先进。
● 可定制性。Linux的一大特色就是它的可定制性,用户可以根据自身需求来定制自己的操作系统,简单的有桌面布局、图标、菜单选项的搭配,专业的有计算机脚本、虚拟终端、硬盘文件系统的配置,甚至连内核的运行参数、计算机的启动引导方式等都可以进行修改。
任何人都可以提交修复补丁
在很多人的理解中,提交补丁是程序高手才能做到的事。实际上,任何有用的、具有修复或改进功能的补丁都会被接受,甚至不一定是代码本身,所以并不一定是会写程序的人才能提交补丁。2014年,一个4岁的小女孩提交了Linux操作系统的补丁邮件(如图1-10所示),并且这个补丁已被合并到代码中。她所提交的补丁其实只是代码注释中的一个“-”字符,虽然这只是一个很小的修改,但是修改的意义却非常大。这说明了Linux操作系统有两个很重要的特征:
(1)Linux内核的代码修改可以让所有人参与进来;
(2)Linux内核非常严谨,只要有错误,任何人都可以修改它。
图1-10 4岁的小女孩提交的补丁邮件
在Linux操作系统的发展过程中,有两个操作系统对它产生了深远的影响,一个是Windows操作系统,另一个是GNU操作系统。Windows操作系统有着直观、易用的操作方式,普通用户也能够很快上手使用。尽管Linux操作系统发展速度很快,但是在个人计算机领域,它还只是一个“挑战者”。
Linux操作系统本身并没有搭载任何应用程序,它仅实现了操作系统的核心功能。GNU操作系统则有很多应用程序,开发人员便将这些程序移植到Linux操作系统上,这样就构成了一款“完整的”操作系统,有很多用户将它称作GNU/Linux操作系统。本节将简要介绍Windows和GNU操作系统,描述它们各自的发展历程,以及它们和Linux操作系统之间既竞争又合作的关系,使读者能够更全面地了解Linux操作系统发展过程中的机遇和挑战。
对大多数计算机用户而言,Windows操作系统是他们接触并使用的第一个操作系统。Windows操作系统占据着桌面操作系统85%以上的用户份额。相比而言,Linux操作系统在桌面操作系统端的占有率只有2%左右。这足以说明Windows操作系统的成功,客观上讲,Windows操作系统也是PC机普及化的一个重要“功臣”。
Windows操作系统是用户友好型操作系统,它的图形界面简单直观、易于上手,不需要很专业的系统知识也可以使用它。Windows操作系统主要通过鼠标和键盘来控制,对很多程序(软件)的操作都可以通过鼠标点击来完成。同时,Windows操作系统的界面(如图1-11所示)非常符合普通用户的操作习惯(更确切地说,Windows操作系统培养了目前用户的操作习惯),用户体验很好。另外,Windows操作系统由微软公司官方提供重要的支持和服务。
图1-11 Windows操作系统的界面
Windows操作系统的诞生,和微软公司的另一个操作系统—— MS-DOS有着紧密的联系。MS-DOS是微软公司为IBM公司的PC机设计的操作系统,最早发布于1981年,后来微软公司又分别在1983年和1984年发布了它的升级版MS-DOS 2.0和MS-DOS 3.0。随着因特尔公司80x86芯片的升级,MS-DOS的功能已经不能完全发挥芯片的作用,因此微软公司决定在MS-DOS上开发一个图形用户界面,后来MS-DOS就发展成了Windows操作系统。最初的Windows操作系统需要运行在MS-DOS上,直到1993年Windows NT的发布,它才发展成为一个独立且完整的32位操作系统。事实上,除了较早的Window 95和Windows 98等系统,从Windows 2000开始的操作系统都是基于Windows NT开发的,如用户熟知的Windows XP、Windows Vista、Windows 7、Windows 10、Windows 11等。
Windows操作系统有着极其庞大的用户基础,这是因为基于Windows操作系统的软件(如办公软件、开发软件、工业软件、游戏娱乐软件)众多,尽管其中有不少是商业付费软件,但这也保证了软件质量的稳定和可靠。对Linux操作系统而言,基于Linux操作系统的软件数量也很丰富,但大多数软件都是开源的自由软件,其中有不少软件是基于命令行界面的软件,需要通过各种命令来控制,会提高用户上手的难度。当然,用户常用的软件基本上都开发了图形界面的版本,而且能在开源的前提下保证软件的安全和可靠。
在对计算机硬件平台的支持上,Windows操作系统会随着新版本的发布而对计算机硬件提出更高的要求,如Windows Vista对计算机的性能、内存、硬盘空间等的要求都要比Windows XP高得多,这也引来了不少用户的质疑。然而,Linux操作系统将所有相关的硬件检测转入内核,也正是由于这个独特之处,可以让它兼容Windows标准下更老的硬件和外围设备,较低性能的硬件也能流畅地运行Linux操作系统。当然,在这个方面,微软公司也在积极改进,如目前流行的Windows 10在性能上有较大提升,但是Windows 10对硬件的要求和Windows 7几乎一致。
和所有商业化的软件一样,Windows操作系统的更新速度完全依赖于微软公司,当系统出现漏洞或安全问题时,需要通过微软公司发布的补丁程序来解决问题,有时候可能会存在较长的等待时间。在这段时间内,系统风险会比较大,但用户可以采用的办法并不多。由于Linux操作系统拥有开源软件,因此几乎每时每刻都有用户在研究和更新系统代码。一旦发现系统漏洞,用户就会及时提交补丁程序,在第一时间内保证系统稳定、可靠。正因为如此,Linux内核的更新速度也很频繁,目前一般每隔9~10周就会更新一次版本,除了必要的系统修补,还会增加新的功能。
在桌面领域和服务器领域,Windows操作系统和Linux操作系统的占有率完全不同。在桌面领域,Windows操作系统占据着绝对的市场份额,Linux操作系统只能算是竞争者和新秀。不管是国内外的公司、教育机构还是个人用户,基本上都使用Windows操作系统,目前Windows操作系统的各个版本累计占据了大部分桌面操作系统的市场份额,而Linux操作系统的市场份额则微乎其微。然而,在服务器领域则恰恰相反,Linux操作系统占据了超过80%的市场份额,而Windows操作系统的市场份额大约只占12%。在企业成本的压缩和国家政策的引导下,Linux操作系统的服务器市场份额还会继续增长。开源软件的影响力还会在全世界继续扩大,Linux操作系统本身的质量还在不断升级,因此不管是桌面领域还是服务器领域,Linux操作系统都会受到用户越来越多的关注。
与Windows操作系统的直观、易用不同,Linux操作系统假定用户知道自己想要什么,也明白自己在做什么,并且会为自己的行为负责,相当一部分用户会慢慢学会思考,按自己的意志行事,并对自己的行为负责。当然,操作系统各有长短,没有绝对的好与坏。这两款伟大的操作系统都值得我们去使用,如今使用Windows操作系统已经成为我们的日常,与此同时,我们也应该鼓起勇气去尝试学习使用和研究Linux操作系统。
从相互对立到相互合作
曾几何时,微软公司预测Linux操作系统只会起到一些有限的作用。但是在1998年11月,微软公司的秘密备忘录《鬼节前夕》被披露,它对Linux操作系统的真实认识引起了社会极大反响。该备忘录高度评价了Linux操作系统的市场份额、性能和可靠性,指出:“Linux操作系统代表的是一种非常优秀的类UNIX操作系统,被广泛地应用在关键业务领域,由于Linux操作系统具有开放的特性,因此它将超过其他操作系统。”“在人们转移至Linux操作系统后,会发现他们所需要的所有应用程序几乎都已经被免费提供了,包括Web服务器、POP客户端、邮件服务器和文本编辑器等。”“Linux操作系统在个人设置、可用性、可靠性、扩展性等性能方面的表现均超过了Windows NT(现在常用的Windows XP、Windows 7、Windows 10以及最新发布的Windows 11均是基于Windows NT内核的)。”在备忘录中,微软公司也承认:“以Linux操作系统为代表的自由软件在短期内已经对微软公司的收入构成威胁。长期来说,这种自由交流思想的开发模式将极大地打击微软公司。”
很长一段时间以来,微软公司将Linux操作系统视为竞争对手,一直打压与抑制Linux操作系统的发展。比尔·盖茨(Bill Gates)之后的继任者,史蒂夫·鲍尔默(Steve Ballmer)对Linux操作系统的态度更不友好,他将Linux操作系统形容为“恶性肿瘤”,还认为Linux社区侵犯了微软公司的知识产权,致使公司遭受损失。但是随着Linux操作系统的发展以及影响力的不断壮大,微软公司对Linux操作系统的态度发生了大转变。
2014年,微软公司新上任的总裁萨蒂亚·纳德拉(Satya Nadella)第一次公开表示了微软公司对Linux操作系统和开源世界的喜爱:“微软爱Linux。”这句话不再是一句虚言,在此之后,微软公司参与到Linux内核的贡献中去,投身于开源社区,成为GitHub上对其贡献人数最多的组织。不仅如此,微软公司还成立了.Net基金会来推进开源项目,并推出了开源开发工具、跨平台的Web和云平台代码编辑器Visual Studio Code等。微软甚至在Windows 10中添加了Linux子系统WSL(Windows Subsystem for Linux),方便Linux开发人员和用户直接在Windows操作系统中使用Linux命令行等实用工具。鉴于命令行的独特优势(很多开发人员和用户使用Linux操作系统的主要原因之一就是Linux操作系统有命令行),微软公司还推出了自己的终端(Terminal),整合了以前的PowerShell和cmd命令行工具,简化了开发人员的工作流程。添加了WSL的Windows终端支持emoji表情,如图1-12所示。
图1-12 添加了WSL的Windows终端支持emoji表情
不过,尽管Windows操作系统和Linux操作系统相互学习,但两个操作系统的不少用户和开发人员之间还是处于相互对立的姿态。时至今日,很多使用Windows操作系统和Linux操作系统的用户时常“剑拔弩张”,在网上“开战”,极力美化自己所使用的操作系统,对另一个操作系统则无尽嘲弄。实际上,这两个操作系统都是非常优秀的操作系统,两者各有优点,也各有自身的不足。就连托瓦兹的第一台计算机安装和使用的都是微软公司的DOS操作系统(后来和Linux操作系统共同安装成为双系统),而且他承认自己是微软幻灯片制作软件PowerPoint(PPT)的发烧友。因此,作为普通用户,完全没有必要排斥任何一个操作系统,而更应该包容和学习使用多种不同的操作系统,学会利用不同操作的特点来提高工作效率。
托瓦兹所实现的操作系统,并不是一个大家认为的“完整”的操作系统,它只是操作系统内核(Linux Kernel),也就是操作系统的核心,负责管理计算机硬件资源、控制应用程序和系统进程等。由于操作系统内核本身不包含任何应用程序和系统工具,因此很多开发人员就把现成的软件和程序添加到Linux操作系统中,这样操作系统才可用。
事实上,大部分的软件和程序都来自GNU操作系统。GNU操作系统也被称为GNU计划或GNU工程,他是由理查德·斯托曼(Richard Stallman,RMS)创建的。20世纪70年代初,斯托曼在大学毕业后曾任职于麻省理工学院人工智能实验室,他在那里主要为操作系统开发软件。实验室的工作氛围轻松,大家都是编程高手,经常相互分享各自的程序代码。但是到了20世纪80年代初,斯托曼的同事们几乎都被其他公司挖走了,他再也不能和别人分享程序代码了。此时,大量软件公司成立,对软件(尤其是对操作系统)的版权保护也越来越严格。这让斯托曼意识到软件的自由共享不仅对自己来说很重要,对其他开发人员来说也非常重要。因此,他决定创建一个自由组织(一开始组织内仅有他一人)来编写可以共享的自由软件。编写软件需要依靠操作系统,但由于当时他连不受版权保护的可用的操作系统都没有,于是他的计划是先创建一个自由的操作系统,这个计划就是GNU工程。
GNU的名字来源于“GNU's Not UNIX”的首字母缩写,其目的是创建一个自由的类UNIX操作系统,该项目正式开始于1984年1月。斯托曼认为,他应该先从操作系统的各个组件(以及必要的应用程序)入手,这样会相对容易。因此,他就跳过操作系统内核,先编写系统各类组件的代码。斯托曼投入了他几乎所有能用的时间,编写了一个文本编辑器GNU Emacs和一个C语言编译器GNU GCC。这两个软件的质量不错,得到了用户的一致好评,也给斯托曼带来了经济收入,他用这些收入成立了自由软件基金会(FSF),这样可以吸引爱好者们一起来实现GNU工程。在成立了自由软件基金会后,软件的开发速度加快了,他们开发了很多大型软件,如C程序库、Bash程序等。1990年前后,许多GNU操作系统的模块和软件都已经齐全了—— 大多数是由基金会成员开发的,一些现成的自由软件也会被包含进来,然而操作系统的核心(内核)却依然缺失。因此,斯托曼决定开始开发最重要也是最困难的组件—— GNU操作系统的内核(GNU Hurd),GNU Hurd的标识如图1-13所示。GNU Hurd采用微内核的设计理念,是运行在Mach之上的服务程序的集合,主要实现网络通信、文件系统以及访问控制等功能。不过,由于GNU Hurd的设计理念非常先进,而且斯托曼非常追求完美,导致开发进度过于缓慢。直到1996年,第一个可以工作的GNU Hurd(测试版)才正式发布。截至目前,它依然还没有正式版(有人戏称,直到人类文明毁灭之后,GNU Hurd的正式版才能发布)。此时,Linux操作系统的内核已经相当成熟了。
图1-13 GNU Hurd的标识
2016年12月,GNU Hurd 0.9发布了,这是目前最新的版本,依然还是测试版本。尽管GNU Hurd 0.9的功能仍然不完善,更不适合产品级应用,而且它的部分功能还要依赖Linux的实现方式,但是自由软件基金会的成员们并没有放弃,他们还在继续完善和开发GNU Hurd,因为他们认为GNU Hurd内核能填补斯托曼“自由软件”信念所缺少的最后一点空缺。
尽管GNU操作系统还没有最终完成,但是GNU操作系统的理念始终如一,那就是实现一个包含100%自由软件的类UNIX操作系统。按照斯托曼的说法,GNU操作系统“给予用户自由”。为了确保这一点,斯托曼还在律师的帮助下,撰写并发布了GNU通用公共许可证(General Public License,GPL),用以保护软件“自由”的版权,很多软件开发人员用GPL来保护自己发布的软件。
斯托曼现在依然是自由软件基金会的领导者之一,他是自由软件的“斗士”,也是自由软件运动的精神领袖。同时,他又是一个伟大的理想主义者,为了软件真正的“自由”,他从不妥协,他认为只有“自由软件(Free Software)”才能代表他的理念,哪怕是“开源软件”也不行。
微内核与单内核
目前,很多操作系统都有一个单内核(monolithic kernel,也称为宏内核),操作系统的基本功能由内核提供,包括进程和线程管理、文件系统、设备驱动、网络和存储管理等。典型情况是内核本身也是作为进程实现的,内核服务共享相同的地址空间。微内核(micro kernel)让内核执行一些最基本的功能,如基本调度和进程间通信等,其他服务由守护进程(也称为服务器)提供,这些进程和其他应用程序都在用户态下运行。单内核操作系统主要有UNIX操作系统和Linux操作系统等。微内核操作系统主要有基于Windows NT的操作系统(Windows XP、Windows 7、Windows 10等)、Minix操作系统和GNU操作系统等。微内核在设计上更为先进,采用微内核设计可以让内核的功能开发和守护进程分开,这样就可以为应用程序的特定需求定制服务程序,使得开发更为简单和灵活。单内核是整体式设计,只要修改了内核中的任何一个部分,在生效前,所有的模块都要重新链接和安装,因此修改和维护会相对困难。早在Linux操作系统发布初期,Minix操作系统的开发人员安德鲁教授曾评价道:“Linux操作系统已经过时”“单内核在整体设计上是有害的”。而托瓦兹则展开反击,回复道:“我承认微内核的设计更为先进,但是Linux操作系统的各方面性能都优于Minix操作系统”。这场辩论由两人开始,很多技术专家、开发爱好者逐渐加入其中。最后,这场“战争”随着托瓦兹的主动道歉而停止。
至于两者到底孰优孰劣,也许UNIX操作系统的主要设计者肯·汤普森的评价最为中肯,他说:“如果从设计的眼光来审视,我们用的许多(即便说不上绝大多数)软件都是过时的。但是对广大用户来说,他们可能不怎么关心自己用的操作系统内部的设计是不是过时的,他们更关心的是性能和用户级的兼容性。总的来说,我还是赞同“微内核可能会是未来的潮流”这样的说法。但是,我觉得还是实现一个单内核的系统更容易些。当然,在改动的过程中单内核也更容易变成一团糟。”事实上,由于Linux内核在后续的升级中采用了动态链接等技术,内核中的模块(如文件系统、设备驱动等)都可以被动态加载,这样在给某个模块修改代码时就不会影响内核的其他组件,大大减轻了维护的难度,这让作为单内核的Linux操作系统也具备了部分微内核系统的优点。
自由软件与开源软件
自由软件的兴起主要源于理查德·斯托曼领导的自由软件运动,他的自由软件基金会就是这个运动的一个产物。自由软件的英文名称是“free software”,由于“free”一词在英文中有免费的意思,很多人认为自由软件就是免费软件,但斯托曼对此的真正定义是“自由(freedom)”,与价格无关,因此自由软件可以被销售。自由软件代表“给予用户自由的软件”。自由软件运动是一项思想运动,强调用户拥有如何使用软件的自由,即软件可以自由地运行、自由地复制、自由地修改、自由地再发行。这里的“自由”和价格无关,而是指所有用户使用软件都是自由的。自由软件运动也是一项社会运动,它提倡“软件”这一产品应该是被免费分享的,自由地使用软件(包含修改和再分享软件)是每个人的权利,然而“专有软件”破坏了这种权利。
自由软件运动反对软件的知识产权,也反对用软件著作权或软件专利把软件的源代码保护起来,据为己有。反感于著作权(copyright)这个形式,斯托曼创造了“版权开放(copyleft)”,用来保护自由软件,同时也是自由软件必备的“版权”。GPL就是版权开放的具体表达,GPL保障用户能够享有运行、复制、获取软件源代码以及修改源代码的自由。当然版权开放也要求改进源代码后的软件依然是自由软件,要继续向社会发行和传播,只有这样,软件才能永远是自由软件。
自由软件运动代表着斯托曼的理想和信念,但是它也比较极端和理想化,有着浓重的个人色彩。因为新用户越来越难理解自由软件的理念,所以部分志愿者开始使用开源软件来代替自由软件,并在1998年成立了开放源代码促进会(Open Source Initiative,OSI)来开展开源软件运动。尽管斯托曼对这个概念并不认可,但是开源软件却更多地被人们所接受,因为开源软件在关注软件开源和自由发布的同时,更注重开发人员、用户、公司和机构之间的信任和合作关系,希望他们能够为开源软件的开发而努力。由于开源软件的限制条件更少,因此开源软件更能保障多方权利。
其实在不刻意追求细节的前提下,开源软件和自由软件的差异微乎其微,它们都给予了软件自由传播(即软件共享)和开放源代码的权利,因此在本书中,默认“自由软件”和“开源软件”是相同含义。为了保留叙述的准确性,这两个词语在书中都会被用到。不过斯托曼和他领导的自由软件基金会并没有认可“开源软件”这个词语,而是依然保持“自由软件”的称呼。因为他们认为两者的价值观完全不同。开源软件只关注软件的质量和功能,却避开了自由、社区以及部分原则;而自由软件则尊重用户的自由,保护自由的权利。因此只有“自由软件”或“自由软件运动”才能真正代表斯托曼的理念。
一般而言,我们平时使用的各类Linux操作系统都是基于Linux内核的发行版。发行版的数量非常多,目前流行的发行版就超过100个,如果加上一些曾经流行过、现在已经消失的发行版,数量更是惊人,恐怕没人能真正精确地统计出来。正因为如此,很多用户在刚开始接触Linux操作系统的时候,就被Linux操作系统的内核、版本号、发行版名称等专业术语“劝退”了。因此,本节主要介绍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发行版。
Slackware是世界上第一个Linux发行版,发布于1993年。在此之后,Debian和Red Hat等发行版相继诞生。目前世界上存在的Linux发行版有数百种,其中大多数发行版都借鉴了Slackware、Debian和Red Hat的思想,或者说是基于他们衍生出来的(当然有些发行版也有全新的设计思想)。根据著名的Linux发行版统计网站的统计数据,主流的发行版主要有Ubuntu、Fedora、Manjaro、Arch Linux等。其中,Ubuntu、Debian和Manjaro等是较常被使用的Linux发行版。本节对9个比较出名的、用户评价较高的Linux发行版进行简要介绍。
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也始终能吸引一批喜爱它的用户。
Debian的创始人是德国计算机科学家伊恩·默多克(Ian Murdock),他于1993年创建了这个系统,当时他还是普渡大学的一名大学生。这个系统一直被认为是最正宗的Linux发行版。Debian主要通过命令行方式来操作,但也提供方便的图形化操作方式。Debian的优秀很大部分要归功于它的APT(Advanced Package Tool)软件包管理器,APT软件包管理器可以从很大程度上解决软件的依赖问题。作为一个遵从开放和分布式开发模式的发行版,Debian拥有超过17,000种不同的软件包,并且伴随着新软件的问世,总会有相应的deb包(Debian软件包格式的文件扩展名)出现。
Debian通常有3个发行版:稳定版(可以用在绝大多数地方,包括搭建服务器)、测试版(部分软件还处在测试阶段)和不稳定版(采用最新版的软件,可能会产生兼容性和稳定性方面的问题)。经过不稳定版的测试,测试版较为稳定,也支持不少新技术,可以看作是稳定版的前身。不稳定版为最新的测试版,包含最新的软件包,但是也有相对多的漏洞,适合桌面用户,且版本代号永远是sid。
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等。
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具备较好的中文支持。
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采用“滚动式”更新,因此它并没有和其他发行版一样每隔一段时间就有新的版本发布。相反,只要用户使用简单的命令更新系统,那就能保持最新的版本。
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来自由搭建自己的操作系统。
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用户。
Fedora Linux是一款自由开源的Linux发行版,它是一个易用、强大、创新的操作系统。Fedora由社区维护和发行,社区成员主要由世界各地优秀的开发人员组成,并得到红帽公司的支持。该社区以用户为中心,提倡协作和共享,并以创新作为Fedora发行版最主要的特点。Fedora系列是Red Hat Linux的一个重要系列,它主要面向个人用户领域。RHEL系列则面向企业商用领域。相对于RHEL系列,Fedora系列在设计上更为创新和前卫。最新的开源技术和功能会率先出现在Fedora中,因此Fedora的更新相对更为频繁,大约每6个月就会有新的版本出现。当新技术和新功能趋于成熟,红帽公司会把它们加入到RHEL系列中,因此Fedora更像是一个“探险者”。对想要在第一时间内体验最新技术的用户来说,Fedora有着极大的吸引力。需要注意的是,因为Fedora侧重关注最新的技术,所以系统稳定性会有所缺失。
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原则也应用在软件开发、动画制作、摄影和工程等领域。