操作系统那些事儿⑤:BSD——技术很牛,却一直没成为主流
如果把操作系统的发展史比作《三国演义》,那么本文更像《三国演义》,而不是《三国志》。
本系列尝试用故事化的方式,讲述 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:
没有最多的军队。
没有最大的领土。
甚至很少有人注意到它的旗帜。
但各方势力修建城墙、道路和通信系统时,却都曾从它那里借走过图纸。
它没有成为时代的主角。
但这个时代,到处都有它留下的痕迹。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)