10.1.5 标准UNIX

在20世纪80年代后期,两个不同且一定程度上不相兼容的UNIX版本(4.3BSD与System V第3版)得到广泛使用。另外,几乎每个销售商都会增加自己的非标准增强特性。UNIX世界的这种分裂,加上二进制程序格式没有标准的事实,使得任何软件销售商编写和打包的UNIX程序都不可能在其他UNIX系统上运行(正如MS-DOS所做的一样),从而极大地阻碍了UNIX的商业成功。各种各样标准化UNIX的尝试一开始都失败了。一个典型的例子是AT&T发布的SVID(System V Interface Definition,System 5界面定义),它定义了所有的系统调用、文件格式等。这个标准尝试使所有System V的销售商保持一致,然而它在敌对阵营(BSD)中直接被忽略,没有任何效果。

第一次使UNIX的两种流派一致的严肃尝试来源于IEEE(它是一个得到高度尊重的中立组织)标准委员会的赞助。有上百名来自业界、学界以及政府的人员参加了此项工作。他们共同决定将这个项目命名为POSIX。前三个字母代表可移植操作系统(Portable Operating System),后缀IX用来使这个名字与UNIX的构词相似。

经过一次又一次的争论与辩驳之后,POSIX委员会制定了一个称为1003.1的标准。它规定了每一个符合标准的UNIX系统必须提供的库函数。大多数库函数会引发系统调用,但也有一些可以在系统内核之外实现。典型的库函数包括open,read与fork。POSIX的思想是这样的,一个软件销售商写了一个只调用了符合1003.1标准函数的程序,那么他就可以确信这个程序可以在任何符合标准的UNIX系统上运行。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

的确大多数标准制定机构都会做出令人厌恶的妥协,在标准中包含一些制定这个标准的机构偏好的一些特性。在这点上,考虑到制定时牵涉到的大量相关者与他们各自既定的喜好,1003.1做得非常好。IEEE委员会并没有采用System V与BSD特性的并集作为标准的起始点(大部分的标准组织常这样做),而是采用了两者的交集。非常粗略地说,如果一个特性在System V与BSD中都出现了,它就被包含在标准中,否则就被排除出去。由于这种做法,1003.1与System V和BSD两者的共同祖先UNIX第7版有着很强的相似性。1003.1文档的编写方式使得操作系统的开发者与软件的开发者都能够理解,这是它在标准界中的另一个创新之处,即使这方面的改进工作已经在进行之中。

虽然1003.1标准只解决了系统调用的问题,但是一些相关文档对线程、应用程序、网络及UNIX的其他特性进行了标准化。另外,ANSI与ISO组织也对C语言进行了标准化。