<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Uutils on Jon Seager</title><link>https://jnsgr.uk/tags/uutils/</link><description>Recent content in Uutils on Jon Seager</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 06 May 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://jnsgr.uk/tags/uutils/index.xml" rel="self" type="application/rss+xml"/><item><title>Adopting sudo-rs By Default in Ubuntu 25.10</title><link>https://jnsgr.uk/2025/05/adopting-sudo-rs-by-default-in-ubuntu/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://jnsgr.uk/2025/05/adopting-sudo-rs-by-default-in-ubuntu/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This article was originally posted &lt;a href="https://discourse.ubuntu.com/t/60583" target="_blank" rel="noreferrer"&gt;on the Ubuntu Discourse&lt;/a&gt;, and is reposted here. I welcome comments and further discussion in that thread.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="introduction" class="relative group"&gt;Introduction &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Following on from &lt;a href="https://jnsgr.uk/2025/03/carefully-but-purposefully-oxidising-ubuntu/" target="_blank" rel="noreferrer"&gt;Carefully But Purposefully Oxidising Ubuntu&lt;/a&gt;, Ubuntu will be the first major Linux distribution to adopt &lt;code&gt;sudo-rs&lt;/code&gt; as the default implementation of &lt;code&gt;sudo&lt;/code&gt;, in partnership with the &lt;a href="https://trifectatech.org/" target="_blank" rel="noreferrer"&gt;Trifecta Tech Foundation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The change will be effective from the release of Ubuntu 25.10. You can see the Trifecta Tech Foundation&amp;rsquo;s announcement &lt;a href="https://trifectatech.org/blog/memory-safe-sudo-to-become-the-default-in-ubuntu/" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-is-sudo-rs" class="relative group"&gt;What is &lt;code&gt;sudo-rs&lt;/code&gt;? &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-is-sudo-rs" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; is a reimplementation of the traditional &lt;code&gt;sudo&lt;/code&gt; tool, written in Rust. It’s being developed by the &lt;a href="https://trifectatech.org/" target="_blank" rel="noreferrer"&gt;Trifecta Tech Foundation (TTF)&lt;/a&gt;, a nonprofit focused on building secure, open source infrastructure components. The project is part of the Trifecta Tech Foundation&amp;rsquo;s &lt;a href="https://trifectatech.org/initiatives/privilege-boundary/" target="_blank" rel="noreferrer"&gt;Privilege Boundary initiative&lt;/a&gt;, which aims to handle privilege escalation with memory-safe alternatives.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;sudo&lt;/code&gt; command has long served as the defacto means of privilege escalation on Linux. As described in the &lt;a href="https://jnsgr.uk/2025/03/carefully-but-purposefully-oxidising-ubuntu/" target="_blank" rel="noreferrer"&gt;original post&lt;/a&gt;, Rust provides strong guarantees against certain classes of memory-safety issues, which is pivotal for components at the privilege boundary.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;sudo-rs&lt;/code&gt; team is collaborating with &lt;a href="https://www.millert.dev/" target="_blank" rel="noreferrer"&gt;Todd Miller&lt;/a&gt;, who’s maintained the original &lt;code&gt;sudo&lt;/code&gt; for over thirty years. &lt;code&gt;sudo-rs&lt;/code&gt; should not be considered a fork in the road, but rather a handshake across generations of secure systems. Throughout the development of &lt;code&gt;sudo-rs&lt;/code&gt;, the TTF team have also made contributions to enhance the original &lt;code&gt;sudo&lt;/code&gt; implementation.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;sudo-rs&lt;/code&gt; project is designed to be a drop in replacement for the original tool. For the vast majority of users, the upgrade should be completely transparent to their workflow. That said, &lt;code&gt;sudo-rs&lt;/code&gt; is a not a &amp;ldquo;blind&amp;rdquo; reimplementation. The developers are taking a &amp;ldquo;less is more&amp;rdquo; approach. This means that some features of the original &lt;code&gt;sudo&lt;/code&gt; may not be reimplemented if they serve only niche, or more recently considered &amp;ldquo;outdated&amp;rdquo; practices.&lt;/p&gt;
&lt;p&gt;Erik Jonkers, Chair of the Trifecta Tech Foundation explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While no piece of software - in any language - is flawless, we believe the transition to Rust in systems programming is a vital step forward, it is very exciting to see Ubuntu committing to &lt;code&gt;sudo-rs&lt;/code&gt; and taking the lead in moving the needle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="sponsoring-mainstream-adoption" class="relative group"&gt;Sponsoring Mainstream Adoption &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#sponsoring-mainstream-adoption" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Leading the mainstream adoption of a replacement to such a universally understood tool comes with responsibility. Before committing to ship &lt;code&gt;sudo-rs&lt;/code&gt; in Ubuntu 26.04 LTS, we&amp;rsquo;ll test the transition in Ubuntu 25.10. We&amp;rsquo;re also sponsoring the development of some specific items, which has manifested as &lt;a href="https://trifectatech.org/initiatives/workplans/sudo-rs/#current-work" target="_blank" rel="noreferrer"&gt;Milestone 5&lt;/a&gt; in the upstream project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Coarse-grained shell escape prevention (NOEXEC) on Linux (See &lt;a href="https://github.com/trifectatechfoundation/sudo-rs/pull/1073" target="_blank" rel="noreferrer"&gt;PR #1073&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The ability to control AppArmor profiles (First &lt;a href="https://github.com/trifectatechfoundation/sudo-rs/pull/1067" target="_blank" rel="noreferrer"&gt;PR #1067&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;sudoedit&lt;/code&gt; implementation&lt;/li&gt;
&lt;li&gt;Support for Linux Kernels older than version 5.9&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The final item may seem out of place, but because Ubuntu 20.04 LTS is still in support, without this work there could be situations where &lt;code&gt;sudo&lt;/code&gt; fails to function if, for example, a 26.04 LTS OCI container was run on a 20.04 LTS host!&lt;/p&gt;
&lt;p&gt;The team have also already &lt;a href="https://github.com/trifectatechfoundation/sudo-rs/pull/1079" target="_blank" rel="noreferrer"&gt;begun work&lt;/a&gt; on ensuring that the test-suite is as compatible as possible with Ubuntu, to ensure any issues are caught early.&lt;/p&gt;
&lt;p&gt;This isn’t just about shipping a new binary. It’s about setting a direction. We&amp;rsquo;re not abandoning C, or even rewriting all the utilities ourselves, but by choosing to replace one of the most security-critical tools in the system with a memory-safe alternative, we&amp;rsquo;re making a statement: resilience and sustainability are not optional in the future of open infrastructure.&lt;/p&gt;
&lt;h2 id="progress-on-coreutils" class="relative group"&gt;Progress on &lt;code&gt;coreutils&lt;/code&gt; &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#progress-on-coreutils" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Since the initial announcement, we&amp;rsquo;ve been working hard to more clearly define a plan for the migration to uutils &lt;code&gt;coreutils&lt;/code&gt; in 25.10 and beyond. Similarly to our engagement with the Trifecta Tech Foundation, we&amp;rsquo;re also sponsoring the uutils project to ensure that some key gaps are closed before we ship 25.10. The sponsorship will primarily cover the development of SELinux support for common commands such as &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;The first step toward developing SELinux support was to &lt;a href="https://github.com/uutils/coreutils/pull/7440/files" target="_blank" rel="noreferrer"&gt;add support for automated testing in Github Actions&lt;/a&gt;, since then the maintainers have begun work on the actual implementation.&lt;/p&gt;
&lt;p&gt;The other feature we&amp;rsquo;re sponsoring is internationalisation support. At present, some of the utility implementations (such as &lt;code&gt;sort&lt;/code&gt;) have an incomplete understanding of locales, and therefore may yield unexpected results. We expect that these two features should land in time for us to ship in 25.10, and we&amp;rsquo;ll continue to work with the uutils project throughout the 26.04 LTS cycle to close any remaining gaps we identify in the interim release.&lt;/p&gt;
&lt;p&gt;One of the major concerns outlined in Julian&amp;rsquo;s post is about binary size. We&amp;rsquo;ve got a few tricks we can play here to get the size down, and there is already some conversation started &lt;a href="https://salsa.debian.org/rust-team/debcargo-conf/-/merge_requests/895" target="_blank" rel="noreferrer"&gt;upstream in Debian&lt;/a&gt; on how that might be achieved. There are also security implications, such as AppArmor’s lack of support for multi-call binaries. We’re currently working with the respective upstreams to discuss addressing this systematically, through in the interim we may need to build small wrapper binaries to enable compatibility with existing AppArmor profiles from the start.&lt;/p&gt;
&lt;h2 id="migration-mechanics" class="relative group"&gt;Migration Mechanics &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#migration-mechanics" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Julian Klode &lt;a href="https://discourse.ubuntu.com/t/migration-to-rust-coreutils-in-25-10/59708" target="_blank" rel="noreferrer"&gt;posted recently&lt;/a&gt; on the Ubuntu Discourse outlining the packaging plan that will enable us both to migrate transparently to uutils &lt;code&gt;coreutils&lt;/code&gt;, but also provide a convenient means for users to opt-out and switch back to GNU &lt;code&gt;coreutils&lt;/code&gt; if they wish, or if they identify a gap in the new implementation. I expect this will be rare, but we want to make sure it&amp;rsquo;s as easy as possible to revert, and will be documenting this in detail before release.&lt;/p&gt;
&lt;p&gt;Replacing coreutils isn&amp;rsquo;t as simple as swapping binaries. As an &lt;code&gt;Essential&lt;/code&gt; package, its replacement must work immediately upon unpacking without relying on maintainer scripts, and without conflicting files across packages. To solve this, we’re introducing new &lt;code&gt;coreutils-from-uutils&lt;/code&gt; and &lt;code&gt;coreutils-from-gnu&lt;/code&gt; packages, as well as &lt;code&gt;coreutils-from&lt;/code&gt; itself. For all the gory details, see the &lt;a href="https://discourse.ubuntu.com/t/migration-to-rust-coreutils-in-25-10/59708" target="_blank" rel="noreferrer"&gt;Discourse post&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;The packaging work required to switch to &lt;code&gt;sudo-rs&lt;/code&gt; is somewhat less complicated than with &lt;code&gt;coreutils&lt;/code&gt;. The package is already available in Ubuntu (which you can still test on Ubuntu 24.04, 24.10 and 25.04 with &lt;a href="https://github.com/jnsgruk/oxidizr" target="_blank" rel="noreferrer"&gt;oxidizr&lt;/a&gt;!), but unlike &lt;code&gt;coreutils&lt;/code&gt;, &lt;code&gt;sudo&lt;/code&gt; is not an &lt;code&gt;Essential&lt;/code&gt; package, so we&amp;rsquo;ll be able to make use of the Debian &lt;a href="https://wiki.debian.org/DebianAlternatives" target="_blank" rel="noreferrer"&gt;alternatives&lt;/a&gt; system for the transition.&lt;/p&gt;
&lt;h2 id="summary" class="relative group"&gt;Summary &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#summary" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Things are progressing nicely. We’ve established strong, productive relationships and are sponsoring work upstream to make these transitions viable.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve got a strategy for migrating the default implementation of &lt;code&gt;coreutils&lt;/code&gt; and &lt;code&gt;sudo&lt;/code&gt; in Ubuntu 25.10 which will enable a seamless revert in cases where that is desired. While &lt;code&gt;sudo-rs&lt;/code&gt; will be the default in 25.10, the original &lt;code&gt;sudo&lt;/code&gt; will remain available for users who need it, and we’ll be gathering feedback to ensure a smooth transition before the 26.04 LTS.&lt;/p&gt;
&lt;p&gt;Additionally, we&amp;rsquo;ve begun investigating the feasibility of providing &lt;a href="https://sequoia-pgp.org/" target="_blank" rel="noreferrer"&gt;SequoiaPGP&lt;/a&gt; and using it in APT instead of GnuPG. SequoiaPGP is a new OpenPGP library with a focus on safety and correctness, written in Rust. The GnuPG maintainers have recently forked the OpenPGP standard and are no longer compliant with it. Sequoia provides a modern alternative to GnuPG with strict behavior, and is already used in various other systems. More details to follow!&lt;/p&gt;
&lt;p&gt;Stay tuned!&lt;/p&gt;</description></item><item><title>Carefully But Purposefully Oxidising Ubuntu</title><link>https://jnsgr.uk/2025/03/carefully-but-purposefully-oxidising-ubuntu/</link><pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate><guid>https://jnsgr.uk/2025/03/carefully-but-purposefully-oxidising-ubuntu/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This article was originally posted &lt;a href="https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995" target="_blank" rel="noreferrer"&gt;on the Ubuntu Discourse&lt;/a&gt;, and is reposted here. I welcome comments and further discussion in that thread.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="introduction" class="relative group"&gt;Introduction &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Last month I published &lt;a href="https://jnsgr.uk/2025/02/engineering-ubuntu-for-the-next-20-years/" target="_blank" rel="noreferrer"&gt;Engineering Ubuntu For The Next 20 Years&lt;/a&gt;, which outlines four key themes for how I intend to evolve Ubuntu in the coming years. In this post, I&amp;rsquo;ll focus on &amp;ldquo;Modernisation&amp;rdquo;. There are many areas we could look to modernise in Ubuntu: we could focus on the graphical shell experience, the virtualisation stack, core system utilities, default shell utilities, etc.&lt;/p&gt;
&lt;p&gt;Over the years, projects like GNU Coreutils have been instrumental in shaping the Unix-like experience that Ubuntu and other Linux distributions ship to millions of users. According to the GNU &lt;a href="https://www.gnu.org/software/coreutils/" target="_blank" rel="noreferrer"&gt;website&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This package provides utilities which have become synonymous with Linux to many - the likes of &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, and &lt;code&gt;mv&lt;/code&gt;. In recent years, there has been an &lt;a href="https://uutils.github.io/" target="_blank" rel="noreferrer"&gt;effort&lt;/a&gt; to reimplement this suite of tools in Rust, with the goal of reaching 100% compatibility with the existing tools. Similar projects, like &lt;a href="https://github.com/trifectatechfoundation/sudo-rs" target="_blank" rel="noreferrer"&gt;sudo-rs&lt;/a&gt;, aim to replace key security-critical utilities with more modern, memory-safe alternatives.&lt;/p&gt;
&lt;p&gt;Starting with Ubuntu 25.10, my goal is to adopt some of these modern implementations as the default. My immediate goal is to make uutils&amp;rsquo; coreutils implementation the default in Ubuntu 25.10, and subsequently in our next Long Term Support (LTS) release, Ubuntu 26.04 LTS, if the conditions are right.&lt;/p&gt;
&lt;h2 id="but-why" class="relative group"&gt;But… why? &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#but-why" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Performance is a frequently cited rationale for &amp;ldquo;Rewrite it in Rust&amp;rdquo; projects. While performance is high on my list of priorities, it&amp;rsquo;s not the primary driver behind this change. These utilities are at the heart of the distribution - and it&amp;rsquo;s the enhanced resilience and safety that is more easily achieved with Rust ports that are most attractive to me.&lt;/p&gt;
&lt;p&gt;The Rust language, its type system and its borrow checker (and its community!) work together to encourage developers to write safe, sound, resilient software. With added safety comes an increase in security guarantees, and with an increase in security comes an increase in overall resilience of the system - and where better to start than with the foundational tools that build the distribution?&lt;/p&gt;
&lt;p&gt;I recently read an &lt;a href="https://smallcultfollowing.com/babysteps/blog/2025/03/10/rust-2025-intro/" target="_blank" rel="noreferrer"&gt;article&lt;/a&gt; about targeting foundational software with Rust in 2025. Among other things, the article asserts that &amp;ldquo;foundational software needs performance, reliability — and productivity&amp;rdquo;. If foundational software fails, so do all of the other layers built on top. If foundational packages have performance bottlenecks, they become a floor on the performance achievable by the layers above.&lt;/p&gt;
&lt;p&gt;Ubuntu powers millions of devices around the world, from servers in your data centre, to safety critical systems in autonomous systems, so it behooves us to be absolutely certain we&amp;rsquo;re shipping the most resilient and trustworthy software we can.&lt;/p&gt;
&lt;p&gt;There are lots of ways to achieve this: we can provide &lt;a href="https://canonical.com/blog/12-year-lts-for-kubernetes" target="_blank" rel="noreferrer"&gt;long term support for projects like Kubernetes&lt;/a&gt;, we can &lt;a href="https://canonical.com/blog/canonicals-commitment-to-quality-management" target="_blank" rel="noreferrer"&gt;assure the code we write&lt;/a&gt;, and we can &lt;a href="https://canonical.com/blog/canonical-achieves-iso-21434-certification" target="_blank" rel="noreferrer"&gt;strive to achieve compliance with safety-centric standards&lt;/a&gt;, but another is by shipping software with the values of safety, soundness, correctness and resilience at their core.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not to throw shade on the existing implementations, of course. Many of these tools have been stable for many years, quietly improving performance and fixing bugs. A lovely side benefit of working on newer implementations, is that it &lt;a href="https://ferrous-systems.com/blog/testing-sudo-rs/" target="_blank" rel="noreferrer"&gt;sometimes facilitates&lt;/a&gt; improvements in the original upstream projects, too!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written about my desire to increase the number of Ubuntu contributors, and I think projects like this will help. Rust may present a steeper learning curve than C in some ways, but by providing such a strong framework around the use of memory it also lowers the chances that a contributor accidentally commits potentially unsafe code.&lt;/p&gt;
&lt;h2 id="introducing-oxidizr" class="relative group"&gt;Introducing &lt;code&gt;oxidizr&lt;/code&gt; &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#introducing-oxidizr" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I did my homework before writing this post. I wanted to see how easy it was for me to live with these newer implementations and get a sense of their readiness for prime-time within the distribution. I also wanted a means of toggling between implementations so that I could easily switch back should I run into incompatibilities - and so &lt;a href="https://github.com/jnsgruk/oxidizr" target="_blank" rel="noreferrer"&gt;&lt;code&gt;oxidizr&lt;/code&gt;&lt;/a&gt; was born!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;oxidizr&lt;/code&gt; is a command-line utility for managing system experiments that replace traditional Unix utilities with modern Rust-based alternatives on Ubuntu systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;code&gt;oxidizr&lt;/code&gt; utility enables you to quickly swap in and out newer implementations of certain packages with &lt;em&gt;relatively&lt;/em&gt; low risk. It has the notion of &lt;em&gt;Experiments&lt;/em&gt;, where each experiment is a package that already exists in the archive that can be swapped in as an alternative to the default.&lt;/p&gt;
&lt;p&gt;Version &lt;a href="https://github.com/jnsgruk/oxidizr/releases/tag/v1.0.0" target="_blank" rel="noreferrer"&gt;1.0.0&lt;/a&gt; supports the following experiments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/uutils/coreutils" target="_blank" rel="noreferrer"&gt;uutils coreutils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/uutils/findutils" target="_blank" rel="noreferrer"&gt;uutils findutils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/uutils/diffutils" target="_blank" rel="noreferrer"&gt;uutils diffutils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/trifectatechfoundation/sudo-rs" target="_blank" rel="noreferrer"&gt;sudo-rs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-does-it-work" class="relative group"&gt;How does it work? &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#how-does-it-work" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;Each experiment is subtly different since the paths of the utilities being replaced vary, but the process for enabling an experiment is generally:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install the alternative package (e.g. &lt;code&gt;apt install rust-coreutils&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;For each binary shipped in the new package:
&lt;ul&gt;
&lt;li&gt;Lookup the default path for that utility (e.g &lt;code&gt;which date&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Back up that file (e.g. &lt;code&gt;cp /usr/bin/date /usr/bin/.date.oxidizr.bak&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Symlink the new implementation in place (e.g. &lt;code&gt;ln -s /usr/bin/coreutils /usr/bin/date&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also the facility to &amp;ldquo;disable&amp;rdquo; an experiment, which does the reverse of the sequence above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For each binary shipped in the new package:
&lt;ul&gt;
&lt;li&gt;Lookup the default path for the utility (e.g &lt;code&gt;which date&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Check for and restore any backed up versions (e.g &lt;code&gt;cp /usr/bin/.date.oxidizr.bak /usr/bin/date&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Uninstall the package (e.g. &lt;code&gt;apt remove rust-coreutils&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thereby returning the system back to its original state! The tool is covered by a suite of integration tests which illustrate this behaviour which you can find &lt;a href="https://github.com/jnsgruk/oxidizr/tree/ca955677b4f5549e5d7f06726f5c5cf1846fe448/tests" target="_blank" rel="noreferrer"&gt;on Github&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="get-started" class="relative group"&gt;Get started &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#get-started" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;⚠️ WARNING ⚠️: &lt;code&gt;oxidizr&lt;/code&gt; is an experimental tool to play with alternatives to foundational system utilities. It may cause a loss of data, or prevent your system from booting, so use with caution!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are a couple of ways to get &lt;code&gt;oxidizr&lt;/code&gt; on your system. If you already use &lt;code&gt;cargo&lt;/code&gt;, you can do the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cargo install --git https://github.com/jnsgruk/oxidizr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Otherwise, you can download and install binary releases from &lt;a href="https://github.com/jnsgruk/oxidizr/releases" target="_blank" rel="noreferrer"&gt;Github&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Download version 1.0.0 and extract to /usr/bin/oxidizr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL &lt;span class="s2"&gt;&amp;#34;https://github.com/jnsgruk/oxidizr/releases/download/v1.0.0/oxidizr_Linux_&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tar -xvzf - -C /usr/bin oxidizr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Once installed you can invoke &lt;code&gt;oxidizr&lt;/code&gt; to selectively enable/disable experiments. The default set of experiments in &lt;code&gt;v1.0.0&lt;/code&gt; is &lt;code&gt;rust-coreutils&lt;/code&gt; and &lt;code&gt;sudo-rs&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable default experiments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo oxidizr &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Disable default experiments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo oxidizr disable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable just coreutils&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo oxidizr &lt;span class="nb"&gt;enable&lt;/span&gt; --experiments coreutils
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable all experiments without prompting with debug logging enabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo oxidizr &lt;span class="nb"&gt;enable&lt;/span&gt; --all --yes -v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Disable all experiments without prompting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo oxidizr disable --all --yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The tool should work on all versions of Ubuntu after 24.04 LTS - though the &lt;code&gt;diffutils&lt;/code&gt; experiment is only available from Ubuntu 24.10 onward.&lt;/p&gt;
&lt;p&gt;The tool itself is stable and well covered with unit and integration tests, but nonetheless I&amp;rsquo;d urge you to start with a test virtual machine or a machine that &lt;em&gt;isn&amp;rsquo;t&lt;/em&gt; your production workstation or server! I&amp;rsquo;ve been running the &lt;code&gt;coreutils&lt;/code&gt; and &lt;code&gt;sudo-rs&lt;/code&gt; experiments for around 2 weeks now on my Ubuntu 24.10 machines and haven&amp;rsquo;t had many issues (more on that below…).&lt;/p&gt;
&lt;h2 id="how-to-help" class="relative group"&gt;How to Help &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#how-to-help" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re interested in helping out on this mission, then I&amp;rsquo;d encourage you to play with the packages, either by installing them yourself or using &lt;code&gt;oxidizr&lt;/code&gt;. Reply to the Discourse post with your experiences, file bugs and perhaps even dedicate some time to the relevant upstream projects to help with resolving bugs, implementing features or improving documentation, depending on your skill set.&lt;/p&gt;
&lt;p&gt;You can also join us to discuss on our &lt;a href="https://ubuntu.com/community/communications/matrix/onboarding" target="_blank" rel="noreferrer"&gt;Matrix instance&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="next-steps" class="relative group"&gt;Next Steps &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#next-steps" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Earlier this week, I met with &lt;a href="https://github.com/sylvestre" target="_blank" rel="noreferrer"&gt;@sylvestre&lt;/a&gt; to discuss my proposal to make uutils coreutils the default in Ubuntu 25.10. I was pleased to hear that he feels the project is ready for that level of exposure, so now we just need to work out the specifics. The Ubuntu Foundations team is already working up a plan for next cycle.&lt;/p&gt;
&lt;p&gt;There will certainly be a few rough edges we&amp;rsquo;ll need to work out. In my testing, for example, the only incompatibility I&amp;rsquo;ve come across is that the &lt;code&gt;update-initramfs&lt;/code&gt; script for Ubuntu uses &lt;code&gt;cp -Z&lt;/code&gt; to preserve &lt;code&gt;selinux&lt;/code&gt; labels when copying files. The &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt; and &lt;code&gt;ls&lt;/code&gt; commands from uutils &lt;a href="https://github.com/uutils/coreutils/issues/2404" target="_blank" rel="noreferrer"&gt;don&amp;rsquo;t yet support&lt;/a&gt; the &lt;code&gt;-Z&lt;/code&gt; flag, but I think we&amp;rsquo;ve worked out a way to unblock that work going forward, both in the upstream and in the next release of Ubuntu.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to do some more digging on &lt;a href="https://github.com/trifectatechfoundation/sudo-rs" target="_blank" rel="noreferrer"&gt;&lt;code&gt;sudo-rs&lt;/code&gt;&lt;/a&gt; over the coming weeks, with a view to assessing a similar transition.&lt;/p&gt;
&lt;h2 id="summary" class="relative group"&gt;Summary &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#summary" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m really excited to see so much investment in the foundational utilities behind Linux. The uutils project seems to be picking up speed after their recent &lt;a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6196-rewriting-the-future-of-the-linux-essential-packages-in-rust-/" target="_blank" rel="noreferrer"&gt;appearance at FOSDEM 2025&lt;/a&gt;, with efforts ongoing to rework &lt;a href="https://github.com/uutils/procps" target="_blank" rel="noreferrer"&gt;procps&lt;/a&gt;, &lt;a href="https://github.com/uutils/util-linux" target="_blank" rel="noreferrer"&gt;util-linux&lt;/a&gt; and more.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;sudo-rs&lt;/code&gt; project is now maintained by the &lt;a href="https://trifectatech.org/" target="_blank" rel="noreferrer"&gt;Trifecta Tech Foundation&lt;/a&gt;, who are focused on &amp;ldquo;open infrastructure software in the public interest&amp;rdquo; . Their &lt;a href="https://github.com/trifectatechfoundation/zlib-rs" target="_blank" rel="noreferrer"&gt;&lt;code&gt;zlib-rs&lt;/code&gt;&lt;/a&gt; recently released v0.4.2, which appears to now be &lt;a href="https://trifectatech.org/blog/zlib-rs-is-faster-than-c/" target="_blank" rel="noreferrer"&gt;the fastest API-compatible zlib implementation&lt;/a&gt;. They&amp;rsquo;re also behind the &lt;a href="https://github.com/pendulum-project" target="_blank" rel="noreferrer"&gt;Pendulum Project&lt;/a&gt; and &lt;a href="https://github.com/pendulum-project/ntpd-rs" target="_blank" rel="noreferrer"&gt;&lt;code&gt;ntpd-rs&lt;/code&gt;&lt;/a&gt; for memory-safe time synchronisation.&lt;/p&gt;
&lt;p&gt;With Ubuntu, we&amp;rsquo;re in a position to drive awareness and adoption of these modern equivalents by making them either trivially available, or the default implementation for the world&amp;rsquo;s most deployed Linux distribution.&lt;/p&gt;
&lt;p&gt;We will need to do so carefully, and be willing to scale back on the ambition where appropriate to avoid diluting the promise of stability and reliability that the Ubuntu LTS releases have become known for, but I&amp;rsquo;m confident that we can make progress on these topics over the coming months.&lt;/p&gt;</description></item></channel></rss>