OcxlyDev · Field Guide

Oxidizing the OS: Ubuntu 26.10 completes the move to Rust coreutils

The commands look and feel exactly the same — ls, cat, cp, rm, all where you left them. Underneath, Ubuntu has quietly swapped the decades-old C foundation of the operating system for a memory-safe Rust one. Here is what changed, why, and who is unhappy about it.

OcxlyDev Published 17 September 2026 ~12 min read Sources linked throughout
Oxidizing the OS: a terminal window shows familiar commands — ls, cp file.txt backup/, sudo apt update — running exactly as always, captioned 'looks and feels exactly the same.' Below the surface, the foundation is cross-sectioned: on the left a crumbling grey slab labelled 'C · GNU Coreutils · since the 1990s', on the right a bright Rust-orange-into-cyan slab with the Rust gear and Ubuntu marks labelled 'Rust · uutils · memory-safe'. Swapping the engine while the car runs.

With Ubuntu 26.10 (Stonking Stingray), Canonical has reached a milestone the Linux world has been building toward for a couple of years: the operating system's core command-line utilities are now a fully Rust-based set. The last holdouts — cp, mv, and rm — have moved from the C-based GNU Coreutils to the uutils Rust reimplementation, completing a transition Canonical has been feeding into the distribution since Ubuntu 25.10.2 To an end user nothing appears to change; the commands behave as they always have. But the foundation they rest on is now fundamentally different — and the reasons Canonical made the swap say a lot about where systems software is heading.

01What just happened

For decades, the small programs that make up a Unix command line — the tools that list files, copy them, change their permissions, print their contents — have been the GNU Coreutils, written in C and refined over more than thirty years.10 They are about as foundational as software gets: almost every script, container, and login session on a Linux machine leans on them. Replacing them is not a cosmetic change; it is swapping the engine while the car is running.

That is exactly what Canonical has done. Ubuntu 25.10 (Questing Quokka) shipped the Rust uutils coreutils and the Rust sudo-rs as defaults, making Ubuntu the first major distribution to put memory-safe reimplementations of these tools in front of ordinary users.1 Ubuntu 26.10 finishes the job by migrating the final three commands that had been left on their GNU versions.2 Canonical calls the wider programme "carefully but purposefully oxidising Ubuntu" — oxidation being the Rust community's pun for rewriting software in Rust (iron oxidises into rust).

The core idea. "Oxidizing" the OS means replacing memory-unsafe C foundations with memory-safe Rust ones, one component at a time, while keeping the user-facing behaviour identical. The goal is not new features — it is removing whole categories of bug from the most trusted, most-used code on the system.

02Why Canonical is betting on Rust

The case rests almost entirely on memory safety. Languages like C and C++ let a program read or write memory it should not — buffer overflows, use-after-free, invalid writes — and those mistakes are the root cause of a large share of serious security vulnerabilities. Microsoft has reported that roughly 70% of the CVEs it assigns each year are memory-safety issues, and Google has found the same ~70% figure among the serious security bugs in Chromium.6 Rust eliminates most of that class of bug at compile time: its ownership and borrow-checking rules make invalid memory access a program that will not build, rather than a crash or exploit at runtime. It is a strong enough argument that US agencies including CISA have urged the industry to move to memory-safe languages for exactly this reason.7

Crucially, Rust delivers that safety without giving up the performance an operating system demands. Its zero-cost abstractions let developers write high-level, ergonomic code that compiles down to machine code as fast and as lean as hand-tuned C — no garbage collector, no heavy runtime. Canonical's engineering leadership has framed Rust as the most compelling systems language for the coming decades, on the simple logic that fewer memory bugs mean fewer crashes and a smaller attack surface.1 For code that runs with high privilege on hundreds of millions of machines, shrinking the attack surface is worth a great deal of engineering effort.

In C, a memory bug is a runtime crash or an exploit. In Rust, the same mistake is usually a compile error — the vulnerability never ships because the program never builds.
Two lanes showing the same memory bug. Left, C/C++: a program with an unchecked strcpy into a 16-byte buffer compiles cleanly ('Build successful'), then at runtime a long input triggers a segmentation fault and a CVE that an attacker exploits — 'the bug ships, crash or exploit at runtime.' Right, Rust: the same logic is stopped at compile time by the borrow checker with 'error[E0499]: cannot borrow buffer as mutable' — 'the bug never builds, the vulnerability never ships.' A banner reads: ~70% of serious security bugs are memory-safety issues (Microsoft, Google, CISA). Rust moves the failure from runtime to compile time.
The same memory bug, two outcomes: in C/C++ it compiles and detonates at runtime as a crash or exploit; in Rust the borrow checker rejects it at compile time, so the vulnerability never ships. Rust moves the failure from runtime to build time.

03The key replacements: uutils coreutils

The centrepiece is uutils, a cross-platform rewrite of the GNU Coreutils in Rust that aims to be a drop-in replacement.3 Everyday commands — ls, cat, chmod, du, and dozens more — have been reimplemented so that, ideally, you cannot tell the difference from the outside. The three commands that manipulate files most destructively, cp, mv, and rm, were deliberately held back in the 26.04 LTS release because of TOCTOU (time-of-check to time-of-use) bugs — a class of race condition where a file's state changes between the moment a program checks it and the moment it acts, which can be abused. Those issues were resolved upstream (a TOCTOU-resistant copy module landed in a 2026 uutils release), clearing the way for the three commands to ship in 26.10.2

It is worth being precise about what this buys you. The rewrite does not add features you will notice; its payoff is defensive, and it is not free of risk during the transition — new code has new bugs. That is why Canonical is auditing heavily (more on that below) rather than trusting the "Rust is safe" slogan on its own.

04A safer sudo

sudo — the program that lets an ordinary user run a command as root — is one of the most security-sensitive utilities on any system, which makes it a natural early target. Ubuntu 25.10 made sudo-rs the default.5 The interesting design choice is that sudo-rs does not try to replicate every quirk of the original C sudo. Rather than chase bug-for-bug compatibility with a large, feature-rich codebase, its developers re-engineered a smaller, functionally safer tool from the ground up, implementing the common paths people actually use and deliberately leaving out rarely-used, historically risky features.4

sudo-rs comes out of the Trifecta Tech Foundation's "Privilege Boundary" initiative, which targets exactly the components that handle privilege escalation — the places where a memory bug is most dangerous, because a flaw there can hand an attacker root.4 Concentrating the memory-safety effort where the blast radius is largest is a sound way to prioritise.

05Next on the list: ntpd-rs

Canonical is not stopping at coreutils and sudo. The next announced target is time synchronisation: the Rust-based ntpd-rs is slated to become the default Network Time Protocol client by Ubuntu 27.10.2 NTP is another quietly critical, network-facing service — a daemon that parses data from the internet is precisely the kind of attack surface where memory safety pays off. The pattern is deliberate: work outward from the most trusted and most exposed components, replacing each with a memory-safe equivalent while keeping behaviour stable.

A release timeline of Ubuntu's oxidation, each milestone marked C to Rust. 25.10 (Questing Quokka, 2025-10): uutils coreutils plus sudo-rs become default — ls, cat, chmod, sudo. 26.04 LTS (2026-04): a caution node — cp, mv, rm held back due to TOCTOU race-condition bugs. 26.10 (Stonking Stingray, 2026-10): cp, mv, rm land, 'coreutils migration COMPLETE' with a TOCTOU-resistant copy. 27.10 (planned, 2027-10, dashed): ntpd-rs becomes the default NTP client. A tool legend maps ls, cat, chmod, cp, mv, rm, sudo and ntpd to their jobs. Work outward from the most trusted, most exposed components.
Ubuntu's oxidation roadmap: 25.10 shipped uutils coreutils and sudo-rs; 26.04 LTS held cp/mv/rm back over TOCTOU bugs; 26.10 completes the coreutils migration; and ntpd-rs is slated to become the default NTP client by 27.10.

06Managing the transition and the supply chain

Swapping foundational tools is as much a logistics problem as an engineering one, and Canonical has built process around it:

  1. Embedded SBOMs. Since early 2026, Canonical has used the cargo auditable tool to embed a Software Bill of Materials — a precise list of the exact dependency ("crate") versions compiled in — directly into every Rust binary. That makes it far easier to answer "is this machine affected?" when a vulnerability is disclosed in a specific crate version.8
  2. Deterministic builds via vendoring. Rather than packaging each Rust dependency as its own separate Debian package, Canonical bundles ("vendors") the required dependency code together with the tool, which produces stable, repeatable builds instead of a fragile web of independently-versioned packages.2
  3. Independent audits. Canonical commissioned the security firm Zellic to audit the uutils codebase; across the audits Zellic raised more than a hundred issues, dozens of which received CVE identifiers, and Canonical says the large majority have been fixed.2 This is the crucial counterweight to the "new code, new bugs" risk of any rewrite.
  4. Funding the ecosystem. Canonical backs the effort financially, donating €40,000 a year to the Trifecta Tech Foundation to fund ongoing open-source Rust development, including the upcoming ntpd-rs work.2
Why the SBOM matters. When a bug is found in, say, a compression crate used by a dozen tools, an embedded SBOM turns "which of our binaries are vulnerable?" from a research project into a one-line query. Baking provenance into the binary is a quietly significant supply-chain security win, independent of the language.
How Canonical de-risks the transition, in four panels. 1 — Embedded SBOMs: a Rust binary with a Cargo.lock / SBOM manifest listing exact crate versions inside, via cargo auditable, so 'which binaries are affected?' becomes one query. 2 — Deterministic builds (vendoring): scattered dependency crates (serde, clap, anyhow) bundled into one sealed 'vendored dependencies' package for stable, repeatable builds. 3 — Independent audits: a magnifying glass over code with 'Zellic — 100+ issues found, dozens of CVEs, vast majority fixed.' 4 — Funding the ecosystem: a coin flowing to the Trifecta Tech Foundation crest, €40,000 per year. New code has new bugs, so audit, track, and fund in the open.
The transition is de-risked with process: embedded SBOMs (cargo auditable), deterministic builds via vendoring, independent Zellic audits, and €40,000/year of upstream funding to the Trifecta Tech Foundation — because new code has new bugs.

07The compatibility grind

The single hardest part of the whole effort is invisible to users: bug-for-bug compatibility. The uutils project targets 100% drop-in compatibility with GNU Coreutils, which means any observable deviation — a different exit code, a slightly different error message, an edge case in how a flag is parsed — is treated as a defect to fix, not an acceptable difference.3 The project measures itself against the official GNU test suite and has been climbing steadily toward full parity, but the last few percent are the hardest: they encode thirty years of accreted, sometimes-undocumented behaviour that real scripts silently depend on.3

This is the grueling, unglamorous work that decides whether the transition is safe. A coreutils command that is 99% compatible sounds excellent until the 1% is the exact flag a critical deployment script relies on. Holding cp, mv, and rm back for an entire LTS cycle over TOCTOU bugs was Canonical choosing that grind over shipping on schedule — the right call for tools that delete data.

08The challenges and the controversy

Not everyone thinks this is progress. The pushback falls into a few camps:

First, the "if it isn't broken" argument. GNU Coreutils has been hardened and optimised for three decades; critics ask whether it is wise to throw out that accumulated reliability and those hard-won optimisations for the promise of memory safety, especially when the specific tools being replaced are mature and already comparatively safe.9 A rewrite trades known, battle-tested behaviour for new code that, however careful, has simply had less time in the field.

Second, a licensing objection that matters to the free-software community. GNU Coreutils is licensed under the copyleft GPLv3, which requires anyone who distributes it to share their source. uutils is under the permissive MIT license, which does not — meaning a vendor could bundle it into a closed product without giving anything back. Critics argue that replacing a copyleft cornerstone of the system with a permissively-licensed one quietly erodes the guarantees that made the GNU tools free in the first place.9

Third, a philosophical unease: for some, swapping out the GNU userland is a break with the Unix tradition these tools embody, trading decades-old, universally-understood components for something newer on a bet about the future. Even supporters concede that security is not the only motivation — modernising the codebase and attracting new contributors matters too — which is precisely why the debate is more nuanced than "Rust good, C bad."9

The case, and the pushback, on a balance scale weighing 'memory safety' against 'battle-tested reliability'. The case for (cyan checks): memory-safe by construction, ~70% of serious security bugs designed out (Microsoft, Google, CISA), smaller attack surface, drop-in compatible climbing toward 100% GNU test-suite parity, audited and SBOM-tracked. The pushback (magenta cautions): 'if it isn't broken' — 30 years of hardened C replaced; licensing concerns as GPLv3 copyleft shifts to MIT permissive; a break from Unix philosophy; and new code, new bugs (Rust is memory-safe, not bug-free). The verdict: worth doing, done carefully, in the open, with the receipts.
An even-handed scorecard: real, structural benefits (memory safety, smaller attack surface, drop-in compatibility, audits) weighed against genuine pushback (throwing out hardened C, the GPLv3→MIT licensing shift, the Unix-philosophy break, and new code carrying new bugs).

09Where OcxlyDev lands

Ubuntu's oxidation is a genuinely significant moment: for the first time, a mainstream operating system's core userland is memory-safe by construction rather than by careful hand-auditing. The upside is real and structural — an entire category of vulnerability, the kind responsible for roughly 70% of serious security bugs, is designed out of the most privileged, most-used code on the machine. That is not marketing; it is a different risk profile.

Our take: the sceptics are right that a rewrite is not free — new code carries new bugs, the compatibility tail is brutal, and the licensing shift deserves the scrutiny it is getting. But Canonical is doing this the defensible way — auditing independently, embedding SBOMs, funding the upstream projects, and holding risky commands back until they are ready rather than shipping to a calendar. Memory safety at the foundation is worth pursuing, and doing it carefully, in the open, with the receipts to show for it, is how you earn the right to swap the engine while the car is running. The commands will keep looking the same; that is the point. What changed is everything you cannot see.

About this piece. An OcxlyDev field guide to Ubuntu's move to Rust-based core utilities. For adjacent reading, see our pieces on taking control of your own stack and the coming crypto migration. Release names, version numbers, audit tallies, and default-status dates change quickly — treat the specifics here as a September 2026 snapshot and follow the linked primary sources (Canonical, the uutils project, and the Trifecta Tech Foundation) for the current state.

References

  1. Canonical — "Canonical releases Ubuntu 25.10 Questing Quokka": the first major distribution to ship Rust uutils coreutils and sudo-rs by default, and Canonical's memory-safety rationale
  2. It's FOSS News — "Ubuntu's Rustification Has a New Milestone: Coreutils Migration is Complete": cp/mv/rm moving to uutils in 26.10, the TOCTOU holdback, the Zellic audit, vendoring, the €40k/yr Trifecta funding, and the ntpd-rs plan for 27.10
  3. uutils — the cross-platform Rust reimplementation of GNU Coreutils aiming for 100% drop-in compatibility, measured against the official GNU test suite
  4. Trifecta Tech Foundation — the Privilege Boundary initiative behind sudo-rs: hardening privilege-escalation components with Rust's compile-time memory-safety guarantees
  5. Phoronix — "Ubuntu 25.10 Plans To Use sudo-rs By Default For Memory-Safe, Rust-Based sudo"
  6. Microsoft Security Response Center — ~70% of the CVEs Microsoft assigns each year are memory-safety issues (Google reports the same ~70% figure for serious Chromium bugs)
  7. CISA/NSA — "Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development": the government guidance urging a move to memory-safe languages
  8. cargo-auditable — the tool that embeds a dependency Software Bill of Materials (SBOM) directly into Rust binaries for post-hoc vulnerability tracking
  9. LWN.net — "Rewriting essential Linux packages in Rust": the modernization case, the MIT-vs-GPLv3 licensing objection, and the Unix-philosophy pushback against replacing GNU components
  10. GNU Coreutils — the incumbent C-based core utilities (GPLv3), refined over more than three decades and depended on by nearly every Linux script and session