简评:操作系统的不同,到底是哪里不同

简评:操作系统的不同,到底是哪里不同

当我们向非 developer 的普通人解释 Windows 系统和 Linux 系统的不同时,我们可能会下意识地将这两个操作系统(operating system,OS)之间「不同」解释为:Windows 系统更注重「图形界面」的交互,以降低普通人的使用门槛;而 Linux 系统更多的则是面向 developer,更注重如何方便 developer 编写 script、调用系统 API(application programming Interface),如何更便捷地组织各种 batch task、构建自动化的环境。

从普通人的角度来看,这个解释似乎是合理的,因为一提到使用 Linux 操作系统,就会不由自主地浮现出那块令人畏惧的冷冰冰的黑色屏幕。很难想象,除了为专业 developer 提供支持外,会有哪个普通人对它产生莫名的好感。但即便如此,这个解释却依然是有问题的!因为仔细推敲起来,这样的解释,阐明的不是 OS 之间的差别,而是 GUI(graphical user Interface)和 shell 之间的差别!

而对 OS 来讲,GUI 和 shell 都是通过 OS 自身提供的服务/API 来构建的 App。就像手机端的 App 是通过后端 developer 提供的 API 来获取数据、建立服务。从这个角度讲,GUI 和 shell 都是 OS 的展示前端,以不同的交互目的、服务目的而设计的前端页面:

  • GUI 更加强调数据、服务的展示与所见即所得的直观操作。对普通用户来讲,基本没有什么使用门槛。
  • 而 shell 强调的是对服务与资源的统一管理、批量管理、自动化管理。无论 GUI 多么容易操作,但如果让你每天为1万多份文件做信息的提取和写入操作,那么可爱的图形界面一下子就变得不那么动人了。

(另:可以插入科普一下 API。API 是 developer 创建 program 时提供的对外操作的入口、手柄(handler)、缰绳。

例如,如果工程师建造汽车时,不提供方向盘,那么用户就永远无法改变这两车的方向;不提供油门,就永远无法改变这辆车的送油量。又比如,如果给你一台超级玛丽的游戏机,但却不提供可操作的游戏手柄,那么游戏中的超级玛丽便永远无法被你移动。

这里,汽车的「油门」「方向盘」,游戏的「手柄」都可以称之为 API。那么特别地,如果你要使用 OS 管理硬件资源的服务,就需要 OS 的实现者提供相应的 API 给应用开发的 developer 使用。否则,就像没有手柄的超级玛丽游戏,你做的 App 永远无法使用计算机、手机这些硬件设施的功能。

从这个角度讲,API 间接地提供了权限控制、安全控制的功能。因为对于外部用户来讲,只要程序的开发者不提供某项功能 alpha 的 API,那么外部用户便永远无法使用这款程序的 alpha 功能。)

既然无论 Windows 所使用的 GUI 还是 Linux 所使用的 shell 都是依靠 OS API 来构建的 App,那么,我们就完全可以使用 Windows 的 OS API 来复刻 shell、同时使用 Linux 的 OS API 来复刻 Windows 的 GUI 嘛。理解了这一层,我们就能明白为什么最开始对两种 OS 不同的解释是有问题的了。

行文至此,我们不禁要再一次发问:既如此,那么 Windows 和 Linux 这两款操作系统的不同,到底是哪里不同呢?!

这其实就触及到 OS 的根本:它到底为什么而存在?对于普通人来讲,计算机就是 OS,以至于会忽略计算机本身是一堆硬件组成的产品。而 OS 存在的意义即是:提供硬件资源的高效管理。

从硬件角度讲,计算机硬件所提供的功能其实非常简单:CPU 提供的数学四则运算(包括逻辑运算),内存/硬盘提供的数据存储功能,各类接口提供的与外部世界做交互的 I/O。剩下的硬件,都是为了高效整合这三块资源而存在的。而 OS 本身,就是对这三块资源的统一管理与封装,对应用层的用户提供抽象的硬件服务。

讨论到这里,你可能会有些疑惑,既然只有如此简单的三项功能,那 OS 本身岂不是非常简单、特别容易实现?

这个说法,既「对」又「不对」。

「对」的地方在于,是的,如果仅仅考虑对这三块资源的直接使用,那么 OS 本身是极其简单不过的了。甚至,在这样的情境下,OS 本身其实没有存在的意义,因为它不过是对硬件的直接调用,OS 成了一个“透传”资源的管道。

而「不对」的地方在于,虽然使用的仅仅是这三块资源,但是,人们使用这些资源的诉求却是五花八门、千奇百怪的。首先,可能你只要一块 CPU,但成百上千的 App 都想在这台计算机上同时使用它,请问,应该如何分配 CPU 的计算资源给这些 App,让它们既能同时使用,又不会互相冲突?仅仅是单纯地让这些 App 排队等待够吗?又该如何管理分配出去的这些资源?毕竟,当某个 App 关闭后,你还必须回收这块分配给它的计算资源,否则你的计算机早就卡死了。

又比如,你的内存、硬盘可能不止一块,但你所记录、保存的数据可能横跨多块硬盘。如何保证这些数据的一致性?又如何保证这款程序不会占用已被其它程序占用的数据区域?又如何知道它正在被占用?又该如何划分数据区域的大小?

可以看到,虽然资源本身是非常简单的,但是,随着对这些简单资源的「使用诉求」变得越来越复杂,对这些资源的抽象、管理、标记、分配、回收,就变得越来越让人头痛了,更不要说考虑如何“高效地”对资源进行分发、回收、重复利用了。也即是,可能资源本身是简单的,但需求的复杂足以让一件简单的事情变得玄妙、高深(不禁想到了 PM?)。而这些东西,才是 OS 的核心,被抽象地称之为「对硬件的高效管理」。而这部分内容,正是 OS kernel 所提供的服务!

到这里,也许我们可以回答最开始的那个问题了,Windows 和 Linux 的不同,到底哪里不同?答案是,它们的本质不同,在于各自的 OS kernel 的实现的不同。也即是,虽然大家面对的是同样一块 CPU、一块内存、几块硬盘,但对这些硬件资源建立的抽象、引入的逻辑概念却是完全不同的。更进一步,基于各自所建立的硬件逻辑概念,对这些概念的处理、建立的资源分配操作/策略的制定,那就更是不同。如此,在不同的逻辑概念体系下,其对硬件的管理理念和效率自然也会出现不同。而这些,才是 Windows 操作系统和 Linux 操作系统真正的不同。

基于此,我们可能会惊讶地发现,也许我们根本无法进一步回答最开始的那个问题,Windows 和 Linux 到底有什么不同。虽然从我们的上述讨论可以知晓,它们的不同一定来自于 OS kernel 的不同,即:来自于「对硬件资源的管理方式」的不同。但是,我们可以考察每一个细节来区别这些不同的「管理方式」吗?答案是,不能!

因为 Linux 是开源的操作系统,我们可以拿到它的源代码,对每一个细节做分析和探究,掌握每一份的硬件资源到底是如何被管理的。但 Windows 操作系统却不是开源的,Microsoft 公司之外的人,无法知晓管理硬件的每一块细节。我们只能通过 Microsoft 所提供的对外说明文档和书籍,来间接地去比较、探究 OS 的细枝末节,但无法像 Linux 那样,能够百分之百的确定一切细节的准确度。

谈到 Linux 的「开源」,也许我们可以旁逸斜出一些关于商业、关于 Windows、Linux 为什么得以流行的一些讨论。

Windows 操作系统的创建之初,以 IBM 为代表的各大计算机厂商都显示出了对它的不屑。从现在的计算机用户的角度来讲,IBM 的这种「不屑」显得非常奇怪,完全无法理解为什么会认为 OS 不是计算机的重要部件。

要理解 IBM 的「不屑」,就得回到带有形而上意味的问题:到底什么是计算机?

如同我们之前所讨论的,对于现在的计算机用户来讲,操作系统就是计算机。甚至,更准确地说,操作系统都不是现代普通计算机用户所理解的计算机。对于普通用户来讲,操作系统上的 App 就是计算机。例如,Windows 的图形用户界面就是普通人眼中的计算机;Linux 系统上的 shell 程序,就是普通 developer 的计算机。也即是:「计算机」= OS 的用户入口「应用程序」。

而对于 Windows 创建之初、IBM 产生「不屑」的那个年代来讲呢,什么是计算机?在他们眼中,计算机就是硬件设备,是 CPU 的效率与个数、是内存的容量与稳定性、是硬盘的密度与健壮性。而 OS 本身在那个时代则是五花八门、各式各样,任何一家所谓的技术厂商,几乎都会提供自己的操作系统。如此泛滥而又常见的东西,怎么可能入得了 IBM 的法眼?这就像,无论你控制汽车用的是 iPhone 上的一款绚烂 App,还是诺基亚黑白手机上的几个按键,对于汽车厂商来讲,真正重要的是这辆汽车上搭载的引擎是否出色、动力系统是否稳健而高效,而不是你提供给用户的操作界面是彩色动效的手机,还是无趣单调的黑白屏幕。

这种看法本身其实没有问题,但,这是技术人眼中的「本质」,不是 market 中用户的「本质」。对于 market 中的用户来讲,你的核心基础架构有多牛x并不重要,重要的是他能感知到的、所关心的那部分体验,是否足够精彩、甚至超出预期。即便你打造了一款可以跑到 280 km/h 的汽车,如果用户的使用场景能够达到的最高时速只有 100 km/h,那就毫无意义。这个 280 km/h 的特性就变成了「不关心的」体验。

就如我们开头解释 GUI 和 shell 的区别所论述的,对于普通的计算机用户来讲,他的日常基本上不会存在每天修改1万份文件的需求,自然也就没有使用 script 的需求,自然那块黑色的 shell 屏幕就只会令人心生畏惧,而不是心怀感激。而对于 GUI,虽然从 developer 的视角来看未免过于低效(因为 developer 有各种花式的批量管理需求),但对于普通用户来讲,它提供的效率反而是恰到好处。就像你提供了一辆最高时速只有 100km/h 的汽车给拥堵城市的用户,他们并不会感知到速度的低效。

于是,在 Apple 和 Windows 在市场上推广图形用户界面之前,普通用户其实根本无法感知到「计算机」的存在,虽然在物理意义上它们是客观存在的。但对于市场中无法使用、无法触及的普通用户来讲,这种「存在」只不过是形而上的敬而远之。而 Windows 系统的普及与流行,可以说是在商业上为普通用户第一次引入了「计算机」这个东西。普通用户第一次可以真切地感受到,「计算机」原来真的是存在的,是可以应用到他们自己生活中的好伙伴。但注意,在 Windows 系统普及到普通用户的这一刻开始,普通用户就已经被植入了“「计算机」= OS 的用户入口「应用程序」”的理念了。至于「计算机硬件」这个概念,其实根本没有实际进入到用户的头脑中。

也即是,对“到底什么是计算机?”这个问题的回答,决定了 IBM 的不屑和 Windows 的大行其道,也决定了 IBM 在 PC 市场的衰落和 Windows 的崛起。而其分水岭便是,一个是从技术人的角度在回答这个哲学问题,而另一个是从商业/market 的角度在回答这个问题。

另一个值得探讨的问题,当然是 Linux 的普及。但不同于 Windows 的普及是遍历于普通的用户,Linux 的普及是遍历于开发者社群。

我们知道(或许非 developer 的普通人并不知道),Linux 系统几乎占据了90%的服务器市场,更是占据了游戏机(如 PS、Switch 等游戏机)、家用智能电器等硬件市场。一个直接的问题便是:为什么是 Linux,而不是 Windows、Unix 或者其他的操作系统占据了这些市场?

一个直观的回答便是:它们满足的用户和用户效用是不同的。

首先,Linux 所能提供的最大「效用」是免费。对于服务提供者的各大「卖家」来讲,这是最大的经济刺激。再来是,这款免费的 OS,不仅不用给钱,而且其性能和灵活性都还相当不错。有了这两点,基本上就能让各大开发者所在的公司,猛烈地投入到 Linux 社区的怀抱。

再来,对于服务器的使用者来讲,他们主要是 developer,而非普通的用户。对于 developer 来讲,了解计算机各种细枝末节实在是太重要了。开源的 Linux 系统,给了他们最大的掌控力去排除问题、甚至是重新设计、构建自己的 OS。而游戏机、家用电器,虽然使用者是普通用户,可是对于厂商来讲,能够自主修改、且本身体量就较小的 Linux 系统,给了他们更多的可能性来发挥出特定硬件的性能潜力。至于消费端用户所需要的精致而优雅的图形交互界面,完全可以依赖 Linux OS 的 API 来构建。

本质来讲,Linux OS 提供的是一套「管理硬件资源」的通用方案。无论你是计算机、游戏机、还是家用电器,都可以用统一的通用方案来管理、整合硬件资源。并且,这套硬件管理方案是免费的、可定制化自主修改的,那自然是太理想不过了。

从上述讨论来看,或许 Linux 得以普及的最大的杠杆点,在于它的「开源」属性。「开源」给了各大厂商、开发社区使用的最大元动力(经济考量)。而这份元动力,又能够反哺厂商、开发社区对 Linux OS 本身和相关工具包的添砖加瓦。而这些越来越多的添砖加瓦,又会进一步吸引更多的人投入到这个社区中,于是形成完美的自我增强自反馈。

从这个角度来讲,Linux 的成功不同于 Windows 的成功。一是 Linux 满足的用户效用并不等同于 Windows 所满足的用户效用;二是,Windows 是因为从商业的角度回答对了“到底什么是计算机?”这个问题而成功,而 Linux 则是回答对了“如何能够大规模地促进社群的自我壮大”这个问题而成功。

总结一下,“操作系统的不同,到底是哪里不同”是一个好的问题,它促使我们弄清楚了 OS 的真正不同,并因此理解了 Windows 与 Linux 各自流行的原因。从宏观来看,计算机的发展史给出了「认知科学」「信息科学」的实证回答,即:只要具备了「计算」、「存储」和「对外交互」这三项简单的功能,人类便可以因此而相互沟通、创造、认识和改造自然,而计算机则可以因此而改变整个人类的生产/生活方式,创造出前所未有的、同现实世界勾连的虚拟平行世界,以及前所未有的经济繁荣。你很难相信,计算机所提供的如此丰富多彩的服务与创新,竟然可以被归结为如此简单的三项硬件功能。在这一刻,它完美再现了数学公理体系那份冷峻而坚实的万象归一的结构之美。


近期回顾

精神资源的管理:祛魅励志的鸡汤与正能量
产品:存在而又不存在
为什么好的产品经理极其在意信息的分类


如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!

26

更多信息交流和观点分享,可加入知识星球:

发表评论