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