Skip to content

Releases: uutils/coreutils

0.10.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 21:30

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 and 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!


GNU testsuite evolution


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 nixrustix 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

base32, base64, basenc

cat

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

comm

cp

*...

Read more

0.9.0

Choose a tag to compare

@github-actions github-actions released this 30 May 14:43

Rust Coreutils 0.9.0 Release:

We are excited to announce the release of Rust Coreutils 0.9.0 - a release focused on safety and security. This cycle was shaped by a third-party security audit, driving extensive TOCTOU hardening and a sustained, project-wide effort to shrink the amount of unsafe code by removing it outright and migrating low-level syscalls from nix/libc to rustix. On top of that, we landed major zero-copy I/O performance work (splice/tee/pipe), broadened WebAssembly, Cygwin and Windows support, and continued contributing tests and bug reports upstream to GNU coreutils.


GNU Test Suite Compatibility:

Result 0.8.0 0.9.0 Change 0.8.0 to 0.9.0 % Total 0.8.0 % Total 0.9.0 % Change 0.8.0 to 0.9.0
Pass 630 625 -5 94.74% 90.58% -4.16%
Skip 14 8 -6 2.11% 1.16% -0.95%
Fail 21 56 +35 3.16% 8.12% +4.96%
Error 0 1 +1 0% 0.14% +0.14%
Total 665 690 +25 (new tests)

Note: The rise in failing tests is due to the upstream GNU test suite being extended, not to regressions on our side. We updated our GNU reference from 9.10 to 9.11 (PR #11922), which added 25 new tests (665 → 690). Many of these newly-introduced tests are not yet passing, which accounts for the jump from 21 to 56 failures; no previously-passing functionality regressed, and work is ongoing to address the new tests.


GNU testsuite evolution


Highlights:

  • Security Hardening (Zellic audit)

    • A third-party security audit by Zellic reviewed the codebase; the findings - widely reported as 44 CVEs (see also the Ubuntu update and the corrode write-up Bugs Rust won't catch) - were concentrated in TOCTOU races and filesystem edge cases that Rust's type system does not prevent
    • It's worth noting that many of these CVEs are not memory-safety issues but differences in behavior from GNU coreutils that the audit identified; aligning our semantics with GNU resolves them
    • This release closes many of them: a new TOCTOU-resistant uucore::safe_copy module; TOCTOU fixes in cp, mv, and chmod recursive traversal; rm dot/dotdot path-parsing protection; nohup.out now created with mode 0600; and chroot now resolves all ids before chrooting
  • Reducing unsafe & migrating to rustix

    • A sustained, project-wide push to shrink the unsafe surface: dozens of unsafe removals across utilities, tests, fuzz targets and uucore (get_groups, make_fifo, build.rs, and more)
    • Migration from nix/libc to rustix across id, tr, timeout, sort, wc, tail, cp, who, factor, and core process/IO paths
  • Performance

    • splice()/tee()/pipe() fast paths landed across cat, wc, head, tail, yes, cp, tee, and unexpand (e.g. unexpand +7.5%, faster cp from a pipe on Linux, tee via raw syscalls, yes using the tee syscall)
    • Consolidated in a reworked uucore::pipes / buf_copy
  • GNU Compatibility & Upstream Collaboration

    • Reference bumped to GNU 9.11, which extended the suite with 25 new tests (the reason the failure count went up - see the note above; it is not a regression)
    • We continue to contribute tests and bug reports upstream to GNU coreutils, and our compatibility work keeps surfacing edge cases on both sides
    • New fixes across numfmt, date, tr, cksum, factor, head, stat, and sort
  • numfmt Overhaul

    • Precision handling, rejection of scientific notation, LC_NUMERIC decimal separator, zero-padding for negative numbers, IEC precision cap, large %f values, --to=auto exit code, and multi-byte --suffix width accounting
  • ls Improvements

    • ls -lF symlink target indicators, link-count column no longer inflated per-ACL-file, version-sorting and recursive-mode fixes, independent permissions-column width
    • Refactor letting crate users (e.g. nushell) call ls without writing everything to stdout
  • Cross-platform Reach

    • WASI/wasm support for ln, dd, mktemp, and tty.wasm; Cygwin CI and builds (date, stdbuf); Windows tty (incl. msys2 paths); OpenBSD triage improvements
  • Internationalization

    • numfmt and du now honor LC_NUMERIC for the decimal separator
  • Contributions: This release was made possible by 30 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

cat

chroot

cksum

  • cksum: fix parsing error with tagged cheksum files by @frenchua in #11704
  • cksum: get rid of print! and println! to avoid panicking on write errors by @RenjiSann in #12099
  • cksum: Fix --check filename escaping for 9.11 by @RenjiSann in #12156
  • cksum: Introduce HashLength newtype to avoid byte/bit misuse by @RenjiSann in #12235

coreutils

  • coreutils: --help args is same with --help by @oech3 in #11367
  • coreutils: fix panic on linux < 6.4 when /proc is not mounted by @oech3 in #12104

cp

date

  • date: replace regex with hand-written format spec parser by @sylvestre in #11758
  • date: use cfg unix by @oech3 in #11952
  • date: width prefix in %N format specifier is ignored ( %3N, %6N always output full 9 nanosecond digits) #12001 by @Devel08 in #12010
  • date: fix build for cygwin by @oech3 in #12309
  • date: re-zone trailing TZ abbreviation input to local timezone by @0xSoftBoi in #12327

dd

df

  • df: get rid of unnecessary clone calls by @fogti in #12073

dirname

du

Read more

0.8.0

Choose a tag to compare

@github-actions github-actions released this 06 Apr 20:48

Rust Coreutils 0.8.0 Release:

We are excited to announce the release of Rust Coreutils 0.8.0 — a major release featuring significant performance gains across core utilities, expanded WebAssembly (WASI) support with a brand-new online playground, and continued hardening against edge-case panics, /dev/full aborts and start of a large-scale migration from nix to rustix** for lower-level syscall safety!


GNU Test Suite Compatibility:

Result 0.7.0 0.8.0 Change 0.7.0 to 0.8.0 % Total 0.7.0 % Total 0.8.0 % Change 0.7.0 to 0.8.0
Pass 629 630 +1 94.59% 94.74% +0.15%
Skip 13 14 +1 1.95% 2.11% +0.16%
Fail 23 21 -2 3.46% 3.16% -0.30%
Error 0 0 0 0% 0% 0%
Total 665 665 0

GNU testsuite evolution


Highlights:

  • GNU Compatibility & Upstream Collaboration

    • 630 passing GNU tests, with 2 fewer failures than 0.7.0
    • Continued contributing tests and bug reports upstream to GNU coreutils, strengthening both projects
    • Our compatibility work regularly uncovers edge cases in GNU itself, leading to fixes on both sides
  • nixrustix Migration

    • Replaced nix crate with rustix across cat, df, wc, tty, tsort, tail, touch, date, mkdir, and uucore
    • Reduced range of unsafe code in hostname, logname, who, and nice
    • uucore: uses rustix for splice(), restricted to Linux
  • Performance Improvements

    • uucore: Share fluent resources between threads — dd perf +45%
    • uucore: Call rt_sigaction once instead of 62 times — faster startup
    • ls: Replace recursion with iterative depth-first search; remove many unnecessary allocations
    • sort: Performance improvements across sorting paths
    • wc: Improved -c performance with unextended pipe input (Linux)
    • cat: Avoid unnecessary pipe() when stdout is already a pipe; don't lock stdout before splice()
    • dd: Avoid zero-filling buffer at read_and_discard
    • tee: Increased buffer size for large input; removed Box and dyn overhead
    • numfmt: Protect name from argv[0] — +3% perf
    • pr: Avoid String conversion when storing lines to print
    • true/false/echo: Avoid uu_app().render_version() for smaller binary
  • WebAssembly (WASI) Support & Online Playground

    • New: Online Playground — try Rust Coreutils directly in your browser, powered by WebAssembly (blog post)
    • Added WASI support for 70+ utilities including ls, head, cat, cp, mv, sort, tail, and many more
    • Embedded all locales in the WASI binary
    • Added WASI platform stubs for FileInformation and IO module in uucore
    • Single-threaded sort path for WASI; disabled rayon on WASI
  • Platform Support

    • NetBSD: Multiple fixes, stdbuf support, expanded CI coverage
    • pathchk: Now builds for Windows
    • wc: Cross-platform building and 32-bit support
    • stdbuf: Fixed Cygwin cfg block; detect unsupported target at build time
    • uucore(fs): Made display_permissions_unix cross-platform
    • uucore: Support realtime signals (RTMIN/RTMAX) in signal_by_name_or_value
    • uucore: Permit D as decimal suffix modifier for GNU compatibility
  • Documentation & Manpages

    • Manpages now include TL;DR examples, links to the source code, and open bugs — see for example ls
    • Manpages are available in multiple languages including French and Spanish, refreshed daily
    • Added manpage linting in CI to catch formatting issues early
    • TL;DR attribution and disclaimer are now translatable
  • Contributions: This release was made possible by 13 new contributors joining our community


Call to Action:

Try it in your browserOnline Playground powered by WebAssembly
Help us translate — Contribute to Rust Coreutils on Weblate or TL;DR pages
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

cat

chown

cksum

coreutils

cp

cut

date

dd

df

  • df: replace unsafe libc...
Read more

0.7.0

Choose a tag to compare

@sylvestre sylvestre released this 08 Mar 21:40
995c9e0

Rust Coreutils 0.7.0 Release:

We are excited to announce the release of Rust Coreutils 0.7.0 — a performance-focused release with major optimizations across dozens of utilities, continued safety improvements replacing unsafe code with safe abstractions, and a comprehensive campaign to eliminate panics on write errors. We also contributed many patches upstream to GNU coreutils, and welcomed their feedbacks and supports, strengthening both projects!


GNU Test Suite Compatibility:

Result 0.6.0 0.7.0 Change 0.6.0 to 0.7.0 % Total 0.6.0 % Total 0.7.0 % Change 0.6.0 to 0.7.0
Pass 622 629 +7 96.28% 94.59% -1.69%
Skip 7 13 +6 1.08% 1.95% +0.87%
Fail 16 23 +7 2.48% 3.46% +0.98%
Error 1 0 -1 0.15% 0% -0.15%
Total 646 665 +19 (new tests)

Note: The GNU test reference was updated from 9.9 to 9.10, adding 19 new tests. While the pass percentage decreased due to these newly added tests, the absolute number of passing tests increased by 7 and errors were eliminated entirely. Work is ongoing to address the new test failures.


GNU testsuite evolution


Highlights:

  • GNU Compatibility & Upstream Contributions

    • 629 passing tests (+7 from 0.6.0), with 19 new tests added from the GNU 9.10 update
    • Updated GNU test reference from 9.9 to 9.10
    • Contributed numerous patches upstream to GNU coreutils, benefiting both projects
    • New GNU compatibility fixes across date, fmt, kill, ptx, numfmt, cksum, and more
    • Took over maintenance of num-prime, the primality testing library used by factor
  • Performance Overhaul

    • Faster hash maps: rustc-hash in ls, du, tsort, shuf, mv; foldhash in sort
    • unexpand/expand: ASCII fast-path, buffered reads — 14%+ gain in unexpand
    • shuf, split, sort, du: Reduced malloc allocations (+3–6% in du, +4% in shuf)
    • nl: Optimized with itoa and direct writing
    • true/false: Removed clap dependency, smaller binary, faster startup
    • uucore: Disabled signal setup in simple utilities for binary size and startup speed
  • Robustness: Eliminated /dev/full Panics

    • Fixed panics when stderr is /dev/full across 20+ utilities (echo, date, sort, expr, hostname, id, comm, pr, dircolors, and more)
    • Generic fix ensuring unrecognized options with 2>/dev/full do not abort
  • Safety & Code Quality

    • Replaced unsafe libc calls with safe nix crate wrappers in uucore (umask, mkdirat, and more) and mknod
    • Eliminated TOCTOU races in ln, tac, and install -D
    • rm: --preserve-root now works correctly on symlinks
    • MSRV updated to 1.88
  • Notable Bug Fixes

    • date: Extensive fixes — -u/-s/-d flags, timezone abbreviation lookup and DST, RFC-822 format, %+/%_ modifiers, --debug, locale date_fmt
    • cp: Readonly directories, -a/-z flags, special files, non-UTF-8 directory names
    • mv: Preserve symlinks during cross-device moves, handle FIFOs in directories
    • ls: Hyperlink OSC 8 format, dired reports, fd leak on deep recursion, invalid UTF-8 hidden files
    • sort: Collator panic in worker threads, scientific notation parsing
    • paste: Multi-byte delimiters, GNU escape sequences, bounded buffering
    • printf: %q shell quoting with control chars and quotes
    • ptx: -t/--typeset-mode, multibyte Unicode panic, GNU default behavior
    • numfmt: --debug flag, empty delimiter, null byte handling, error message formatting
    • cksum: SHAKE algorithms, --binary/--text/--tag errors
    • cut, tac, tail, tr, uniq, od, chroot, stat, mktemp, pr, readlink, ln, kill, nproc, rm, env, sync, fmt, factor, wc: Various GNU compatibility and correctness fixes
  • Platform Support

    • NetBSD and PowerPC build fixes
    • Windows: tac stdin piping, test -r/-w/-x, publish static *.exe binaries
    • WebAssembly: Publish *.wasm artifacts
    • stdbuf: Support libstdbuf in same directory as binary
    • NixOS test compatibility fix; added security audit workflow
  • Contributions: This release was made possible by 23 new contributors joining our community


Call to Action:

Help us translate - Contribute translations at Weblate
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

cat

cksum

chroot

comm

  • comm /etc/pacman.conf /dev/null 2>/dev/full does not abort by @oech3 in #10746
  • date, comm, tty: Fixing handling output to dev/null by @ChrisDryden in #10888

coreutils

  • tests/misc/coreutils.sh: Fail with invalid binary name by @oech3 in #10258
  • coreutils: output expected error for unrecognized options by @ChrisDryden in #9869
  • coreutils: Let the name *utils valid by @oech3 in #10729
  • coreutils: Fix 2>/dev/full aborts & drop a sed for GnuTests by @oech3 in #10740
  • all: --typo 2>/dev/full does not abort by @oech3 in #10764
  • Add regression test for coreutils --list by @oech3 in #10858

cp

csplit

  • refactor(csplit): use &str slices for patterns by @xtqqczze in #11013
  • csplit: add benchmarks for line number and regex pattern splitting by @sylvestre in #10927

cut

date

  • date: fix -u flag to match GNU behavior for input parsing by @ChrisDryden in #10715
  • date: Fix format optional argument to capture all following parameters by @cerdelen in #10914
  • date: fix -s UTC conversion losing timezone offset by @yachi in #10828
  • date: fix RFC-822 format to always use English names by @sylvestre in #10932
  • date: bump parse_datetime & add test for leap-1 GNU test by @sylvestre in #10933
  • date: add tests to match GNU's by @sylvestre in #10939
  • date: fix double periods in Hungarian month abbreviations by @naoNao89 in #10945
  • date: fix subfmt-up1, fill-1, pct-pct, and invalid-high-bit-set tests / implement --debug by @sylvestre in #10940
  • date: use locale date_fmt instead of D_T_FMT for default format by @ChrisDryden in #10935
  • date: Fix Error message missing '+' for format string after valid d flag by @cerdelen in #10982
  • date: fix -d with relative dates and timezone abbreviations by @yachi in #10956
  • date: fix timezone abbreviations using wrong offset outside their DST season by @aguimaraes in #11045
  • date: fix %+ and %_ modifier edge cases by @naoNao89 i...
Read more

0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Feb 22:21
2319a99

Rust Coreutils 0.6.0 Release:

We are happy to announce the release of Rust Coreutils 0.6.0 — a major milestone achieving 96% GNU compatibility with significant safety improvements, enhanced locale support, and extensive bug fixes!


Highlights:

  • Major GNU Compatibility Leap

    • 622 passing tests (+56 from 0.5.0), achieving 96.28% compatibility
    • Reduced failures from 55 to just 16 (-39) and skipped tests from 23 to 7 (-16)
    • Extensive test suite improvements across sort, ls, date, cksum, tail, and many more
  • Safety & Code Quality

    • Removed unsafe code from date, sort, locale.rs, and other utilities
    • Replaced raw libc calls with safe nix crate equivalents throughout
    • Enhanced error handling to avoid panics on /dev/full writes across many utilities
  • Locale & Internationalization

    • Added ICU support for locale-aware day/month names in date
    • Implemented locale-aware hour formatting and calendar support
    • Added locale-aware numeric sorting with thousand separator support in sort
    • Locale-aware collation support in join
  • Performance Improvements

    • base32/base64/basenc: Optimized with reduced memset operations
    • shuf: Optimized numeric output and added --random-seed option
    • date: Wrapped stdout in BufWriter for batch processing
    • uniq: Optimized memory usage for ignore-case comparison
    • tsort: Avoid reading entire input into memory, intern strings
    • df: Performance improvements with better filesystem handling
  • Platform Support Expansion

    • Expanded safe directory traversal to all Unix platforms
    • Enhanced Cygwin support across multiple utilities
    • Added SMACK security module support for ls, id, mkdir, mkfifo, mknod
    • Added RISC-V 64-bit musl target to CI
  • Notable Utility Improvements

    • cksum/hashsum: Merged common logic, removed deprecated hashsum binary
    • tail: Added --debug flag, fixed -F symlink tracking, fixed --pid with FIFO
    • timeout: Added comprehensive signal handling and --verbose improvements
    • sort: Legacy +POS/-POS handling, locale-aware collation, debug key annotations
    • pr: Multiple fixes for headers, form feeds, and pagination options
    • chmod: Fixed recursive handling and --preserve-root option
    • rm: Fixed error reporting and symlink handling
  • Contributions: This release was made possible by 41 new contributors joining our community


GNU Test Suite Compatibility:

Result 0.5.0 0.6.0 Change 0.5.0 to 0.6.0 % Total 0.5.0 % Total 0.6.0 % Change 0.5.0 to 0.6.0
Pass 566 622 +56 87.75% 96.28% +8.53%
Skip 23 7 -16 3.57% 1.08% -2.49%
Fail 55 16 -39 8.53% 2.48% -6.05%
Error 1 1 0 0.16% 0.15% ~0%
Total 645 646 +1 (new test)

GNU testsuite evolution


Call to Action:

Help us translate - Contribute translations at Weblate
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

arch

base64

basename

cat

  • do not connect to unix domain socket and instead return an error by @asder8215 in #9755
  • fix write error handling to propagate errors instead of panicking by @rynewang in #10038
  • tests(cat,stdbuf): Add broken-pipe robustness tests (#4627) by @naoNao89 in #8798

chgrp

chmod

chroot

cksum

comm

cp

  • fix preserve-gid when canonicalize fails due to inaccessible parent dirs by @ChrisDryden in #9803
  • reduce memory usage for cp -al by skipping unnecessary tracking by @ChrisDryden in #9805
  • set status code when encountering circular symbolic links by @Thanhphan1147 in #9757
  • symlink flags fixing conflicting flag logic to use last flag by @Dylans123 in #9960
  • Added test for permissions copying to an existing file by @max-amb in #10049
  • use FileInformation without dereference for symlink destination check to match GNU behaviour for test/nfs-removal-race by @ChrisDryden in #10086
  • Avoid other error at cp stream /dev/full by @oech3 in #10139
  • Fixed posixly correct dangling symlink test by @max-amb in #10247
  • cp/mv: suppress xattr ENOTSUP errors for optional preservation by @ChrisDryden in #10083

csplit

date

Read more

latest-commit

latest-commit Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Jan 10:58
6dac4d4

commit: 569b155

0.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Dec 09:54
64203e3

📦 Rust Coreutils 0.5.0 Release:

We are excited to announce the release of Rust Coreutils 0.5.0 — a significant milestone featuring comprehensive platform improvements, and robust testing infrastructure with continued progress toward full GNU compatibility!


Highlights:

  • Improved GNU Compatibility

    • 566 passing tests (+22 from 0.4.0), achieving 87.75% compatibility
    • Reduced failures from 56 to 55 (-1) and skipped tests from 33 to 23 (-10)
    • Updated GNU reference from 9.8 to 9.9, adding 11 new tests
    • Major improvements to fold, cksum, install, and numfmt
  • Unicode & Text Processing Enhancements

    • fold: Added combining character support for proper Unicode text wrapping
    • ptx: Implemented GNU mode with dumb terminal format
    • Enhanced text processing across multiple utilities
  • Security & Performance Improvements

    • cksum: Merged with hashsum for unified checksum functionality
    • install: Enhanced mode parsing with comma-separated support and umask handling
    • seq: Improved large integer handling with dedicated benchmarks
    • Various memory and performance optimizations across utilities
  • Platform Support Expansion

    • Added OpenBSD to CI pipeline with comprehensive testing
    • Re-enabled Redox OS support in CI
    • Enhanced Cygwin support in uucore
    • Improved build processes across platforms
  • Developer Experience Improvements

    • New TTY helper for enhanced testing capabilities
    • Comprehensive benchmarking additions for multiple utilities
    • Reduced dependency bloat through feature splitting
    • Enhanced hardware detection module
  • Contributions: This release was made possible by 6 new contributors joining our community


GNU Test Suite Compatibility:

Result 0.4.0 0.5.0 Change 0.4.0 to 0.5.0 % Total 0.4.0 % Total 0.5.0 % Change 0.4.0 to 0.5.0
Pass 544 566 +22 85.80% 87.75% +1.95%
Skip 33 23 -10 5.21% 3.57% -1.64%
Fail 56 55 -1 8.83% 8.53% -0.30%
Error 1 1 0 0.16% 0.16% 0%
Total 634 645 +11 (new tests)

GNU testsuite evolution


Call to Action:

🌍 Help us translate - Contribute translations at Weblate
🚀 Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
🔗 Download the latest release: https://uutils.github.io

What's Changed

basenc

  • basenc: Fix basenc.pl GNU-compat tests pass by @karanabe in #9203
  • fix(Basenc):fix GNU coreutils test bounded-memory.sh by @mattsu2020 in #9536
  • base32, base64, baseenc:Simplifying the base encoding uu_app and adding basic buffer tests by @ChrisDryden in #9409

chmod

cksum

cp

du

env

fold

hashsum

  • hashsum: Fix length processing to fix last GNU test by @RenjiSann in #9569

install

  • install: ignore umask by @akretz in #9254
  • Enhance mode parsing to support comma-separated mode strings in install command by @Vesal-J in #9298
  • install: do not call chown when called as root by @Ecordonnier in #9477

ln

  • ln: add error handling for hard link creation on directories by @FidelSch in #9342

ls

mkfifo

  • tests/mkfifo: added a test to check mkfifo permission denied error for code coverage by @asder8215 in #9586

nl

nohup

numfmt

  • numfmt: support quetta/ronna suffixes and fix error messages by @naoNao89 in #9280

od

pr

  • pr: fix header formatting for custom date formats starting with '+' by @sylvestre in #9252

ptx

readlink

seq

shuf

sort

  • sort: make compression program failures non-fatal, warn and fallback to plain files by @sylvestre in #9266

stdbuf

  • Remove unsafe unwrap() calls in stdbuf error handling by @naoNao89 in #9429

stty

tail

  • tail: batch inotify events to prevent redundant headers after SIGSTOP/SIGCONT by @sylvestre in #9574
  • tail: fix intermittent overlay-headers test by batching inotify events by @sylvestre in #9598

tee

  • tee: fix poll timeout causing intermittent hangs with -p flag by @sylvestre in #9585

timeout

dd

  • dd: Handle slow transfer rates in progress ...
Read more

0.4.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 23:07
6cf5b06

📦 Rust Coreutils 0.4.0 Release:

We are pleased to announce the release of Rust Coreutils 0.4.0 — continuing our journey toward full GNU compatibility with improved test coverage, enhanced functionality, and robust implementations!


Highlights:

  • Enhanced GNU Compatibility

    • 544 passing tests (+12 from 0.3.0), achieving 85.80% compatibility
    • Reduced failures from 68 to 56 (-12)
    • Better compatibility with GNU date timezone handling
  • Algorithm & Performance Improvements

    • factor: Integrated num_prime crate for faster u64/u128 factorization
    • tsort: Fixed stack overflow issues with iterative DFS implementation
    • cksum: Added comprehensive performance benchmarks
    • mkdir: Fixed stack overflow with deeply nested directories
  • Platform Support Enhancements

    • OpenBSD support for stdbuf and uptime
    • FreeBSD build and test improvements
    • Better cross-platform compatibility
  • hashsum Reorganization

    • Removed non-GNU binaries to fix interface divergence
    • Merged functionality into cksum for better GNU compatibility
    • Marked hashsum as deprecated in favor of cksum
  • Contributions: This release was made possible by the dedication of 17 contributors, including 4 newcomers.


GNU Test Suite Compatibility:

Result 0.3.0 0.4.0 Change 0.3.0 to 0.4.0 % Total 0.3.0 % Total 0.4.0 % Change 0.3.0 to 0.4.0
Pass 532 544 +12 83.91% 85.80% +1.89%
Skip 33 33 0 5.20% 5.20% +0.01%
Fail 68 56 -12 10.73% 8.83% -1.90%
Error 1 1 0 0.16% 0.16% 0%
Total 634 634 0

GNU testsuite evolution


Call to Action:

🌍 Help us translate - Contribute translations at Weblate
🚀 Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
🔗 Download the latest release: https://uutils.github.io

What's Changed

base64

cat

chown

cksum

  • Refactor cksum for incoming merge with hashsum, Fix behavior for --text and --untagged by @RenjiSann in #9024
  • Fix "cksum: --length 0 shouldn't fail for algorithms that don't support --length" by @RenjiSann in #9032
  • Add support for sha2, sha3 by @RenjiSann in #9035
  • Fix GNU cksum-c.sh and cksum-sha3.sh by @RenjiSann in #9063
  • add cksum performance benchmarks by @naoNao89 in #9075
  • fix(cksum): correct CRC32B implementation to match GNU cksum by @naoNao89 in #9026

comm

date

dd

du

factor

  • base benchmarking for single/multiple u64, u128, and >u128 by @asder8215 in #9182
  • use num_prime crate's u64 and u128 factorization methods to speed up the performance by @asder8215 in #9171

hashsum

install

ls

mkdir

od

printenv

printf

  • handle extremely large format widths gracefully to fix GNU test panic by @sylvestre in #9133

readlink

  • fix(readlink): emit GNU-style Invalid argument for non-symlinks by @karanabe in #9189

stdbuf

timeout

truncate

  • feat(truncate): allow negative size values for truncation by @mattsu2020 in #9129

tsort

  • use iterative dfs to prevent stack overflows by @Nekrolm in #8737
  • fix minimal cycle reporting and precise back-edge removal by @naoNao89 in #8786

uptime

uudoc

Documentation

CI & Build

Code Quality & Cleanup

Read more

0.3.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 22:45
a452d86

📦 Rust Coreutils 0.3.0 Release:

We are happy to announce the release of Rust Coreutils 0.3.0 — our latest milestone bringing significant performance improvements, enhanced compatibility, and robust testing infrastructure!


Highlights:

  • Performance Improvements
    Compared to GNU:

    • base64 is 1.20x faster
    • expand is 1.80x faster
    • unexpand is 1.50x faster
    • nl is 1.57x faster
    • sort is 3.72x faster for regular sorting and 1.46x faster for numeric sorting
    • fold is 1.19x faster through optimization
    • uniq -c: 1.13x faster
  • Comprehensive Benchmarking Infrastructure

    • Integrated CodSpeed for continuous performance monitoring
    • Added benchmarks for 15+ utilities including sort, ls, uniq, du, base64, and more
    • Performance regression detection in CI
  • Safe Directory Traversal

    • Implemented secure traversal using openat/unlinkat for rm, du, chmod, and chgrp
    • Enhanced security through the nix crate instead of unsafe libc calls
  • Enhanced GNU Compatibility

    • 532 passing tests (83.91% compatibility) with comprehensive test suite expansion
    • Improved error handling and behavior matching across utilities
    • Better Unicode and non-UTF8 path support
  • Developer Experience Improvements

    • Moved documentation and completion generation out of binaries for faster builds
    • Enhanced CI with parallel benchmark compilation
    • Improved Makefile support for various build configurations
  • Contributions: This release was made possible by the dedication of 36 contributors, including 25 newcomers.


GNU Test Suite Compatibility:

Note: Test result changes are primarily due to upgrading our reference from GNU coreutils 9.7 to 9.8, which introduced 16 new tests and updated existing test expectations.

Result 0.2.0 0.3.0 Change 0.2.0 to 0.3.0 % Total 0.2.0 % Total 0.3.0 % Change 0.2.0 to 0.3.0
Pass 538 532 -6 87.06% 83.91% -3.15%
Skip 27 33 +6 4.37% 5.20% +0.83%
Fail 52 68 +16 8.42% 10.73% +2.31%
Error 1 1 0 0.16% 0.16% 0%
Total 618 634 +16 (new tests)

GNU testsuite evolution


Call to Action:

🌍 Help us translate - Contribute translations at Weblate
🚀 Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
🔗 Download the latest release: https://uutils.github.io

What's Changed

base64

basenc

chgrp

chmod

cksum

cp

csplit

  • csplit: create final empty file with --suppress-matched to match GNU (fixes #7286) by @naoNao89 in #8655

date

df

dirname

du

expand

expr

fold

hashsum

hostname

id

install

  • tests/install/install-Z-selinux: fix selinux for install by @sylvestre in #8307

ln

  • Fix ln -f handling when source and destination are the same entry by @mattsu2020 in #8838
  • Allow to replace ln -fs and hardlink on Windows by default by @oech3 in #8810

ls

mv

  • mv: support moving source to a symlink directory by @yuankunzhang in #8589
  • mv: improve the verbose mode to make tests/mv/mv-special-1.sh pass by @sylvestre in #8521

nl

nohup

  • test(nohup): improve coverage for fd replacement and error paths by @naoNao89 in #8920

numfmt

od

Read more

0.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 20:31
3a07ffc

Rust Coreutils 0.2.2 Release:

This is a patch release focused on critical infrastructure fixes to ensure reliable distribution and deployment across different platforms.
We also improved the performance of base64 to be faster than the GNU implementation (1.56 times faster).

What's Changed

base64

  • base64: improve perfs by using the base64-simd crate by @sylvestre in #8578

cp

  • cp: fix copying current directory (.) to existing directory by @Vesal-J in #8565

nl

stty

uucore

Distribution & Build

Documentation

Dependencies

  • chore(deps): update rust crate winapi-util to v0.1.11 by @renovate[bot] in #8570
  • fix(deps): update rust crate console to v0.16.1 by @renovate[bot] in #8577
  • chore(deps): update rust crate chrono to v0.4.42 by @renovate[bot] in #8576
  • chore(deps): update rust crate linux-raw-sys to 0.11 by @renovate[bot] in #8580

New Contributors

Full Changelog: 0.2.0...0.2.2