如果把操作系统的发展史比作《三国演义》,那么本文更像《三国演义》,而不是《三国志》。

本系列尝试用故事化的方式,讲述 Unix、Linux、BSD、GNU、Windows、macOS、Android 等操作系统背后的发展历程。

文中的人物、事件和技术演进都尽量参考公开资料,但为了让故事更容易理解,会适当简化一些历史细节,也会加入作者自己的理解。

它不是一篇学术论文,而是一段程序员视角的技术故事。

如果读完之后,你产生兴趣,愿意继续查阅官方资料,那这篇文章的目的就达到了。


引子:有一个系统,你可能没用过,却每天都在使用它的成果

今天提到开源操作系统,大多数人首先想到的是:

Linux。

服务器用 Linux。

云计算用 Linux。

Android 使用 Linux Kernel。

程序员的开发环境里,也到处都是 Linux。

相比之下,另一个名字就显得低调得多:

BSD。

很多人甚至会问:

BSD 是一个操作系统吗?

这个问题还真不好简单回答。

BSD 最早是伯克利大学对 Unix 的一系列改进和软件发行。

后来,它逐渐演化出完整的操作系统。

再后来,它又分成了不同的分支:

  • FreeBSD;
  • NetBSD;
  • OpenBSD;
  • DragonFly BSD。

这些系统技术实力很强。

网络性能优秀。

系统设计完整。

安全性也很好。

有些技术甚至深刻影响了整个互联网。

但是奇怪的是:

为什么今天主流服务器系统是 Linux,而不是 BSD?

为什么普通人听说过 Ubuntu、Red Hat、Debian,却很少听说 FreeBSD、NetBSD 和 OpenBSD?

这一次,我们就来讲讲:

一个技术很牛,却始终没有走上大众舞台中央的操作系统家族。


第一章:Unix 来到伯克利,事情开始变得不一样

故事还要从 Unix 说起。

20 世纪 70 年代,Unix 开始走出贝尔实验室,进入大学和研究机构。

其中最重要的一站,就是:

加州大学伯克利分校。

伯克利的研究人员拿到 Unix 后,并没有只是把它当成一个现成的软件使用。

他们更像拿到了一辆可以拆开的汽车。

于是,一群老师和学生开始:

修改代码。

提升性能。

增加工具。

改进文件系统。

完善网络功能。

其中有一位后来非常有名的程序员:

Bill Joy。

没错,就是后来参与创办 Sun Microsystems 的那位 Bill Joy。

他和伯克利的研究人员整理了一批针对 Unix 的增强软件。

1978 年,第一版 Berkeley Software Distribution 发布。

简称:

BSD。

最初的 BSD 还不是一套完全独立的操作系统。

它更像是一个 Unix“豪华升级包”。

安装 Unix 后,再加上 BSD 提供的工具和改进,系统就会变得更加强大。

但随着伯克利修改的内容越来越多,BSD 已经不再只是几个小工具。

它开始拥有自己的:

  • 虚拟内存;
  • 文件系统;
  • 网络协议栈;
  • Shell;
  • 编辑器;
  • 系统工具;
  • 内核改进。

BSD 逐渐从“Unix 增强包”,成长为一套完整的 Unix 系统。


第二章:BSD 帮互联网铺好了道路

今天,我们打开浏览器访问网站时,背后会使用一整套网络协议。

其中最重要的就是:

TCP/IP。

现在看,TCP/IP 已经像空气一样自然。

但是在互联网早期,它并不是唯一的网络方案。

不同厂商、不同计算机,都有自己的协议。

大家彼此之间未必能够通信。

这就像:

每个城市都修了自己的道路。

但道路标准不同。

有的靠左行驶。

有的靠右行驶。

有的轨道宽。

有的轨道窄。

车开出自己的城市,很可能就走不动了。

美国国防高级研究计划局 DARPA 希望推动一种统一的网络通信方式。

而伯克利的 BSD,成为了 TCP/IP 技术重要的开发和传播平台之一。

1983 年发布的 4.2BSD 集成了 TCP/IP 网络能力。

由于 BSD 被大量大学和研究机构采用,它的网络实现也随着系统一起传播。

很多厂商后来开发自己的 Unix 系统时,也参考或者采用了 BSD 的网络代码。

从某种意义上说:

BSD 不只是安装在互联网中的一台计算机上,它还参与定义了这些计算机应该怎样互相通信。

今天很多操作系统中的 Socket 编程接口,也深受 BSD 影响。

程序员常见的这些函数:

socket()bind()listen()accept()connect()

背后延续的,就是所谓的:

BSD Sockets。

所以,当你写一个网络服务器,或者学习 Socket 编程时,即使使用的是 Linux,也仍然能够看到 BSD 留下的影子。


第三章:BSD 原本拿着一副好牌

到了 20 世纪 80 年代,BSD 的地位其实非常高。

它并不是什么无人问津的小众项目。

相反:

很多大学使用 BSD。

很多研究机构使用 BSD。

Sun Microsystems 早期的 SunOS,也深受 BSD 影响。

TCP/IP、Socket、虚拟内存、快速文件系统等技术,让 BSD 在工程师群体中拥有很高的声望。

当时如果有人预测:

未来最流行的自由 Unix 系统,很可能来自 BSD。

这个判断一点也不奇怪。

因为 BSD 已经拥有:

  • 成熟的代码;
  • 丰富的工具;
  • 完整的网络功能;
  • 大学和研究机构支持;
  • 多年的 Unix 开发经验。

而当时的 Linux 呢?

还不存在。

1991 年,Linus Torvalds 才刚刚在一台个人电脑上开始编写自己的 Kernel。

如果只比较技术积累:

BSD 几乎遥遥领先。

它就像一位已经打过多年比赛的职业选手。

而 Linux 当时还只是一个刚刚报名参赛的大学生。

但是接下来发生的事情,改变了双方的命运。


第四章:Unix 世界的另一场战争:BSD 与 System V

其实,在 BSD 遇到法律问题之前,Unix 世界内部已经存在另一场竞争。

那就是:

BSD 与 System V 之争。

很多人以为:

Unix 是一个统一的操作系统。

实际上,并不是。

Unix 从诞生开始,就不断产生不同的发展路线。

到了 20 世纪 80 年代,Unix 世界逐渐形成了两大阵营。

一边:

BSD。

另一边:

System V。


BSD 来自:

加州大学伯克利分校。

它更多带有大学和研究机构的气质。

开发者喜欢:

  • 改进技术;
  • 分享代码;
  • 探索新的设计。

因此 BSD 在:

  • 网络;
  • 文件系统;
  • 工具链;

等方面进行了大量创新。

后来互联网的发展,也深受 BSD 影响。


而 System V 则来自:

AT&T。

由于 Unix 最初诞生于 Bell Labs,AT&T 后来希望把 Unix 发展成为商业产品。

于是推出了:

UNIX System V。

它更加关注:

  • 商业支持;
  • 企业应用;
  • 标准化。

很多大型企业 Unix:

例如:

  • Solaris;
  • HP-UX;
  • AIX;

都受到 System V 的影响。


于是,Unix 世界出现了一个有趣的局面:

大家都说自己是 Unix。

但是:

大家的发展方向并不完全一样。

BSD 更像:

一个开放的技术实验室。

System V 更像:

一个面向企业市场的商业产品。

双方都有大量用户。

也都有自己的技术优势。


这场竞争后来甚至影响到了 Unix 标准的发展。

因为不同 Unix 系统之间存在差异:

同样一个命令。

同样一个程序。

在不同 Unix 上,行为可能并不完全一样。

于是:

业界开始推动统一标准。

其中最重要的成果之一,就是:

POSIX 标准。

它希望定义一套大家共同遵守的接口。

让软件可以更加容易地跨 Unix 系统运行。


有趣的是:

后来的 Linux 并不是简单继承 BSD 或 System V。

它更像一个后来者。

它吸收了 Unix 世界长期积累的经验:

  • 借鉴 BSD 的网络设计;
  • 兼容 System V 的很多接口和习惯;
  • 结合 GNU 提供的自由软件生态。

所以今天 Linux 中,你既能看到 BSD 的影子。

也能看到 System V 的传统。

例如:

很多 Linux 用户熟悉的:

ps aux

来自 BSD 风格。

而:

ps -ef

则更接近 System V 风格。


Unix 世界的这场竞争,最终没有简单地分出一个胜负。

因为后来:

BSD 没有消失。

System V 也没有完全消失。

它们都成为了现代操作系统的一部分。

只是:

BSD 更多走向了:

  • FreeBSD;
  • OpenBSD;
  • macOS。

而 System V 的影响,则更多留在:

  • 商业 Unix;
  • 企业系统;
  • Unix 标准中。


第五章:一场官司,让 BSD 停在了起跑线上

BSD 虽然由伯克利开发,但它最初建立在 AT&T Unix 的基础上。

这意味着:

BSD 代码中,既有伯克利自己编写的内容,也包含原始 Unix 的代码。

随着伯克利不断重写 Unix 的组件,系统中属于 AT&T 的代码越来越少。

伯克利的目标是:

做出一套不再依赖 AT&T Unix 授权、可以自由发布的系统。

1991 年,伯克利发布了 Networking Release 2。

这套代码已经去掉了大量受到 AT&T 授权限制的内容。

随后,一家公司以此为基础,准备销售一套名为 BSD/386 的操作系统。

AT&T 旗下的 Unix System Laboratories 认为:

这些代码仍然包含受保护的 Unix 内容。

于是,双方走上法庭。

一边说:

这里面还有我们的代码。

另一边说:

大部分代码都是我们重新写的。

这场诉讼最后在 1994 年达成和解,伯克利随后发布了清理法律争议后的 4.4BSD-Lite。

从最终结果看:

BSD 并没有被彻底判定为“侵权系统”。

需要删除或修改的文件也只是整个系统中的一部分。

但问题在于:

市场不会耐心等待一场官司慢慢结束。

当时准备使用 BSD 的公司和开发者,不知道这套代码未来是否还会遇到法律麻烦。

大家会担心:

用了 BSD,会不会被起诉?

发布产品,会不会需要补授权费?

项目以后还能不能继续?

对于公司来说:

技术问题可以修。

法律风险却很难评估。

于是,很多人选择暂时观望。

偏偏就在 BSD 陷入法律阴影时,另一个系统出现了。

它就是:

Linux。


第六章:BSD 在打官司,Linux 在网上狂奔

1991 年,Linus Torvalds 发布 Linux Kernel。

最初的 Linux 非常简陋。

功能不如 BSD 完整。

稳定性也无法和已经发展多年的 BSD 相比。

但是 Linux 有几个重要优势。

首先:

它从一开始就没有背负 Unix 源代码授权问题。

Linux 是 Linus 自己重新编写的 Kernel。

虽然它模仿 Unix 的接口和使用方式,但并不直接复制 Unix Kernel。

其次:

GNU 项目已经准备好了大量工具。

编译器有 GCC。

Shell 有 Bash。

基础命令有 GNU Coreutils。

还包括调试器、编辑器、链接器以及各种开发工具。

GNU 一直缺少一个真正可用的 Kernel。

Linux 出现后,双方正好拼到了一起:

GNU 工具链 + Linux Kernel。

一套能够在普通 PC 上运行的自由类 Unix 系统,很快成形了。

更重要的是:

Linux 赶上了互联网社区快速发展的时间。

全世界的程序员可以通过网络:

下载代码。

提交补丁。

讨论问题。

适配硬件。

制作发行版。

BSD 在法庭上解释自己和 Unix 的关系。

Linux 则在邮件列表里不断增加新功能。

等到 BSD 的法律问题逐渐解决时,Linux 已经跑出很远了。

这并不是说:

BSD 完全因为一场官司输给了 Linux。

历史很少由单一原因决定。

但是这场官司确实发生在一个非常关键的时间窗口。

BSD 被迫踩下刹车的时候,Linux 恰好踩下了油门。


第七章:同样是开源,BSD 和 Linux 的性格并不一样

BSD 和 Linux 还有一个非常重要的区别:

软件许可证。

Linux Kernel 使用 GPL。

GPL 的基本思想是:

你可以自由使用、修改和发布代码。

但是,如果你发布基于这些代码修改后的程序,通常也需要按照 GPL 提供相应源代码。

这被称为:

Copyleft。

它有点像在代码上附加了一项约定:

我把自由给了你,但你继续发布时,也要把这种自由留给后面的人。

BSD 许可证则宽松得多。

它大致可以理解为:

代码你可以使用,也可以修改,保留必要的版权声明即可。

你可以把修改后的代码继续开源。

也可以放进商业产品中,不公开自己的修改。

FreeBSD 官方保存的 4.4BSD 许可证明确允许以源代码或二进制形式重新发布,也允许修改和商业使用,只需满足相应的版权声明等条件。

两者没有绝对的谁好谁坏。

它们只是代表了两种不同的开源哲学。

GPL 更关注:

后续版本能否继续保持开放。

BSD 许可证更关注:

使用代码的人是否拥有最大自由。

对于商业公司来说,BSD 许可证非常友好。

公司可以使用 BSD 代码开发产品,却不一定需要公开自己的全部修改。

这帮助 BSD 技术进入了很多商业系统。

但它也带来了一个有趣的结果:

BSD 的代码传播得很广,BSD 社区本身却未必因此变得更强。

一家公司使用 Linux Kernel 并发布修改后的版本,很多改进有机会回到开源社区。

一家公司使用 BSD 代码,则可以把修改留在自己的产品中。

所以 BSD 经常出现一种局面:

代码被大量使用。

技术影响力很大。

但普通用户并不知道它的名字。


第八章:BSD 后来分成了几支队伍

伯克利停止继续开发完整 BSD 系统之后,它留下的代码并没有消失。

社区接过了接力棒。

但不同开发者有不同的目标。

于是,BSD 家族逐渐分成了几条主要路线。


FreeBSD:我要把系统做好用

FreeBSD 是今天最知名的 BSD 系统之一。

它更关注:

  • 性能;
  • 稳定性;
  • 网络服务;
  • 存储;
  • 服务器和工程应用。

FreeBSD 的一个特点是:

它不像很多 Linux 发行版那样,只负责组合来自不同项目的软件。

FreeBSD 项目同时维护 Kernel 和大量基础用户空间工具。

也就是说:

FreeBSD 更像一套由同一个项目统一设计和维护的完整操作系统。

而 Linux 严格来说主要是 Kernel。

Ubuntu、Debian、Red Hat 等发行版,再把 Linux Kernel、GNU 工具和其他软件组合成完整系统。

这使 FreeBSD 的系统一致性很强。

它更像一整套餐具。

Linux 发行版更像从不同厂家挑选刀、叉、盘子,再组合成一套餐具。

后者更加灵活。

前者则更加强调整体设计。


NetBSD:只要有处理器,我就想跑上去

NetBSD 最著名的目标是:

可移植性。

它希望能够运行在尽可能多的硬件平台上。

无论是常见的 x86。

还是 ARM。

无论是服务器。

还是工作站。

甚至一些非常古老、非常少见的硬件。

NetBSD 社区都愿意尝试适配。

它有一句非常著名的口号:

Of course it runs NetBSD.

意思是:

它当然可以运行 NetBSD。

这句话既是技术自信,也带着一点程序员式幽默。


OpenBSD:别急着加功能,先看看安不安全

OpenBSD 则把重点放在:

  • 正确性;
  • 代码审计;
  • 默认安全;
  • 加密技术;
  • 主动防御。

OpenBSD 开发者会投入大量时间检查代码。

哪怕某段程序现在没有暴露漏洞,只要设计得不够安全,也可能被重新实现。

OpenBSD 官方将自己的目标概括为可移植性、标准化、正确性、主动安全和集成加密。著名的 OpenSSH 项目也来自 OpenBSD。

今天很多人登录 Linux 服务器时会使用:

ssh user@server

背后常用的 OpenSSH,很可能就是系统里最常见的 OpenBSD 成果。

换句话说:

你可能从来没安装过 OpenBSD。

但你几乎肯定使用过 OpenBSD 社区开发的软件。


第九章:为什么 BSD 没像 Linux 那样成为主流

说到这里,我们终于可以回答文章标题中的问题:

BSD 技术这么强,为什么一直没成为主流?

原因并不只有一个。


第一,关键时期遇到了法律纠纷

BSD 早期和 AT&T Unix 之间复杂的代码关系,让开发者和公司产生顾虑。

当法律问题解决时,Linux 已经建立起了自己的社区和生态。

在技术世界里:

错过几年,有时就是错过一个时代。


第二,Linux 更适合当时快速扩张的 PC 世界

Linux 从一开始就在普通 PC 上发展。

大量个人开发者可以用一台廉价电脑:

安装 Linux。

修改 Kernel。

提交驱动。

制作发行版。

而 BSD 的传统更多来自大学、工作站和 Unix 服务器。

Linux 更早抓住了不断扩大的个人电脑和互联网开发者群体。


第三,GPL 让社区改进更容易回流

Linux 使用 GPL。

许多发布出去的内核修改需要继续遵循 GPL。

这让硬件厂商、云计算公司和其他企业对 Linux 的改进,更容易回到公共代码库。

BSD 许可证更宽松。

这促进了 BSD 代码的商业采用,却不保证修改一定返回社区。

从许可证自由度看:

BSD 很自由。

从积累公共生态的能力看:

GPL 有时反而更有凝聚力。


第四,Linux 有发行版大军

Linux 不只有一个项目。

它背后出现了大量发行版:

  • Debian;
  • Ubuntu;
  • Red Hat;
  • SUSE;
  • Arch Linux;
  • Gentoo。

有的服务企业。

有的服务桌面用户。

有的强调稳定。

有的强调最新软件。

有的适合初学者。

有的适合极客。

这种看似混乱的生态,反而覆盖了不同用户需求。

BSD 虽然也有 FreeBSD、NetBSD 和 OpenBSD,但每个项目的规模都比较有限。

它们更像几支技术精良的小队。

Linux 则逐渐形成了一支人数庞大的集团军。


第五,硬件支持会产生滚雪球效应

用户越多,硬件厂商越愿意支持。

硬件支持越好,用户又会越多。

Linux 逐渐获得了更多:

显卡驱动。

网卡驱动。

笔记本支持。

服务器认证。

云平台支持。

第三方软件。

BSD 的用户规模较小,厂商投入自然更少。

于是,新硬件支持经常比 Linux 慢。

这又让更多普通用户优先选择 Linux。

雪球一旦滚起来,后面的差距就越来越大。


第六,BSD 社区并不一定把“大众流行”当作第一目标

这可能是最容易被忽略的一点。

我们总是习惯用市场份额评价技术项目。

但 FreeBSD、NetBSD 和 OpenBSD 的目标并不完全相同。

OpenBSD 更重视安全和正确性。

NetBSD 更重视跨平台能力。

FreeBSD 更重视完整系统、性能和稳定性。

它们并不一定愿意为了吸引更多桌面用户,牺牲自己的设计原则。

有些项目的目标是占领市场。

有些项目的目标则是:

把自己认为正确的系统做好。

BSD 很大程度上属于后者。


第十章:BSD 没有成为主角,却进入了主角的身体

如果只看桌面用户数量,BSD 确实不是主流。

但如果因此认为 BSD 已经失败,那就错了。

BSD 代码和思想早已进入大量商业系统和基础设施。

其中最著名的例子就是:

macOS。

macOS 的底层系统 Darwin 使用 XNU Kernel。

XNU 并不是纯粹的 BSD Kernel,而是一套混合内核:

  • 底层包含 Mach 的设计;
  • 集成了 BSD 子系统;
  • 驱动框架则是 IOKit。

Apple 对 XNU 的介绍也明确说明,它结合了 Mach、FreeBSD 组件和 IOKit。

所以,说“macOS 就是 FreeBSD”并不准确。

但说 macOS 继承了大量 BSD 技术和 Unix 传统,则没有问题。

除了 Apple,BSD 技术还长期应用在:

  • 网络设备;
  • 存储设备;
  • 防火墙;
  • 游戏主机;
  • 内容分发系统;
  • 各类商业操作系统和嵌入式设备中。

BSD 许可证非常适合商业产品。

厂商可以把 BSD 代码装进设备。

进行修改。

再把它包装成自己的产品。

用户看到的可能是一个漂亮的界面。

一个路由器。

一台存储设备。

甚至一部手机。

但在系统深处,可能仍然流淌着 BSD 的代码。

BSD 就像一位很少出现在电影海报上的编剧。

观众可能不知道他的名字。

但很多精彩的故事,都有他的参与。


第十一章:BSD 和 Linux,究竟谁更好

程序员遇到两个相似的技术,总喜欢问:

谁更好?

BSD 和 Linux 也经常被拿来比较。

有人喜欢 FreeBSD 的完整和统一。

有人喜欢 OpenBSD 的安全哲学。

有人欣赏 NetBSD 的可移植性。

也有人认为:

Linux 的驱动更多。

生态更大。

软件支持更全面。

云计算和容器环境也更加成熟。

这些说法大多有自己的道理。

但 BSD 和 Linux 并不是简单的胜负关系。

它们更像两种不同的发展路线。

Linux 的路线是:

依靠庞大的全球社区、企业支持和发行版生态,不断扩大使用范围。

BSD 的路线则更像:

保持系统整体性,在自己擅长的领域持续打磨。

Linux 像一个繁华的大城市。

道路复杂。

人口众多。

商业发达。

每天都有新的建筑出现。

BSD 更像几座规模不大、规划严谨的大学城。

人没有那么多。

但里面住着一群对技术细节非常认真的工程师。

你很难说哪一个绝对更好。

只能说:

它们选择了不同的生活方式。


写在最后:没有成为主流,不等于没有改变世界

回头看 BSD 的历史,会发现它有一点悲情色彩。

它出身名门。

技术领先。

参与推动了 TCP/IP 和互联网的发展。

拥有成熟的 Unix 血统。

却在最关键的时间遇到法律纠纷。

等它重新回到赛道时,Linux 已经凭借互联网社区、GNU 工具链和 GPL 生态迅速成长。

后来:

Linux 成为了服务器、云计算和开源世界的主角。

BSD 则留在了相对小众的位置。

但是:

技术世界里的成功,并不只有一种形式。

有的项目靠用户数量取得成功。

有的项目靠商业收入取得成功。

还有一些项目:

自己没有站在聚光灯下,却成为了无数其他系统的地基。

BSD 就属于最后一种。

它没有统治桌面。

没有成为云计算时代最常见的操作系统。

也没有像 Linux 那样拥有成千上万种发行版。

但是:

互联网使用了它推动发展的网络技术。

程序员使用着 BSD Sockets。

服务器管理员使用着 OpenSSH。

Apple 的操作系统继承了它的大量基因。

许多网络设备、存储系统和商业产品,也在使用它的代码。

所以,BSD 的故事并不是:

一个优秀系统如何失败。

而更像是:

一个优秀系统如何放弃成为明星,却悄悄进入了整个技术世界。

如果把现代操作系统的发展史比作一场群雄逐鹿。

Linux 最终成为了声势浩大的诸侯。

Windows 建立了庞大的商业帝国。

Apple 修建了一座精致而封闭的城池。

而 BSD:

没有最多的军队。

没有最大的领土。

甚至很少有人注意到它的旗帜。

但各方势力修建城墙、道路和通信系统时,却都曾从它那里借走过图纸。

它没有成为时代的主角。

但这个时代,到处都有它留下的痕迹。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐