FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 中文期刊
  • 编辑日志
  • 2025-123 下游项目
    • FreeBSD 发布工程:新主管上任
    • GhostBSD:从易用到挣扎与重生
    • BSD Now 与将来
    • 字符设备驱动教程(第三部分)
    • 学会走路——连接 GPIO 系统
    • FreeBSD 中对 SYN 段的处理
    • FreeBSD 2024 年秋季峰会
  • 2024-1112 虚拟化
    • 字符设备驱动程序教程(第二部分)
    • 面向 Linux 和 Windows 用户的 bhyve
    • Xen 与 FreeBSD
    • Wifibox:一种嵌入式虚拟化无线路由器
    • 嵌入式 FreeBSD:Fabric——起步阶段
    • DGP:一种新的数据包控制方法
    • 会议报告:我在都柏林的 EuroBSDCon 体验
  • 2024-0910 内核开发
    • 字符设备驱动程序教程
    • VPP 移植到了 FreeBSD:基础用法
    • 利用 Kyua 的 Jail 功能提升 FreeBSD 测试套件的并行效率
    • FreeBSD 上的 Valgrind
    • 嵌入式 FreeBSD:探索 bhyve
    • TCP/IP 历险记:FreeBSD TCP 协议栈中的 Pacing
    • 实用软件:实现无纸化(Paperless)
  • 2024-0708 存储与文件系统
    • FreeBSD 中的 NVMe-oF
    • FreeBSD iSCSI 入门
    • 使用 ZFS 原生加密保护数据
    • 嵌入式 FreeBSD:打造自己的镜像
    • TCP LRO 简介
    • 基于 Samba 的时间机器备份
  • 2024-0506 配置管理对决
    • 基本系统中的 mfsBSD
    • rdist
    • Hashicorp Vault
    • 在 GitHub 上向 FreeBSD 提交 PR
    • 悼念 Mike Karels
    • 2024 年 5-6 月来信
    • 嵌入式 FreeBSD 面包板
    • TCP/IP 历险记:TCP BBLog
    • 实用软件:开发定制 Ansible 模块
  • 2024-0304 开发工作流与集成
    • FreeBSD 内核开发工作流程
    • FreeBSD 与 KDE 持续集成(CI)
    • 更现代的内核调试工具
    • 从零开始的 ZFS 镜像及 makefs -t zfs
    • 提升 Git 使用体验
  • 2024-0102 网络(十周年)
    • FreeBSD 中的 RACK 栈和替代 TCP 栈
    • FreeBSD 14 中有关 TCP 的更新
    • if_ovpn 还是 OpenVPN
    • SR-IOV 已成为 FreeBSD 的重要功能
    • FreeBSD 接口 API(IfAPI)
    • BATMAN:更优的可移动热点网络方式
    • 配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截
    • 实用软件:使用 Zabbix 监控主机
  • 2023-1112 FreeBSD 14.0
    • LinuxBoot:从 Linux 启动 FreeBSD
    • FreeBSD 容器镜像
    • 现在用 Webhook 触发我
    • 新的 Ports 提交者:oel Bodenmann (jbo@freebsd.org)
  • 2023-0910 Port 与软件包
    • 回忆录:与 Warner Losh(@imp)的访谈
    • 在你自己的仓库中定制 Poudriere 源
    • Wazuh 和 MITRE Caldera 在 FreeBSD Jail 中的使用
    • PEP 517
    • CCCamp 2023 旅行报告
  • 2023-0708 容器与云
    • 在 Firecracker 上的 FreeBSD
    • 使用 pot 和 nomad 管理 Jail
    • 会议报告:C 与 BSD 正如拉丁语与我们——一位神学家的旅程
    • 抒怀之旅:与 Doug Rabson 的访谈
    • 基于 Jail 的广告拦截教程
    • 我们收到的来信
  • 2023-0506 FreeBSD 三十周年纪念特刊
    • CheriBSD 近十多年的历程
    • AArch64:成为 FreeBSD 新的一级架构
    • 岁月如梭:我个人的时间线
    • 安装 FreeBSD 1.0:回顾 30 年前
    • ZFS 是如何进入 FreeBSD 的呢?
    • 我不是来自约克郡的,我保证!
    • 回忆录:采访 David Greenman Lawrence
    • FreeBSD 和早期的 Unix 社区
    • 早期的 FreeBSD 移植
    • FreeBSD 30 周年:成功的秘诀
    • FreeBSD 在日本:回忆之旅与今日之实
  • 2023-0304 嵌入式
    • CheriBSD port 和软件包
    • 让我们来试试 ChatGPT
    • GPU 直通
  • 2023-0102 构建 FreEBSD Web 服务器
    • ZFS 的原子 I/O 与 PostgreSQL
    • 虚拟实验室——BSD 编程研讨会
    • ZFS 简介
    • 会议报告:落基山庆祝女性计算机科学家
    • 进行中的工作/征求反馈:数据包批处理
    • 基金会与 FreeBSD 桌面
  • 2022-1112 可观测性和衡量标准
    • 在 FreeBSD 的 DDB 内核调试器中编写自定义命令
    • DTrace:老式跟踪系统的新扩展
    • 基于证书的 Icinga 监控
    • 活动监控脚本(activitymonitor.sh)
    • 实用 IPv6(第四部分)
    • EuroBSDCon 会议报道
    • 实用 Port:Prometheus 的安装与配置
    • 书评:《用火解决问题:管理老化的计算机系统(并为现代系统保驾护航)》Kill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones)
  • 2022-0910 安全性
    • CARP 简介
    • 重构内核加密服务框架
    • PAM 小窍门
    • SSH 小窍门
    • 实用 IPv6(第三部分)
    • 书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著
    • 访谈:保障 FreeBSD 安全性
    • MCH 2022 会议报告
  • 2022-0708 科研、系统与 FreeBSD
    • 在 FreeBSD 上构建 Loom 框架
    • 教授本科生 Unix 课程
    • FreeBSD 入门研讨会
    • 实用 IPv6(第二部分)
    • 在 2022 年及以后推广 FreeBSD
    • 进行中的工作/征求反馈:Socket 缓冲区
    • FreeBSD 开发者峰会报告
    • 支持 Electromagnetic Field 2022
  • 2022-0506 灾难恢复
    • 使用 FreeBSD 构建高弹性的私有云
    • LLDB 14 —— FreeBSD 新调试器
    • 实用 IPv6(第一部分)
    • 利用 netdump(4) 进行事后内核调试
    • 进行中的工作/征求反馈:FreeBSD 启动性能
    • 实用 Port:在 OpenZFS 上设置 NFSv4 文件服务器
  • 2022-0304 ARM64 是一级架构
    • FreeBSD/ARM64 上的数据科学
    • Pinebook Pro 上的 FreeBSD
    • 嵌入式控制器的 ACPI 支持
    • 进行中的工作/征求反馈:Lumina 桌面征集开发人员
    • 实用 Port:如何设置 Apple 时间机器
  • 2022-0102 软件与系统管理
    • 为 FreeBSD Ports 做贡献
    • 使用 Git 贡献到 FreeBSD Ports
    • CBSD:第一部分——生产环境
    • 将 OpenBSD 的 pf syncookie 代码移植到 FreeBSD 的 pf
    • 进行中的工作/征求反馈:mkjail
    • 《编程智慧:编程鬼才的经验和思考》(The Kollected Kode Vicious)书评
    • 会议报告:EuroBSDCon 2021 我的第一次 EuroBSDCon:一位新组织者的视角
  • 2021-1112 存储
    • 开放通道 SSD
    • 构建 FreeBSD 社区
    • 与完美操作系统同行 27 年
    • 进行中的工作/征求反馈:OccamBSD
    • 通过 iSCSI 导入 ZFS ZIL——不要在工作中这样做——就像我做的那样
  • 2021-0910 FreeBSD 开发
    • FreeBSD 代码审查与 git-arc
    • 如何为 FreeBSD 实现简单的 USB 驱动程序
    • 内核开发技巧
    • 程序员编程杂谈
  • 2021-0708 桌面/无线网
    • 通往 FreeBSD 桌面的直线路径
    • FreeBSD 13 中的人机接口设备 (HID) 支持
    • Panfrost 驱动程序
    • 用 Git 更新 FreeBSD
    • FreeBSD 的新面孔
    • 想给你的桌面加点佐料?
  • 2021-0506 安全
    • 七种提升新安装 FreeBSD 安全性的方法
    • copyinout 框架
    • 使用 TLS 改善 NFS 安全性
    • Capsicum 案例研究:Got
    • 对 Jail 进行安全扫描
  • 2021-0304 FreeBSD 13.0
    • 展望未来
    • FreeBSD 13.0 工具链
    • FreeBSD 13.0 中有新加载器吗?
    • TCP Cubic 准备起飞
    • OpenZFS 中的 Zstandard 压缩
    • 会议报告:FreeBSD 供应商峰会
    • Git 不够吗?
  • 2021-0102 案例研究
    • Tarsnap 的 FreeBSD 集群
    • BALLY WULFF
    • Netflix Open Connect
    • FreeBSD 的新面孔
    • 写作学者的 FreeBSD
    • 在世界之巅
  • 2020-1112 工作流/持续集成(CI)
    • FreeBSD Git 快速入门
    • 使用 syzkaller 进行内核 Fuzzing
    • Mastering Vim Quickly 书评
    • 线上会议实用技巧
    • 在控制台上进行网络监控
  • 2020-0910 贡献与入门
    • 采访:Warner Losh,第 2 部分
    • 代码审查
    • 撰写良好的提交消息
    • 如何在不是程序员的情况下做出贡献——成为 FreeBSD 译者
    • 如何成为文档提交者
    • 谷歌编程之夏
    • 为 FreeBSD 期刊撰写文章
    • 你为什么使用 FreeBSD
    • FreeBSD 的新面孔
  • 2020-0708 基准测试/调优
    • FreeBSD Friday
    • 采访:Warner Losh,第 1 部分
    • 构建和运行开源社区
    • 在 FreeBSD 上轻松搭建我的世界(Minecraft)服务器
    • FreeBSD 的新面孔
  • 2020-0506 网络性能
    • 内核中的 TLS 卸载
    • 访谈:Michael W Lucas
    • FreeBSD 桌面发行版
    • 使用 Poudriere 进行 Port 批量管理
    • FreeBSD 的新面孔
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 缘起
  • 领导
  • 开发
  • 发布
  • 硬件支持
  • 沟通
  • 文档
  • Ports
  • 项目文化
  • 项目支持
  • 许可证
  • 总结
在GitHub上编辑
导出为 PDF
  1. 2023-0506 FreeBSD 三十周年纪念特刊

FreeBSD 30 周年:成功的秘诀

上一页早期的 FreeBSD 移植下一页FreeBSD 在日本:回忆之旅与今日之实

最后更新于1个月前

  • 作者:Marshall Kirk Mckusick

  • 译者:一木

  • 原文地址:

今年,FreeBSD 项目迎来了提供可用系统发行版的第 30 周年。这篇文章的目的是了解是什么使得 FreeBSD 能够成为为数不多的长期的、可行的开源项目之一。大多数长期成功的项目都是由一些公司赞助的,这些公司的产品都是以他们积极培育的开源软件为基础。虽然 FreeBSD 有一些公司在积极地使用和支持它,但这些公司多年以来,没有一家是其主要的长期支持者。

缘起

许多开源项目都是从一个人编写代码开始的,然后从那里开始构建。FreeBSD 从一个坚实的代码库开始,即加州大学伯克利分校的 4.4BSD-Lite 开源发行版。伯克利软件发行版(BSD)那时已经开发和发行了十多年,BSD 发行版源于贝尔实验室的 Unix 发行版,她比 BSD 早开发了十多年。尽管 BSD 并非开源,但其代码得到了广泛的访问许可,并有许多来自学术界和工业界的贡献者。几乎所有的 BSD 最终都在 4.4BSD-Lite 发行版中作为开放源代码发布。

BSD 内核引入了至今仍在使用的重要操作系统接口:

  • Socket 网络接口和最初广泛使用的 TCP/IP

  • 实现用于操作文件系统的系统调用:支持多种文件系统实现的虚拟文件系统(VFS)接口,以及快速文件系统和网络文件系统(NFS)实现

  • mmap 内存模型,以及

  • 管理进程的接口(信号、进程组、作业控制等)

BSD 发行版还建立了完整系统发行版的模式,包括操作系统、一组核心库和工具、贡献的软件(最终成为 FreeBSD 的 ports)以及完整的手册和系统文档。

领导

FreeBSD 组织成立之初,组织者决定成立一个由 7 人小组(核心小组),负责监督项目。

大多数开源项目都是由个人发起的,然后这个人就成了项目的终身领袖。众所周知的一个例子是 Linus Torvalds,他创建了 Linux 项目,并一直领导着该项目。当领导者失去兴趣并停止工作时,项目通常就会走向失败。如果领导者不善于审查和批评或接受他人的意见,贡献者往往会感到沮丧。

FreeBSD 组织成立时,组织者决定成立一个由 7 人组成的小组,称为核心小组,负责监督项目。最初的核心小组是内定的。建立项目的人将自己任命为核心小组的成员。他们是“终身沙皇”。核心小组决定项目的方向,并授予和取消提交者的特权;提交者是被允许对项目仓库进行修改的人。

虽然这种方法比单一的领导者要好,但它仍然存在一个问题,即提交者在项目中只能升到中层,因此如果他们的想法不被接受,就会导致他们的沮丧和放弃。为了解决这个问题,FreeBSD 项目决定让核心小组成为一个经选举而产生的职位。核心小组成员也扩大到 9 人。整个核心小组每两年选举一次。核心成员由提交者提名并选举产生。任何活跃的提交着都可以竞选核心小组。候选人可自行选择,无需提名。这一变化的效果是,新人可以晋升到领导岗位。因此,项目领导层会随着时间的推移而不断发展,项目也不容易因为领导者的离开而崩溃。

开发

FreeBSD 项目从一开始就使用集中式工具(源代码控制和 Bug 报告)。这种工具从一开始就支持远程开发。尽管在今天已经很普遍,但在 FreeBSD 发展伊始,通常的做法是由一个人来维护发行版,其他人的修改必须发送给这个人才能并入。随着项目的发展,维护源代码主复制的人就会不堪重负,从而限制了项目前进的速度。此外,当出现需要分配的 Bug 时,也很难跟踪谁在处理什么。值得庆幸的是,现代工具集(如 gitlab 和 github)可以有效解决这些问题。

FreeBSD 项目也在吸纳 NetBSD 和 OpenBSD 项目的思想和代码,并从中受益匪浅。NetBSD 在高效支持多种体系结构方面处于领先地位,这对 FreeBSD 从最初的 Intel 体系结构扩展到支持其他体系结构非常有帮助。NetBSD 还提供了许多测试,这些测试已被纳入 FreeBSD 的持续集成测试。OpenBSD 专注于系统安全,FreeBSD 也整合了他们的许多安全改进。OpenBSD 还提供了一些 FreeBSD 使用的关键安全组件,如 ssh 远程访问和登录程序,以及支持 https 加密的软件组件。

发布

许多开源项目只是代码的集合,必须下载、编译和安装后才能使用。它们通常依赖于其他库和基础架构,而这些库和基础架构也必须找到,并构建和安装。近年来,一些项目开始提供可启动的容器,但这并不能有效利用资源,因为他们包括整个软件堆栈,一直到操作系统,从而重复了机器上已有的大量软件。

在 FreeBSD 项目历史的早期,它就开始分发包含完整系统的光盘(CDROM),这些光盘可以在 PC 电脑上启动。用户可以从光盘启动系统进行试用,然后根据自己的需要将其安装到硬盘上。而且,由于它是从 BSD 系统衍生而来的,用户所需的所有命令和库都已经存在。此外,还提供了丰富的文档资料,即使非专业人士也能轻松安装。

硬件支持

大多数开源项目都试图支持所有硬件,这通常意味着很多硬件性能不佳,经常在负载下出现故障。从 FreeBSD 项目一启动,我们就决定对硬件进行精挑细选,并决定哪些硬件能与 FreeBSD 完美配合。硬件被选中后,我们就会花费大量精力来编写强健和完整的设备驱动程序来运行他们。FreeBSD 发布了他们推荐的硬件列表,并通过修复报告的问题和更新驱动程序来支持这些硬件。有了这份精心挑选的列表,就可以很容易地组装出在负载情况下运行良好的服务器机器。由于 FreeBSD 性能卓越、运行可靠,它成为运行拨号服务器的公司,以及后来的互联网和网络服务提供商的首选系统。

沟通

由于几乎所有的 FreeBSD 开发人员都是远程工作,因此建立邮件列表来讨论核心设计决策非常重要。

由于几乎所有的 FreeBSD 开发人员都是远程工作,因此建立邮件列表来讨论核心设计决策是非常重要的。主题领域包括网络、文件系统、核心架构等。邮件列表中经常出现的一个问题是,讨论可能会偏离正轨,尤其是在大多数人从未谋面的情况下。在项目的最初几年吵得不可开交并不罕见,因此邮件列表开始受到积极监控,以抑制不良行为,确保文明讨论。可悲的是,时至今日,许多项目的邮件列表仍然充满乌烟瘴气。待一个项目因不良行为而声名狼借,往往会导致其进入死亡轮回。另外,也有可能走向另一个极端,变得过渡控制,以至于人们因为感觉受到限制而放弃项目。对于像 FreeBSD 这样开发人员遍布全球的项目来说,很难找到适合开发人员文化多样性的规则。这个问题很难有效解决,最终,需要有一个不断发展的社区守则,来保证项目平稳地向前发展。

文档

FreeBSD 项目一开始就基于 4.4BSD-Lite 发行版的文档,建立了坚实的文档基础。在发展早期,FreeBSD 接纳了专注于系统文档的贡献者。我们鼓励编写代码的人员与编写文档的人员合作,以确保文档的完整性和正确性。

项目为编写文档的人员设立了一个文档提交小组。该小组拥有代码提交者的所有权利和特权。他们可以竞选核心小组,拥有平等的投票权,以及自己的组长,负责添加和删除文档提交者、建立文档结构和工具,以及监督文档储存库。在他们的指导下,文档的结构框架可以轻松支持多种语言。许多文档提交者一开始都是将文档翻译成自己的母语。这种翻译工作通常有助于他们尽快了解文档工具的工作原理以及 FreeBSD 本身的工作原理。

Ports

4.4BSD-Lite 发行版整合了大约 50 个在伯克利之外开发的实用程序和库,这些软件都包含在 BSD 发行版中。其中包括 X 视窗系统、gated 路由守护进程、emacs 编辑器等。FreeBSD 以这套核心整合程序为起点,并通过后来的 ports 集对其进行了极大的扩展。与安装所有贡献程序的 BSD 发行版不同,由 FreeBSD ports 单独提供它们,这样就可以只安装它们需要的程序。ports 集确保了程序能以合理的默认值在 FreeBSD 上编译和运行。它还保证了在 BSD 环境中发现的错误修正会被上传到软件维护者那里,并且这些修正会被带到 FreeBSD port。大多数用户只需使用 port 的编译后版本,而那些需要对参数进行修改的用户则可以先进行修改,然后再编译他们自己的二进制文件。port 使得在 FreeBSD 上使用其它开源软件变得更加容易。如今,大多数开源发行商都有类似 port 的东西,但这在当时还是个新事物。

多年以来,ports 一直在不断发展。最近的创新是增加了 pkg 系统来操作 ports。pkg 系统处理软件包的注册、添加、删除和升级。另一个关键组件是 Poudriere,它是一个用于创建和测试 FreeBSD 软件包的工具。它使用 FreeBSD jail 来建立隔离的编译环境。这些 jail 可用于为非实体 FreeBSD 系统的其他版本编译软件包,也可用于为不同于主机系统的体系结构编译软件包。软件包编译完成后,它们的布局就会与官方镜像完全相同。pkg 系统和其他软件包管理工具可以使用这些软件包。

FreeBSD 提供了基石,可以通过修改它来构建一个定制的操作系统,同时还提供了构建一个完整的操作系统发行版所需的所有基础架构,不仅包括基本系统,还包括 ports 集。可以定制的操作系统以支持设备,因为如何为定制操作系统构建发布镜像以及通过 Poudriere 为定制操作系统自动构建软件包的所有信息都是公开的,并有详细的文档记录。在这方面,没有一个 Linux 发行版能像 FreeBSD 那样一键搞定。例如,在修改过的内核和系统库等基础上构建自己的 Debian-fork 会困难得多。

项目文化

核心小组对 Port、文档和开发的提交者对项目的运行都有同等的发言权。

Port、文档和开发的提交者对项目的运行都有同等的发言权。值得注意的是,他们都可以竞选核心小组,并获得相同的投票权。在大多数项目中,开发人员拥有更多的发言权,而其他人则被视为低人一等。FreeBSD 项目从一开始就致力于建立包容文化。这种文化最看重的是“与他人相处融洽”。它不会为了得到自己的文档、port 或代码而容忍“智者”的存在(尽管有时“智者”的离开或被踢出局可能需要一段时间)。

FreeBSD 项目并不是为了培训人们如何写作或编程而成立的。加入 FreeBSD 项目的人应该了解他们的行业。文档作者需要了解如何撰写技术文档。Port 和源代码贡献者需要了解 C 语言和任何其它相关语言,以及用于编写、构建、调试和分析他们的工具。尽管如此,FreeBSD 还是通过谷歌代码之夏等项目对学生进行指导。事实上,许多参加代码之夏的学生后来都成为了 FreeBSD 项目的提交者。

FreeBSD 项目欢迎新人加入。要想成为项目的提交者,并不需要经过严格的筛选,也不需要去讨好项目领导者。关于如何参与到项目中来,有一个完整的文档流程。

项目支持

FreeBSD 创立之初,其基础架构只是开发人员家中的一台机器。随着 FreeBSD 的发展,它的基础设施首先得到了 Walnut Creek CD-ROM 的支持,后来又由雅虎支持。依赖公司的善意是灾难的根源,因此 FreeBSD 基金会应运而生,以筹集资金,最初的用途是为 FreeBSD 基础架构提供机器和託管服务。尽管基金会对项目的支持在今天很常见,但 FreeBSD 是最早成立基金会来支持项目的项目之一。基金会最初由董事会(无报酬)管理。几年后,基金会雇用了第一位兼职员工。如今,基金会拥有近二十名员工和承包商,为基础架构、开发、市场营销、工具、资金筹集和其它项目相关服务提供支持。

许可证

FreeBSD 使用伯克利许可证(BSD license),它不要求公司向他人提供自己的代码。伯克利许可证的使用对 FreeBSD 的成功起了很大的作用,特别是对那些在内核中使用其专有代码的公司。FreeBSD 被大量用于设备和嵌入式操作系统市场,在这些市场中,公司需要将其知识产权置于操作系统中,因此不能使用 Linux,因为其使用的 GNU 公共许可证(GPL)要求提供所有更改的源代码。

总结

FreeBSD 仍在不断发展壮大。它的力量来自于在代码、文档和文化方面打下的坚实基础。它与时俱进,不断引入新的提交者,并在多个领导小组中平稳过渡。

它继续填补一个重要的支持领域——替代 Linux。具体来说,需要冗余的公司需要不止一个操作系统,因为任何一个操作系统都可能成为故障的受害者,从而导致整个公司的基础设施瘫痪。基于所有这些原因,FreeBSD 前景光明。总之,FreeBSD 非常棒!


MARSHALL KIRK MCKUSICK 博士撰写图书和文章,教授 UNIX 和 BSD 相关课程,并就软件专利、商业秘密和版权问题提供专家证人证词。自 1993 年 FreeBSD 项目成立以来,他一直是该项目的开发者和提交者。

https://freebsdfoundation.org/wp-content/uploads/2023/06/mckusick_secret.pdf