Ubuntu 26.10 Hands cp, mv and rm to Rust, Completing the Coreutils Transition

Ubuntu 26.10 Hands cp, mv and rm to Rust, Completing the Coreutils Transition

Ubuntu 26.10 moves cp, mv and rm to the Rust Coreutils implementation, and with that the draft release notes now record the transition as 100% complete.

These three were the holdouts. Ubuntu has shipped uutils as its default coreutils since 25.10, but 25.10 and 26.04 LTS both kept the GNU versions of cp, mv and rm because of compatibility problems. Upstream uutils has since closed them.

Why these three were last

It is not a coincidence that the final holdouts are the commands that destroy things.

Most of coreutils is observational. If wc miscounts or seq formats oddly, you notice and move on. cp, mv and rm write and delete, and they do it inside every installation script, package hook, backup job and Makefile on the system. A behavioural difference there does not produce a wrong number on your terminal. It produces a file in the wrong place, a preserved attribute that was not preserved, or a deletion that did not happen and was assumed to have.

The compatibility surface is also deceptively large. GNU cp alone carries behaviour around sparse files, reflinks, extended attributes, SELinux contexts, ACLs, hard link preservation, and what exactly happens when the destination exists and is a different type. Scripts depend on all of it, usually without knowing they do.

Holding them back for two releases while the rest of the set shipped was the right sequencing.

What actually changes for you

In normal use, nothing you will notice. In edge cases, possibly quite a lot.

The places to check are the ones where you rely on exact flag semantics or exact error text:

# which implementation is answering
cp --version
rm --version

# uutils identifies itself
cp --version | head -1

Worth auditing if you have them:

The licence question nobody asked for

There is a second-order consequence worth naming plainly, because it gets less attention than the memory-safety argument.

GNU Coreutils is GPL. uutils is MIT. Replacing the former with the latter on a default Ubuntu install changes the licence character of a chunk of the base system, in the permissive direction. Canonical’s stated motivation is memory safety, and that motivation is real, but the licence shift is a genuine effect regardless of intent and a reasonable thing for people to have opinions about.

Where this sits in the wider pattern

This is one thread of several. Canonical is funding research into C-to-Rust translation, both coreutils implementations shipped releases in the same week, and in the kernel Google is removing its C Binder driver in favour of the Rust one.

The direction is consistent even where the individual decisions are debatable: the low-level, memory-unsafe, decades-old parts of a Linux system are being rewritten by whoever is willing to do the work, and the rewrites are landing in defaults faster than most people expected.

Timing

  • Ubuntu 26.10 beta: later this month
  • Ubuntu 26.10 stable: 15 October

26.10 is an interim release with nine months of support. If you run LTS, this reaches you in 28.04, which is a long way off and a good amount of time for the remaining edges to be found by other people.

# on 26.10, confirm the full set
dpkg -l | grep -i uutils

Background reading

Explainers for the concepts behind this story.