github uutils/coreutils 0.3.0

one day ago

📦 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

pinky

ptx

  • fix(ptx): Remove extra space before truncation marker and add a related test by @Misakait in #8784
  • fix(ptx): Correct various output formatting bugs by @Misakait in #8787
  • fix(ptx): Correct reference format for stdin by @Misakait in #8806
  • fix(ptx): Align text wrapping behavior with GNU in traditional mode by @Misakait in #8820

realpath

rm

  • Adjust rm & du to use safe traversal (openat, unlinkat, etc) by @sylvestre in #8517
  • rm: add the --progress option like with cp & mv by @sylvestre in #8567

seq

  • seq: support non-utf8 for --separator & --terminator by @cakebaker in #8681
  • clippy: move unexpected_cfgs to workspace lints & fix warnings in seq by @cakebaker in #8859

sort

stat

  • stat: fix mount point handling for non-UTF8 paths by @dekuu5 in #8538
  • stat: fix %N symlink to be single quote instead of double quote by @dekuu5 in #8791
  • Include subsecond precision in stat atime/ctime by @gaul in #8903

stdbuf

stty

tail

  • Add tests/tail/overlay-headers to the intermittent list by @sylvestre in #8736

tee

timeout

  • tests/timeout: remove unnecessary stderr check for test_kill_subprocess by @elliotwesoff in #8845

touch

tsort

  • tsort: write a benchmark by @sylvestre in #8712
  • Remove extra lookups and memory allocations from tsort graph construction by @Nekrolm in #8694

unexpand

uniq

uname

wc

who

uucore

Localization & Internationalization

  • l10n: replace the hash table by a long match per file to faciliate th… by @sylvestre in #8734

Performance & Benchmarking

Security

Code Quality & Cleanup

CI & Build

Documentation

Platform Support

  • fix: Add cross-platform stubs and gate SELinux to Linux-only by @naoNao89 in #8795
  • Drop redundant || exit 1 by @oech3 in #8881

Version Management

Dependency Updates

  • fix(deps): update rust crate tempfile to v3.22.0 by @renovate[bot] in #8590
  • chore(deps): update rust crate zip to v5.0.1 by @renovate[bot] in #8597
  • chore(deps): update rust crate zip to v5.1.0 by @renovate[bot] in #8609
  • Bump rustix from 1.0.7 to 1.1.2 by @cakebaker in #8613
  • Bump fts-sys and selinux-sys by @cakebaker in #8612
  • chore(deps): update rust crate zip to v5.1.1 by @renovate[bot] in #8616
  • chore(deps): update actions/checkout action to v5 by @renovate[bot] in #8623
  • chore(deps): update rust crate serde to v1.0.221 by @renovate[bot] in #8635
  • chore(deps): update rust crate serde to v1.0.222 by @renovate[bot] in #8639
  • chore(deps): update rust crate serde to v1.0.223 by @renovate[bot] in #8642
  • chore(deps): update rust crate serde to v1.0.224 by @renovate[bot] in #8646
  • chore(deps): update rust crate serde to v1.0.225 by @renovate[bot] in #8649
  • chore(deps): update rust crate clap_complete to v4.5.58 by @renovate[bot] in #8648
  • chore(deps): update rust crate time to v0.3.44 by @renovate[bot] in #8668
  • chore(deps): update rust crate clap to v4.5.48 by @renovate[bot] in #8675
  • chore(deps): update rust crate xattr to v1.6.1 by @renovate[bot] in #8688
  • chore(deps): update rust crate serde to v1.0.226 by @renovate[bot] in #8687
  • chore(deps): update vmactions/freebsd-vm action to v1.2.4 by @renovate[bot] in #8700
  • fix(deps): update rust crate tempfile to v3.23.0 by @renovate[bot] in #8714
  • chore(deps): update rust crate memchr to v2.7.6 by @renovate[bot] in #8851
  • chore(deps): update rust crate quote to v1.0.41 by @renovate[bot] in #8852
  • chore(deps): update rust crate serde to v1.0.228 by @renovate[bot] in #8854
  • chore(deps): update rust crate regex to v1.11.3 by @renovate[bot] in #8853
  • chore(deps): update rust crate unicode-width to v0.2.2 by @renovate[bot] in #8856
  • chore(deps): update rust crate windows-sys to v0.61.2 by @renovate[bot] in #8857
  • chore(deps): update rust crate thiserror to v2.0.17 by @renovate[bot] in #8855
  • chore(deps): update rust crate zip to v6 by @renovate[bot] in #8860
  • chore(deps): update rust crate ctor to 0.6.0 by @renovate[bot] in #8850
  • Bump half & zerocopy by @cakebaker in #8866
  • chore(deps): update rust crate serde to v1.0.228 by @renovate[bot] in #8875
  • chore(deps): update rust crate thiserror to v2.0.17 by @renovate[bot] in #8876
  • chore(deps): update rust crate quote to v1.0.41 by @renovate[bot] in #8874
  • chore(deps): update rust crate memchr to v2.7.6 by @renovate[bot] in #8873
  • chore(deps): update rust crate unicode-width to v0.2.2 by @renovate[bot] in #8877
  • chore(deps): update rust crate regex to v1.12.1 by @renovate[bot] in #8879
  • chore(deps): update rust crate windows-sys to v0.61.2 by @renovate[bot] in #8878
  • Bump nu-ansi-term from 0.50.1 to 0.50.3 by @cakebaker in #8885
  • Bump half & zerocopy by @cakebaker in #8884
  • chore(deps): update rust crate regex to v1.12.2 by @renovate[bot] in #8905
  • chore(deps): update rust crate clap_complete to v4.5.59 by @renovate[bot] in #8902
  • chore(deps): update rust crate clap_mangen to v0.2.30 by @renovate[bot] in #8904
  • chore(deps): update rust crate clap to v4.5.49 by @renovate[bot] in #8901
  • chore(deps): update rust crate half to v2.7.1 by @renovate[bot] in #8909
  • chore(deps): update rust crate lscolors to 0.21.0 by @renovate[bot] in #8957
  • chore(deps): update rust crate bigdecimal to v0.4.9 by @renovate[bot] in #8956
  • chore(deps): update rust crate divan to v4 by @renovate[bot] in #8858
  • chore(deps): update rust crate clap to v4.5.50 by @renovate[bot] in #8965
  • chore(deps): update rust crate dns-lookup to v3.0.1 - autoclosed by @renovate[bot] in #8966
  • chore(deps): update rust crate indicatif to v0.18.1 by @renovate[bot] in #8971
  • chore(deps): update rust crate memmap2 to v0.9.9 by @renovate[bot] in #8972
  • chore(deps): update rust crate self_cell to v1.2.1 by @renovate[bot] in #8973
  • chore(deps): update rust crate clap_mangen to v0.2.31 by @renovate[bot] in #8980
  • chore(deps): update rust crate proc-macro2 to v1.0.102 by @renovate[bot] in #8981
  • chore(deps): update rust crate proc-macro2 to v1.0.103 by @renovate[bot] in #8989

New Contributors

Full Changelog: 0.2.2...0.3.0

Don't miss a new coreutils release

NewReleases is sending notifications on new releases.