github uutils/coreutils 0.2.0

one day ago

📦 Rust Coreutils 0.2.0 Release:

We are excited to announce the release of Rust Coreutils 0.2.0 — our first fully internationalized release!
This milestone brings comprehensive localization support, major performance improvements, and enhanced Unicode handling.


Highlights:

  • Full Internationalization & Localization
    Complete translation infrastructure using Mozilla's Fluent framework with French translations included.
    Support for complex plural forms (Arabic, Hebrew, etc.) and locale-aware formatting.
    Even error messages from clap are fully localizable!

  • Community Translation Platform
    Join our translation efforts at Weblate
    or contribute directly via our l10n repository

  • Unicode & Non-UTF8 Path Support
    All programs now handle non-UTF8 paths seamlessly while supporting full Unicode features.
    Example: echo "🍔🍟🥤" | cut -d"🍟" -f1 works perfectly with emoji delimiters!

  • Massive Performance Gains
    Notable example: tr went from 9.81x slower than GNU to 1.58x faster — a 15x improvement!
    Additional optimizations in sort, cat, and other utilities.

  • Enhanced GNU Compatibility
    538 passing tests (+16 from 0.1.0), with reduced failures from 65 to 52.
    Continued improvements in edge case handling and behavior matching.

  • Production Ready for Ubuntu
    As part of Ubuntu's announcement of plans to integrate Rust Coreutils, this release focuses on stability and compatibility improvements to ensure Ubuntu users have the best possible experience.

  • Contributions
    This release includes 1183 commits from 46+ contributors, including 28 newcomers!
    All this with a code coverage about 87%!


GNU Test Suite Compatibility:

Result 0.1.0 0.2.0 Change 0.1.0 to 0.2.0 % Total 0.1.0 % Total 0.2.0 % Change 0.1.0 to 0.2.0
Pass 522 538 +16 84.46% 87.06% +2.60%
Skip 31 27 -4 5.02% 4.37% -0.65%
Fail 65 52 -13 10.52% 8.42% -2.10%
Error 0 1 +1 0% 0.16% +0.16%
Total 618 618 0

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

basenc

basename

cat

  • Fix reporting "input file is output file" error when outputting to an input file by @frendsick in #8025
  • add error handling in write_fast function by @yuankunzhang in #8091
  • handle broken pipe gracefully by @tgrez in #8336

chmod

chown

chroot

cksum

cp

csplit

date

df

du

  • create the string into the main thread to avoid some translations issue by @sylvestre in #8338
  • du/ls: Merge date formatting code, and handle timestamps far in the future/past by just printing them by @drinkcat in #8390
  • du/ls: Unify file metadata time handling by @drinkcat in #8396
  • du/ls: Improve time-style handling based on GNU coreutils manual by @drinkcat in #8415

echo

env

expr

factor

fmt

fold

  • process streams as bytes, not strings, to handle non-utf8 data by @phinjensen in #8241

hashsum

head

install

ln

logname

ls

mkdir

mkfifo

mknod

  • set cli specified file mode even when it's 0o666 by @TheJJ in #8343

mktemp

more

mv

nice

nl

od

pr

  • Add support for -D/--date-format parameter by @drinkcat in #8418
  • reduce nesting to improve readability of file_last_modified_time_format() by @cakebaker in #8420

printf

pwd

realpath

rm

shred

sort

stat

stdbuf

stty

sync

tail

tee

timeout

touch

tr

uname

unexpand

uptime

users

who

uucore

Localization & Internationalization

Test Improvements

Code Quality & Cleanup

CI & Build

Documentation

Platform Support

Dependency Updates

  • Bump onig from 6.4.0 to 6.5.1 by @cakebaker in #7976
  • Cargo.lock: Bump toml_edit to latest version by @drinkcat in #7988
  • Bump type-map by @cakebaker in #7993
  • Cargo.toml: remove unused coz dependency by @cakebaker in #8021
  • deny.toml: remove obsolete skips related to rustix by @alerque in #8019
  • Cargo.toml: remove procfs dependency & adapt cp test by @cakebaker in #8027
  • Bump windows-sys & adapt to API change by @cakebaker in #8160
  • Bump selinux crates by @cakebaker in #8226
  • Bump phf and phf_codegen & fix compilation errors by @cakebaker in #8233
  • Bump linux-raw-sys by @cakebaker in #8289
  • deny.toml: remove old windows-sys version from skip list by @cakebaker in #8438
  • Bump parse_datetime & adapt touch tests by @cakebaker in #8424
  • Cargo.toml: lock version of selinux by @cakebaker in #8502
  • Bump phf & phf_codegen from 0.12.1 to 0.13.1 by @cakebaker in #8516
  • Bump windows-sys from 0.60.1 to 0.61.0 by @cakebaker in #8557
  • chore(deps): update rust crate clap to v4.5.39 by @renovate[bot] in #8014
  • chore(deps): update rust crate clap_complete to v4.5.51 - autoclosed by @renovate[bot] in #8015
  • chore(deps): update dawidd6/action-download-artifact action to v10 by @renovate[bot] in #8041
  • chore(deps): update rust crate clap_complete to v4.5.52 by @renovate[bot] in #8038
  • chore(deps): update rust crate jiff to v0.2.14 by @renovate[bot] in #8042
  • fix(deps): update rust crate libc to v0.2.173 by @renovate[bot] in #8166
  • chore(deps): update rust crate bytecount to v0.6.9 by @renovate[bot] in #8051
  • chore(deps): update rust crate clap_complete to v4.5.53 by @renovate[bot] in #8130
  • chore(deps): update rust crate clap to v4.5.40 - autoclosed by @renovate[bot] in #8129
  • chore(deps): update rust crate clap_complete to v4.5.54 by @renovate[bot] in #8132
  • chore(deps): update rust crate clap_mangen to v0.2.27 by @renovate[bot] in #8133
  • chore(deps): update rust crate unicode-width to v0.2.1 by @renovate[bot] in #8137
  • chore(deps): update rust crate memchr to v2.7.5 by @renovate[bot] in #8154
  • chore(deps): update rust crate windows-sys to v0.60.2 by @renovate[bot] in #8163
  • chore(deps): update rust crate jiff to v0.2.15 by @renovate[bot] in #8165
  • chore(deps): update dawidd6/action-download-artifact action to v11 by @renovate[bot] in #8186
  • chore(deps): update rust crate zip to v4.1.0 by @renovate[bot] in #8189
  • chore(deps): update vmactions/freebsd-vm action to v1.2.1 by @renovate[bot] in #8190
  • fix(deps): update rust crate libc to v0.2.174 by @renovate[bot] in #8210
  • chore(deps): update rust crate zip to v4.2.0 by @renovate[bot] in #8255
  • chore(deps): update rust crate xattr to v1.5.1 by @renovate[bot] in #8267
  • fix(deps): update rust crate console to 0.16.0 by @renovate[bot] in #8278
  • chore(deps): update rust crate indicatif to v0.17.12 by @renovate[bot] in #8291
  • chore(deps): update rust crate rust-ini to v0.21.2 by @renovate[bot] in #8300
  • chore(deps): update rust crate notify to v8.1.0 by @renovate[bot] in #8306
  • fix(deps): update rust crate libfuzzer-sys to v0.4.10 by @renovate[bot] in #8311
  • chore(deps): update rust crate indicatif to 0.18.0 by @renovate[bot] in #8313
  • chore(deps): update rust crate clap to v4.5.41 by @renovate[bot] in #8324
  • chore(deps): update rust crate clap_complete to v4.5.55 by @renovate[bot] in #8325
  • chore(deps): update rust crate zip to v4.3.0 by @renovate[bot] in #8323
  • chore(deps): update rust crate clap_mangen to v0.2.28 by @renovate[bot] in #8326
  • chore(deps): update rust crate memmap2 to v0.9.7 by @renovate[bot] in #8337
  • chore(deps): update rust crate crc32fast to v1.5.0 by @renovate[bot] in #8339
  • fix(deps): update rust crate rand to v0.9.2 by @renovate[bot] in #8358
  • chore(deps): update rust crate rstest to 0.26.0 by @renovate[bot] in #8394
  • chore(deps): update rust crate rstest to v0.26.1 by @renovate[bot] in #8397
  • chore(deps): update rust crate ctor to v0.4.3 by @renovate[bot] in #8400
  • chore(deps): update rust crate clap_mangen to v0.2.29 by @renovate[bot] in #8410
  • chore(deps): update rust crate clap to v4.5.42 by @renovate[bot] in #8414
  • chore(deps): update rust crate notify to v8.2.0 by @renovate[bot] in #8428
  • chore(deps): update actions/download-artifact action to v5 by @renovate[bot] in #8437
  • chore(deps): update rust crate dns-lookup to v2.1.0 by @renovate[bot] in #8436
  • chore(deps): update rust crate clap to v4.5.43 by @renovate[bot] in #8441
  • chore(deps): update rust crate clap_complete to v4.5.56 by @renovate[bot] in #8451
  • fix(deps): update rust crate proc-macro2 to v1.0.96 by @renovate[bot] in #8460
  • chore(deps): update rust crate ctor to 0.5.0 by @renovate[bot] in #8461
  • fix(deps): update rust crate libc to v0.2.175 by @renovate[bot] in #8464
  • chore(deps): update rust crate glob to v0.3.3 by @renovate[bot] in #8465
  • chore(deps): update actions/checkout action to v5 by @renovate[bot] in #8466
  • fix(deps): update rust crate proc-macro2 to v1.0.97 by @renovate[bot] in #8473
  • chore(deps): update rust crate terminal_size to v0.4.3 - autoclosed by @renovate[bot] in #8468
  • chore(deps): update rust crate clap to v4.5.44 by @renovate[bot] in #8469
  • chore(deps): update rust crate clap_complete to v4.5.57 by @renovate[bot] in #8470
  • chore(deps): update rust crate thiserror to v2.0.14 by @renovate[bot] in #8472
  • chore(deps): update rust crate clap to v4.5.45 by @renovate[bot] in #8476
  • chore(deps): update rust crate rayon to v1.11.0 by @renovate[bot] in #8477
  • chore(deps): update actions/checkout action to v5 by @renovate[bot] in #8479
  • chore(deps): update vmactions/freebsd-vm action to v1.2.2 by @renovate[bot] in #8487
  • fix(deps): update rust crate proc-macro2 to v1.0.98 by @renovate[bot] in #8489
  • chore(deps): update rust crate thiserror to v2.0.15 by @renovate[bot] in #8490
  • fix(deps): update rust crate proc-macro2 to v1.0.101 by @renovate[bot] in #8491
  • chore(deps): update vmactions/freebsd-vm action to v1.2.3 by @renovate[bot] in #8493
  • chore(deps): update rust crate winapi-util to v0.1.10 by @renovate[bot] in #8498
  • chore(deps): update rust crate thiserror to v2.0.16 by @renovate[bot] in #8500
  • fix(deps): update rust crate tempfile to v3.21.0 by @renovate[bot] in #8499
  • chore(deps): update rust crate filetime to v0.2.26 by @renovate[bot] in #8503
  • chore(deps): update rust crate zip to v4.4.0 by @renovate[bot] in #8505
  • chore(deps): update rust crate zip to v4.5.0 by @renovate[bot] in #8506
  • chore(deps): update rust crate dns-lookup to v3 by @renovate[bot] in #8512
  • chore(deps): update rust crate memmap2 to v0.9.8 by @renovate[bot] in #8510
  • chore(deps): update mfinelli/setup-shfmt action to v4 by @renovate[bot] in #8511
  • chore(deps): update rust crate regex to v1.11.2 by @renovate[bot] in #8518
  • chore(deps): update rust crate clap to v4.5.46 by @renovate[bot] in #8524
  • chore(deps): update rust crate rust-ini to v0.21.3 by @renovate[bot] in #8531
  • chore(deps): update rust crate zip to v4.6.0 by @renovate[bot] in #8532
  • chore(deps): update rust crate time to v0.3.42 by @renovate[bot] in #8539
  • chore(deps): update rust crate clap to v4.5.47 by @renovate[bot] in #8546
  • chore(deps): update rust crate time to v0.3.43 by @renovate[bot] in #8547
  • chore(deps): update rust crate zip to v4.6.1 by @renovate[bot] in #8548
  • chore(deps): update actions/setup-python action to v6 by @renovate[bot] in #8552
  • chore(deps): update actions/github-script action to v8 by @renovate[bot] in #8554
  • chore(deps): update rust crate zip to v5 by @renovate[bot] in #8562

New Contributors

Full Changelog: 0.1.0...0.2.0

Don't miss a new coreutils release

NewReleases is sending notifications on new releases.