System utility replacements

Starting with Ubuntu 25.10, the “oxidization” of Ubuntu (see Ubuntu Discourse) changed the providers of the system utilities coreutils and sudo to new Rust-based implementations. Previous Ubuntu releases retain their existing default providers.

For most users, no changes are required for normal usage. The new Rust-based implementations are intended to be drop-in replacements for the existing utilities, so existing commands and usage should generally continue to work as before. This page describes known differences, incompatibilities, and other considerations that may affect specific use cases.

GNU Coreutils and sudo.ws continue to receive maintenance in Ubuntu releases where they are the default providers. In newer releases where the Rust-based implementations are the default, GNU Coreutils and sudo.ws remain available as providers, while the Rust-based implementations are the primary ones going forward.

rust-coreutils

This section lists helpful resources and tips regarding the new Rust-based implementation of coreutils, provided by the rust-coreutils package. The rust-coreutils package is available for installation on Ubuntu 24.04 LTS and later.

Refer to the uutils Coreutils Documentation for information about its usage.

Release-specific exceptions

The rust-coreutils package provides implementations of all coreutils utilities, which can also be invoked through its coreutils multi-call binary. However, starting with Ubuntu 25.10, the coreutils-from-<provider> packages control which implementation is used by the standard utility commands such as cp and chmod.

Due to known incompatibilities, coreutils-from-uutils configures some commands to continue using GNU Coreutils in Ubuntu 25.10 and Ubuntu 26.04 LTS.

Release

Utilities configured to use GNU Coreutils

Ubuntu 24.04 LTS and earlier

All

Ubuntu 25.10

chmod, chown, cp, df, mv, rm, true

Ubuntu 26.04 LTS

cp, df, mv, rm, true

Ubuntu 26.10 and later

None

Note

Although the rust-coreutils package is available in Ubuntu 24.04 LTS, it cannot be configured as the default coreutils. The coreutils-from-<provider> packages required to switch the provider are only available starting with Ubuntu 25.10.

Switching the coreutils provider (Ubuntu 25.10 and later)

The coreutils-from-<provider> packages are available starting with Ubuntu 25.10 and determine which coreutils provider is used on the system. By default, the coreutils-from-uutils package is installed.

When switching providers, the --allow-remove-essential option is required because apt sees the currently active coreutils package as Essential. Switching providers therefore requires explicitly allowing apt to remove that package.

Note

update-alternatives is not currently suitable for switching between GNU Coreutils and uutils Coreutils, as alternatives are not safe for Essential packages. Instead, use the coreutils-from-<provider> packages to switch providers.

To switch to GNU Coreutils:

$
sudo apt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential

To switch back to rust-coreutils:

$
sudo apt install coreutils-from-uutils coreutils-from-gnu- --allow-remove-essential

build-essential dependency

The build-essential package has a direct dependency on the package providing the default coreutils implementation. This ensures that the coreutils implementation used in the Ubuntu archive build environment is consistent.

In Ubuntu 25.10 and later, this dependency resolves to coreutils-from-uutils. In earlier releases, it resolves to the package providing GNU Coreutils. This dependency is intentionally specific to build-essential: allowing either GNU Coreutils or uutils Coreutils could result in build failures or inconsistent build behavior due to differences between the two implementations.

Some packages also declare a dependency on build-essential without requiring its full set of build tools. This can result in an indirect dependency on coreutils-from-uutils in Ubuntu 25.10 and later.

Note

As a result, these packages may currently conflict with coreutils-from-gnu when switching the coreutils provider.

sudo-rs

This section serves as a reference for the key differences between sudo.ws and sudo-rs.

Note: Both projects are under active development, so it is not possible to maintain a fully up-to-date list of differences. This is a list of major differences as of the Ubuntu 25.10 and 26.04 releases, to help users upgrading to those.

For the most accurate and current information, refer to sudo-rs --help for a list of supported options in your installed version. Refer to man sudoers-rs for the /etc/sudoers configuration options supported by sudo-rs.

Differences

  1. Start with the official documentation from the sudo-rs project.

  2. sudo-rs prompt.

    This is the most common error users encounter when using Expect-based automation. The error often is a TIMEOUT because Expect is pattern matching on the sudo.ws prompt.

    sudo.ws prompt for password says [sudo] password for <USERNAME>, whereas sudo-rs prompt says [sudo: authenticate] <METHOD>:. sudo-rs transparently prints whatever PAM says such as Password:, PIN:, etc.

    You can use --prompt "" in Expect-based scripts to skip the regex-based matching of the prompt.

    See more information

  3. I/O logging and sudoreplay is not supported. The discontinued programs are sudo_logsrvd, sudo_sendlog, and sudoreplay.

  4. There is no sudoers.ldap. You need to use LDAP authentication via PAM.

  5. The sudo-rs team maintains the list of CLI flags parity with sudo.ws