与OpenBSD面对面
2010-09-11 09:39:10 阿炯

本文收集了作为OpenBSD的相关人员的访谈、对比、心得等相关方面的感受,可做为对其的补充认知。

与OpenBSD开发者面对面

2010年9月消息,在技术变化如此迅速的世界里,人们的讨论焦点还是会集中于项目的稳定性与安全性上。这方面做的最好的代表之一就是OpenBSD,OpenBSD操作系统在发行使用到目前为止,长达15年的时间里只发现过两次基于网络服务方面的安装漏洞。OpenBSD4.7新的版本增加了很多新功能,包括更好的硬件支持,更完善的网络协议栈以及新的OpenSSH 协议特征。很高兴今天我们邀请到了其中一位开发者——Stefan Sperling,他将会分享一些他在开发中的感受。

DW:你能简单介绍下自己吗?比如你的家乡以及你是如何参与到BSD的?
SS:我的名字叫Stefan Sperling,生长于德国柏林。早在20年前我就开始使用BSD的产品了,最开始时候我的桌面电脑用的是 FreeBSD操作系统,后来被介绍加入了OpenBSD开发社区。所以那时很长的一段时间里我用着两种操作系统:台式电脑用的是FreeBSD操作系统,笔记本电脑用的是OpenBSD操作系统。随后我转到爱尔兰上大学,当时我没有携带我的台式电脑,带走了我的笔记本。所以那一学期我都没有使用FreeBSD系统,但这并不是我故意要放弃FreeBSD,而是我觉得它没有完善的系统错误修复补丁管理,而我向OpenBSD提交的补丁被接受了。后来就参与到了BSD中。

DW:你是什么时候开始OpenBSD项目研究的?
SS:我是在我正在准备网络软件工程师硕士学位的时候,成为了OpenBSD的一名开发工程师的。我的硕士研究项目是改善OpenBSD使得IPv6更好的应用于OSPF协议中。那段时间我一直和OpenBSD开发者一起研究ospf6d 技术。我毕业后我的工作进度才有所放慢,但是我很怀念过去的那段时光。

DW:在你的项目中最专注的是哪部分的开发?
SS:我主要致力于ospf6d的开发,同时我也探索着怎样更好的支持UTF—8文档。那时我就是用mutt邮箱接收邮件,所以那些日子大家都是发送 UTF—8格式的邮件给我。有点烦人的就是,当时OpenBSD系统不能支持mutt邮箱显示UTF—8格式的文本。这主要可能是因为我们的系统库只能支持单字节代码。经过我的努力修改,现在已经我已经可以在mutt邮箱中读取UTF—8格式邮件了,我希望所有OpenBSD用户使用起来都可以更加方便。当然现在我们还有很多需要不断完善的地方,但是我相信很小的进步会成就更大的成功。由于OpenBSD是一项开源的项目,所以我们所做的每一项修改,都是要经过严格的审查。这虽然很耗时,但是我们宁愿放慢改进脚步,也要保证项目质量。

DW:我们知道即将发布的OpenBSD4.7版本对于OpenSSH协议以及硬件都有了更好的支持改进,除了这两项相比于4.6版本还有哪些改进呢?
SS:对于我而言,最重要的改进是新版本中ospf6d协议是默认自动安装的。该协议还是工作在程序中,但是经过Claudio的特别修改后,用户通过简单的设置就可以启动ospf6d协议。我们很愿意回收ospf6d测试的反馈报告,最新的4.7版本强调其可移植性、标准化、正确性、安全性以及集成的密码应用技术。

DW:在今年一月份的时候有位开发者发布GNOBSD,称可以在电脑上图形化安装OpenBSD,你是怎么看待这件事的,你认为它的发布对OpenBSD会有什么影响?
SS:这个项目像是一位开发者一项具有娱乐性又有意义的体验。但我不认为OpenBSD可以在图形化环境下安装,所以这对于OpenBSD不会造成什么影响。

DW:现在的操作系统都有很庞大的代码库,OpenBSD是如何跟踪审计这些代码,确保代码的准确无漏洞呢?
SS:每次的修改都是要经过严格的审查的。我们团队中有很多的开发者都是修改代码差错高手。在我提交代码之前会有很多的人先进行审查验证,这期间会检查出很多我提交代码中的错误。

当然,整个工程始终致力于各种的安全特性,通过降低各种不小心带入系统的错误(我们都是人,不是机器)的影响来提高整个系统的安全性。将守护进程的特权权限分开就是其中一个特性。OpenBSD系统中所有的守护进程都应是特权隔离的。例如,ospf6d程序将自己分为三个进程运行就属于特权隔离守护程序,不同进程执行OSPF协议不同的子任务,只有一个进程拥有root权限。这里有更多相关信息。

为了让系统代码保持一致性,我们会努力严格审查,不断修改错误。一般是通过简单的代码走查来帮助修复bug,更多的是提高系统代码的复用性。比如,ospf6d和OpenBSD中的ospfd、bgpd守护进程共用了消息传递代码。只要复用代码中bug被解决,所有共用代码的守护进程不会有问题了。

DW:与OpenBSD同类操作系统中有:FreeBSD, Linux and Solaris,这三款都成为不错的开发平台了,你会不会觉得赶上他们会不会有点难度?
SS:Linux的二进制仿真当前只能在i386平台OpenBSD系统上运行。坦白说我并没有发现很需要它。我使用二进制仿真的唯一原因是去使用专有软件,但是我现在不用了。很多免费且开源的软件都是可以移植到OpenBSD系统上,并且运行良好。专有软件一般是不开放源代码的,所以有时候我必须要用这些专业软件时,我只选择使用Linux系统。OpenBSD的优势是在OpenBSD上编译不需要专有的驱动程序,这使得OpenBSD成为一个自由且开放的平台。

DW:加入4.7版本获得很好的下载反映,你们的下一版本又会有什么新的目标吗?
SS:我不能替代整个团队来回答这个话题。我个人的想法是希望4.8可以在支持UTF—8上会有更好的突破,当然这不是我个人的力量可以完成,这还得靠整个团队的努力。此外我当然也希望在OSPF6d协议支持上会有更好的改进。


浅评 OpenBSD vs NixOS

2022年4月消息,开发者 Solène Rapenne 是一名 OpenBSD 维护者,并且也喜欢使用 Linux,尤其是 NixOS 发行版——他认为这是一款与众不同,有别于其他 Linux 发行版的系统。Solène 在自己的电脑配置了两块 SSD,分别用来安装这两款系统,以便根据正在做的任务或者所希望使用的系统从其中一个切换到另一个。

Solène 主力使用的操作系统是 OpenBSD,他将所有数据都存放在上面。不过由于 NixOS 和 OpenBSD 之间缺乏可互操作、方便使用的文件系统,在不使用提供共同协议的网络存储的情况下,很难在两者之间共享数据。近日他发表了关于 OpenBSD 和 NixOS 的对比文章。对比维度包括:性能、硬件支持、软件生态、网络堆栈、维护情况、文档和项目贡献情况等。

系统简介

OpenBSD 是 NetBSD 的分支,已诞生了 25 年,它充满了历史,是一款稳定的系统。OpenBSD 也是开发 OpenSSH 或 tmux 的地方。它是一个具有自己的内核和驱动程序的 BSD 系统——与 Linux 无关,但支持运行可以在 Linux 上的大多数知名开源程序,这些程序通常以软件包的形式提供(例如 GIMP、Libreoffice、Firefox、Chromium 等...)。

整个 OpenBSD 系统(内核、驱动程序、用户空间和软件包)由大约 150 人的团队管理(不包括发送更新和没有提交访问权限的人)。

NixOS 将很快成为基于 nix 包管理器的具有 20 年历史的 Linux 发行版。它提供了一种新的系统管理方法,基于可重现的构建和声明性配置,用户基本上可以在配置文件中定义您的计算机应该如何配置(包、服务、名称、用户等)并“构建”要配置的系统本身,如果用户在另一台计算机上共享此配置文件,应该能够重现完全相同的系统。

在 NixOS 中,软件包没有被安装在标准的文件层次结构中,每个包文件都存储在专用目录,用户配置文件由符号链接和许多环境变量组成,以允许程序查找库或依赖项。

性能

OpenBSD 缺乏用于编码/解码视频的硬件加速,因此在处理视频时速度会比较慢。除了视频处理,OpenBSD 在使用交互桌面和 I/O 方面的速度也比较慢。单看性能对比,NixOS 的优势和它使用 Linux 内核密切相关,毕竟 Linux 内核有大量全职开发者、以及开源贡献者来为其优化性能。虽然 OpenBSD 比 Linux 慢,但对于大多数需要完成的任务,它足以满足要求。

硬件支持

在硬件支持方面,OpenBSD 不及 NixOS 和 Linux 内核所支持的设备丰富。在 NixOS 上,用户可以使用雷电接口,可以使用外接 NVIDIA 显卡,但 OpenBSD 不支持这种接口,也没有 NVIDIA 显卡驱动程序(作者认为这主要是 NVIDIA 不提供文档的锅)。但是OpenBSD几乎不需要任何配置即可使用。只要硬件支持, 它就可以运行。此外OpenBSD还可以在多种采用旧架构的计算机上运行,如 i386、旧的 Apple Power PC、RISC、ARM,而 NixOS 只专注于现代硬件,如 Amd64 和 Arm64。

软件生态

OpenBSD 和 NixOS 都提供了大量软件包,但相对而言,NixOS 的选择更多。当然这不是说 OpenBSD 的表现很糟糕,因为 OpenBSD 大多数软件包都可以正常使用,而且通常会提供最新版本。作者还表示,他曾多次发现某个软件包在 OpenBSD 中可以正常使用,但在 NixOS 却不能。

他还认为,OpenBSD 软件包的质量略高于 NixOS,前者的问题比较少(NixOS 软件包有时会有问题,可能与其不寻常的文件结构有关),而且有时会打上补丁,以提供更好的默认配置(例如禁用某些 GUI 应用程序中默认打开的网络访问)。

OpenBSD 和 NixOS 都是每隔六个月发布新版本,但 OpenBSD 只为其最新版本提供安全修复,NixOS 则为用户提供了更多的更新包。

作者认为,在 OpenBSD 和 NixOS 上更新软件包都很容易,但相对来说,用户更容易找到在 OpenBSD 上当前使用的版本。他表示这可能是因为自己对 nix shell 的了解不够,但事实是,他很难确定是否真的在使用一个已经更新的程序。

网络堆栈

作者认为,OpenBSD 在网络堆栈方面表现出色。它的防火墙 Packet Filter 方便易用、配置简单且高效。OpenBSD 提供了诸如路由表/域之类的机制,用于将一个网络接口分配给整个分离的网络,允许将程序/用户可靠地公开到特定的接口,但他还没有找到如何在 Linux 上实现这些功能。此外OpenBSD还附带了所有必需的守护进程来管理其基本系统中的网络(dhcp, slaacd, rpki, email, http, NAT, ftp, tftp...)。与 Linux 相比,OpenBSD 处理网络吞吐量时的性能可能低于标准,但对普通用户或服务器而言问题不大,这主要取决于所使用的网卡及其驱动程序支持。

作者表示自己不喜欢在 Linux 上折腾网络,原因是它非常复杂,当他拔下笔记本电脑上的 rj45 线缆时,不知道如何聚合 wifi 和以太网接口,以透明地从一个接口切换到另一个接口。但这些操作在 OpenBSD 上很容易实现(作者不喜欢在移动笔记本电脑时丢失所有 TCP 连接)。

系统维护

OpenBSD 每六个月发布一次新版本,升级系统十分便捷,大多数极端情况都记录在升级指南中。作者表示,当他需要更新 OpenBSD 系统时,不会担心出问题。至于 NixOS,对他来说也容易更新,以及保持系统干净,他在升级时从未遇到任何问题,如果出现问题,也可以回滚到以前的版本。因此,虽然两款系统都有不同的方法,不过都运作良好。

文档

作者认为,虽然 NixOS 的文档非常庞大,但经常无法提供有用的信息。NixOS 文档有一个名为“configuration.nix”的手册页,提供了所有的系统参数选项,但它是由 NixOS 代码生成的,除了描述 API 之外,通常缺乏解释。NixOS 网站上也有一些指南和手册,但它们要么是多余的,要么没有真正描述如何解决实际问题。

至于 OpenBSD,其网站为部分使用案例提供了简单的"FAQ",然后所有系统及其内部都在写得很好的手册页中提供了详细说明。用户一开始可能会觉得不友好或复杂,但只要尝到了 OpenBSD 手册页带来的甜头,在看其他文档时就会很容易感到失望。如果用户必须为某些依赖于基本系统组件( 非软件包)的任务设置 OpenBSD 系统,用户可以仅使用手册页离线完成。作者还提到,OpenBSD 不是一个可以在各种论坛或 github gists 上找到其文档的系统,而在 NixOS 上他却经常有这种感觉 。

贡献情况

NixOS 采用了现代的贡献系统,它依赖于 GitHub 和机器人自动对贡献进行许多检查,帮助贡献者快速检查他们的工作,而不需要“浪费”时间来阅读每一个提交的代码。在 OpenBSD 中,开发者有关修改代码的讨论都是在邮件列表完成,只在人类之间进行。因此这种方式的扩展性不够好,但人与人之间的接触会比机器人给出更好的解释。当然前提是这些工作是有趣的,且有同伴愿意为此付出时间和精力,所以也会出现永远得不到反馈的情况。

小结

作者的评价是,他无法指出某个系统比另一个更好,也不能说某个系统在一项任务上做得绝对更好。他对 OpenBSD 的热爱来自于它的小社区——由喜欢从事不同工作的人组成。他知道 OpenBSD 如何工作,当出现问题时可以很容易调试。因为这个系统一直保持着相对的简单,当硬件被支持时,它就能正常运行。对于 NixOS 他也十分喜欢,因为这是一个具有冒险精神的系统,它提供了一种作者认为是计算的未来的新体验(事务更新、可重复性),但这也使它难以理解和调试变得非常复杂。