XT.PT Userland → This story
Filed

Updated 08:02
Reporting
Prelo
Verified by Roger Morais
4 min · 609 words
News Userland

Rust Coreutils 0.10.0 gets within 29 failures of GNU's own test suite

Version 0.10.0 pairs a record GNU-compatibility score with a second wave of security hardening and an anti-panic campaign.

Filed07 Aug 2026, 08:02 UTC Length4 min · 609 words ReportingPrelo
GNU Results

The uutils project shipped Rust Coreutils 0.10.0 on August 5, and the release notes lead with the number that matters: the Rust rewrite now passes 645 of the 690 tests in GNU coreutils' own test suite, with failures down from 56 to 29 in a single cycle. The notes call it "a release focused on GNU compatibility and robustness" — and, unusually for a release announcement, spend more words on races and panics than on features.

The scoreboard

The project publishes its GNU test results as a table, and the 0.9.0 → 0.10.0 deltas are: passes up from 625 to 645 (93.48% of the suite), failures down from 56 to 29 (4.20%), skips up from 8 to 15. The notes describe the failure drop as "the largest single-cycle drop we have had."

Part of that drop is debt repayment. The previous release moved the GNU reference implementation to version 9.11, which the notes say "added 25 new tests and temporarily pushed the failure count up. This cycle absorbed most of that debt." There is also a nicely self-aware wrinkle:

As we contributed many tests to the GNU implementation, we are also the source of some of these regressions!

Rust Coreutils 0.10.0 release notes

Hardening, second wave

The security section continues the TOCTOU (time-of-check-to-time-of-use) work started in 0.9.0, and the fixes are specific enough to audit: touch no longer uses O_TRUNC on create, head checks the open file descriptor instead of the path, chcon anchors recursive relabeling to the traversal dirfd, and cp no longer descends into a destination subdirectory that is a symlink. SELinux labels are now applied at creation in mkdir, mkfifo, and mknod rather than afterwards. mv "fails closed when recreating a cross-device directory destination" and "strips setuid/setgid when a cross-device copy cannot preserve ownership." The project also added a SECURITY.md documenting its threat model and reporting process.

Alongside that ran what the notes call an anti-panic campaign, targeting recurring crash classes across dozens of utilities: "write failures on /dev/full, char-boundary panics on multibyte input, integer overflow on extreme widths/precisions/sizes, and unbounded allocations for huge arguments." expr moved to an iterative parser so deeply nested expressions no longer overflow the stack.

New since 0.9.0

The feature list is short but useful: mv --exchange atomically swaps two paths, the checksum utilities gained an OpenSSL backend, rm picked up --one-file-system, and install learned --reflink. Windows users get a working timeout and — "finally," per the notes — tail -f. There is a new wasm32-wasip2 target, and performance work includes a zero-copy fast path for tee and an expr index rewrite from O(N×M) to O(N+M). The release credits 50 new contributors this cycle.

Why a test score is front-page news

The score is the whole ballgame because a distribution bet on it. In a March 2025 Ubuntu Discourse post, Canonical's plan was stated plainly: "My immediate goal is to make uutils' 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." The stated motive was not speed: "it's the enhanced resilience and safety that is more easily achieved with Rust ports that are most attractive."

Releases like this one are what "conditions are right" looks like in practice — and the 29 remaining failures are the exact, enumerable gap where a shell script written against GNU behavior can still land differently on a Rust userland.

Primary sources: Rust Coreutils 0.10.0 release notes, Carefully but purposefully oxidising Ubuntu (Ubuntu Discourse), read 2026-08-07.

Corrections and source documents: contact the desk
Read next →
Read next
The toolchain · 6 min

Go's h2c security fix armed a deadline it forgot to disarm

Release engineering · 6 min

OpenSSH stops batching: 10.5 ships 36 days after 10.4, and the release notes say why