Skip to content

0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Feb 22:21
· 337 commits to main since this release
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

dd

df

dir

dirname

du

echo

env

expand

expr

fmt

  • handle invalid UTF-8 input by replacing malformed sequences by @mattsu2020 in #9329

fold

groups

hashsum

head

  • Consolidate legacy argument parsing for head/tail by @sylvestre in #9727
  • refactor(head): replace unsafe raw fd usage with safe AsFd API by @mattsu2020 in #10161

hostid

id

  • -p crashes with panic when the real GID doesn't exist in /etc/group by @sylvestre in #9670
  • Fix incorrect human-readable output by @frendsick in #7814

install

join

kill

ln

  • ln -svf /dev/null /tmp/a > /dev/full panics by @oech3 in #10539

logname

ls

mkdir

mkfifo

mknod

mktemp

more

  • file status made more idiomatic. by @devnexen in #10151
  • test(more): Fix test_from_line_option race condition by increasing PTY delay by @naoNao89 in #9629

mv

  • Adding fixes for i-3 GNU tests related to tty output when file is not writeable by @ChrisDryden in #9599
  • support moving folder containing symlinks to different filesystem by @yuankunzhang in #8605
  • test_mv.rs: Remove ignore from test_mv_broken_symlink_to_another_fs by @oech3 in #9978
  • test-mv: Use temporary directory in /dev/shm by @3v1n0 in #10439

nice

nl

  • preserve raw bytes in output instead of using from_utf8_lossy by @ChrisDryden in #9673

nohup

nproc

numfmt

pr

printenv

printf

ptx

readlink

rm

rmdir

  • Remove all trailing slashes when checking for symlinks by @cerdelen in #9983

runcon

  • use Command::exec() instead of libc::execvp() by @Ecordonnier in #9611
  • add missing utilities to enable tests/runcon/runcon-compute and removing PATH from runcon -c by @ChrisDryden in #10088

seq

shred

  • ensure deterministic pass sequence compatibility with reference implementation by @sylvestre in #9317
  • fix(shred): stop immediately on write errors by @naoNao89 in #9649

shuf

  • Add --random-seed, make --random-source GNU-compatible, report write failures, optimize by @blyxxyz in #7585
  • optimize numeric output by avoiding write!() by @CrazyRoka in #10048
  • Tune performance for -i 1-1000000 by @oech3 in #10478

sort

split

  • Added error when attempting to create file that already exists as directory by @max-amb in #9945

stat

stdbuf

stty

sync

  • Reset O_NONBLOCK flag after file validation to match GNU behavior by @naoNao89 in #9437

tac

  • fix error message by @cerdelen in #9942
  • use temp file for stdin to respect TMPDIR and handle disk-full errors by @ChrisDryden in #10094
  • add regex flavor translation for compatibility and new test case by @FidelSch in #10416
  • tac, tail, dd: detect closed stdin before Rust sanitizes it to /dev/null by @ChrisDryden in #9664

tail

tee

test

  • fixing unary operators that are getting parsed as argument instead of string literal by @georgepaulsen in #9951
  • Trim whitespace in integer comparisons by @dezgeg in #10489

timeout

touch

truncate

tsort

uname

unexpand

  • use byte count for multibyte characters for column width when using -a flag by @JaneIllario in #9949
  • add support for extended tab stop syntax (+N and /N) by @sylvestre in #9265
  • fix +0 and /0 handling, add integration tests by @ChrisDryden in #10406

uniq

uptime

users

wc

yes

uucore

uudoc

  • style(uudoc): update header formatting for options and examples by @hwhsu1231 in #10004
  • print tldr.zip warning only once per process by @rynewang in #10039

coreutils

Platform Support

CI & Build

Code Quality & Cleanup

Documentation

Dependency Updates

  • chore(deps): update rust crate console to v0.16.2 by @renovate[bot] in #9675
  • chore(deps): update rust crate clap_complete to v4.5.62 by @renovate[bot] in #9698
  • chore(deps): update rust crate zip to v7 by @renovate[bot] in #9731
  • chore(deps): update rust crate crc-fast to v1.8.2 by @renovate[bot] in #9730
  • chore(deps): update rust crate linux-raw-sys to v0.12.1 by @renovate[bot] in #9787
  • chore(deps): update rust crate divan to v4.2.0 by @renovate[bot] in #9786
  • chore(deps): update rust crate crc-fast to v1.9.0 by @renovate[bot] in #9791
  • chore(deps): update rust crate jiff to v0.2.17 by @renovate[bot] in #9830
  • chore(deps): update dawidd6/action-download-artifact action to v12 by @renovate[bot] in #9836
  • chore(deps): update rust crate proc-macro2 to v1.0.104 by @renovate[bot] in #9878
  • chore(deps): update rust crate bigdecimal to v0.4.10 by @renovate[bot] in #9880
  • chore(deps): update actions/upload-artifact action to v6 by @renovate[bot] in #9896
  • chore(deps): update rust crate self_cell to v1.2.2 by @renovate[bot] in #9927
  • chore(deps): update rust crate clap_complete to v4.5.64 by @renovate[bot] in #9909
  • chore(deps): update rust crate clap to v4.5.54 by @renovate[bot] in #10000
  • Bump libc to 0.2.178 with fix for FreeBSD by @oech3 in #10046
  • chore(deps): update rust crate jiff to v0.2.18 by @renovate[bot] in #10084
  • chore(deps): update rust crate proc-macro2 to v1.0.105 by @renovate[bot] in #10085
  • chore(deps): update rust crate quote to v1.0.43 by @renovate[bot] in #10087
  • chore(deps): update rust crate libc to v0.2.179 by @renovate[bot] in #8717
  • chore(deps): update rust crate divan to v4.2.1 by @renovate[bot] in #10103
  • chore(deps): update rust crate clap_complete to v4.5.65 by @renovate[bot] in #10106
  • chore(deps): update rust crate libc to v0.2.180 by @renovate[bot] in #10126
  • replace bincode by wincode by @sylvestre in #10134
  • chore(deps): update rust crate blake3 to v1.8.3 by @renovate[bot] in #10132
  • chore(deps): update rust crate data-encoding-macro to v0.1.19 by @renovate[bot] in #10163
  • chore(deps): update rust crate blake2b_simd to v1.0.4 by @renovate[bot] in #10168
  • chore(deps): update rust crate rand_core to v0.9.4 by @renovate[bot] in #10202
  • chore(deps): update rust crate time to v0.3.45 by @renovate[bot] in #10216
  • chore(deps): update rust crate rand_core to v0.9.5 by @renovate[bot] in #10215
  • chore(deps): update rust crate zip to v7.1.0 by @renovate[bot] in #10237
  • chore(deps): update rust crate filetime to v0.2.27 by @renovate[bot] in #10336
  • chore(deps): update rust crate thiserror to v2.0.18 by @renovate[bot] in #10329
  • deps: remove unused rust crate linux-raw-sys by @xtqqczze in #10374
  • chore(deps): update rust crate zip to v7.2.0 by @renovate[bot] in #10387
  • chore(deps): update rust crate divan to v4.3.0 by @renovate[bot] in #10413
  • deps: remove unused rust deps by @xtqqczze in #10404
  • chore(deps): update rust crate proc-macro2 to v1.0.106 by @renovate[bot] in #10420
  • fix(deps): remove duplicate itertools package by @xtqqczze in #10440
  • fix(deps): refactor nix package configuration by @xtqqczze in #10441
  • chore(deps): update rust crate quote to v1.0.44 by @renovate[bot] in #10446
  • fix(deps): refactor xattr package configuration by @xtqqczze in #10454
  • fix(deps): refactor rlimit package configuration by @xtqqczze in #10464
  • chore(deps): update rust crate signal-hook to v0.4.2 by @renovate[bot] in #10468
  • chore(deps): update rust crate signal-hook to v0.4.3 by @renovate[bot] in #10472
  • deps: refactor crossterm package configuration by @xtqqczze in #10484
  • chore(deps): update rust crate clap to v4.5.55 by @renovate[bot] in #10521
  • chore(deps): update rust crate clap to v4.5.55 by @renovate[bot] in #10544
  • chore(deps): update rust crate clap to v4.5.56 by @renovate[bot] in #10568
  • chore(deps): update dawidd6/action-download-artifact action to v13 by @renovate[bot] in #10586
  • chore(deps): update dawidd6/action-download-artifact action to v14 by @renovate[bot] in #10641
  • chore(deps): update rust crate rlimit to 0.11.0 by @renovate[bot] in #10645

New Contributors

Full Changelog: 0.5.0...0.6.0