Ubuntu 26.10 moves cp, mv and rm to Rust coreutils
Ubuntu 26.10 completes the Rust coreutils switch on October 15. Your CI scripts and base images get new cp, mv and rm implementations — here's how to test first.
The commands underneath every deploy script you own are about to change implementation. Ubuntu 26.10 completes its move to Rust coreutils by switching cp, mv and rm over from the GNU versions — the last three holdouts, and the three that touch your files. Phoronix spotted the draft release notes ticking to 100% on September 16. Stable release is October 15.
What actually happened
Canonical has been shipping uutils, a Rust reimplementation of the GNU coreutils, as the default since Ubuntu 25.10. Most of the suite — ls, cat, chmod, du and the rest — went over then. But cp, mv and rm were pulled back to their GNU versions for 25.10 and 26.04 LTS after a set of TOCTOU (time-of-check to time-of-use) issues surfaced in the Rust implementations. Those are fixed upstream, so 26.10 finishes the job.
There is an escape hatch, and it is worth knowing before you need it: Ubuntu ships a coreutils-from-gnu package that restores the GNU binaries. It is in the archive for 25.10, 26.04 LTS and 26.10, so the fallback is a one-line install rather than a rebuild.
Worth noting what 26.10 is: an interim release, supported nine months, not an LTS. The LTS that most production fleets actually run is 26.04, which keeps GNU cp, mv and rm. So this is a preview of what lands in the next LTS, on a box you can test with.
Why a coreutils swap matters for your business
uutils aims to be a drop-in replacement, and for the ordinary cp -r and rm -rf in your Dockerfile it is. The risk is not the common path — it is the arguments nobody documented. Exit codes on partial failures, --preserve semantics across filesystems, how a trailing slash on a symlinked directory resolves, what happens when mv crosses a device boundary mid-operation. Shell scripts accumulate dependence on that behavior without anyone writing it down, and a build that has worked for four years is exactly where that dependence hides.
The fix is cheap and the window is open. Spin a 26.10 beta container, run your CI pipeline and your deploy scripts against it, and watch for anything that fails silently rather than loudly. If something breaks, apt install coreutils-from-gnu buys you time to fix it properly instead of during an incident. Do this now, while 26.10 is optional — not in eighteen months when the next LTS makes it the default and you are debugging a release that used to work.
Key takeaways
- Ubuntu 26.10 moves
cp,mvandrmto Rust coreutils, completing a transition that started in 25.10 - Those three were held back from 25.10 and 26.04 LTS over TOCTOU issues, now fixed upstream
- Stable release is October 15; 26.10 is an interim release, so 26.04 LTS keeps the GNU versions
- The
coreutils-from-gnupackage restores GNU binaries and is in the archive for 25.10, 26.04 LTS and 26.10 - Test your CI and deploy scripts against a 26.10 image now — edge-case flag behavior is where drop-in replacements stop being drop-in
Base image drift breaks builds nobody touched. We pin, containerize and test the infrastructure under your app so an OS bump is a scheduled Tuesday instead of a Friday outage. See what we handle, or point us at the deploy script you're afraid to change.
Sources: Phoronix, OMG! Ubuntu, Ubuntu package archive.
- #ubuntu
- #rust
- #coreutils
- #ci-cd
- #containers
Tommy Rush — Founder, Rush Commerce
Operator turned builder. 15+ years running operations — now shipping the systems businesses run on. More
Get The Rush Report weekly — one email, zero fluff.
Keep reading
PyTorch 2.14 lands Mac linear algebra and a Python 3.15 trap
PyTorch 2.14 brings native SVD and QR to Apple Silicon, makes fault tolerance a c10d concept, and ships Python 3.15 wheels where torch.compile refuses to run.
Read itOpenHands 1.19 scopes agent profiles to specific MCP servers
OpenHands 1.19.0 lets an agent profile reach only named MCP servers instead of every one you configured. Least privilege finally arrives in the agent editor.
Read it