📦 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, andnumfmt
-
Unicode & Text Processing Enhancements
fold: Added combining character support for proper Unicode text wrappingptx: Implemented GNU mode with dumb terminal format- Enhanced text processing across multiple utilities
-
Security & Performance Improvements
cksum: Merged with hashsum for unified checksum functionalityinstall: Enhanced mode parsing with comma-separated support and umask handlingseq: 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) |
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
- chmod:fix safe traversal/access by @mattsu2020 in #9554
cksum
- cksum/hashsum: merge digest computation & various improvements by @RenjiSann in #9135
- cksum: Fix GNU test cksum-base64-untagged by @RenjiSann in #9344
- Add --debug flag to cksum by @naoNao89 in #9088
- cksum: Fix GNU test
cksum-c.shafter bump to 9.9 by @RenjiSann in #9511 - cksum: small improvements, l10n by @RenjiSann in #9532
- Fix hardware capabilities detection; cksum --debug by @RenjiSann in #9603
cp
- cp: allow directory merging when destination was just created by @vikram-kangotra in #9325
- cp: Adding test to cover no dereference when copying symlinks by @ChrisDryden in #9623
- cp: Enabling cp force flag to run on windows by @ChrisDryden in #9624
- Add comprehensive readonly file regression tests for cp by @naoNao89 in #9045
du
- du: Alias -A --apparent-size by @oech3 in #9555
- du: handle
--files0-from=-with piped in-by @cakebaker in #8985
env
- Adding integration tests for the braced variable parsing in env by @ChrisDryden in #9459
- env: remove outdated comment by @cakebaker in #9496
- env: use Command::exec() instead of libc::execvp() by @Ecordonnier in #9614
fold
- fold:Improve fold bench data generation by @mattsu2020 in #9210
- fix(fold): GNU fold-characters.sh test by @mattsu2020 in #9126
- Fold: Adding combining character support by @ChrisDryden in #9328
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
ls
- ls: prevent ReadDir from closing before entries are processed by @vikram-kangotra in #9410
mkfifo
- tests/mkfifo: added a test to check mkfifo permission denied error for code coverage by @asder8215 in #9586
nl
nohup
- nohup: use Command::exec() instead of libc::execvp() by @Ecordonnier in #9613
numfmt
od
- od: fix GNU od.pl by @mattsu2020 in #9334
- fix(od):fix GNU coreutils test od float.sh by @mattsu2020 in #9534
pr
- pr: fix header formatting for custom date formats starting with '+' by @sylvestre in #9252
ptx
- ptx: implement GNU mode with dumb terminal format by @sylvestre in #9573
readlink
- readlink: test calling without args by @cakebaker in #9230
- readlink:Correction to Symbolic Link Handling by @mattsu2020 in #9633
seq
- fix(seq): handle BrokenPipe like GNU by @mattsu2020 in #9471
- seq:fix test_broken_pipe_still_exits_success by @mattsu2020 in #9520
- seq: adding large integers benchmarks by @ChrisDryden in #9561
shuf
- shuf: add benchmarks by @sylvestre in #9320
sort
- sort: make compression program failures non-fatal, warn and fallback to plain files by @sylvestre in #9266
stdbuf
stty
- Adding TTY helper for unix to be able to create tests for stty and more by @ChrisDryden in #9348
- Using the pty helper function for the more bin testing by @ChrisDryden in #9441
- stty: baud parsing integration tests and validation by @ChrisDryden in #9454
- stty: Implemented saved state parser for stty by @ChrisDryden in #9480
- stty: Changing shell command to add recognizing a TTY for stty tests by @ChrisDryden in #9336
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
- Reducing sleep times and timeout times in test_timeout by @ChrisDryden in #9448
- timeout: cleanup return values by @Ecordonnier in #9576
- timeout: remove FIXME in test by @Ecordonnier in #9580
dd
- dd: Handle slow transfer rates in progress display by @martinkunkel2 in #9529
uucore
- uucore: embed system locale on cargo install by @WaterWhisperer in #8604
- feat(uucore): add shared hardware detection module by @naoNao89 in #9279
- uucore: support cygwin by @ognevny in #9535
- uucore: mode parsing: support comma-separated modes by @martinkunkel2 in #9578
uudoc
- uudoc: fix manpage for individual utilities has wrong name (nit) by @shayelkin in #9152
CI & Build
- CICD.yml: split PROFILE= from CARGOFLAGS by @oech3 in #9219
- GNUmakefile: use PROFILE_CMD at make test by @oech3 in #9214
- GNUmakefile: generalize logic for SELINUX_PROGS for many platforms by @oech3 in #9221
- build-gnu.sh: Let SELinux optional to use it locally without libselinux by @oech3 in #9220
- freebsd.yml: remove not working PROFILE= by @oech3 in #9225
- GNUmakefile: Remove check for LIBSELINUX_ENABLED by @oech3 in #9228
- Update redoxer and reenable Redox OS in CI by @jackpot51 in #9233
- GNUmakefile: drop not used use_default:=1 by @oech3 in #9231
- ci: Mark runcon-no-reorder as SELinux required by @oech3 in #9234
- github action: add openbsd in the ci by @sylvestre in #9196
- openbsd.yml: Remove not working PROFILE= by @oech3 in #9238
- OpenBSD CI: increase max open files for test job by @lcheylus in #9242
- build-gnu.sh: Remove || true by @oech3 in #9256
- Enable test test_hostname_ip on OpenBSD by @lcheylus in #9257
- build-gnu.sh: Use system tools by @oech3 in #9251
- ci: remove commented out line from
freebsd.ymlby @cakebaker in #9239 - GnuTests.yml: reduce deps by @oech3 in #9259
- Update CICD.yml: Stop releasing duplicated binary by @oech3 in #9269
- Avoid mixing wget and curl by @oech3 in #9258
- CICD.yml: Remove if for .exe by @oech3 in #9271
- GNUmakefile: Use any profile from make install by @oech3 in #8730
- build-gnu.sh: Freeze SELinux build mode by @oech3 in #9270
- CICD.yml: Avoid no space left by @oech3 in #9277
- GNUmakefile: Add missing PROFILE_CMD by @oech3 in #9293
- Cargo.toml: move panic=abort to release profile for binary size by @oech3 in #9240
- Fix build failure without libselinux by @oech3 in #9290
- Revert a patch for runcon-no-reorder (superseded) by @oech3 in #9291
- build-gnu.sh: fix the error on line 110 by @sylvestre in #9297
- build-gnu.sh: adjust the PATH for each run by @sylvestre in #9319
- build-gnu.sh: Use any profile & cleanup vars by @oech3 in #9321
- GnuTests.yml: Check that build-gnu.sh works without libselinux by @oech3 in #9299
- android.yml: Reduce RAM (#9278) by @oech3 in #9436
- l10n.yml:Don't apt-get build-essential by @oech3 in #9472
- l10n.yml: Use PROFILE=release-small for faster CI by @oech3 in #9473
- l10n.yml: Do not brew make (support Xcode make) by @oech3 in #9474
- Update Dockerfile: Don't apt-get jq (preinstalled) by @oech3 in #9481
- build-gnu.sh: Remove 2 not working sed hacks for tr by @oech3 in #9476
- build-gnu.sh: Reduce time to build GNU coreutils by @oech3 in #9475
- CICD.yml: Stop publishing conflicting artifacts by @oech3 in #9491
- CICD.yml: Removed unused code for i586 by @oech3 in #9497
- build-gnu.sh: Remove hfs dep from hardlink-case.sh by @oech3 in #9482
- CICD.yml: Dedup a mkdir by @oech3 in #9504
- CICD.yml: Drop a workaround for old package by @oech3 in #9505
- Remove wget dep by @oech3 in #9522
- Remove Makefile.toml by @oech3 in #9568
- build-gnu.sh: Remove 2 non-GNU binary by @oech3 in #9583
- validation.rs: Remove non GNU hashsum aliases by @oech3 in #9589
- build-gnu.sh: Enable misc/coreutils.sh by @oech3 in #9572
- GHA-delete-GNU-workflow-logs.sh: Add fallback to jaq by @oech3 in #9581
- benchmarks.yml: Stop unnecessary apt-get by @oech3 in #9608
- Do not apt-get preinstalled tools to avoid delaying CI by @oech3 in #9466
- build-gnu.sh: use GNU sed much more for macOS by @oech3 in #9467
- ci: add locales for GNU tests by @cakebaker in #9052
Documentation
- README.md: profiles for binary size by @oech3 in #9268
- installation.md: Fix wrong reference for AUR by @oech3 in #9447
- README.md: note that separator is needed for PROG_PREFIX by @oech3 in #9444
- installation.md: Ref MSYS2 package by @oech3 in #9456
- installation.md: Add MSYS2 Cygwin package by @oech3 in #9566
- why-skip.md: Remove an OOD doc by @oech3 in #9506
- why-skip.md: Remove a passing test by @oech3 in #9507
- why-skip.md: Remove 4 sparse-* by @oech3 in #9508
- why-skip.md: Remove 3 tests by @oech3 in #9509
- why-error.md: Cleanup by @oech3 in #9510
- why-error.md: Cleanup and documenting by @oech3 in #9512
- why-skip.md: Remove 1 passing root test by @oech3 in #9528
- why-skip.md: Let spell-checker:ignore a comment by @oech3 in #9540
- why-{skip,error}.md: Cleanup by @oech3 in #9602
- why-{skip,error}.md: Remove stty tests and shared strings by @oech3 in #9626
- lib.rs: Remove non GNU hashsum aliases by @oech3 in #9642
- util.rs: Update obsolete comments by @oech3 in #9643
Code Quality & Cleanup
- test: existing file is newer than non-existing file by @cakebaker in #9245
- move the factor divan bench into the actual directory by @sylvestre in #9296
- Remove high variance benchmark functions by @sylvestre in #9311
- Bump
markdownlint_cli2_action& fix warnings by @cakebaker in #9309 - replace number_prefix by unit-prefix by @sylvestre in #9322
- coreutils: Print utility not found to stderr by @oech3 in #9588
- use github URLs for fetching tldr.zip by @dgilman in #9584
- unit test coverage: fix missing coverage by @martinkunkel2 in #9606
- Removing the per process file flag to reduce the llvm filemerge time by @ChrisDryden in #9449
- Making wild a windows only dependency and gating unit-prefix by @ChrisDryden in #9548
- Splitting parser feature into multiple subfeatures to reduce dependency bloat by @ChrisDryden in #9546
Performance & Benchmarking
- benches: Migrate factor benchmarks from Criterion to Divan by @naoNao89 in #9247
- Add functionality to show when tests were previously skipped and now failing accurately by @ChrisDryden in #9521
Version Management
- update gnu ref to 9.9 + improve the script by @sylvestre in #9216
- prepare version 0.5.0 by @sylvestre in #9596
Dependency Updates
- chore(deps): update rust crate crc-fast to v1.7.1 by @renovate[bot] in #9224
- chore(deps): update rust crate indicatif to v0.18.3 by @renovate[bot] in #9226
- chore(deps): update rust crate crc-fast to v1.8.0 by @renovate[bot] in #9282
- Update vmactions/freebsd-vm action to v1.2.7 by @renovate[bot] in #9304
- chore(deps): update rust crate clap to v4.5.52 by @renovate[bot] in #9316
- chore(deps): update rust crate clap_complete to v4.5.61 by @renovate[bot] in #9343
- chore(deps): update rust crate clap to v4.5.53 by @renovate[bot] in #9340
- GNUmakefile: Use libstdbuf.* instead of libstdbuf* by @oech3 in #9345
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #9416
- chore(deps): update rust crate parse_datetime to v0.13.3 by @renovate[bot] in #9434
- chore(deps): update rust crate hostname to v0.4.2 by @renovate[bot] in #9515
- Bump
iana-time-zoneandwindows-coreby @cakebaker in #9519 - chore(deps): update vmactions/freebsd-vm action to v1.2.8 by @renovate[bot] in #9524
- chore(deps): update rust crate ctor to v0.6.2 by @renovate[bot] in #9544
- chore(deps): update rust crate ctor to v0.6.3 by @renovate[bot] in #9562
- chore(deps): update vmactions/freebsd-vm action to v1.2.9 by @renovate[bot] in #9593
- chore(deps): update davidanson/markdownlint-cli2-action action to v22 by @renovate[bot] in #9610
- chore(deps): update actions/cache action to v5 by @renovate[bot] in #9639
- chore(deps): update rust crate crc-fast to v1.8.1 by @renovate[bot] in #9647
- chore(deps): update github artifact actions (major) by @renovate[bot] in #9645
- Bump
icucrates from2.0.0to2.1.1by @cakebaker in #9073
New Contributors
- @WaterWhisperer made their first contribution in #8604
- @ChrisDryden made their first contribution in #9328
- @FidelSch made their first contribution in #9342
- @ognevny made their first contribution in #9535
- @shayelkin made their first contribution in #9152
- @dgilman made their first contribution in #9584
Full Changelog: 0.4.0...0.5.0