coreutils

uutils·uutils.coreutils

Cross-platform Rust rewrite of the GNU coreutils

winget install --id uutils.coreutils --exact --source winget

Latest 0.10.0·August 5, 2026

Release Notes

Rust Coreutils 0.10.0 Release: We are happy to announce the release of Rust Coreutils 0.10.0 - a release focused on GNU compatibility and robustness. The GNU test suite results improved sharply this cycle (645 passing, 29 failing, down from 56), we landed a second wave of security hardening (TOCTOU races, safe recursive descent, SELinux labeling at creation, backup guards), and we ran a broad anti-panic campaign across the utilities. On top of that: new features (mv --exchange, install --reflink, an OpenSSL backend for the checksum utilities), more zero-copy/read-ahead performance work, and wasm32-wasip2 support.

GNU Test Suite Compatibility: ──────┬─────┬──────┬──────────────────────┬─────────────┬──────────────┬──────────────────────── Result│0.9.0│0.10.0│Change 0.9.0 to 0.10.0│% Total 0.9.0│% Total 0.10.0│% Change 0.9.0 to 0.10.0 ──────┼─────┼──────┼──────────────────────┼─────────────┼──────────────┼──────────────────────── Pass │625 │645 │+20 │90.58% │93.48% │+2.90% ──────┼─────┼──────┼──────────────────────┼─────────────┼──────────────┼──────────────────────── Skip │8 │15 │+7 │1.16% │2.17% │+1.01% ──────┼─────┼──────┼──────────────────────┼─────────────┼──────────────┼──────────────────────── Fail │56 │29 │-27 │8.12% │4.20% │-3.92% ──────┼─────┼──────┼──────────────────────┼─────────────┼──────────────┼──────────────────────── Error │1 │1 │0 │0.14% │0.14% │0% ──────┼─────┼──────┼──────────────────────┼─────────────┼──────────────┼──────────────────────── Total │690 │690 │0 │ │ │ ──────┴─────┴──────┴──────────────────────┴─────────────┴──────────────┴────────────────────────

Note: 0.9.0 bumped the GNU reference to 9.11, which added 25 new tests and temporarily pushed the failure count up. This cycle absorbed most of that debt: failures dropped from 56 to 29 and passes reached an all-time high of 645. As we contributed many tests to the GNU implementation, we are also the source of some of these regressions!

Highlights:

  • GNU Compatibility
    • 645 passing GNU tests (+20) and 27 fewer failures, the largest single-cycle drop we have had
    • Dozens of behavior alignments: pr (-w/-W/-l/-e/-o, merge mode, page ranges), nproc (cgroups v2 quota, affinity mask, offline cores, OMP_* handling), date (out-of-range years, -d -, O modifier, timezone strings), numfmt, ls, du, install, od, truncate, fold, head/tail, sum, stat
    • Many error messages now carry the file name and the real OS error instead of a vague or stripped message
  • Security Hardening
    • Continued the TOCTOU work started in 0.9.0: touch no longer uses O_TRUNC on create, mkfifo drops the path-based chmod, head checks the open fd instead of the path, split hardens the output-open path, chcon anchors recursive relabeling to the traversal dirfd
    • Safe recursive descent fixes for chmod/chown (symlink cycles, --preserve-root re-checked during the descent), and cp no longer descends into a destination subdirectory that is a symlink
    • SELinux labels are now applied at creation in mkdir, mkfifo and mknod instead of being applied afterwards
    • mv fails closed when recreating a cross-device directory destination, compares file identity in the --backup=simple guard, and strips setuid/setgid when a cross-device copy cannot preserve ownership
    • chroot chroots exactly the path --skip-chdir validated; stdbuf refuses a libstdbuf path that cannot be represented in LD_PRELOAD; install finalizes ownership before mode
    • Added SECURITY.md documenting our threat model, scope and reporting process
  • Robustness: Anti-Panic Campaign
    • Removed panics and aborts across a long list of utilities: shuf, printf, numfmt, fmt, pr, chroot, dircolors, install, ln, touch, stat, split, expand, more, kill, cp, du, rm, runcon, sort, chown/chgrp, dirname, expr, cksum, dd, truncate, hashsum
    • Recurring classes fixed: write failures on /dev/full, char-boundary panics on multibyte input, integer overflow on extreme widths/precisions/sizes, and unbounded allocations for huge arguments
    • expr now uses an iterative parser, so deeply nested expressions no longer overflow the stack
  • New Features
    • mv --exchange to atomically swap two paths
    • install --reflink support, and install -C now works with --preserve-timestamps
    • OpenSSL backend for the faster checksum utilities
    • cut -O as a short option for --output-delimiter
    • rm --one-file-system
    • timeout now works on Windows, and tail -f/-F finally follows files on Windows
  • Performance
    • Read-ahead hints across the cksum family, sum, split, expand/unexpand and the base* utilities
    • tee zero-copy fast path; cat throughput improvements; faster non-reflink cp; cross-device mv via the fast copy path
    • expr: index went from O(N*M) to O(N+M); uniq and du improvements; tsort now buffers its output
    • New benchmarks for expr, tr, cut, uniq and locale-aware sort merges
  • Internationalization
    • cut supports multibyte characters in non-UTF-8 locales
    • ls uses Unicode quotes for the locale/clocale styles in UTF-8 locales and escapes non-ASCII control characters
    • Fixed C.UTF-8 being detected as ASCII, and incomplete Fluent fallback bundles
    • cksum quotes file names in a locale-aware way
  • Cross-platform Reach
    • New wasm32-wasip2 target support
    • Windows: timeout implementation, sparse copy support in cp, tail -f, cksum CRLF fix
    • ls --numeric-uid-gid on non-unix platforms, uptime uses CLOCK_BOOTTIME on more platforms
  • Code Quality
    • clippy::collapsible_if and clippy::match_same_arms are now clean and enabled workspace-wide
    • Continued nix → rustix migration (dd, kill, sync, uptime) and further removal of unsafe and to_string_lossy
  • Contributions: This release was made possible by 50 new contributors joining our community

Call to Action: Try it in your browser - Online Playground powered by WebAssembly Help us translate - Contribute to Rust Coreutils on Weblate Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

arch

  • arch: remove .to_string_lossy() by @oech3 in #13355

base32, base64, basenc

  • baseNM: read ahead by @oech3 in #12570
  • Fix base32/base64 error for file paths ending in slash by @TheAdamWarlock in #12726

cat

  • cat: drop fuse workaround by @oech3 in #12821
  • cat: improve throughput & simplify (split PR) by @oech3 in #12850
  • cat: don't call io::stdin() twice by @oech3 in #13043
  • cat: change is_unsafe_override to is_safe_override by @oech3 in #13133

chgrp

  • chgrp: unstripped error on operation not permitted error by @Devel08 in #13361
  • chgrp: fix error message for --from nonexisting_group GROUP by @cakebaker in #13490
  • chgrp: make test_reference less strict on Linux by @cakebaker in #13650

chmod

  • chmod: always call chmod(2) even when mode bits are unchanged by @sylvestre in #13213
  • test_chmod.rs: remove an ignored test covered by check-safe-traversal.sh by @oech3 in #13298
  • chmod: fix 2 clippy::collapsible_if by @oech3 in #13509
  • chmod: report the real error when a target's metadata is inaccessible by @0xfandom in #13637

chown

  • chown: -h on symlink to directory operates on link, not target by @rossilor95 in #12522
  • chown: restrict no-dereference symlink ctime test to Linux by @rossilor95 in #12556
  • chown, chgrp: report a verbose stdout write error instead of panicking by @leeewee in #13381
  • fix(chown,chgrp): print --verbose success lines to stdout by @l46983284-cpu in #13419

chroot

  • chroot: don't panic on --skip-chdir with a non-resolving NEWROOT by @leeewee in #12732
  • chroot: avoid unwrap-like operation by @oech3 in #13306

cksum

  • cksum family: read ahead file by @oech3 in #12549
  • cksum: fix collapsible_if by @oech3 in #12942
  • feat: add OpenSSL backend for checksum utilities by @sylvestre in #12412
  • checksum: handle stdin before directory checks by @wtcpython in #13394
  • fix(cksum): reject absurdly large SHAKE --length instead of aborting by @koopatroopa787 in #13083
  • cksum: fix checksum giving false fails on windows due to crlf -> lf conversion by @nikolalukovic in #13431
  • cksum: Locale aware filename quoting in not-found messages by @RenjiSann in #13733

comm

  • comm: remove overhead by .is_dir() by @oech3 in #13371

cp

  • cp: replace match by is_ok_and by @oech3 in #12688
  • cp: simplify bool by @oech3 in #12689
  • cp: remove unuseful .map(|_|()) by @oech3 in #12700
  • cp: remove unnecessary cfgs in Linux module by @cakebaker in #12692
  • cp: Added error handling for printing debug message by @max-amb in #12710
  • cp: simplify return type of backup_dest() by @cakebaker in #12719
  • cp: handle --parents source ending in parent dir by @nkgotcode in #12639
  • cp: propagate the --attributes-only destination open error by @leeewee in #12625
  • cp: improve perf for non-reflink copy by @oech3 in #13057
  • minorbug(cp): io error messages vague when using -g by @Devel08 in #13110
  • cp: fix --remove-destination deleting source when dest is the same file under a different path by @LoukasPap in #13135
  • cp: implement sparse copy support for windows by @nikolalukovic in #12686
  • fix(cp): remove overrides_with_all from flag group by @BAMF0 in #13258
  • cp: don't panic on write error when printing --verbose output by @Chaganti-Reddy in #13310
  • cp: fix --reflink=never by @oech3 in #13065
  • fix(cp): change error to align with GNU by @BAMF0 in #13382
  • cp: dedup match & remove GNU version from comment by @oech3 in #13556
  • cp: don't hang forever when the backup destination is a fifo by @Chaganti-Reddy in #13344
  • cp: fix 2 clippy expections by @oech3 in #13537
  • cp: remove feat_acl & exacl by @oech3 in #13626
  • cp: simplify loop by while let by @oech3 in #13741

csplit

  • csplit: include the file name in output-file errors by @eyupcanakman in #13138
  • csplit: fix clippy::collapsible_if by @oech3 in #13512

cut

Installer type: zip

x86300CF7BF25E8EA16EDD0CAAE1CD04430F33451F69764960792491D624C24B52A
x640510B85218E416E249C3DAF6EBDC2C177F4AF114A9DC4A3752CEAF35BD2DC567
arm64F23CD19A54A3E0114ADD0E46E3518C4F526CC0445D2556366F0BF16CEE759CDE

Details

Homepage
https://github.com/uutils/coreutils
License
MIT
Publisher
uutils
Support
https://github.com/uutils/coreutils/issues
Copyright
Copyright (c) uutils developers

Tags

busyboxcommand-line-toolcoreutilscross-platformgnu-coreutilsrust

Older versions (14)

0.9.0
x868EA2031E7314E9CF917A000ECC7F9E3AE73BB2CE653218C3FDE0C30BDD61B658
x6477B4CAD20258B654A75C4CDE7F4F7033EA896A71A700F68072EE44599C1D76D4
arm64C792E3949A6A3D91F944B765AAB6F0B62CF213E886B347DBB81C66D7E0499D04
0.8.0
x862FFE88B9D81FAB6A1625A5F02737C8AB164741447403B92CB84377AC37E1BB39
x64DB464CF2A6ECBFD42C85F46ED2D749BE574DF4DF47FECA1F08988FD760F324F3
arm641DFA62F18B64C70B664936B06FB1BE20F0F6AFA9FF041DD95DDA629E987435A9
0.7.0
x861D0ACE9CE2FF51E2BB611F543EC6A4C887FB35B167B725815EDD0068711589F5
x64DF878E29FC738BC4273E85C9D2C35AB898E31568021E6BAF1C330C7961943C8F
arm64372323492402F3249876599F1FF99AAD9BD2AECAA217B1CB146608EF58D3ED4B
0.6.0
x864B95738775DE79250AF2CE4F1CA2ED88A31B37910B87B2B6F9F317755C9C1240
x64F223058A51E8A2A4B92D9F1A1B2954F7A02B6D0F42E4A7E0413FCDB93BE2E287
arm647183BD5AFF648B76517182E50D94819EFDAEDE637650F5B9AD9117C171C4EEBF
0.5.0
x8699C60F408F9B2BA243A6AE31E635CBC62A319573A103D56C154AE038479BA7E2
x64BA0A319A2ACF0AB2C1786FB75A246090D905F49762638E903B4F8FF3195B72BE
arm6496538E06F0092B23CB0F368426FC2B1132F494CE7195CCC53E0FC8071436F73C
0.4.0
x8652FDA51612B67DA59B3D3E55988D38B8A7E3468950538AF410AAA2662AFF5DDF
x643D22D9371118F3F6B2DBBC98D21CBFEE5D3A752732AF5B1EFB456C6410095CDA
arm6482B22FE1CA187D9AA136937AA52F2A485E40A98816F6FBECC6655199BF783198
0.3.0
x86ADB01EA026C46FC1E2D6D998047D980B63ABF49B54F34DE7C5FC94FC7611DFEE
x64BCB447C03BC8E15AE78A749586EDDF238F4C6D9576C1B4DE6B6077FA3BCE2A4F
arm64E3DADC0AF59461B2DA53A7D9B70C930009183963CFBF34B0D3B9F5C5451F7F0A
0.2.2
x86A68867D6E21BB6212C544797C1E268AF8C40D5DD1BC03DFD8DBA6D70868F8F9E
x6445922F4F43A7B4CC1191D52548201B244343CFB3C27E7761F34CE654E4CFB1B1
arm64C248AC5C0F0DCA0971DFDA1042C3DB6B9E0D498D0666192922C51F358CCBFF4A
0.2.0
x86814234E3129A68532BC94249744EC4FBDA50E00FC9B47AE00CCF77D5BF2E4C5B
x645B1B8D6E88B3ED8D3AF1CA7B180B3D99674751286E797F9735C367D680CFC634
arm64ED282FBB5A500574050E2A0C9E668D8EA13A7BE4968625D2BB0E5A5758DCB08C
0.1.0
x8636EFC2D9295FFF72BAB4F8B87963A4EE8C0D83D008F145A273FAB967AA6D6AAE
x644FF3C7E5149ADE20A342487D1C09CC6CC63599AF6DFB28D2558B925780A72D82
arm649FAA0EC0F3DF47CAFA0A09FCEAD46DA28E2640B5FE1316AD9CB7E11F19050BD4
0.0.30
x868CFE11CD0CD043099AB4598D943F786A0B5727677D5F418F8525481EA3D26F10
x643931F570FF2665DB09B30614521712CC1D31426793E189A5DB704D2C40599BA9
arm6430FE9A3363F86EF43F286E2A403DBB5CEDBBDAF9FEB9946CF74DD14A5656AABB
0.0.28
arm64457BA14493BC2F843029B2A52CA7EA893DAD0A8A7F7359EF48329DFBE4057D6A
x86A3ACE2B9111F7C6ADD567A251F772D181EADC95830AAD3BAB566BED48C3723C1
x6434FAF03E8550B523AC74668AD65FB12730930C636370F828580309A426BA93E2
0.0.27
x86EE79D64937BEE34265D36DE7EE06A51FE8BC98AF635726A291310FD45F73B297
x640C2E07FA1417E75687A05B9D577F67EEEDB5ECD0DC34BF40886E28E1E75BA15D
0.0.23
x8681A05CD58BBB7301B6F331AF0416173424533C97665671C2951124512A2145A8
x646A09488F926F1462E6D80070473580B194534C3DD7E38E15DC6C4733DA46252E