Rust uutils Coreutils 0.11 Brings Faster Performance and Better Error Messages

Rust uutils Coreutils 0.11 Brings Faster Performance and Better Error Messages

uutils coreutils 0.11 is out with performance improvements and better error messages.

This project matters more than its version number suggests, because Ubuntu has already shipped it as the default coreutils implementation.

What uutils is

GNU coreutils provides ls, cp, mv, cat, sort, head, wc, and the rest of the commands that constitute most of what anyone types into a shell. uutils is a reimplementation of all of it in Rust, aiming for drop-in compatibility.

The motivations:

Memory safety. These tools parse untrusted input constantly, in shell pipelines and scripts, and a memory safety bug in sort or cp has real consequences.

Licensing. uutils is MIT licensed rather than GPL, which matters to projects that want a permissive base. It is also the reason some people object, since it enables proprietary derivatives of tools that have been copyleft for forty years.

Maintainability. A modern codebase with a modern test suite, against a C implementation carrying decades of accumulated platform-specific handling.

Compatibility is the whole problem

The difficulty is not writing ls. It is writing an ls that behaves identically to GNU’s in every case a script might depend on, including the obscure flags, the exact output spacing, the specific exit codes, the error message wording that someone somewhere greps for, and the edge-case behaviour that was never documented but is now load-bearing.

Scripts depend on these details whether or not their authors realised it. A subtle difference in how sort handles a locale, or how cp reports a partial failure, surfaces as a production bug months later in something that had worked for a decade.

That is why Ubuntu making it default was contentious. It is a large real-world compatibility test, and the results have been better than sceptics expected without being flawless.

If you are on Ubuntu

You are likely already using it. Checking is straightforward:

ls --version
# GNU coreutils prints "ls (GNU coreutils) 9.x"
# uutils prints "ls (uutils coreutils) 0.x"

If something in a script behaves oddly after an Ubuntu upgrade, this is worth ruling out early. GNU coreutils remains installable, and switching back is possible if you find a genuine incompatibility.

The wider Rust rewrite question

uutils sits alongside sudo-rs, the Canonical-funded C-to-Rust translation research, and the kernel’s Rust for Linux work as part of a broader move to memory-safe implementations of foundational software.

The case for is straightforward: memory safety bugs are a large fraction of serious vulnerabilities, and they mostly disappear in safe Rust.

The case against is not really about Rust. It is that rewriting mature, heavily-tested software introduces new bugs in exchange for eliminating a class of old ones, and that the accumulated correctness of forty-year-old tools is itself valuable. Both positions are reasonable, and which one is right depends on the specific tool and how carefully the rewrite is done.

For the tools most people touch every day, that experiment is now running in production on one of the most widely deployed distributions.

Background reading

Explainers for the concepts behind this story.