BSD与Linux的那些事
2009-10-30 22:11:33 阿炯

Linux是出现约在BSD官司缠身、以及Internet开始风行之际,Linux的开发者及爱好者正好能透过Internet实时得发布新闻、发表新点子、提问讨论、递送程序代码及进行错误回报,这种藉由Internet的分布式合作方式带给Linux惊人的活力和无限的生命力,而经由Internet所带来的这种活力和生命力正是Linux长久以来能和BSD分庭抗礼的主要原因之一。

Linus Torvalds的管理哲学:也许Linus并不是像BillJoy(BSD的开创者)那样是个天纵英才的程序设计师,但他无疑的是超一流的领导者。要知道,能参与 Linux Kernel 开发的往往都不是什么泛泛之辈,Linus如何在这些天资聪颖的计算机怪才之间折冲樽俎是非常耐人寻味的。

硬件支持:在Linux现身之时,刚好是人们开始买得起个人计算机时。但糟糕的是,当时的BSD对于当时的个人计算机所使用的80386硬件的支持度并不好,而一般人应该不太会为了玩BSD而特地购买高价的服务器设备,因此人们,尤其是穷苦的大学生,若要玩Unix时只有Linux可供选择,相对来说BSD的吸引力当然就大不如Linux了。不过说起硬件支持,其实Linux和BSD也只是难兄难弟,Linux是较佳,但有些太新太特殊及特定制造商的硬件 Linux还是无法支持!

GNU的大力支援:
GNU提供了一个操作系统所需的各式各样必要组件,但最重要的组件-Kernel却迟迟没有着落。原本计划好要成为GNU官方Kernel的HURD的发展一直很不顺利,而Linux的出现就刚好出现填补了GNU这个拼图上最重要的一个大洞。另外,虽然GNU的软件质量是毋庸置疑,但BSD却希望他们的开发团队所维护的核心工具都能以BSDL发行,所以因为授权兼容性的关系,很多GNU软件就被BSD的人们摒除在外了。因此喜爱GNU软件的人们除了 Linux之外就似乎别无选择了。Linux和GNU是分不开的:没有GNU,那么没有任何工具程序的Linux根本无用武之地;而没了Linux,GNU软件就少了一个可以尽情发挥的舞台了。因此个人可以接受人们说Linux的全名应该是GNU/Linux。若我们仔细想想Linux的发展成长过程,个人认为如此称呼并不为过。

而Linus也说过其实他并不是很反对GNU/Linux这个名字,饮水思源,毕竟Linux的确是藉助了GNU太多的核心工具才有今天的成就。若当时没有GNU计划,那么Linux根本不会出现在这个世界上:当初Linux0.0.1发表时,Linus就只完成了以下功能:可用GCC编译,然后它能做的也只有执行BASH这个Shell而已,而这2个工具恰巧都是GNU的作品。我们可以看到,Linux刚开始就和GNU结下不解之缘了。

教堂与市集:BSD走的是教堂式的学院派路线,而Linux则是代表了市集式的骇客精神。

多样的版本:Linux的松散结构也反应在Linux的发行版上。因为Linux并没有什么官方发行版,所以任何人只要有兴趣有能力,都可以自行发行Linux,这使得我们能轻易得在Internet上找到超过200种以上的Linux发行版,而实际数字恐怕远不止如此。

Linux与BSD 的不同之处在哪里:

1、许可证
正如我们所知道的,Linux 操作系统是基于 GPL 许可证授权下的,该许可证可防止开源软件被转换为封闭源代码软件及确保源代码的可用性,GPL 许可证的目的就是防止二进制包成为唯一的软件发行源。而 BSD 许可证的限制则要少得多,它甚至允许二进制包成为唯一的发行源。这就是核心差异,可以这样理解:GPL 许可证让您有权拥有任何你想要使用该软件的方法,但你必须确保提供源代码给下一个使用它的人(包括你对它的改变部分)。而 BSD 许可证并不是要求你必须那么做( 译者注:这里分别维基百科上对 BSD 及 GPL 许可证的解释)。

2、代码控制
BSD 的代码不是被控制在任何一个人手里,而 Linux 的内核基本上被 Linus Torvalds (Linux 创始人) 所控制,BSD 并没有单一的人来说什么可以或什么不可以进入代码。相反,BSD 通过一个核心小组 "Core Team" 来管理该项目,这个核心小组比非核心小组有更多的发言权来指导 BSD 社区的发展方向(译者注:而据我所知,FreeBSDD 核心小组的成员会每两年选举一次。)

3、内核 vs 操作系统
BSD 项目维护的是整个操作系统,而 Linux 则只是主要集中在单一的内核上面。这点确实是需要注意的,虽然这两个系统上都运行着许多相同的软件。

4、UNIX-Like
这里有一个关于 BSD vs Linux 的古老说法:"BSD is what you get when a bunch of UNIX hackers sit down to try to port a UNIX system to the PC. Linux is what you get when a bunch of PC hackers sit down and try to write a UNIX system for the PC.",这里表达了很多。你会发现 BSD 系统更为类似于 UNIX ,而事实上它就是传统UNIX的直接衍生品,而Linux则是一个松散的基于 UNIX 衍生品 (Minix) 而新创建的一个 OS 。

5、基本系统
这是一个关于 BSD 与 Linux 之间差异的至关重要的理念。 Linux 的 "基本系统" 是并不真正存在的,许多人会说,Linux 的基本系统就是内核,但问题是如果没有任何可用的应用程序的话,那么这个内核是完全没有价值的。而另一方面,BSD 则有一个包括众多工具的基本系统,甚至 libc 也是基本系统的一部分。因为这些组件都被作为一个基本系统,所以它们都是被一起开发和打包的,许多事实表明这样更能创建出一个更具凝聚力的整体。

6、源代码
由于 BSD 的开发方式(使用 Ports 系统 ) 的关系,所以用户们更多的是从源代码来安装程序,而不是预先编译好的二进制包。这是一个优势还是劣势?这取决于不同的用户。如果你更多的想从友好或易用性方面考虑的话,看到这一点后你也许会有放弃的念头,对于新用户更是如此。但一些新的用户也有想要从源代码编译安装,这可能比较累人。但是,从源码安装也有一定的优势,比如(库版本控制,通过特殊的包来构建系统等等)。

7、升级
由于 BSD 的开发方式的原因,你可以利用一条指令就可以升级你的基本系统到最新版本(Freebsd 下是用 freebsd-update fetch update 命令)。或者你也可以下载整个源代码树,然后通过编译来升级。而在 Linux 中,你也可以通过内置的包管理系统来升级系统。前者 (BSD) 仅更新基本系统,而后者 (Linux) 则会升级整个系统。不过请记住,BSD 中升级到最新的基本系统并不意味着所有的附加软件包也将会被更新,而 Linux 升级的时候,所有的软件包都会被升级。这是否意味着 Linux 处理得更好吗?在我看未必。我经常会看到 Linux 在升级时出现严重错误,从而需要重新安装整个系统,但这个现象基本不太可能发生在 BSD 的升级过程中。

8、前沿技术
基本上不太可能会看到 BSD 系统运行着任何非常前沿版本的软件。而在 Linux 这一方面,大量的发行版会分发前沿版本的软件包。如果你是一个 "If it isn't broken, don't fix it." 这样观点的持有者的话,你将会是 BSD 的超级粉丝。但如果你很新潮,想要体验一切最新的东西,那么你最好尽快迁移到 Linux 。

9、硬件支持
你会发现,通常情况下 Linux 的硬件支持要比 BSD 更早一些。但这并不是说 BSD 没有像 Linux 那样支持足够多的硬件,它只是意味着在某些情况下 Linux 会在 BSD 之前先支持某些硬件。因此如果你想要最新的、最好的显卡的话,基本上不用考虑 BSD 了。如果你有一个包含了最新无线芯片的新型笔记本的话,建议你选择 Linux,运气好的话也许它会支持。


2022年2月消息,二十多年前,Linux 之父 Linus Torvalds 说:“如果在我创造 Linux 之前 386BSD 已经可用,那么 Linux 可能不会出生”。后来当人们回想反思时,也不乏有人认为:“如果 Linux 未能蓬勃发展,FreeBSD 将填补今天的空白”。

BSD(Berkeley Software Distribution,也称 Berkeley Unix),作为 Unix 最绕不开的一族分支,它的摇篮是当时美国最为激进的左派大本营 —— 加州大学伯克利分校。在这个以自由著称的学校,老学长 Ken Thompson 创造并带回了 Unix,小学弟 Bill Joy 接力发展了 BSD,经过更多校内校外参与者的一起努力,才从一场浩劫中保下了这一不同于 GNU/Linux 一派的“开源火种”。

或许是学院派作风在作祟,又或许是 BSD 的创造者都是天才式人物,BSD 整体上都呈现出一种“精英主义”的气质,以公共利益和远大理想为己任,严于律己,且天生傲慢。BSD 由小群体精英把持,在努力保持自身与 Linux 之间的距离的同时,坚持着精英式的产品理念。正如 OpenBSD 创始人 Theo de Raadt 所言:“我们更多的时间是花在让东西更好,而不是让它符合大众的口味。”


01、被一笔带过的开源前史

当我们谈及开源起源和历史,第一个想到的是什么?

更多充斥我们脑中的是:自由软件运动、GNU、Linux、copyleft、OSI 等等关键词。开源的历史线更多是被划分在了 1983 年 GNU 计划诞生的那一刻,而 BSD 所代表的那部分“开源前史”常常会被一笔带过。也可从此文件《C语言之父和Linux之父谁更伟大》得到一些背景信息。


但实际上,开放源代码的传统、软件开源的自由精神、与专有垄断之间的战争等等在这之前早就已经扎根而下,并且在 BSD 身上集中体现了出来。

故事从 1970 年开始。当时贝尔实验室还归属于如日中天的 AT&T,研究员 Ken Thompson 参与了几年的 Multics(一个分时操作系统)计划,无所事事的时候在这个系统上写了一个叫做太空大战(Space Travel)的打飞机游戏,结果那一年贝尔实验室退出了 Multics 计划,Thompson 的游戏也就没法运行了。

为了继续玩游戏,Ken Thompson 花了一个月的时间写了一个小型的操作系统,这就是 Unix 的雏形。所以,1970 年也被称为 Unix 元年。

随后,和 Dennis Ritchie 一起, Ken Thompson 用 C 语言重写了 Unix 操作系统。幸运的是,当时 AT&T 受到了美国《谢尔曼反托拉斯法》的限制,不能销售电话机电报机之外的商品,这为 Unix 流向学术机构打开了窗口。

因为上述原因,当时很多大学和研究机构能够相当容易地得到 Unix 的源代码和二进制代码,这样他们就可以自由地对其进行分析和改进,相互交流意见和成果,由此促进了 Unix 的迅速发展。其中,伯克利的作用不可忽视。

1975 年,伯克利购买了 DEC 公司最新的计算机 PDP-11/70 。恰逢 Ken Thompson 休假一年,回母校担任客座教授。就在这台计算机上,他安装了最新版本的 Unix(V6 版本)。在 Ken Thompson 的引导下,当时还是研究生的 Bill Joy 在 1977 年 开始编译第一个 BSD。在 AT&T 的放养状态下,Unix 得到了长足发展。

好景不长。1977 年开始,AT&T 分解后终于摆脱反垄断的掣肘,立马将 Unix 进行商业化。从 1979 年 UNIX 的 V7 版本开始,Unix 的许可证开始禁止大学使用 Unix 源码,包括在授课中学习。如果想要继续使用,就要支付价格不菲的费用得到授权。

而且,BSD 系统发行版包含每个部分的完整源代码,而不是以纯二进制格式发布。因此,BSD 每一次对外分发,都要在 AT&T 的许可之下。到了 80 年代后期,Unix 日益流行 ,AT&T 将许可费从最初的 99 美元稳步提高到 250,000 美元。

“我们编写了这段代码,他们(AT&T)却声称它是他们的。这让我们很生气,因为他们拿走了我们的工作,没有支付一分钱,还通过出售该死的许可证赚钱。”

—— Marshall Kirk McKusick (他亲身参与了 4.3BSD 和 4.4BSD 的开发和发行)

至此,UNIX 开始分为两大流派: AT&T 一路的商业化版本 Unix 和 BSD 系列(其中前者是闭源的,而 BSD 是开放源代码的)。这种格局在 1990 年代初期达到极盛,各路 Unix 版本达到了 100 多种,其中包括 SUNOS、IBM AIX、HP-UX、DEC Ultrix 与 SCO Xenix、Sun Solaris 等。这些 Unix 变种均基于 Unix 开源版本派生而来,且多为闭源的商业版。

90 年代初期,BSDi(伯克利计算机研究小组 CSRG 成立的公司)开始销售其自己的 Berkeley Unix 版本,而加州大学多年来一直在销售其版本。1992 年,AT&T 起诉加州大学和 BSDi,声称 BSD Unix 包含专有的 AT&T 代码。但实际上,AT&T 当时推出的 Unix 版本 System 5 也包含了最初由 BSD 黑客编写的大量代码 —— 包括 TCP/IP 堆栈。

于是,像 McKusick 这样的黑客被激怒了。加州大学的律师抓住了这一机会,以侵犯版权为由向 AT&T 提出反诉。一场浩浩荡荡、留名史册的版权战争就此拉开序幕。

从 70 年代 Ken Thompson 种下 Unix,再到 90 年代这场轰轰烈烈的诉讼纷争,我们能从 BSD 身上找到很明显的 FOSS(Free and Open Source Software)主要特征:

首先,BSD 的发展模式就是典型的开放模式。

在 IT 产业刚创立之时,根本没有什么开源闭源一说,软件依附于硬件的绑定附送,以源代码的形式提供的,而非现在的执行码。商业化之前的 Unix 源代码几乎是向公众开放的,随着 BSD 传播到越来越多的机构,用户开始添加额外的功能和程序,并将它们发送回伯克利的团队,以包含在下一个 BSD 版本中。

黑客返回修改版 —— 这种开放模式在开源运动还没有名字之前,就已经存在了。

其次,BSD 就是典型的自由软件。

1989 年 6 月,在 BSD 许可证下,伯克利发布了第一个可自由再分发的版本 —— Network Release 1(Net/1),它包含了实现 OSI 网络协议栈和全新 TCP/IP 算法方面的代码。

BSD 许可证是宽松的许可证。被许可人可以以源代码或二进制形式发布代码,而无需向伯克利支付任何费用或版税。尽管伯克利的一盘磁带要收取 1000 美元的费用,但任何人都可以从他人那里免费获得一份副本。事实上,在它发布后不久,几个大型网站就将其用于匿名 FTP。

最后,BSD 的精神内核就是自由,BSDer 不畏强权。

在这一时期,众多支持开源的工程师们把自己形象的比喻为《星球大战》中的自由反抗军联盟,对抗邪恶的垄断帝国。在后来,不少历史学者都将伯克利黑客描述为“自由斗士”。就像后人的评判那样:他们中没有一个人将自己视为十字军,但时不时会渗出一丝理想主义。

“我们当中很多人的目标是:生产我们心中理想的系统,为自己所用。这也是 Ken Thompson 和 Dennis Ritchie 创立 Unix 的初衷。”在后来的采访中,成立伯克利计算机研究小组 CSRG 的 Bob Fabry 教授这样表示。

就当 BSD 深陷泥淖之中时,开源世界众所周知的另一个故事也正在发生:1984 年,RMS 打出“GNU's not Unix” 的标语,发起自由软件(Free Software)运动;1991年,Linux 诞生,开源世界里的最大宇宙 —— GNU/Linux 话语体系就此形成。接下来,Linux 发展,而 BSD 让出了 C 位。

更多FreeBSD的发展历史请点击这里

 
02、失去两年后,物是人非

“AT&T 与 BSD 之间的诉讼,是当代版权制度最恶劣的应用之一。”阮一峰认为这场诉讼的本质是:一家利益至上的公司,以微不足道的理由,为了一个自己根本不在乎的产品,悍然发动一场损人不利己的战争。

之所以如此评价,是因为这场战争给 BSD 带来了毁灭性的打击 —— 所有的开发活动都被迫停止,用户人心惶惶,担心自己也遭到 AT&T 的追究,因此 BSD 的使用急剧减少。最后在 1994 年,双方达到和解,BSD 才恢复开发。

This is simply a shame, actually intends to BSDi enter and stupid legal disputes AT&T's when, in the occurrence leadership vacuum, BSD community full of fear, uncertainty and doubt in the critical moment, it led to a massive loss of territory to Linux outcome.

这简直是​​一种耻辱,把 BSDi 卷入和 AT&T 的愚蠢的法律纠纷,这就出现了领导真空的情况,整个 BSD 社区都充满了恐惧、不确定性和怀疑,导致了我们失去了巨大领土给 Linux。

—— FreeBSD 创始人之一 Jordan Hubbard

1992~1994,BSD 失去了两年。这两年后来被证明是至关重要的两年:90 年代初恰好是计算机工业决定性的年代。硬件迅速发展、Intel 的 80x86 芯片横空出世、个人电脑时代来临,IT 技术的商业模式也迎来变革......被官司拖住的 BSD 没法去做移植操作系统这件事。许多本应为 BSD 做出贡献的人转而为 Linux 贡献了代码和错误修复。

We have a considerable technical background and good mind, but the lack of adequate legal safety awareness and effective leadership can unite the different tribes in BSD as a difficult moment, to lead us out to bring significant harm to the BSD community storm. We lose a very important strategic two years.

我们有相当的技术背景和良好的头脑,但是缺乏足够的法律安全意识和有效的领导可以将 BSD 的不同部落团结起来,去带领我们走出去艰难时刻。这场重大的风暴中,我们失去了非常重要的两年战略。

—— FreeBSD 创始人之一 Jordan Hubbard

其实在本篇开头,那个被 Linus 提及的 386BSD 是最有希望重整旗鼓的 BSD 后代。

Linus 起初还是个芬兰大学生,因为买不起工作站,只好自己写了一个能在 386 上运行的操作系统。而如果他要是早知道 BSD 没有法律问题,并且可以被移植到 386,他就会加入 BSD 的开发,而不是自己写一个(真有意思,这场官司还改变了 Linus 的命运。)

什么是 386BSD?386BSD 和 Linux 的开发几乎是同时起步的。

其实,在 Net/1(1989 年)之后,伯克利计算机研究小组 CSRG 成员 Keith Bostic 就开源领导了一个项目——抛弃 AT&T 代码,重新实现大多数 Unix 实用程序。18 个月以后,所有源自 AT&T 的实用程序都被替换,除了六个内核文件,因为它们无法轻易重写。

稳妥起见,1991 年,伯克利计算机研究小组 CSRG 发布了没有包含这六个文件的版本——Network Release 2(Net/2)。仅六个月内,Willian Jolitz 和 Lynne Jolitz (没错,夫妻档)编写了六个替代文件,并将 BSD 移植到基于 Intel 80386 的微处理器中,这个新的操作系统就被称为 386BSD。


386BSD 的初始版本可以工作,但几乎没有功能。因此,Jolitz 夫妇开始致力于创建完整版本,并在一段时间内得到了广泛关注,可惜却遭到了分裂。

当时,386BSD 的开发速度很缓慢,开发者对 386BSD 合并新补丁的速度感到不满。由于 Jolitz 夫妇和 patchkit 维护者对 386BSD 的未来方向和发布时间表存在分歧,patchkit 的维护者于 1993 年创立了 FreeBSD 项目以继续他们的工作。而大约在同一时间,NetBSD 项目是由一组不同的 386BSD 用户创建的,目的是将 386BSD 与其他 BSD 开发分支统一为一个多平台系统。不久之后,NetBSD 内核一场内部纠纷导致了 OpenBSD 的诞生。至此,开源的 BSD一脉就主要由 FreeBSD、 NetBSD、OpenBSD 所构成。

不少人都认为,这场分裂直接导致了 BSD 在今天的操作系统的竞争中处在落后地位。
 
03、傲气仍在,气数渐弱

关于 BSD 和 Linux 有一个很经典的说法:BSD is what you get when a bunch of UNIX hackers sit down to try to port a UNIX system to the PC. Linux is what you get when a bunch of PC hackers sit down and try to write a UNIX system for the PC.

BSD 的黑客们试图将 Unix 移植到电脑上,而 Linux 则是黑客们尝试在电脑上写一个 Unix。

事实上,BSD 就是传统 Unix 的直接衍生品。而 Linux 则是一个松散的基于 Unix 衍生品 (Minix) 而新创建的一个 OS 。

而在 BSD 的血液里,傲慢几乎是与生俱来的。

BSD 的第一版撰写者 Bill Joy 是个神童,Salon 的一篇报道中不掩赞许之情:如果有人有权傲慢,那就是Bill Joy。

Bill Joy 写出了 vi 这个让无数程序员爱不释手编辑器,被称为“编辑器之神”;与 GNU 发起人 RMS 所写的 “神的编辑器”Emacs 一起比较,拉开了程序员之间有关编辑器的“甜咸之战”。

Frankly, none of us really understand Bill and his curious mindset. Bill is definitely a smart guy, very difficult to complete a lot of code but he is such a person, if they are for you. the company's work, then, will own and a workstation locked in a room, eating such food pizza, do not open the door and put everything stuffed under the door.

坦白说,没人能懂 Bill 和他奇怪的思维。他很聪明,能完成非常复杂的编码。但他是这样的人:在公司他会将自己锁在工作室里,从不开门,吃着类似披萨一样的东西,把东西从门缝里推出来。

— FreeBSD 创始人之一 Jordan Hubbard

不仅是 Bill Joy,整个 BSD 的傲气都十分外漏。 Marshall Kirk McKusick 后来深度参与了 FreeBSD,他就曾表示,90% 的 committers 所贡献的代码都不能用,还剩下的一小部分则需要“were peed upon to make them smell like Berkeley”(不翻译了,大家自行体会。)而这也是 FreeBSD 保存有整个等级制度的原因。

这种傲慢还体现在了他们看待开源协作 和 GNU/Linux 的方式上。

从 Bill Joy 开始,他就不认同 Linux 的基本信条 —— 去相信庞大的志愿程序员群体。他不相信拥有更多的程序员就等于更好的代码:

大多数人都是糟糕的程序员,让很多人盯着代码不会真正发现错误。真正的错误是由几个非常聪明的人发现的。大多数人看代码不会看到任何东西......不能期望成千上万的人做出贡献并都达到高标准。

当然,后来的事实证明这种看法是错误的。而 BSD 与 GNU/Linux 的分歧远不止这些,他们对自由的理念也南辕北辙。

We never considered GPL license like BSD, like it's short and flexible like him popular for engineers and lawyers to read, which achieved our aim, although it limits our responsibility (liability), but! At the same time as the code uses as many people. GPL is not what we think of identity license, but a political declaration.

我们从来没有考虑过 GPL。BSD 虽然限制了我们的责任,但它短小灵活,很受工程师和律师的欢迎,这达到了我们的目的。然而,同样是为了代码得到尽可能多的人的使用,GPL 并不符合我们的身份认定, 是一种政治宣言。

—— FreeBSD 创始人之一 Jordan Hubbard

Linux 他们做的事是因为他们讨厌微软,我们所做的事情是因为我们热爱 Unix。

—— OpenBSD 创始人 Theo de Raadt

I do not mind whether the user back to their feedback to modify the code, and if this happens, is the icing on the cake (an added bonus), but I What do not tend to do to make it happen, such as a gun to force it to the other side into submission (enforce at the point of a gun).

我不在乎用户是否会返回修改后的代码,如果有当然是锦上添花,但我并不有意去这样要求,这就像拿着枪去强迫别人屈从一般。

—— FreeBSD 创始人之一 Jordan Hubbard

因此,在 FreeBSD 的官网介绍上,其以“Liberal ”自称,而特意与“Free”区别开来。


分裂之后,FreeBSD、NetBSD 和 OpenBSD 的发展都不太尽如人意。

以最高调的 OpenBSD 为例,在 2014 年的时候,OpenBSD 一度因为资金问题陷入困境。此外,其创始人 Theo de Raadt 还非常直言不讳,有次因为谴责美国对伊拉克的战争,导致美国国防部先进研究计划总署(DARPA)中止其对 OpenBSD 二百三十万美元的资助。此后,OpenBSD 年初“喊穷”的新闻成为了好长一段时间的固定节目(罗永浩的锤子科技还多次成为其白衣骑士)。

三者之中,混得最好、市场份额最大的莫过于 FreeBSD。当 NetBSD 和 OpenBSD 出现问题时,不少 BSD 的开发者都在向 FreeBSD 靠拢。如今它已在全球数百万台服务器中使用,被 Netflix 、苹果(苹果OS 与 FreeBSD 渊源颇深)、WhatApp、IBM、诺基亚等公司广泛使用,它几乎渗透进了现在 IT 产业的半壁江山,却从不显山露水,被称为“操作系统的无名英雄”。在 2020 年的一场采访中,FreeBSD 基金会的执行主管 Deb Goodkin 这样呼吁:We need more PR for FreeBSD and get more tech journalists like yourself to write about FreeBSD. We also need more trainings and classes that include FreeBSD in universities, trainings/workshops at technical conferences, more FreeBSD contributors giving talks at those conferences, more technical journalists, as well as, users writing about FreeBSD, and finally we need case studies from companies and organizations successfully using FreeBSD.

FreeBSD 需要更多的 PR 与曝光,欢迎更多的媒体来报道 FreeBSD。同时还需要开设更多 FreeBSD 相关的大学课程和培训、在研讨会上组织工作坊、更多 FreeBSD 的贡献者可以在论坛上畅所欲言,更多科技记者和写手的关注 FreeBSD。最后希望能看到更多企业和组织成功地使用 FreeBSD。

其实,BSD 同样也需要更大范围的认可,希望能够站在聚光灯下,让大家都能看到。McKusick 有句话说得很对:BSD 和 Linux 阵营在组织战略上的分歧是微不足道的。重要的是开源,而不是 Linux 或 BSD 胜出。

这种必然会引起大的争论,比如在这里:
Linux 败局已定:驳 FreeBSD 大败局


FreeBSD:与 Linux 不同的 UNIX


FreeBSD 是一款自由且开源的操作系统,是传统 UNIX 平台极为优秀的替代品和接棒者,它拥有悠久历史与诸多衍生版本,其饱经考验,是最广泛应用的开源 BSD 系操作系统。第一个版本发布于1993年,它的第一张CD-ROM是FreeBSD1.0,发行于1993年12月;获得了所有用户的青睐,许多IT公司都使用FreeBSD并且很满意。支持ARM、PowerPC、MIPS、x86、x86-64架构。

FreeBSD 的主要关注点是稳定性,它虽然与 Linux 类似,但它并不是 Linux,它们的理念和方法差异还挺大的 (不过提供了二进制兼容层能运行 Linux 应用)。它提供了一个完整的操作系统(包含内核、驱动、用户空间工具及各种文档)而非仅仅是内核,且 FreeBSD 的授权许可较于 Linux 更为宽松,可用于商业闭源。尽管其在普通公众面前的曝光率并不高,但其实遍及全世界的公司、互联网服务提供商、研究人员,计算机专业人员、学生和家庭用户都有在使用 FreeBSD 进行工作、教育和娱乐活动。其配备了超过 20,000 个软件包,覆盖范围广泛:从服务器软件、数据库和网络服务器到桌面软件、游戏、网页浏览器和商业软件。有很多基于 FreeBSD 的操作系统,比如熟悉的苹果 macOS/iOS (Darwin),索尼 PlayStation 3/4/5、任天堂 Switch、TrueNAS,Netflix 和 WhatsApp 的 Web 服务器等等。

与 Linux 不同的 UNIX 哲学

FreeBSD特点是非常 UNIX、非常 Free、非常 BSD,可以说是 UNIX 的理想归宿!而且其 ZFS 和 jail 也算是杀手级的应用了;Linux 为了应对,分别出了 btrfs 和 lxc,但相比都还不够成熟。

FreeBSD 的基础软件包仓库及 Ports 软件包集合包含了大量服务器相关的软件,可用作邮件服务器、Web 服务器、防火墙、FTP 服务器、DNS 服务器和路由器等,因此应用场景也非常丰富。加上 FreeBSD 开箱就带编译器调试器,企业级的文件系统、虚拟化平台,以及能全套能自己构建一个完整镜像的源码,可以基于它轻松进行各种二次开发与魔改,因此也基于 FreeBSD 衍生出了任天堂 Switch、索尼 PS5 等游戏机系统。硬件支持方面上Linux比FreeBSD做的更好,但这不意味着FreeBSD没有像Linux那样支持硬件的能力。它们只是在管理的方式不同,这通常还依赖于您的需求。如果在寻找最新的解决方案,FreeBSD更适应;但如果在寻找更多的普适性,那最好使用Linux。

FreeBSD 与 Linux 发行版的比较

FreeBSD和Linux都是类Unix系统,它们的内核、内部组件、库程序都使用从历史上的AT&T Unix继承来的算法。FreeBSD从根基上更像Unix系统,而Linux是作为自由的类Unix系统发布的。许多工具应用都可以在FreeBSD和Linux中找到,实际上它们几乎有同样的功能。此外,FreeBSD能够运行大量的Linux应用,通过安装一个Linux的兼容层,这个兼容层可以在编译FreeBSD时加入AAC Compact Linux得到,或通过下载已编译了Linux兼容层的FreeBSD系统,其中会包括兼容程序:aac_linux.ko。不同于FreeBSD的是,Linux无法运行FreeBSD的软件。


Linux 发行版(distribution)本质上是一个组装品。发行版的制作者将 Linux 内核与其他开源软件整合起来,例如 GRUB、GNU C Library、Bash、Coreutils、net-tools2等,再加上自己的包管理系统,最后分发给了普通用户。Linux有一个现代系统所需要的全部功能,诸如虚拟内存、共享库、动态加载、优秀的内存管理等。

FreeBSD 是一套完整的操作系统,其团队不但开发自家的内核,还开发 libc、POSIX shell、大部分系统命令、文档手册等。所有这些都在一棵源码树下,有一套完整的构建脚本(Makefile),高级用户可以通过 svn 和 make 命令更新操作系统或者自制安装镜像。

Linux主要指内核系统,这与FreeBSD不同,后者的整个系统都被维护着,其内核与周边软件、文档由一组团队作为一个整体进行维护。而Linux在管理系统方面有一些困难,由于不同的组件由不同的源维护,Linux开发者需要将其汇集起来,才能达到同样的功能。FreeBSD和Linux都给了用户大量的可选软件和发行版,但他们管理的方式并不同。FreeBSD是统一的管理方式,而Linux需要被分别维护(发行版本)。

大多数开发者认为,比起 FreeBSD,Linux 太混乱了。对于同一个任务有无数种实现方案,并且不同的用户对应该如何选择方案有不同(且强烈)的意见。Linux 社区是一个快节奏的社区,经常经历变化。因此很多用户更喜欢 FreeBSD 社区的一致性和条理性。


架构支持

如果比较硬件与架构支持度的话,Linux 绝对是占优势的。Linux 可以在许多不同的平台上运行,但是 FreeBSD 不行。如果很在乎兼容性和跨平台性,请选择 Linux。但这也是一把双刃剑,为了能在大量不同的平台上运行,Linux 必须牺牲一部分性能以换取兼容性。而另一方面,FreeBSD 无需牺牲性能,因为它只需要在有限数量的平台上运行即可。

由于 Linux 是一个主流的系统,而 FreeBSD 不是,所以设备制造商更倾向于制造兼容 Linux 的软硬件。举个例子,如果你需要经常更新显卡驱动,Linux 会比 FreeBSD 更快获取相关更新支持。FreeBSD 对硬件支持的短板大多集中在外设和显卡这种桌面级应用方面。但 FreeBSD 的目标场景是服务器应用,所以这并没有多大影响。

文件系统

Linux 和 FreeBSD 都采用了非常高效的文件系统。FreeBSD 默认使用 ZFS,这绝对是长期存储数据的最佳文件系统之一。它内置了一个磁盘卷管理器,因此允许用户在同一个存储池上创建多个文件系统。因此在发生物理故障、操作失误或者数据损坏的情况下,仍能保证数据一定的可靠性。ext4 是大多数 Linux 发行版的默认文件系统。它不如 ZFS 那么灵活,但相当可靠。

许可证

关于它们的许可证,FreeBSD以多种开源许可证进行发布,它的名为Kernel的最新代码以两句版BSD许可证进行了发布,给予使用和重新发布FreeBSD的绝对自由。其它的代码则以三句版或四句版BSD许可证进行发布,有些是以GPL和CDDL的许可证发布的。Linux以GPL许可证发行,它为用户提供阅读、发行和修改源代码的自由,GPL许可证帮助用户避免仅仅发行二进制。而FreeBSD以BSD许可证发布,BSD许可证比GPL更宽容,因为其衍生著作不需要仍以该许可证发布。这意味着任何用户能够使用、发布、修改代码,并且不需要维持之前的许可证。

BSD 许可证与 GPL 许可证相比,相当简短,最初只有四句规则;1999年应 RMS 请求,删除了第三句,新的许可证称作“新 BSD”或三句版BSD;原来的 BSD 许可证称作“旧 BSD”、“修订的 BSD”或四句版BSD;也有一种删除了第三、第四两句的版本,称之为两句版 BSD,等价于 MIT 许可证。

由于FreeBSD和Linux是以不同的许可证发布的,Linus Torvalds控制着Linux的内核,而FreeBSD却与Linux不同,它并未被控制。个人更倾向于使用FreeBSD而不是Linux,这是因为FreeBSD才是绝对的自由软件,不存在控制者。

软件

都可以通过源代码构建以及预编译的两种方式,可以使用两种安装方式管理系统。有大量的常用工具在FreeBSD上可用,并且有趣的是他们由FreeBSD的团队所拥有。相反的,Linux工具来自GNU,这就是为什么在使用中有一些限制。这也是 Linux 正式的名称被称作“GNU/Linux”的原因,因为本质上 Linux 其实只是指内核。FreeBSD采用的BSD许可证非常有益且有用,GNU套件只想做到最小的向后兼容。在Linux下,/bin,/sbin,/usr/bin或者/usr/sbin都是存放可执行文件的目录。FreeBSD不同,它有一些附加的对其进行组织的规范,基础操作系统被放在/usr/local/bin或者/usr/local/sbin目录下。这种方法可以帮助管理和区分基础操作系统和可选组件。

在 FreeBSD 上安装软件包很简单,其 Ports 项目包含了将近 40000 个软件源,用户或管理员可以方便快捷地安装它们。每个软件源都有针对用户实际系统的相关补丁,以确保软件能在特定平台上正常运行。而不同 Linux 发行版的包管理工具就参差不齐了,有些非常棒,有些就很一般。以下是一些做得比较好的包管理工具:
DPKG - Debian
RPM - Red Hat
Pacman Package Manager
Pkgsrc
Portage

FreeBSD 核心团队有 9 名成员,并在世界范围内有大约 500 名代码贡献者,这个团队负责调试、开发并优化主线代码仓库。大多数贡献者都是不求回报的志愿者,核心团队成员由所有活跃的贡献者每两年一次投票选出。而 Linux 内核由 Linus Torvals 先生管理维护,他也是 Linux 的缔造者。Linus 先生对 Linux 的新功能拥有最终决定权。

安全

FreeBSD 比 Linux 略微更安全一点。FreeBSD 项目的核心支柱之一就是安全性,并且预先安装了顶级的安全功能,所以在这一点上,毫无疑问它更有优势。但这也并不意味着 Linux 不安全。Linux 是高度可配置的,因此可以实现你想要的任何安全特性。但是从操作系统整体角度来看,FreeBSD 的安全性更高。


其他区别如下:
FreeBSD root 用户的 shell 是 tcsh ,普通用户的 shell 是 sh。最好别改 root 用户的 shell。
FreeBSD 的关机命令是 shutdown -p now。
FreeBSD 的 make/grep/sed/awk 与 GNU 那套不同。
FreeBSD 有个叫 ee 的文本编辑器,风格与 nano 类似。
FreeBSD 管理系统用户与组的命令是 pw。
FreeBSD 使用 gpart 命令管理分区。
FreeBSD 原生的防火墙是 ipfw。
FreeBSD 原生的文件系统只有两种: UFS、ZFS。
FreeBSD 有自己的引导方式,不一定要用 GRUB。
FreeBSD 不是 Unix®,然而历史告诉我们 FreeBSD 就是 Unix。

开发者需要注意的:
不要在脚本中写 #!/bin/bash,要写 #!/usr/bin/env bash。perl、python 等同理。
FreeBSD 第三方库默认安装路径是 /usr/local/。
FreeBSD 没有 epoll,但是有 kqueue。
FreeBSD 没有 inotify,若要移植 Linux 相关代码可安装 libinotify。
FreeBSD 没有 sha256sum 命令,但是有 sha256。md5 等类似。
FreeBSD 特有的 jot 命令能够生成数列,某些场景下可以与 xargs 搭配使用。
FreeBSD 的音频系统是 OSS,API 比 ALSA 简单好用。
FreeBSD 的 filemon 内核模块可以监控子进程的所有文件操作。
FreeBSD 的 libutil 库也许会派上用场,相关文档:/usr/src/lib/libutil/*.3。
FreeBSD 安装 Linux 二进制兼容层后,能够直接运行 Linux 可执行程序。
FreeBSD 项目大部分源代码遵循 BSD License,对商业闭源应用十分友好。
    
FreeBSD 和 Linux 都可作为开源用户的选择。最主要的区别就是,FreeBSD 更完整,更标准化,而 Linux 只提供了内核及驱动,需要第三方软件支持。如果想要尽可能少地配置系统,FreeBSD 是更好的选择。但是 Linux 提供了更多的自定义选项,对于想要定制系统的人是个更好的选择。另外,如果有硬件平台限制的话,Linux 的支持性可能更好点。如果喜欢紧跟技术潮流,Linux 的新技术、新特性和更新速度肯定会让阁下满意。如果稳定性、性能和安全性对你来说更重要,FreeBSD 也许更适合。



该文章最后由 阿炯 于 2023-04-20 14:49:57 更新,目前是第 2 版。