Articles

Unix及C语言的历史

上大学那会听说C语言来自于Unix,整个Unix都是用C语言开发的。Unix是商业软件,后来一个小伙子Linus Torvalds开发了Linux,并将其代码公开,就有了后来一大堆开源的免费的Linux系统。我听说过BSD、System V、Solaris、AIX、FreeBSD,上大学那会最火的是Redhat,可对于这些Unix、Linux系统之间的关系,以及学习网络编程时遇到的POSIX、Single UNIX Specification这些标准间的关系却不是很了解。下面我们一起回顾一下这段Unix及C语言的历史。

1960s Multics

麻省理工学院AT&T贝尔实验室通用电器合作,一起为通用的大型机GE-645开发一个全新的分时的系统Multics (Multiplexed Information and Computing Service)。参与该系统开发的人员包括Ken ThompsonDennis RitchieBrian Kernighan等人。后来大家发现开发这个系统的复杂程度超乎想想,所以大家决定吸取经验教训,重新开发一个规模更小一点的系统。在这个阶段,Multics系统主要使用汇编语言进行开发,Unix和C语言尚未诞生。

1970s Unix & C

为了体现对Multics的简化,新的项目被命名为Unics (UNiplexed Information and Computing Service) 。Multiplexed是多路的意思,而Uniplexed可以理解为单路,总之是更简单了。Unics系统取得了成功,并最终支持了多用户环境,所以Unics被重新命名为Unix。在1969-1973的这段时间里,随着Unix系统的开发,Dennis Ritchie也开发出了一种新的语言,就是大名鼎鼎的C语言。1972年,Unix全部用C语言重写,这大大提高了该操作系统上软件的可移植性。1978年,Brian Kernighan和Dennis Ritchie一起合著了The C Programming Language一书,因此,该书中的C语言编码风格被后人成为K&R风格。在1979年,AT&T发布了重要的Unix版本,Version 7 Unix。该版本主要是针对DEC的微型机PDP-11设计。从此,Unix和C语言就都诞生了,并且都有了重要的里程碑,Version 7 Unix和The C Programming Language。

1980s POSIX.1, C89, GCC

这10年是Unix蓬勃发展的10年,诞生了很多新的商用Unix系统,最早的当属AT&T的System IIISystem V。但由于这些商用软件的license不太适合大学使用,所以加州大学伯克利分校就基于Version 7 Unix自行开发了BSD Unix (Berkeley Software Distribution Unix),并相继发布了BSD 4.1、BSD 4.2、BSD 4.3等重要版本。各大公司也都基于AT&T和BSD的系统,针对自己的产品开发了自己的Unix系统。例如基于System III,HP公司开发了自己的HP-UX (Hewlett-Packard UniX)系统。基于BSD,Sun公司开发了SunOS系统。IBM同时借鉴了System V和BSD 4.2,开发了IBM AIX (Advanced Interactive eXecutive)系统。微软在卖DOS之前,甚至也从AT&T那里买来了Unix的license,更名为Xenix,并将其移植到微型机上。

由于各个公司的Unix版本繁多,没有统一的标准,所以各系统的兼容性很差。DEC、HP、IBM等公司联手成立了Open Software Foundation (OSF)。AT&T和Sun等公司联手成立了UNIX International。欧洲的一些企业例如西门子联手创办了X/Open。Open Software Foundation与UNIX International互相牵制,而远在欧洲的X/Open则处于中立。1988年,POSIX.1 (Portable Operating System Interafce for uniX)标准终于出炉,也即IEEE 1003、ISO/IEC 9945标准。1989年,ANSI C发布,简称为C89。

随着商用软件的盛行,在MIT AI Lab工作的Richard Stallman发起了GNU Project (GNU’s Not Unix),旨在开发一系列免费的软件,并于1987年发布了GNU C Compiler (GCC)。由于后来GNU加入了对C++的支持,所以GCC被赋予了新的含义GNU Compiler Collection

1990s Linux, SUSv2, C99

这10年是开源软件和标准化的10年。1991年,BSD的一群人离开了伯克利,开发了386BSD。该操作系统是FreeBSD、OpenBSD、NetBSD的前身。同样是1991年,Linus Torvalds开始开发Linux。商业的Unix也没有止步,Sun公司开发了Solaris以取代SunOS。乔布斯离开了苹果,基于BSD 4.3开发NeXTSTEP系统。

一系列POSIX标准发布,例如POSIX.1b Realtime、POSIX.1c Threads、POSIX.2 Shell & Utilities。X/Open、UNIX International和Open Software Foundation合并,成立了The Open Group。The Open Group在1997发布了一个Unix历史上重要的标准,SUSv2 (The Single UNIX Specification Version 2)。1999年,ANSI C发布了C99标准。

从上面这40年的发展来看,只要有公司,就有利益之争,只要有商业软件,就会有免费软件。好在各个公司组织在世界混乱的时候会形成联盟,制定标准,彼此妥协。

为了理解上述各操作系统间的关系和各个标准组织间的关系,大家可以对照看下面这两张图片。