深思熟虑地“氧化” Ubuntu:现代化的尝试
深思熟虑地“氧化” Ubuntu
2025年3月12日 · 1619 字 · 8 分钟
目录
本文最初发布在 Ubuntu Discourse 上,并在此处转载。 欢迎在该主题中发表评论和进一步讨论。
Introduction #
上个月,我发表了 Engineering Ubuntu For The Next 20 Years,其中概述了未来几年我计划如何发展 Ubuntu 的四个关键主题。 在这篇文章中,我将重点关注“现代化”。 在 Ubuntu 中,我们可以考虑现代化的领域很多:我们可以关注图形 shell 体验、虚拟化堆栈、核心系统实用程序、默认 shell 实用程序等等。
多年来,像 GNU Coreutils 这样的项目在塑造 Ubuntu 和其他 Linux 发行版提供给数百万用户的类 Unix 体验方面发挥了重要作用。 根据 GNU 网站:
GNU Core Utilities 是 GNU 操作系统基本的文件、shell 和文本操作实用程序。 这些是每个操作系统都应存在的核心实用程序。
该软件包提供了许多与 Linux 同义的实用程序,例如 ls
、cp
和 mv
。 近年来,有人 努力 使用 Rust 重新实现这套工具,目标是与现有工具达到 100% 的兼容性。 类似的项目,例如 sudo-rs,旨在用更现代、内存安全的替代方案替换关键的安全实用程序。
从 Ubuntu 25.10 开始,我的目标是采用这些现代实现作为默认设置。 我目前的目标是使 uutils 的 coreutils 实现在 Ubuntu 25.10 中成为默认设置,如果条件允许,随后在我们的下一个长期支持 (LTS) 版本 Ubuntu 26.04 LTS 中也采用。
But… why? #
性能是“用 Rust 重写它”项目经常被引用的理由。 虽然性能在我的优先级列表中很高,但它不是此更改背后的主要驱动力。 这些实用程序是发行版的核心,而使用 Rust 端口更容易实现的增强的弹性和安全性对我来说更具吸引力。
Rust 语言、它的类型系统和它的 borrow checker(以及它的社区!)共同鼓励开发人员编写安全、可靠、有弹性的软件。 随着安全性的增加,安全性保证也会增加,而随着安全性的增加,系统的整体弹性也会增加,从构建发行版的基础工具开始是最好的选择。
我最近读了一篇关于在 2025 年使用 Rust 定位基础软件的 文章。 除其他外,这篇文章断言“基础软件需要性能、可靠性和生产力”。 如果基础软件失败,那么构建在其上的所有其他层也会失败。 如果基础软件包存在性能瓶颈,它们将成为上层可实现的性能的下限。
Ubuntu 为全球数百万台设备提供支持,从数据中心的服务器到自主系统中的安全关键系统,因此我们有必要绝对确定我们正在运送最具弹性和最值得信赖的软件。
有很多方法可以实现这一目标:我们可以为 Kubernetes 等项目提供长期支持,我们可以 确保我们编写的代码, 并且我们可以 努力实现符合安全中心标准,但另一种方法是运送以安全、可靠、正确和弹性为核心价值的软件。
当然,这并不是要诋毁现有的实现。 许多这些工具已经稳定多年,默默地提高性能和修复错误。 使用较新实现的一个可爱的额外好处是,它 有时会促进 原始上游项目的改进!
我写过我想增加 Ubuntu 贡献者的数量,我认为这样的项目会有所帮助。 在某些方面,Rust 可能比 C 具有更陡峭的学习曲线,但通过围绕内存使用提供如此强大的框架,它也降低了贡献者意外提交潜在不安全代码的可能性。
Introducing oxidizr
#
在写这篇文章之前,我做了功课。 我想看看我是否能够轻松地使用这些较新的实现,并了解它们在发行版中准备就绪的程度。 我还需要一种在实现之间切换的方法,以便在我遇到不兼容问题时可以轻松切换回来,因此 oxidizr
就诞生了!
oxidizr
是一个命令行实用程序,用于管理系统实验,这些实验使用 Ubuntu 系统上基于 Rust 的现代替代方案替换传统的 Unix 实用程序。
oxidizr
实用程序使您可以快速交换某些软件包的较新实现,风险 相对 较低。 它具有 Experiments 的概念,其中每个实验都是存档中已经存在的软件包,可以作为默认软件包的替代方案进行交换。
版本 1.0.0 支持以下实验:
How does it work? #
每个实验都略有不同,因为要替换的实用程序的路径各不相同,但是启用实验的过程通常是:
- 安装替代软件包(例如
apt install rust-coreutils
) - 对于新软件包中附带的每个二进制文件:
- 查找该实用程序的默认路径(例如
which date
) - 备份该文件(例如
cp /usr/bin/date /usr/bin/.date.oxidizr.bak
) - 符号链接新实现到位(例如
ln -s /usr/bin/coreutils /usr/bin/date
)
- 查找该实用程序的默认路径(例如
还可以“禁用”实验,这与上述顺序相反:
- 对于新软件包中附带的每个二进制文件:
- 查找实用程序的默认路径(例如
which date
) - 检查并恢复任何备份版本(例如
cp /usr/bin/.date.oxidizr.bak /usr/bin/date
)
- 查找实用程序的默认路径(例如
- 卸载软件包(例如
apt remove rust-coreutils
)
从而使系统恢复到其原始状态! 该工具由一套集成测试覆盖,这些测试说明了这种行为,您可以在 Github 上找到这些测试。
Get started #
⚠️ WARNING ⚠️:
oxidizr
是一种实验性工具,用于使用基础系统实用程序的替代方案。 它可能会导致数据丢失或阻止您的系统启动,因此请谨慎使用!
有几种方法可以在您的系统上获取 oxidizr
。 如果您已经使用 cargo
,则可以执行以下操作:
1
cargo install --git https://github.com/jnsgruk/oxidizr
否则,您可以从 Github 下载并安装二进制版本:
1
2
# 下载 1.0.0 版本并将其解压缩到 /usr/bin/oxidizr
curl -sL "https://github.com/jnsgruk/oxidizr/releases/download/v1.0.0/oxidizr_Linux_$(uname -m).tar.gz" | sudo tar -xvzf - -C /usr/bin oxidizr
安装完成后,您可以调用 oxidizr
来选择性地启用/禁用实验。 v1.0.0
中的默认实验集是 rust-coreutils
和 sudo-rs
:
1
2
3
4
5
6
7
8
9
10
# 启用默认实验
sudo oxidizr enable
# 禁用默认实验
sudo oxidizr disable
# 仅启用 coreutils
sudo oxidizr enable --experiments coreutils
# 启用所有实验,无需提示,启用调试日志记录
sudo oxidizr enable --all --yes -v
# 禁用所有实验,无需提示
sudo oxidizr disable --all --yes
该工具应适用于 Ubuntu 24.04 LTS 之后的所有版本,尽管 diffutils
实验仅从 Ubuntu 24.10 开始提供。
该工具本身是稳定的,并且单元测试和集成测试覆盖良好,但尽管如此,我还是建议您从测试虚拟机或 不是 您的生产工作站或服务器的机器开始! 我已经在我的 Ubuntu 24.10 机器上运行 coreutils
和 sudo-rs
实验大约 2 周了,并且没有遇到太多问题(更多内容如下...)。
How to Help #
如果您有兴趣帮助完成此任务,那么我建议您使用这些软件包,可以自己安装它们,也可以使用 oxidizr
。 在 Discourse 帖子中回复您的经验,提交错误,甚至可以花一些时间在相关的上游项目上,以帮助解决错误、实施功能或改进文档,具体取决于您的技能。
您还可以加入我们的 Matrix 实例 进行讨论。
Next Steps #
本周早些时候,我与 @sylvestre 会面,讨论了我关于使 uutils coreutils 成为 Ubuntu 25.10 中默认值的提议。 我很高兴听到他认为该项目已准备好进行这种程度的公开,因此现在我们只需要解决具体问题。 Ubuntu Foundations 团队已经在制定下一个周期的计划。
肯定会有一些我们需要解决的粗糙之处。 例如,在我的测试中,我遇到的唯一不兼容之处是 Ubuntu 的 update-initramfs
脚本使用 cp -Z
在复制文件时保留 selinux
标签。 来自 uutils 的 cp
、mv
和 ls
命令 尚不支持 -Z
标志,但我认为我们已经找到了一种方法来解除 upstream 和 Ubuntu 的下一个版本中这项工作的限制。
我将在未来几周内对 sudo-rs
进行更多挖掘,以评估类似的过渡。
Summary #
我很高兴看到对 Linux 背后基础实用程序的如此多的投资。 uutils 项目在最近 在 FOSDEM 2025 上亮相 后似乎正在加速发展,并且正在努力重做 procps、util-linux 等。
sudo-rs
项目现在由 Trifecta Tech Foundation 维护,他们专注于“公共利益的开放基础设施软件”。 他们的 zlib-rs
最近发布了 v0.4.2,它现在似乎是 最快的 API 兼容 zlib 实现。 他们也在 Pendulum Project 和 ntpd-rs
背后,用于内存安全的时间同步。
通过 Ubuntu,我们可以通过使这些现代等效项变得易于获得或成为世界上部署最多的 Linux 发行版的默认实现,从而提高人们的意识并促进采用。
我们需要小心谨慎地进行操作,并愿意在适当的时候缩减雄心,以避免淡化 Ubuntu LTS 版本已知的稳定性和可靠性承诺,但我相信我们可以在未来几个月内在这些主题上取得进展。
作者 Jon Seager 丈夫、父亲、领导者、软件工程师、极客。 ←→ Own Your Calendar 3 March 2025 ↑