在 1969-1970 年,肯·汤普森 (Kenneth Thompson)、丹尼斯·里奇 (Dennis Ritchie) 以及贝尔实验室 (AT&T Bell Labs) 的其他人在一台很少使用的 PDP-7 计算机上开始开发一个小型操作系统。这个操作系统很快被命名为 Unix,这是对早期名为 MULTICS 的操作系统项目的一种双关语。在 1972-1973 年,该系统用编程语言 C 进行了重写,这是一个不寻常但具有远见的步骤:由于这个决定,Unix 成为第一个可以从其原始硬件切换并超越其原始硬件的广泛使用的操作系统。Unix 还添加了其他创新,部分原因是贝尔实验室与学术界之间的协同作用。1979 年,发布了 Unix 的“第七版”(V7) 版本,它是所有现存 Unix 系统的鼻祖。
此后,Unix 的历史变得有些复杂。以伯克利为首的学术界开发了一个名为伯克利软件发行版 (BSD) 的变体,而 AT&T 继续以“System III”和后来的“System V”的名称开发 Unix。在 20 世纪 80 年代末到 90 年代初,这两个主要分支之间的“战争”愈演愈烈。多年以后,每个变体都采用了对方的许多关键功能。在商业上,System V 赢得了“标准之战”(将其大部分接口纳入正式标准),大多数硬件供应商都转向了 AT&T 的 System V。然而,System V 最终融入了许多 BSD 创新,因此最终的系统更像是两个分支的合并。BSD 分支并没有消亡,而是被广泛用于研究、PC 硬件和专用服务器(例如,许多网站使用 BSD 衍生版本)。
结果是出现了许多不同的 Unix 版本,所有版本都基于最初的第七版。大多数 Unix 版本都是专有的,并由各自的硬件供应商维护,例如,Sun Solaris 是 System V 的一个变体。Unix 的 BSD 分支的三个版本最终成为开源:FreeBSD(专注于 PC 类型硬件的易于安装)、NetBSD(专注于许多不同的 CPU 架构)以及 NetBSD 的一个变体 OpenBSD(专注于安全性)。有关 Unix 历史的更多一般信息,请访问 http://www.datametrics.com/tech/unix/uxhistry/brf-hist.htm、http://perso.wanadoo.fr/levenez/unix 和 http://www.crackmonkey.org/unix.html。有关 BSD 历史的更多信息,请参见 [McKusick 1999] 和 ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree。
一篇略显陈旧但有趣的倡导文章,提出了使用类 Unix 系统(而不是微软产品)的论据,是 John Kirch 的论文《Microsoft Windows NT Server 4.0 与 UNIX》。
1984 年,理查德·斯托曼 (Richard Stallman) 的自由软件基金会 (FSF) 启动了 GNU 项目,这是一个创建 Unix 操作系统的自由版本的项目。斯托曼所说的自由是指可以自由使用、阅读、修改和重新分发的软件。FSF 成功构建了大量有用的组件,包括 C 编译器 (gcc)、令人印象深刻的文本编辑器 (emacs) 和许多基本工具。然而,在 20 世纪 90 年代,FSF 在开发操作系统内核方面遇到了麻烦 [FSF 1998];没有内核,他们完全自由操作系统的梦想就无法实现。
1991 年,林纳斯·托瓦兹 (Linus Torvalds) 开始开发一个操作系统内核,他将其命名为“Linux”[Torvalds 1999]。这个内核可以与 FSF 的材料和其他组件(特别是某些 BSD 组件和麻省理工学院的 X-windows 软件)结合使用,以产生一个可自由修改且非常有用的操作系统。本书将内核本身称为“Linux 内核”,并将整个组合称为“Linux”。请注意,许多人使用术语“GNU/Linux”来代替这种组合。
在 Linux 社区中,不同的组织以不同的方式组合了可用的组件。每种组合都称为“发行版”,而开发发行版的组织称为“发行商”。常见的发行版包括 Red Hat、Mandrake、SuSE、Caldera、Corel 和 Debian。各种发行版之间存在差异,但所有发行版都基于相同的基础:Linux 内核和 GNU glibc 库。由于两者都受“著作权保留”风格许可证的约束,因此对这些基础的更改通常必须提供给所有人,这是 Linux 发行版之间在其基础上存在的一种统一力量,而 BSD 和 AT&T 衍生的 Unix 系统之间则不存在这种力量。本书不针对任何特定的 Linux 发行版;当本书讨论 Linux 时,它假定 Linux 内核版本为 2.2 或更高版本,C 库 glibc 版本为 2.1 或更高版本,这对于基本上所有当前的 Linux 主要发行版来说都是有效的假设。
对自由共享软件日益增长的兴趣使得定义和解释它变得越来越必要。一个广泛使用的术语是“开源软件”,[OSI 1999] 对其进行了进一步定义。埃里克·雷蒙德 (Eric Raymond) [1997, 1998] 撰写了几篇开创性的文章,探讨了其各种开发过程。另一个广泛使用的术语是“自由软件”,其中“自由”是“自由”的缩写:通常的解释是“言论自由,而不是免费啤酒”。这两个短语都不是完美的。“自由软件”一词经常与那些免费赠送可执行文件,但其源代码无法查看、修改或重新分发的程序混淆。相反,“开源”一词有时被(滥)用于表示源代码可见,但对其使用、修改或重新分发有限制的软件。本书使用术语“开源”的通常含义,即源代码可自由用于使用、查看、修改和重新分发的软件;更详细的定义包含在开源定义中。在某些情况下,人们会提出动机上的差异;那些喜欢“自由软件”一词的人希望强烈强调自由的必要性,而那些使用该术语的人可能有其他动机(例如,更高的可靠性)或只是希望显得不那么刺耳。有关自由软件的此定义的更多信息,以及其背后的动机,可以在 http://www.fsf.org 找到。
那些有兴趣阅读开源软件和自由软件的倡导文章的人应该访问 https://open-source.org.cn 和 http://www.fsf.org。还有其他文件检查此类软件,例如,Miller [1995] 发现开源软件明显比专有软件更可靠(使用他们的测量技术,该技术测量了抵抗随机输入导致崩溃的能力)。
本书使用术语“类 Unix”来描述有意类似于 Unix 的系统。特别是,术语“类 Unix”包括所有主要的 Unix 变体和 Linux 发行版。请注意,许多人只是使用术语“Unix”来描述这些系统。最初,术语“Unix”指的是 AT&T 开发的特定产品。如今,The Open Group 拥有 Unix 商标,它将 Unix 定义为“全球单一 UNIX 规范”。
Linux 不是从 Unix 源代码派生的,但其接口有意类似于 Unix。因此,Unix 课程通常适用于两者,包括有关安全性的信息。本书中的大部分信息适用于任何类 Unix 系统。Linux 特有的信息已特意添加,以便使用 Linux 的用户能够利用 Linux 的功能。
类 Unix 系统共享许多安全机制,尽管存在细微的差异,并非所有系统都具有所有可用的机制。所有系统都包括每个进程的用户 ID 和组 ID(uid 和 gid)以及具有读取、写入和执行权限的文件系统(针对用户、组和其他用户)。有关 Unix 系统(包括其基本安全机制)的一般信息,请参见 Thompson [1974] 和 Bach [1986]。第 3 章总结了 Unix 和 Linux 的关键安全功能。