1.2 Linux操作系统与其他操作系统
在Linux操作系统的发展过程中,有两个操作系统对它产生了深远的影响,一个是Windows操作系统,另一个是GNU操作系统。Windows操作系统有着直观、易用的操作方式,普通用户也能够很快上手使用。尽管Linux操作系统发展速度很快,但是在个人计算机领域,它还只是一个“挑战者”。
Linux操作系统本身并没有搭载任何应用程序,它仅实现了操作系统的核心功能。GNU操作系统则有很多应用程序,开发人员便将这些程序移植到Linux操作系统上,这样就构成了一款“完整的”操作系统,有很多用户将它称作GNU/Linux操作系统。本节将简要介绍Windows和GNU操作系统,描述它们各自的发展历程,以及它们和Linux操作系统之间既竞争又合作的关系,使读者能够更全面地了解Linux操作系统发展过程中的机遇和挑战。
1.2.1 Windows操作系统
对大多数计算机用户而言,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)的发烧友。因此,作为普通用户,完全没有必要排斥任何一个操作系统,而更应该包容和学习使用多种不同的操作系统,学会利用不同操作的特点来提高工作效率。
1.2.2 GNU操作系统
托瓦兹所实现的操作系统,并不是一个大家认为的“完整”的操作系统,它只是操作系统内核(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)来开展开源软件运动。尽管斯托曼对这个概念并不认可,但是开源软件却更多地被人们所接受,因为开源软件在关注软件开源和自由发布的同时,更注重开发人员、用户、公司和机构之间的信任和合作关系,希望他们能够为开源软件的开发而努力。由于开源软件的限制条件更少,因此开源软件更能保障多方权利。
其实在不刻意追求细节的前提下,开源软件和自由软件的差异微乎其微,它们都给予了软件自由传播(即软件共享)和开放源代码的权利,因此在本书中,默认“自由软件”和“开源软件”是相同含义。为了保留叙述的准确性,这两个词语在书中都会被用到。不过斯托曼和他领导的自由软件基金会并没有认可“开源软件”这个词语,而是依然保持“自由软件”的称呼。因为他们认为两者的价值观完全不同。开源软件只关注软件的质量和功能,却避开了自由、社区以及部分原则;而自由软件则尊重用户的自由,保护自由的权利。因此只有“自由软件”或“自由软件运动”才能真正代表斯托曼的理念。