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

在本页
  • 目标 1:限制操作系统的磁盘占用
  • 目标 2:发布修改过的软件包
  • 目标 3:定制系统启动
  • 目标 4:支持自定义更新程序
  • 目标 5:在生产和开发中运行相同的操作系统
  • 目标 6:保持与社区的紧密联系
  • 总结
在GitHub上编辑
导出为 PDF
  1. 2021-0102 案例研究

BALLY WULFF

上一页Tarsnap 的 FreeBSD 集群下一页Netflix Open Connect

最后更新于2个月前

  • 原文链接:

  • 作者:MATEUSZ PIOTROWSKI

BALLY WULFF Games & Entertainment GmbH 是德国一家知名的娱乐电子产品公司,专门开发、生产和销售现金游戏机。公司总部位于柏林,BALLY WULFF 不仅运营在德国,还在西班牙开展业务,目前约有 300 名员工。

自 2000 年代初以来,FreeBSD 一直是 BALLY WULFF 产品的首选平台。得益于其无与伦比的稳定性和一致性,系统工程团队能够应对市场需求的不断变化,无论是小型磁盘空间占用、更高的安全性措施,还是更好的图形效果。团队经常将代码和文档补丁贡献回社区。此外,许多 BALLY WULFF 员工曾担任 FreeBSD 的提交者。

BALLY WULFF 以完全在内部进行开发流程而闻名。最终产品是各个 BALLY WULFF 团队共同努力的结果。产品设计师、硬件工程师和游戏开发者之间的合作是其成功的关键。从机器设计、硬件集成和游戏开发到最终的生产和组装,所有工作都在内部完成。FreeBSD 在这一切中占据核心地位,不仅作为最终游戏机中的操作系统,还在开发工作站和生产设备中发挥作用。

这篇简短的案例研究深入探讨了 BALLY WULFF 系统工程团队的目标,并解释了 FreeBSD 如何帮助实现这些目标。

目标 1:限制操作系统的磁盘占用

BALLY WULFF 的游戏机可以被看作是一个巨大的视频游戏主机。在物联网时代,或许让人感到惊讶的是,它并没有连接到互联网,而是预装了所有软件、游戏及其资源。一旦离开生产现场,唯一改变机器上软件的方法是通过手动更新程序,涉及物理存储介质,如 U 盘。虽然这不再是个紧迫的问题,但旧一代游戏机曾为系统工程师带来了一项有趣的挑战。每个团队的磁盘配额必须小心平衡,以确保每个游戏和管理工具获得合理的磁盘空间。然而,磁盘通常总是稍微小了一点,无法容纳所有所需的数据。因此,操作系统必须剔除所有不必要的部分。FreeBSD 与其他设计良好的软件项目一样,提供了许多构建参数,能够在编译过程中排除一切非核心部分。

不幸的是,标准的构建选项并不足够。事实证明,为了实现所需的磁盘占用,系统工程团队必须对构建过程进行更细粒度的控制。幸运的是,FreeBSD 的构建系统在设计、维护和不断改进时都考虑到了可定制性和稳定性。正因为如此,下游用户(尤其是设备供应商)能够深入了解构建系统,按需修改,并预期由于本地更改源树而带来的仅有最小的维护开销。

BALLY WULFF 维护了一个内部补丁集,用于修改 FreeBSD 构建系统,排除不必要的文件,以确保最终的操作系统镜像。这个专门针对设备的补丁集自然地融入了构建基础设施,看起来并不像是外部附加到现有环境中的一个插件。同时,它并没有给系统工程团队带来显著的维护负担。因此,操作系统的磁盘占用被限制到最低,为游戏腾出了更多的磁盘空间——这对客户来说是一个真正的价值。

目标 2:发布修改过的软件包

多年来,FreeBSD Ports 一直是 BALLY WULFF 的宝贵资产。它提供了一种标准化和可扩展的方式来定制并向操作系统添加额外的软件。事实上,它如此简便,以至于创建定制软件包是新 FreeBSD 用户第一件学习的事之一。

FreeBSD ports 开发者确保 ports 框架稳步发展,并且在许多年内保持向后兼容。因此,即使 FreeBSD 项目已经在其打包基础设施中转向使用 poudriere,像 BALLY WULFF 这样的用户仍然可以按自己的时间表进行迁移。最终,FreeBSD 的核心是稳定性,没有不愉快的意外。因此,BALLY WULFF 的系统工程团队能够轻松跟进这些变化,并做好规划。

BALLY WULFF 在内部维护着 FreeBSD Ports 的分支,包含一些额外的公司特定 Port 和对现有 Port 的补丁。不仅最新版本的 Port 回溯非常容易,维护现有 Port 的自定义版本也简单而无痛。FreeBSD Ports 的另一个优势是,通过内部软件包库分发软件包非常轻松并且得到了很好的支持。

FreeBSD 项目不断新增改进,以简化扩展私人 Port 的过程,这直接惠及 BALLY WULFF。最新的例子是 poudriere,它简化了软件包构建、测试和发布的过程。另一个重要特性是对 ports 的叠加支持,目前 BALLY WULFF 的系统工程团队正在测试这一功能。它有很大可能缓解需要维护内部 ports 分支的问题,进一步减少维护负担。

目标 3:定制系统启动

通常,通用操作系统会有一个程序来控制系统启动。它通常配置新启动的系统,例如,挂载磁盘并启动基本的系统服务,如网络服务。

在 BALLY WULFF 的游戏机中,系统启动过程与典型桌面系统大不相同。标准的 FreeBSD 启动过程足够可配置,可以覆盖大多数服务器和桌面系统的使用场景,但对于游戏机来说,完全替换标准的 rc(8) 机制是更有意义的。幸运的是,替换标准的 rc(8) 框架并没有什么神秘的过程。实际上,替换 /etc/rc 文件就足够启动。结果,BALLY WULFF 的系统工程团队维护着一个专门的系统启动脚本,用来为游戏启动准备操作系统环境。

在 BALLY WULFF,定制的 rc(8) 框架已经在多个版本中使用,并且继续完美运行。这无疑是 FreeBSD 稳定开发实践和基础系统模块化的一个好处——定制 FreeBSD 的一部分,并且期望其余部分正常工作是完全合理的。这绝对给开发人员带来了安心,使他们能够专注于开发重要的功能,而不是不断跟进向后不兼容的上游变化。

目标 4:支持自定义更新程序

BALLY WULFF 游戏机需要定期更新,这一点并不令人惊讶。当需要修复一个恼人的 bug 或向已经发布并正在运行的机器添加重要的业务功能时,就会进行平台更新。然而,更频繁的情况是,机器通过新游戏进行更新。游戏机的更新过程是公司中最重要且经过严格测试的程序之一。彻底的测试和 QA 检查确保了应用到市场上已经运行的机器上的更新不会导致任何不必要的停机。更新过程必须允许对新软件进行无人监管和自动安装。在更新过程中让机器无法操作是绝对不可接受的。

由于游戏机操作系统的架构,使用 freebsd-update(8) 和 pkg(8) 更新系统会变得过于复杂。值得庆幸的是,FreeBSD 的简洁性能实现一个完全自定义的更新程序。

目标 5:在生产和开发中运行相同的操作系统

软件工程的一条黄金法则是,开发应该在一个与生产环境完全相同或至少相似的环境中进行。当开发人员在统一的环境中工作时,就不需要为调试代码做重复工作。

BALLY WULFF 的游戏开发人员使用 FreeBSD 工作站在实际游戏机上测试游戏之前进行测试。令人惊讶的是,FreeBSD 对游戏机和工作站都能提供同样出色的支持。

值得注意的是,游戏开发部门的规模远大于 BALLY WULFF 的 FreeBSD 团队。然而,维护一个专门为游戏开发人员需求量身定制的内部 FreeBSD 发行版是完全可行的。相同的基于 FreeBSD 的操作系统运行在游戏机和开发工作站上,主要的区别在于已安装的软件包列表。这是 FreeBSD 作为通用操作系统的一个巨大优势。

目标 6:保持与社区的紧密联系

与社区保持紧密联系使 BALLY WULFF 能够参与 FreeBSD 的开发,并与 FreeBSD 开发人员保持联系。例如,BALLY WULFF 旨在将本地的 FreeBSD 补丁数量保持在最低限度。非必要补丁的维护负担是无法承受的。上游提交补丁不仅因为附加的测试是一个非常明智的商业决策,而且也是回馈 FreeBSD 社区的一个好方法。然而,大多数情况下,BALLY WULFF 内部开发的 FreeBSD 补丁过于特定于供应商,不适合纳入 FreeBSD 源代码。然而,公司确保通过其他方式做出贡献。BALLY WULFF 的开发人员定期参与 FreeBSD 开发者峰会和开源会议,如 FOSDEM 和 EuroBSDcon。2019 年,BALLY WULFF 在公司总部柏林举办了一个由公司组织的开发者峰会。

总结

FreeBSD 对 BALLY WULFF 来说是一个很棒的操作系统,得益于其卓越的构建系统,该系统以一种有效适应专用设备的方式进行开发和维护。过去,FreeBSD 对 BALLY WULFF 的主要好处是其小巧而功能强大的基础系统,通过利用现有的 build(7) 选项或引入供应商特定的更改,可以进一步精简,以精确控制最终操作系统映像中包含的内容。对 FreeBSD 基础和 Port 构建系统的内部补丁自然融入了基于 Makefile 的一致基础设施。所有这些特性使 BALLY WULFF 的系统工程团队能够最大限度地减少操作系统的大小,从而为游戏及其资产腾出更多空间,随着 BALLY WULFF 开发人员不断推动硬件和软件的极限。

现在,磁盘空间不再像过去那样珍贵,减少操作系统最终大小的特殊补丁集的需求已经不复存在。BALLY WULFF 的焦点和精力已转向系统开发的其他方面。现在不再需要对 FreeBSD 源代码进行大量修改以优化小磁盘占用。正在进行从未修改过的 FreeBSD 源代码构建操作系统的过渡过程。到目前为止,这一过程既没有带来痛苦,也带来了好处,因为它大大简化了构建基础设施。这得益于 FreeBSD 社区的巨大努力,在可行的情况下保持向后兼容性。对 FreeBSD 系统的每个重大更改都是在考虑下游用户工作流程的前提下实现的。

计算世界发展迅速,团队的焦点不再是让系统占用尽可能小的空间。现在的目标是提高系统的稳健性,并保持低维护成本。最终,BALLY WULFF 系统工程团队的目标是为游戏开发者提供高性能且稳定的游戏平台。


MATEUSZ PIOTROWSKI 是一位来自柏林的 FreeBSD Port 和文档提交者。他喜欢解决 bug、脚本自动化和设计稳健的软件系统(并始终彻底记录一切)。最近,他的兴趣转向了追踪和性能工程。当他不在现代软件的“假定确定性”电路上做 hack 工作时,他会探索社会和文化中不断变化的动态。

BALLY WULFF