Linux、AIX、Solaris、MAC 有什么区别。这些不都是某种 Unix 风格吗?为什么我们需要这么多类型。为什么不能只有一种类型?
答案1
这是历史性的,有点像“为什么存在多个民族国家?”的问题。据推测,在几十万年前的某个时刻,只有一个单一的智人种群,但现在却有很多。
最初的 UNIX 是一个单一的实体,是用不可移植的汇编语言编写的,用于等离子11作为 AT&T 贝尔实验室的一个项目,与 MULTICS 操作系统并行(或衍生),贝尔之前曾对此做出过贡献。因为这需要大量的工作——也许,工作量与设计 PDP-11 本身相当,不是贝尔产品——贝尔实验室的人们认为用比架构特定的汇编更高级的语言来做这种事情会很好;即,一种可以使用适合特定机器的任何汇编指令来实现的语言,但它本身在任何地方都可以工作。
现在,这是软件设计的一个非常基本的原则:您可以分层设计事物,其中每一层都将其周围的事物作为抽象进行处理。在这种情况下,“抽象”意味着描述只是其他事物的相关细节;什么是“相关”是由上下文定义的。回到我们的 Unix 示例,开发了语言 B,然后开发了 C;他们将汇编级细节抽象为更高级别的命令。这意味着您可以使用这样的语言在机器 A 上以与机器 B 上相同的方式读取文件,即使涉及的较低级别细节完全不同。如果您用这种语言编写了整个操作系统,则可以在实现该语言的任何机器上编译并运行该操作系统。如果这听起来像是更多的工作而不是更少的工作,那么事实并非如此。语言的工作量比操作系统少,而且操作系统加上语言可能仍然比操作系统本身的工作量少。它肯定不会更多,因为它使用了语言的可互换位,而这些位无论如何都必须为操作系统实现,当你到达架构 B 时,你所需要重做的就是语言实现。另外,您现在拥有两个不同的东西,可以分层并可以与其他东西组合。
请记住,在装配级别,甚至不存在诸如一份文件——所以有一个更高级别的例子抽象的实体。当这样的概念深入人心时,B、C和Unix就应运而生了,它的成功也许是因为它很好地利用了它们。完全相同的人开发了 C 语言和 Unix 操作系统,而且它们很好地结合在一起。
尽管多年来没有正式的 C 规范,但贝尔确实在 1970 年代将 Unix 的源代码授权给了大学(我认为:从技术角度来看,这是一个比现在更加开放的时代),这就是第一个“类 Unix”的方式“ OS,即 BSD,应运而生。此外,在接下来的十年中,贝尔与(例如)HP 和 Sun Microsystems 达成了一些商业协议,从而产生了更多的变化。
虽然贝尔确实控制了他们的源代码,但他们没有对操作系统概念行使任何所有权,也许是因为他们已经授权了 Unix 并允许它独立于他们发展。向世界提供 C 意味着 C 比他们自己保留它要成功得多——这是语言规范的主要模式——这使 Unix 受益。这就是为什么像 OSX 这样的东西最终成为可能; OSX 是 NeXTstep 的后继者,NeXTstep 是一个使用 BSD 内核的基于 Mach(架构)的平台。
只剩下 linux 和 GNU,它们使用所有原始版本实现了类 unix 操作系统开源代码1——概念免费、开源该软件此前曾由 GNU 及其创始人理查德·斯托曼 (Richard Stallman) 倡导。至此,各路商业志士已经意识到
通常被称为 Unix 战争的标准竞争对所有参与者造成的伤害多于好处,使 UNIX 行业面临来自 Microsoft 的新兴竞争。http://en.wikipedia.org/wiki/Open_Group
这些规范是统一的,使得编写适用于任何投诉商业变体的软件变得更加容易。这也意味着任何人都可以自由遵守;也许主要参与者没有看到接下来会发生什么,因为它有点“跳出框框”,也许他们无论如何都不会关心,但无论如何,为这样的实现制作源代码(GNU + Linux)开放本身吸引了很多积极的关注,所以我们就到了这里:没有宏伟的计划,只有很多围绕同一个太阳旋转的独立计划。
1. 当时,就原始代码库而言,BSD 仍处于法律困境中。
答案2
还可以问,为什么不能只有一种类型的汽车呢?难道我们都不会很高兴驾驶 Gremlin 吗?或者也许是埃尔卡米诺?
Unix 和 Linux 中专有风格之间的一些偏差存在一些历史原因,这将带来一些有趣的阅读(找到所有这些资源将超出这样一个开放式问题的范围,我建议您在您喜欢或读过的口味以查找其起源)。同样,较新的 Linux 风格也受益于我们现在生活的开源世界,并且可以非常专业化,并包含针对特定用途的配置/应用程序/调整(为什么要运行该特定系统永远不需要的额外服务)。
所以你可以运行防火墙(顺便说一句,它是linux),你可以运行一个完整的gui桌面工作站(顺便说一句,它是linux),你可以运行NAS(顺便说一句,它是linux)。
如此一来……Linux = 用词不当,Linux 的版本太多,无法以这种方式定义。 AIX - IBM 专有的 Unix 版本。 Solaris - Sun 专有的 Unix 版本。 Mac - Apple 专有版本的 Linux/Unix(老实说还没有查看它的来源)。
我建议你拥抱多样性:)