OpenBSD 开发者拒绝采用 uutils Coreutils
OpenBSD Developers Reject Uutils Coreutils

原始链接: https://news.lavx.hu/article/openbsd-developers-reject-uutils-coreutils-port-over-licensing-and-compatibility-concerns

一项将基于 Rust 的 uutils coreutils 纳入 OpenBSD ports 树的提案,遭到了包括 Theo de Raadt 和 Stuart Henderson 在内的知名开发者的拒绝。该端口会安装类似 `gcat`、`gls` 和 `gcp` 的命令,并将它们作为符号链接指向同一个多调用二进制文件,同时会与 OpenBSD 原生工具及现有的 GNU coreutils 端口发生冲突。 批评者认为,uutils 会重复实现 OpenBSD 基础系统中已经集成并经过充分测试的 BSD 许可工具。两者在输出、退出状态或边缘情况处理上的细微差异,可能导致管道和脚本出现问题。其他担忧还包括 uutils 的成熟度、多调用打包模式、更新和维护要求,以及在 OpenBSD 架构上支持 Rust 和自举其工具链的难度。 尽管 uutils 已在 Linux 上得到广泛采用,并采用宽松的 MIT 许可证,但维护者认为它与 OpenBSD 保守且统一的理念不符。如果不进行重大重新设计,也无法证明其行为与现有工具充分兼容,这项提案仍不太可能获准推进。

一篇 Hacker News 帖子提到,OpenBSD 开发者拒绝将基于 Rust 的 uutils 打包为兼容 GNU 的替代工具。拟议的移植方案会通过符号链接,将 `gcat`、`gls`、`gcp` 等命令指向同一个多调用二进制文件,从而避免与现有的 GNU 工具发生冲突。 OpenBSD 开发者 Theo de Raadt 承认,uutils 已经足够成熟,可以供 Ubuntu 采用,但他反对向 OpenBSD 加入存在细微行为差异的实现。他指出,不同实用工具之间如果行为不一致,例如 `sed` 或 `cut` 对输出的解析方式不同,就可能在毫无察觉的情况下破坏工作流程,因此这种所谓的兼容方案并不理想。他还批评了围绕许可证和 Rust 所给出的理由,认为这些说法透露出一种没有明说的隐藏议程。 一名 Hacker News 评论者则不以为然,并表示 Lunduuke 已经更有效地讨论过这一问题。
相关文章

原文

A proposed port of the Rust-based uutils coreutils reimplementation sparked heated debate on the OpenBSD mailing list, with project founder Theo de Raadt and senior developers rejecting it as unnecessary duplication that introduces behavioral incompatibilities with the base system.

A proposal to add the uutils coreutils reimplementation to the OpenBSD ports tree drew sharp criticism from senior developers this week, exposing tensions around Rust adoption, licensing philosophy, and the project's commitment to behavioral consistency across its base system utilities.

David Uhden Collado submitted the sysutils/uutils port on September 20, packaging the Rust-based reimplementations of GNU coreutils as drop-in alternatives. The port installs g-prefixed command names—gcat, gls, gcp, gdate, gsort, gstat, gtail, gtimeout, and others—as symlinks to a multicall binary under libexec/uutils. Each package conflicts with its corresponding GNU implementation and declares the GNU port as a secondary @pkgpath.

The response was immediate and dismissive.

"Smells Like Agenda"

Stuart Henderson, a long-time OpenBSD developer, opened with skepticism: "I don't think this is a usable approach for ports." He acknowledged Ubuntu 26.10's adoption of uutils coreutils but characterized the other reimplementations as works in progress.

Theo de Raadt, OpenBSD's founder, was far more direct. "Smells like agenda," he wrote, before dismantling the licensing argument. "I also think they fit quite well with OpenBSD as alternatives to GNU utilities, particularly because they use a permissive MIT license. Argument is vaguely like: because we already have permissive licenced utilities, our user base are really interested in having a second set of permissive licenced utilities which are very subtly different. That makes no sense."

OpenBSD's base system already ships with permissively licensed (BSD-licensed) implementations of standard utilities. The project has spent decades ensuring these tools behave predictably and consistently with each other. Introducing a second set of tools with "subtly different" behavior, de Raadt argued, creates real problems for users who pipe output between utilities.

The Compatibility Problem

"Noone wants subtly different behaving binaries as part of their workflow," de Raadt continued. "If someone runs the openbsd ls command as part of a pipeline that uses openbsd sed, or openbsd cut, or some other openbsd utility and it parses a non-standardized output characteristic by accident, there are no people in this universe who wants to replace that ls with a different ls and get surprised by un-standardized tooling behaviour clash."

This cuts to a core OpenBSD principle: the base system is a cohesive whole. Utilities are developed and tested together. Swapping individual components for reimplementations—even compatible ones—risks breaking scripts and pipelines that depend on specific output formats, exit codes, or edge-case behaviors.

Rust as a Flashpoint

When Collado noted uncertainty about installing individual utilities as separate binaries, citing uutils' metapackage structure and Rust implementation, de Raadt seized on the language: "Oh, because it is written in Rust. Your agenda is showing."

The Rust question has surfaced repeatedly in BSD communities. FreeBSD has experimented with Rust in the base system. OpenBSD has not, citing the language's rapid release cycle, large dependency chains, and the difficulty of bootstrapping a Rust toolchain on the architectures OpenBSD supports. The project maintains its own C compiler toolchain and has historically avoided adding new language runtimes to the base installation.

Maturity and Maintenance Burden

Henderson's reference to Ubuntu's adoption carried an implicit caveat: Ubuntu 26.10 hasn't been released yet (as of this writing), and Canonical's willingness to ship newer software doesn't map to OpenBSD's conservative release cycle. OpenBSD 7.6 shipped in October 2024; 7.7 is expected in April 2025. The project prioritizes stability over novelty.

Beyond maturity, the port structure itself raised concerns. The uutils project distributes a single multicall binary—one executable that dispatches to different utilities based on argv[0]. This design, borrowed from BusyBox, conflicts with OpenBSD's packaging conventions, which expect individual binaries. The metapackage approach also means updating one utility requires rebuilding and redistributing the entire suite.

The Broader Context

The uutils project, hosted at github.com/uutils/coreutils, has made significant progress. As of 2024, it passes the majority of GNU coreutils test suites and has been adopted by several Linux distributions for specific use cases. The MIT license appeals to projects wanting to avoid GPL-licensed code.

But OpenBSD's rejection illustrates a fundamental divergence in philosophy. Linux distributions often treat utilities as interchangeable components. OpenBSD treats them as a curated, integrated system. The project's ls(1) isn't just "an ls implementation"—it's the ls that find(1), tar(1), and shell scripts have been tested against for years.

What Happens Next

The port remains in the proposal stage. Given the opposition from both the project founder and senior ports developers, acceptance seems unlikely without substantial changes—perhaps splitting the multicall binary into individual utilities, demonstrating behavioral parity with OpenBSD's base tools, and addressing the bootstrapping concerns around Rust.

For now, OpenBSD users who want GNU-compatible utilities will continue using the existing sysutils/coreutils port, which packages the actual GNU implementations. The uutils experiment, at least on OpenBSD, appears to have hit a philosophical wall.


Source: OpenBSD ports mailing list, September 20, 2026

联系我们 contact @ memedata.com