Research Unix 历史

最后更新: 2026-07-07 22:22:05 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

Unix 起源于 Bell Labs 的一个小型系统,后来成为多个相关事物:源代码谱系、接口传统、标准化环境以及注册商标。当这些类别被合并到一棵家族树中时,历史主张就会产生误导。

从 Multics 到 PDP-7 #

20 世纪 60 年代,Bell Labs 与 MIT 和通用电气共同参与 Multics 项目,随后于 1969 年退出。Ken Thompson 仍然对交互式计算和文件系统设计感兴趣。他还编写过 Space Travel,最初针对 Multics,后来针对 GECOS 系统;后者的开发周期使实验成本很高。

Bell Labs 一台闲置的 DEC PDP-7 提供了实际目标。Thompson 在 1969 年为它编写了文件系统、进程支持、汇编器、shell 和实用工具。Dennis Ritchie、Rudd Canaday、Doug McIlroy 及其他研究人员参与了这个逐渐形成的环境。Brian Kernighan 将“Unix”命名为对“Multics”的文字游戏。

PDP-7 实现使用汇编编写,并受到严重的内存限制。多个持久性思想已经出现:分层文件系统、进程、通过面向文件的接口访问设备、作为普通程序的命令解释器,以及可以组合的小工具。

迁移到 PDP-11 #

1970 年,在小组提出文本处理系统后,Bell Labs 获得了一台 PDP-11/20。这台机器最初没有磁盘,因此开发需要交叉汇编器和纸带,直到新系统能够自给自足。文本处理提供了组织目的:Bell Labs 的专利部门后来使用带有 roff、nroff 和 troff 的 Unix。

早期 PDP-11 Unix 仍然是汇编语言软件。硬件依赖使移植困难,因为指令顺序、调用约定、中断和设备代码遍布内核。高级实现语言可以减少这种依赖,但前提是它能够暴露高效的指针、整数操作和机器级存储。

从汇编经过 B 到 C #

Thompson 从 BCPL 派生出用于系统编程的 B。B 的无类型、面向字模型适合 PDP-7,但与 PDP-11 的字节寻址和正在出现的浮点支持映射不佳。Ritchie 通过“New B”扩展语言,加入类型、结构和适合 PDP-11 的编译器,形成了 C。

一次 B 重写没有提供所需的性能和语义。在 1972—1973 年间,Thompson 和 Ritchie 用 C 重写了大部分内核,同时保留汇编用于启动、陷阱、上下文切换及其他特定于架构的操作。因此,可移植性意味着隔离机器依赖,而不是消除依赖。

1974 年的 Communications of the ACM 论文公开描述了该系统。后来的 Interdata 移植验证了这一策略:C 内核和用户空间可以迁移到不同架构,只需提供编译器、运行时和依赖机器的内核层。

Research Unix 版本 #

“Research Unix”指 Bell Labs 计算科学研究中心制作的版本,而不是每个 AT&T 产品。版本编号来自《Unix Programmer’s Manual》的连续版本:

  • 第一版于 1971 年面向 PDP-11 发布。
  • 第三版加入了管道,McIlroy 曾倡导将其作为组合机制。
  • 第四版体现了 C 重写。
  • 第六版于 1975 年发布,成为广泛研究和授权的学术系统。
  • 第七版于 1979 年发布,整合了大量内核和工具开发成果,成为若干后续分支的祖先。
  • Research Unix 在 Bell Labs 内部继续发展到第八、第九和第十版。

AT&T 以许可证形式向大学、政府用户和商业组织分发 Unix 源代码。当时的同意令限制影响了 AT&T 的计算机业务活动,而许可条款仍然控制着再分发。学术被许可方可以研究和修改源代码,但这种安排并不是现代意义上的开源许可证。

UNIX/32V 将第七版代码带到了 VAX,但没有包含 Berkeley 后来的虚拟内存工作。源代码路径很重要,因为 BSD 和多个商业系统都整合或发展了获得许可的 Research Unix 代码,而不只是模仿其接口。

BSD 和 AT&T 商业线路 #

Berkeley Software Distribution 起源于加州大学伯克利分校对已获许可 Unix 的软件和补丁。后续版本增加了 vi 编辑器、C shell、虚拟内存、套接字 API、TCP/IP、快速文件系统以及其他内核和用户空间工作。3BSD 和 4BSD 保留了 AT&T 血统;后来的 Networking Release 2 和 4.4BSD-Lite 经过代码审查和替换,使可自由再分发的 BSD 后代成为可能。

现代 FreeBSD、NetBSD 和 OpenBSD 通过 BSD 代码传承下来。macOS 的开源基础 Darwin 将 Mach 与大量 BSD 设施和用户空间结合起来,因此 macOS 具有 BSD 代码血统,但不是某一个 Research Unix 内核的直接延续。

AT&T 的产品线沿着 Programmer’s Workbench、UNIX/TS、System III 和 System V 发展。System V Release 4 结合了 AT&T、BSD、SunOS 和其他贡献。商业后代和衍生系统包括 Solaris、AIX 和 HP-UX,但它们确切的源码关系和保留组件因版本而异。

POSIX 和接口谱系 #

厂商分歧使源码可移植变得困难,因此 IEEE 对可移植操作系统接口进行了标准化。POSIX 规定 API、shell 和实用工具行为以及相关约定。The Open Group 的 Base Specifications 将 POSIX 与 Single UNIX Specification 结合起来。

标准谱系不是代码谱系:

  • Linux 是独立实现的,仅仅因为实现了许多 POSIX 接口,并不意味着它的内核有 Research Unix 或 BSD 的必要血统。
  • BSD 派生系统可以保留历史代码,同时不同于当前的 POSIX 要求。
  • 应用可以面向 POSIX 源码接口,而不依赖某种内核架构或历史 Unix 源码许可证。

GNU 为类 Unix 环境提供了独立开发的编译器、C 库、shell 和实用工具。Linux 发行版将 Linux 内核与 GNU 及其他项目组合,这进一步说明接口家族不是一个代码库。

UNIX 商标 #

UNIX 是 The Open Group 的注册商标。产品在符合适用的 Single UNIX Specification 并完成认证计划时,可以使用 UNIX 品牌。认证关注可观察的一致性,并不要求源自 Bell Labs 源代码。

相反,“类 Unix”是描述性的工程术语,而不是认证。系统可以共享进程、文件系统、shell 和 API 约定,却不携带 UNIX 商标。精确的历史写作应说明意图指向哪种关系:

  1. 代码谱系追踪继承和替换的源代码。
  2. 标准谱系追踪对 POSIX 或 Single UNIX Specification 的一致性。
  3. 商标状态追踪认证和命名权。

参考资料 #

评论

在 GitHub 上阅读或评论(发表评论需要登录)