📦 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
datetimezone handling
-
Algorithm & Performance Improvements
factor: Integrated num_prime crate for faster u64/u128 factorizationtsort: Fixed stack overflow issues with iterative DFS implementationcksum: Added comprehensive performance benchmarksmkdir: Fixed stack overflow with deeply nested directories
-
Platform Support Enhancements
- OpenBSD support for
stdbufanduptime - FreeBSD build and test improvements
- Better cross-platform compatibility
- OpenBSD support for
-
hashsum Reorganization
- Removed non-GNU binaries to fix interface divergence
- Merged functionality into
cksumfor 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 |
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
- Fix EINTR handling in cat by @naoNao89 in #8946
- fix(cat): refine unsafe overwrite detection for appending files by @mattsu2020 in #9122
chown
cksum
- Refactor cksum for incoming merge with hashsum, Fix behavior for
--textand--untaggedby @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.shandcksum-sha3.shby @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
- Fix EINTR handling in comm by @naoNao89 in #8946
- hold the stdin lock for the whole duration of the program by @andreacorbellini in #9085
date
- fix(date): support timezone abbreviations in date --set by @naoNao89 in #8944
- date, touch: fix parse_datetime 0.13.0 compatibility by @naoNao89 in #8843
- improve compat with GNU by @sylvestre in #9022
- remove
chronoby @cakebaker in #9048 - add --uct alias and allow multiple option aliases together by @sylvestre in #9181
dd
du
- fix dead code warnings in test on Android by @cakebaker in #9131
- disable some benchmarks by @sylvestre in #9167
- also disable du_human_balanced_tree as benchmark by @sylvestre in #9198
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
- don't fail on dirs by @Ada-Armstrong in #8930
- Remove non-GNU binaries (fix cksum interface divergence) by @oech3 in #9153
install
- fix the error message by @sylvestre in #9188
ls
mkdir
- Fix stack overflow with deeply nested directories by @naoNao89 in #8947
- remove
#[allow(unused_variables)]by @cakebaker in #9109
od
printenv
printf
- handle extremely large format widths gracefully to fix GNU test panic by @sylvestre in #9133
readlink
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
- Fix build and tests for uptime on OpenBSD by @lcheylus in #9158
- fix clippy warning manual-let-else on OpenBSD by @lcheylus in #9193
uudoc
- respect SKIP_UTILS by @oech3 in #8982
- Add example to manpage by @Its-Just-Nans in #7841
Documentation
- release notes: add 0.2.2 by @sylvestre in #8998
- README: Fix coverage badge URL by @RenjiSann in #9046
- README.md: Fix about manpage generation by @oech3 in #8994
- README.md: Show how to build all individual bins by cargo by @oech3 in #9069
- extensions.md: mark hashsum as deprecated by @oech3 in #9089
- doc: rename file by @sylvestre in #9208
CI & Build
- chore(deps): update github artifact actions (major) by @renovate[bot] in #8997
- publish script: add progress by @sylvestre in #9008
- GNUmakefile: Add a value for cross-build by @oech3 in #9015
- GNUmakefile: Don't install part of hashsum if we excluded hashsum by @oech3 in #9036
- ci: remove
code_formatjob fromFixPRworkflow by @cakebaker in #9043 - Append .bash to completions by @oech3 in #9049
- ci: remove deprecated
lima-actions/sshby @cakebaker in #9054 - GNUmakefile: Do not use install -v by @oech3 in #9051
- GNUmakefile: Reduce deps & minor cleanup by @oech3 in #9065
- CICD.yml: stop ci for redox by @oech3 in #9112
- ci: adapt template name for Lima v2.0 by @cakebaker in #9159
- FreeBSD workflow: disable stats report for sccache action by @lcheylus in #9156
- Fix test job in FreeBSD workflow by @lcheylus in #9155
- GNUmakefile: Better comment for cross build by @oech3 in #9186
- GNUmakefile: fix LOCALES=n by @oech3 in #9034
- Fix tests on OpenBSD for unix feature by @lcheylus in #9200
Code Quality & Cleanup
- fix: make visible alias by @Its-Just-Nans in #9041
- fix: show ignored args by @Its-Just-Nans in #9040
- rustdoc: fix broken intra doc links by @cakebaker in #9097
- clippy: re-enable
unnecessary_semicolonlint by @cakebaker in #9143 - Remove
test_keys2binary by @cakebaker in #9183 - Typo by @sylvestre in #9197
Performance & Benchmarking
- bench: remove 'sort_random_strings' by @sylvestre in #9030
- bench: tsort_input_parsing_heavy reduce the input side by @sylvestre in #9067
- Fix base64 benchmarks by @akretz in #9082
- Revert "Fix base64 benchmarks" by @sylvestre in #9139
- Disable variance-heavy benchmark tests by @sylvestre in #9201
Version Management
- prepare version 0.4.0 by @sylvestre in #9205
Dependency Updates
- be prescriptive on the codspeed-divan-compat version by @sylvestre in #9007
- Bump
linux-raw-sysfrom0.11to0.12by @cakebaker in #9019 - chore(deps): update rust crate bstr to v1.12.1 by @renovate[bot] in #9038
- chore(deps): update rust crate indicatif to v0.18.2 by @renovate[bot] in #9053
- chore(deps): update rust crate hex-literal to v1.1.0 by @renovate[bot] in #9077
- chore(deps): update rust crate clap to v4.5.51 by @renovate[bot] in #9079
- chore(deps): update rust crate clap_complete to v4.5.60 by @renovate[bot] in #9087
- chore(deps): update rust crate crc-fast to v1.6.0 by @renovate[bot] in #9095
- chore(deps): update vmactions/freebsd-vm action to v1.2.5 by @renovate[bot] in #9121
- chore(deps): update rust crate ctor to v0.6.1 by @renovate[bot] in #9130
- chore(deps): update rust crate quote to v1.0.42 by @renovate[bot] in #9165
- chore(deps): update reactivecircus/android-emulator-runner action to v2.35.0 by @renovate[bot] in #9169
- chore(deps): update rust crate jiff to v0.2.16 by @renovate[bot] in #9175
- chore(deps): update rust crate divan to v4.1.0 by @renovate[bot] in #9179
- chore(deps): update rust crate crc-fast to v1.7.0 by @renovate[bot] in #9180
- chore(deps): update vmactions/freebsd-vm action to v1.2.6 by @renovate[bot] in #9192
- chore(deps): update rust crate parse_datetime to v0.13.2 by @renovate[bot] in #9207
New Contributors
- @akretz made their first contribution in #9058
- @andreacorbellini made their first contribution in #9085
- @ya7on made their first contribution in #9151
- @matttbe made their first contribution in #9160
Full Changelog: 0.3.0...0.4.0