Rust Coreutils 0.6 reaches 96 percent GNU compatibility

The Rust reimplementation of classic Unix tools reaches 96 percent GNU compatibility in version 0.6 – and reduces unsafe code.

listen Print view
Logo with the inscription Open Source, purple background

(Image: heise medien)

4 min. read
Contents

The developers of Rust Coreutils have released version 0.6. The Rust reimplementation of classic Unix tools now achieves 96.28 percent compatibility with the GNU test suite, passing 622 out of 646 tests. Compared to version 0.5, released in December, which had 87.75 percent compatibility, this represents a jump of over eight percentage points.

Particularly noteworthy: the number of failed tests dropped from 55 to just 16, while the number of skipped tests decreased from 23 to 7. The developers tested against GNU Coreutils 9.9 as a reference.

A focus of the new version is the reduction of unsafe code. The developers removed unsafe passages in the utilities date, sort, and locale.rs. Instead of direct libc calls, the software now uses the nix crate, which provides safe Rust wrappers around POSIX system calls.

For the tools rm, du, chmod, and chgrp, developers are using the openat and unlinkat system calls via the nix crate for secure directory traversal starting from version 0.6. These changes eliminate entire classes of security vulnerabilities such as buffer overflows or use-after-free errors that can occur with direct libc calls.

Version 0.6 brings performance improvements for several tools. The base encoding utilities base32, base64, and basenc work faster due to reduced memset operations. The shuf tool received optimized numeric output and a new --random-seed option. For date, a BufWriter speeds up batch processing, while uniq optimizes memory usage for case-insensitive comparisons.

The tsort tool now avoids reading the entire input into memory, which brings significant advantages for large amounts of data. df also benefits from improved file system handling.

The new version significantly expands localization support. The date tool now uses ICU support for locale-aware date and month names, as well as hour formatting and calendar support. In sort, numeric sorting now works with thousand separators, while join supports locale-aware collation. The developers are also integrating Weblate for community translations.

Videos by heise

Rust Coreutils 0.6 officially supports RISC-V 64-bit with the musl target in the CI pipeline. Cygwin support for Windows users has also been expanded. Support for the SMACK Security Module has been added to the tools ls, id, mkdir, mkfifo, and mknod.

The tail tool received a --debug flag, improved symlink following with the -F option, and FIFO timeout handling for --pid. For timeout, the developers implemented comprehensive signal handling and a --verbose option.

The sorting tool sort now supports legacy syntax with +POS/-POS, offers debug key annotations, and better locale-aware sorting. For pr, the developers corrected errors with headers, form feeds, and pagination. The tools chmod and rm handle recursive operations and symlinks better than before.

The development of Rust Coreutils is gaining increasing importance in the Linux world. Ubuntu 25.10 already uses Rust Coreutils 0.2.2 as the default as part of Canonical's Oxidising Ubuntu initiative. Fedora plans to offer version 0.5 in Fedora 44 as an option for early adopters – but not as the default variant like Ubuntu.

At FOSDEM 2026 on February 1st, Sylvestre Ledru from the uutils core team reported on practical experiences with Rust Coreutils in Ubuntu. The talk “Rust Coreutils in Ubuntu: Yes, we rewrote /bin/true in Rust – Here's what really happened” provided insights into packaging complexity, undocumented behaviors, and handling critical system tools.

The developer community is constantly growing: 41 new contributors participated in version 0.6. Those who want to test Rust Coreutils can find them in the project's GitHub repository.

(fo)

Don't miss any news – follow us on Facebook, LinkedIn or Mastodon.

This article was originally published in German. It was translated with technical assistance and editorially reviewed before publication.