Ubuntu Rust Coreutils: Test Your Homelab Scripts

Since Ubuntu 25.10, and in 26.04 LTS, coreutils come from the Rust uutils project. What changed, a real bug it caused, how to test scripts and how to switch back.

A run-book of stacked task cards cascading in perspective, held in a pair of hands, only the hands and the subject lit

Since Ubuntu 25.10, the basic command-line tools (cp, ls, date, sort and the rest) come from uutils, a Rust reimplementation of GNU coreutils, instead of GNU coreutils. Ubuntu 26.04 LTS, released in April 2026, keeps it, so anyone upgrading LTS servers from 24.04 meets it there.

uutils aims to be a drop-in replacement and is tested against the GNU test suite. For interactive use you won’t notice. The risk is in scripts that depend on exact GNU behaviour, especially less common options.

A real example: the date --reference bug

Shortly after 25.10 shipped, a bug in the Rust date broke automatic updates: the shipped version accepted the --reference option but ignored it, and Ubuntu’s update machinery relied on it. It was fixed in rust-coreutils 0.2.2-0ubuntu2.1 (report). That’s the shape of the risk: not that common commands break, but that an option your script relies on behaves differently, quietly.

Which implementation am I running?

cp --version | head -1          # uutils prints "cp (uutils coreutils) ..."
apt list --installed 2>/dev/null | grep coreutils-from

How to test your scripts

  1. Run every cron job and backup script once by hand on an upgraded test machine or a 26.04 VM, and compare the results with the old system: file sizes, timestamps, output files.
  2. Check the options you use that go beyond the basics: date -d with complex expressions, cp --sparse, --reference, sort with locale-dependent keys, stat -c format strings.
  3. Make scripts less fragile regardless of implementation:
    • don’t parse ls or df -h output; use stat, find -printf or df --output= and byte values,
    • set LC_ALL=C in scripts that need byte-order sorting,
    • use tail -F (follow by name) for log files that get rotated,
    • prefer epoch seconds (date +%s) for time arithmetic.

Switching back to GNU coreutils

Ubuntu packages both variants. To switch a machine back:

sudo apt install coreutils-from-gnu

apt warns because an essential package is being replaced; read the prompt before confirming. Going back is reasonable for a server whose scripts you can’t test now. Report bugs you find to Ubuntu (Launchpad, rust-coreutils) so they get fixed.

Containers

Containers use the coreutils of their image. Your host’s switch doesn’t change Debian, Alpine or Ubuntu 24.04 based containers. It matters when you move your own images to ubuntu:25.10 or newer bases: run your build and entrypoint scripts against the new base before switching, and pin base images by version rather than following latest.

What’s Next

Frequently Asked Questions

Can I go back to GNU coreutils?
Yes. Ubuntu 25.10 and 26.04 LTS package both variants: coreutils-from-uutils (the default) and coreutils-from-gnu. Installing coreutils-from-gnu switches back; apt asks for confirmation because it replaces an essential package.
Does this affect my Docker containers?
Only containers built from Ubuntu 25.10 or newer images. Containers bring their own userland, so Debian, Alpine or Ubuntu 24.04 based images keep their own coreutils whatever the host runs.
Which Ubuntu releases use the Rust coreutils?
Ubuntu 25.10 was the first release to use uutils coreutils by default, and Ubuntu 26.04 LTS keeps it. Ubuntu 24.04 LTS and older use GNU coreutils.

Get notified when new articles and designs land:

No spam. Unsubscribe any time.

Sergej Voronko
Sergej Voronko
SAP Basis · Senior Operations Manager · Linux infrastructure engineer
About the author →

[discussion]

Comments are powered by Giscus — backed by GitHub Discussions. Sign in with GitHub to join the conversation.