标准
市场的压力和用户的需求推动了 Unix 标准的建立。在不到十年的时间里,市场迅速扩展。在接下来的十年里,许多公司诞生,其中大多数消失了,但有些幸存下来。硬件和软件的不兼容性成为多厂商市场中的主要缺陷,这与 1956 年到 1978 年期间几乎所有计算中心都使用单一颜色(通常是蓝色)的情况不同。微型计算机和工作站——苹果、PC 和微软——对这种变化影响深远。
这里有两个方向:系统标准化和语言标准化。后者(C 语言的标准化)已经完成:美国国家标准协会(ANSI)成立了 X3J11 委员会——《C 语言》委员会——并成功发布了 ANSI 标准 X3.159-1989,随后成为国际标准 ISO/IEC 9899:1990。
操作系统的标准化经历了更曲折的过程。Unix 标准化始于 Heinz Lycklama 向 /usr/group 董事会提出成立标准委员会的建议。到 1984 年,该委员会制定了一个 /usr/group 标准,并被会员采纳。虽然它没有官方地位,但 /usr/group 标准影响很大:ANSI X3J11 在制定 C 库部分时以此为基础。然而,由于 System V、4.nBSD 和 XENIX 等系统的分歧发展,/usr/group 标准很快变得不适用。
1985 年初,/usr/group 委员会与新成立的 IEEE POSIX 工作组(电气和电子工程师协会,可移植操作系统)合并,/usr/group 标准被采纳为初稿。
到 1989 年,POSIX 产生了 10 个子委员会;四年后,子委员会超过 20 个,但只发布了两个标准——虽然是最重要的两个标准——POSIX.1 和 POSIX.2。还有一本 POSIX.0 文档:《POSIX 开放系统环境指南》,试图解释应用程序的可移植性。
但需要明确的是,POSIX 不是 Unix,它是接口,而不是实现。Fred Zlotnick 称 POSIX 为“Unix 的泛化”。POSIX.1 采纳了许多 Unix 的概念,并将它们替换为抽象,从而使许多原本不兼容的系统成为“POSIX 兼容”。
随着标准化越来越多地由市场驱动而非技术驱动,其结果难以预测。各种行业联盟发布的标准反而没有鼓励用户。
例如,1985 年 1 月,AT&T 发布了 System V 接口定义(SVID),这是一份“有版权的、非专有的开放系统文档”。五年后发布了新版。与此同时,X/Open(成立于 1984 年底)发布了其可移植性指南(XPG),现已历经多个版本:XPG2、XPG3、XPG4。XPG3 和 XPG4 在多个方面超越了 SVID。
88open 是“一家致力于基于 Motorola 88000 RISC 处理器家族创建多厂商开放计算环境的公司和个人社区”,成立于 1988 年。该联盟发布了《源代码手册》和《开放系统参考指南——标准世界》。我将在后续章节讨论开放软件基金会和 UNIX International。
在 Unix 20 周年会议上,Ritchie 评论了 C 语言标准和 POSIX:
我们与 Unix 标准化工作几乎没有太多直接关联。最主要的互动是试图对 POSIX shell 做一些改进,或者提出一些批评。对于 C 语言标准,我刻意没有介入 X3J11。我确实在幕后与 Larry Rosler 和 Dave Prosser 有过一些交流,他们当时是草案的编辑,也是委员会中 AT&T 的代表,但除了在“noalias 事件”中我非常直言不讳之外,我并没有参与其他事情……
我认为 [C 语言标准] 做得很好。实际上,几乎可以说是一个成功标准化工作的典范。他们拿到了一个基本没坏但确实需要澄清和更新的东西,既澄清了也更新了,而且没有破坏它。当然,肯定还有许多批评之处……但相比于其他语言标准化的结果,比如 FORTRAN 8X,甚至是标准化机构尝试定义的 Pascal,C 语言的命运非常理想。
Ritchie 对 POSIX 努力的热情远不如对 C 语言标准那样高涨:
这是一种更为复杂的情况。系统调用接口、库,甚至命令行看起来都相当稳固,也没有太大的争议和混乱。业界似乎也普遍支持这样的结果。另一方面,这些部分却缺乏一些相当明显的东西,比如一个连贯的网络处理方式。Presotto 和我几年前在 USENIX 上讨论过一种方法……不过,我们的方法似乎还没有席卷全球。
此外,IEEE 的 POSIX 工作似乎在以某种令人沮丧的方式走偏了。特别是实时组,似乎正在收集各种未经消化的想法,这些想法和现有系统之间并不怎么契合。我对所谓“任务处理”——即多个小进程在同一个内存镜像中执行——感到担忧,因为 Unix 及其软件所建立的模型并不能很好地容纳这种方式 —— C 语言不支持,库也不支持。多处理带来了许多关于软件设计方式的影响,而我担心如果只是硬塞进去,最终只会造成一团糟。说我对此态度矛盾简直是轻描淡写!围绕标准化所带来的(心理上、政治上的)紧张,在很多层面上都是巨大的。
人们常提到的,是创新与标准化之间的斗争。但我不认为这是真正的问题。如果存在标准,你可以有意识地做出决策,是选择遵循标准还是另辟蹊径。这固然是一种赌博,但也是合理的。而真正的紧张在于,决定某个领域是否“已经到了该标准化的时候”。当某件事情明明该制定一个统一标准却没有做到时,后果真的很糟糕(比如 VHS 与 XBeta 的对决)。
有一点大家应该明白,在许多与我们相关的领域,标准往往是由非常窄的群体制定的,而如果你足够关心,并以合适的方式参与,是可以对其施加影响的。在形成阶段,一个措辞得当、具体明确的建议可以起到很大的作用。当然,这也是一种悖论。这意味着,少数几位优秀的人真的可以挽救局势,但也意味着,少数几个蠢人也能把事情搞砸很多年。
自从 Ritchie 发表上述评论以来,POSIX 子委员会的数量不断增加,而当时存在的一些提案中,只有少数推进到了投票阶段。此外,随着越来越多的联盟组织的成立,不符合各个 IEEE 委员会正在进行的工作的非正式标准的数量也在不断增加。
最后更新于