Ubuntu 26.10 Rust Coreutils: Benchmarked Against GNU

Ubuntu 26.10 "Stonking Stingray" completes the migration to Rust-based coreutils — cp, mv, and rm were the last holdouts, stuck on GNU since 26.04 because of TOCTOU bugs found in the uutils versions during a commissioned security audit. With those fixed upstream, every core CLI utility in Ubuntu is now memory-safe. Nobody in a billion Ubuntu installs will notice. So I did the thing the announcement doesn't do: built uutils 0.11.0 from source at today's HEAD and ran 10 workloads head-to-head against GNU coreutils 9.7. The result is not a victory lap — it's a draw with sharp edges.

The build: 12 minutes, one binary, zero drama

Cloned uutils at commit bf06f91 (authored today, 2026-09-15 — literally the commit that landed hours before Ubuntu's news cycle) and built the multi-call binary:

$ git clone --depth 1 https://github.com/uutils/coreutils.git && cd coreutils
$ cargo build --release --features unix
   Compiling uu_pathchk v0.11.0 (/tmp/uutils/src/uu/pathchk)
   Compiling uu_dircolors v0.11.0 (/tmp/uutils/src/uu/dircolors)
    Finished `release` profile [optimized] target(s) in 12m 13s
$ ./target/release/coreutils --version
coreutils 0.11.0 (multi-call binary)

Everything ships as one 14MB multi-call binary — ls, sort, sha256sum, all of them. Every --version flag I threw at it answered identically to GNU. Compatibility is the entire product promise; any deviation is treated as a bug upstream. On my smoke tests (flags, sort round-trips, ls -la output structure), nothing broke.

The numbers: 10 workloads, 5 runs each, median timing

Same VM, 2 cores, GNU coreutils 9.7 vs uutils 0.11.0 dev, median of 5 runs:

WorkloadGNU (s)uutils (s)GNU/uu
uniq -c on 2M sorted lines0.3810.1292.95x Rust wins
base64 encode 50MB0.0830.0362.28x Rust wins
cut -d' ' -f1, 2M lines0.1660.0802.07x Rust wins
cat 2M lines → /dev/null0.0090.0051.95x Rust wins
sha256sum 50MB0.0650.0651.00x tie
head -n 1000000.0040.0040.88x GNU wins
wc -l 2M lines0.0110.0120.96x GNU wins
sort 2M lines0.4600.5090.90x GNU wins
md5sum 50MB0.0980.1210.81x GNU wins
seq 1M0.0110.0140.77x GNU wins

A confession: my first benchmark run reported uutils "winning" sort by 139x. Every uutils number sat at ~0.0025s regardless of workload size. I had passed no arguments to the multi-call binary — I was timing the usage error message. The corrected table above is the real one. I'm including the mistake because benchmark harnesses that only test one side are exactly how "Rust is 139x faster" posts get written.

The verdict: good enough is the whole point

The honest read of the table: uutils is now within striking distance across the board, wins hard on text-processing paths (a homegrown uniq/cut/base64 clearly outclassing GNU's), and loses on the heavy lifting — sort's external merge and md5sum's SIMD paths are years of GNU tuning that Rust hasn't matched. Nothing here is embarrassing. Nothing here justifies a migration on speed.

And that's the point Canonical is making. The migration's argument was never performance — it's that memory-safety bugs in cp, mv, and rm are the kind that run as root on every machine in the fleet. Ubuntu held back three commands for two releases over audited TOCTOU bugs, then shipped anyway once they were fixed. That's what a serious oxidization program looks like: pay for the audit, delay the release when it finds something, fund the upstream (€40k/year to Trifecta Tech Foundation) whether it's convenient or not.

My one concern: "aims for drop-in compatibility, treats any deviance as a bug" only holds while someone funds the long tail. Scripts in the wild depend on decades of GNU flag quirks. The 0.11.0 build I tested passes my smoke checks — but my smoke checks aren't 30 years of shell scripts. Ubuntu shipping it as the default in 26.10 stable on October 15 is the largest real-world compatibility test a Rust rewrite has ever run. Watch the regression reports, not the benchmark posts (including this one).

Bottom line: I built the exact code Ubuntu 26.10 is about to ship and measured it. It's up to 2.95x faster than GNU in some paths, up to 23% slower in others, and functionally invisible in day-to-day use. The migration isn't about the numbers. It's about deleting an entire class of root-exploitable memory bugs from the default install of the world's most-run Linux distro — and the discipline to delay two releases when the audit said so.