[Buildroot] [v7, 0/2] package/uutils-coreutils: new package

Alexander Shirokov shirokovalexs at gmail.com
Sun Oct 26 13:09:49 UTC 2025


Hello Everyone, 

This patch series delivers uutils-coreutils, a reimplementation of the
GNU coreutils in Rust. uutils-coreutils are designed to be a drop-in
replacement for GNU coreutils.

They are already included in some Linux distributions. For example, the
uutils-coreutils package in Arch Linux or the rust-coreutils package
in Ubuntu. Sure, in real life there is still room for improvement, but
overall, the utilities work quite smoothly for most typical use cases.

On one hand, they look good enough to try in Buildroot and make
available on a wide range of embedded devices. On the other hand,
adding the utilities could help gain valuable experience, feedback, and
improvements. That’s why these patches are here.


Configuration
=============

For now, I have configured all defaults to allow both uutils-coreutils
and BusyBox to coexist. uutils attempts to avoid overwriting anything
implicitly. Adding these utilities alongside the existing ones allows to
run them on new platforms, collect statistics, measurements and
experience.

Changing the defaults allows to rewrite existing utilities (the list of
utilities is provided over configuration, too). This approach usually
useful for debugging. For example, to make sure that existing scripts
are OK with the new utilities.


Tests
=====

To make sure that uutils and the package are fine, I used two common
approaches: the native Buildroot tools and manual execution on images
prepared by Buildroot.

The Buildroot tools:
  - ./support/testing/run-tests with test cases: TestRust,TestRustBin,
	TestRustVendoring
  - ./utils/test-pkg. See "test-pkg details"
  - ./utils/check-package

I ran uutils-coreutils on the following platforms:
  - Raspberry PI3 (based on raspberrypi3_defconfig)
  - Orange PI Zero W2 (based on orangepi_zero2w_defconfig)
  - Qemu aarch64 (based on qemu_aarch64_virt_defconfig)


Changelog
=========

v6->v7: 2025-10-26
  - uutils-coreutils version 0.3.0

v5->v6: 2025-08-12
  - Added configuration parameter to specify a list of utilities to build
  - Added comments

v4->v5: 2025-05-27
  - uutils-coreutils version 0.1.0

v3->v4: 2025-04-02
  - Picked up work from Sebastian Weyer <sebastian.weyer at smile.fr>
  - uutils-coreutils version 0.0.30
  - Added a flag to enable or disable the multicall binary
  - Removed usage of GNUMakefile. Now the build relies entirely on Cargo
  - Added changes according to comments and feedback

v2->v3: 2023-03-17
  - Minor style issues

v1->v2: 2023-03-17
  - Switched to cargo-package from generic-package
  - Format/style fixes

v1: 2023-03-14
  - Initial version


test-pkg details
=================

./utils/test-pkg -p uutils-coreutils  -c uutils-coreutils.config --all

                             arm-aarch64 [ 1/35]: OK
                   bootlin-aarch64-glibc [ 2/35]: OK
               bootlin-arcle-hs38-uclibc [ 3/35]: SKIPPED
                    bootlin-armv5-uclibc [ 4/35]: SKIPPED
                     bootlin-armv7-glibc [ 5/35]: OK
                      bootlin-armv7-musl [ 6/35]: OK
                   bootlin-armv7m-uclibc [ 7/35]: SKIPPED
                bootlin-m68k-5208-uclibc [ 8/35]: SKIPPED
               bootlin-m68k-68040-uclibc [ 9/35]: SKIPPED
             bootlin-microblazeel-uclibc [10/35]: SKIPPED
                   bootlin-mipsel-uclibc [11/35]: SKIPPED
                bootlin-mipsel32r6-glibc [12/35]: SKIPPED
                 bootlin-openrisc-uclibc [13/35]: SKIPPED
           bootlin-powerpc-e500mc-uclibc [14/35]: SKIPPED
        bootlin-powerpc64le-power8-glibc [15/35]: OK
                   bootlin-riscv32-glibc [16/35]: SKIPPED
                   bootlin-riscv64-glibc [17/35]: SKIPPED
                    bootlin-riscv64-musl [18/35]: SKIPPED
                 bootlin-s390x-z13-glibc [19/35]: OK
                      bootlin-sh4-uclibc [20/35]: SKIPPED
                    bootlin-sparc-uclibc [21/35]: SKIPPED
                   bootlin-sparc64-glibc [22/35]: OK
                    bootlin-x86-64-glibc [23/35]: OK
                     bootlin-x86-64-musl [24/35]: OK
                   bootlin-x86-64-uclibc [25/35]: SKIPPED
                   bootlin-x86-i686-musl [26/35]: OK
                   bootlin-xtensa-uclibc [27/35]: SKIPPED
                            br-arm-basic [28/35]: SKIPPED
                    br-arm-full-nothread [29/35]: SKIPPED
                      br-arm-full-static [30/35]: SKIPPED
                   br-i386-pentium4-full [31/35]: SKIPPED
                      br-mips64-n64-full [32/35]: SKIPPED
                 br-mips64r6-el-hf-glibc [33/35]: SKIPPED
               br-powerpc-603e-basic-cpp [34/35]: SKIPPED
               br-powerpc64-power7-glibc [35/35]: OK
35 builds, 24 skipped, 0 build failed, 0 legal-info failed, 0 show-info failed

Where uutils-coreutils.config contains two options:
	BR2_PACKAGE_UUTILS_COREUTILS=y
	BR2_PACKAGE_HOST_RUSTC=y

Feedback, comments, and suggestions are welcome.

Thank you

Alexander Shirokov (2):
  package/uutils-coreutils: new package
  package/uutils-coreutils: new tests

 DEVELOPERS                                    |   1 +
 package/Config.in                             |   1 +
 package/busybox/busybox.mk                    |   1 +
 package/coreutils/Config.in                   |   1 +
 package/uutils-coreutils/Config.in            |  48 +++++++
 .../uutils-coreutils/uutils-coreutils.hash    |   3 +
 package/uutils-coreutils/uutils-coreutils.mk  | 123 ++++++++++++++++++
 support/testing/tests/package/test_rust.py    |   9 ++
 8 files changed, 187 insertions(+)
 create mode 100644 package/uutils-coreutils/Config.in
 create mode 100644 package/uutils-coreutils/uutils-coreutils.hash
 create mode 100644 package/uutils-coreutils/uutils-coreutils.mk

-- 
2.51.1



More information about the buildroot mailing list