TopGit
Đánh giá repo GitHub

uutils coreutils: bản viết lại GNU coreutils bằng Rust

uutils/coreutils
UTopGit review image for uutils/coreutils
Review by Topgit.dev for uutils/coreutils, with GitHub repository stats and README context.
Nhận định nhanh

uutils coreutils là bản viết lại từ đầu bộ GNU coreutils bằng Rust, chạy cùng một bộ ls, cp, sort trên Linux, macOS, *BSD, Windows và WASI từ một codebase. Dự án coi bất kỳ khác biệt output nào so với GNU là một bug cần sửa, không phải tính năng — đúng tư duy của một bản thay thế trực tiếp. Đáng dùng nhất khi GNU coreutils không phải mặc định; thay nó trên một Linux GNU đã trưởng thành thì lợi ích nhỏ hơn, vì khoảng cách hành vi chưa về 0.

Sao
★ 23.9k
Fork
⑂ 2.0k
Ngôn ngữ
Rust
Giấy phép
MIT
Chủ đề
Backend
Cập nhật
Aug 2026
Trang chủ
GitHub

Bản viết lại GNU coreutils đa nền tảng bằng Rust

uutils coreutils viết lại toàn bộ các chương trình trong GNU coreutils bằng Rust, biên dịch phần lớn thành một binary multicall kiểu BusyBox có tên coreutils. Nó nhắm tới Linux, macOS, các bản BSD, Windows và WASI từ cùng một codebase, nên script viết cho nền tảng này chạy được trên nền tảng khác mà không cần sửa. Theo README của dự án, Ubuntu đã dùng nó làm mặc định kể từ phiên bản 25.10.

Tính năng nổi bật của uutils coreutils

  • Đóng gói thành một binary multicall duy nhất (kiểu BusyBox), tự chọn đúng tiện ích dựa trên argv[0] hoặc subcommand — bên cạnh đó vẫn có thể build từng binary riêng lẻ nếu muốn.
  • Mục tiêu là khớp chính xác stdout và exit code của GNU, nên script đang kiểm tra exit code hay parse output thường không cần sửa gì.
  • Build và chạy trên Linux, macOS, các bản BSD, Windows và WASI (kể cả bản WebAssembly có thể thử ngay trên trình duyệt) từ cùng một codebase Rust.
  • Có thể bật backend băm dựa trên OpenSSL cho md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum và cksum, mặc định static-link, giúp nhanh hơn trên CPU không có SHA-NI.
  • Build theo feature flag cho phép chỉ compile những tiện ích cần dùng, ví dụ cargo build --features "base32 cat echo rm" --no-default-features, thay vì build toàn bộ.
  • chcon và runcon hỗ trợ SELinux có sẵn sau một feature flag riêng, khi máy build có libselinux và libclang.
  • Đi kèm shell completions (bash, fish, zsh qua make; elvish và powershell qua công cụ uudoc) và manpage cùng các binary.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao

Cài đặt uutils coreutils

Có thể tải binary dựng sẵn từ trang GitHub releases của dự án: tag latest-commit bám theo nhánh main và là bản mà người báo bug nên dùng để test, còn tag latest là bản ổn định, tái lập được, dành cho packager. Nếu bản coreutils-*-gnu (link glibc) không chạy được trên máy bạn, README gợi ý dùng bản coreutils-*-musl thay thế — phiên bản glibc tối thiểu mà dự án nhắm tới khớp với glibc trên runner ubuntu-latest của GitHub Actions. Build từ source cần Rust (cargo, rustc) và tùy chọn thêm GNU Make. cargo build --release compile bộ tiện ích cốt lõi thành một binary multicall tên coreutils; thêm --profile=release-small để giảm kích thước, hoặc --features windows / --features unix để build thêm các tiện ích riêng cho từng nền tảng. cargo install --path . --locked cài vào thư mục bin của Cargo ($HOME/.cargo/bin) nhưng không cài manpage hay shell completion — muốn có các thứ đó thì dùng make install (hoặc sudo -E make install), lệnh này cũng cài sẵn completion cho bash, fish và zsh. README không nhắc tới trình quản lý gói hệ điều hành như apt, Homebrew hay một installer riêng cho Windows — cách cài chỉ gồm binary dựng sẵn, Cargo, hoặc Make.

Dùng uutils như một thay thế trực tiếp cho GNU

Sau khi cài, mỗi tiện ích hoạt động giống hệt bản GNU cùng tên — ls, cp, sort... nhận cùng flag và cho ra cùng stdout, cùng exit code, đúng mục tiêu mà README nêu ra (bất kỳ sai khác nào cũng bị coi là bug). Nếu chưa muốn ghi đè lên binary GNU sẵn có trên hệ thống trong lúc thử nghiệm, make PROG_PREFIX=uu- install sẽ cài mọi thứ dưới tên như uu-ls, uu-cp; còn make MULTICALL=y install cài một binary multicall duy nhất, tự phân luồng theo cách nó được gọi, kiểu BusyBox. Dự án cũng ghi rõ một số extension có chủ đích vượt ra ngoài phạm vi khớp GNU — --progress là ví dụ được nêu — cho những trường hợp bám sát GNU tuyệt đối sẽ bỏ lỡ một tính năng hữu ích.

Ưu điểm của bản triển khai bằng Rust

  • Một codebase Rust duy nhất chạy giống hệt trên Linux, macOS, các bản BSD, Windows và WASI — không cần nhánh script riêng cho GNU, BSD hay Windows.
  • Các crate theo từng tiện ích, build theo feature flag, cho phép chỉ compile base32 cat echo rm mà bỏ qua các tiện ích còn lại.
  • Static linking, kể cả backend băm OpenSSL tùy chọn, giữ bản triển khai gọn trong một binary nhỏ, không phải lùng thư viện runtime.
  • Các đảm bảo an toàn bộ nhớ của Rust loại trừ hẳn một nhóm lỗi như tràn bộ đệm và use-after-free, những thứ mà coreutils viết bằng C phải tự canh gác thủ công.
  • Đủ trưởng thành để trở thành coreutils mặc định của Ubuntu kể từ bản 25.10, theo README của dự án.

Hạn chế hiện tại và tính năng còn thiếu

  • Chính README thừa nhận "một số option có thể còn thiếu hoặc hành vi có thể khác" so với GNU — độ khớp hành vi tuyệt đối với mọi flag chưa đạt được.
  • README không nêu con số phần trăm test suite GNU đã pass, nên không thể kiểm chứng độ khớp hiện tại chỉ từ trang repo — nên tự kiểm tra trang test-coverage trong user manual trước khi phụ thuộc vào nó cho production.
  • cargo install không cài manpage hay shell completion — muốn có cần dùng make install riêng hoặc thao tác thủ công qua uudoc.
  • Hỗ trợ SELinux (chcon, runcon) cần có libselinux và libclang trên máy build, thêm bước setup mà người không dùng SELinux sẽ không muốn bận tâm.
  • Tăng tốc checksum bằng OpenSSL là tùy chọn lúc build chứ không phải mặc định, và README ghi rõ nó không có tác dụng trên Windows.
Xem trên GitHubTrang chủ

Lựa chọn thay thế đáng cân nhắc

GNU coreutils — bản gốc viết bằng C mà dự án này viết lại; vẫn là mặc định trên hầu hết bản phân phối Linux chính, nên phần lớn người dùng chỉ cần tới uutils coreutils khi thực sự muốn khả năng đa nền tảng của bản Rust.BusyBox — binary multicall viết bằng C gộp nhiều tiện ích Unix, gồm một tập con coreutils, vào một binary nhỏ, cùng ý tưởng đóng gói mà uutils mượn lại cho binary multicall coreutils của chính nó; phổ biến trong Linux nhúng và image Docker gọn nhẹ.toybox — bộ tiện ích kiểu coreutils, giấy phép BSD, nhỏ gọn của Android; một lựa chọn tối giản khác, hướng nhiều hơn tới nhúng và di động thay vì khớp đa nền tảng với GNU.

Khi nào nên chọn uutils coreutils

Chọn uutils coreutils khi bạn cần cùng một bộ tiện ích Unix cốt lõi hoạt động giống hệt nhau trên Linux, macOS, Windows và WASI từ một toolchain duy nhất — pipeline CI, script build đa nền tảng, hay target nhúng khó cross-compile toolchain C của GNU là những trường hợp hợp lý nhất. Nếu bạn chỉ chạy Linux với GNU coreutils có sẵn và không có nhu cầu đa nền tảng hay nhúng gì, thì đổi sang uutils gần như chẳng có lý do ngoài tò mò hoặc muốn binary multicall gọn hơn.

Câu hỏi thường gặp

uutils coreutils đã sẵn sàng dùng cho production chưa?

uutils coreutils đã triển khai đầy đủ các chương trình chuẩn của GNU coreutils, dù README ghi rõ một số option có thể còn thiếu hoặc hành vi khác với bản gốc GNU. Việc Ubuntu dùng nó làm mặc định từ bản 25.10 là tín hiệu đã dùng thực tế trong production, nhưng nên kiểm tra hành vi từng flag cụ thể trước khi phụ thuộc vào nó cho automation quan trọng.

uutils coreutils hỗ trợ những nền tảng nào?

uutils coreutils chạy trên Linux, macOS, các bản BSD, Windows và WASI từ cùng một codebase Rust, và dự án còn phát hành bản WebAssembly có thể thử ngay trên trình duyệt mà không cần cài gì.

Cài uutils coreutils trên Linux, macOS hay Windows thế nào?

uutils coreutils có sẵn dưới dạng binary dựng sẵn từ trang GitHub releases (tag latest-commit bám nhánh main, tag latest là bản ổn định), hoặc bạn tự build bằng cargo build --release hay cargo install --path . --locked, cần có cargo và rustc của Rust.

uutils coreutils có thay thế trực tiếp được cho GNU coreutils không?

Đó chính là mục tiêu của dự án: uutils coreutils nhắm khớp chính xác stdout và exit code của GNU, và bất kỳ khác biệt nào so với GNU đều bị coi là bug chứ không phải chủ đích thiết kế. Tuy vậy độ khớp tuyệt đối cho mọi flag và edge case thì chưa được đảm bảo.

uutils coreutils có mặc định trên Ubuntu không?

uutils coreutils đã trở thành mặc định trên Ubuntu kể từ phiên bản 25.10, theo README của dự án, thay thế vị trí của GNU coreutils trong bản phát hành đó.

Giấy phép của uutils coreutils là gì?

uutils coreutils dùng giấy phép MIT. Đây là giấy phép thoáng hơn so với GNU coreutils gốc, vốn dùng giấy phép GPL 3.0 trở lên — đáng lưu ý nếu khả năng tương thích giấy phép ảnh hưởng tới cách bạn phân phối dự án của mình.

Vấn đề mà uutils coreutils giải quyết

ls, cp, sort... của GNU coreutils là chương trình C gắn chặt với glibc và các API đặc thù Unix, nên một script chạy tốt trên Linux thường cần công cụ khác, một lớp tương thích, hoặc WSL mới chạy tương tự trên Windows; còn cross-compile toolchain C đó cho WASI hay các target lạ là cả một bài toán riêng. uutils coreutils sinh ra để lấp đúng khoảng trống đó: một codebase Rust, một hệ build, output và exit code khớp với GNU, chạy nguyên bản trên những nền tảng mà GNU coreutils chưa từng được build cho.

Trường hợp sử dụng tốt nhất

  • Dựng image Docker tối giản hoặc hệ Linux nhúng, nơi một binary multicall nhỏ gọn có lợi hơn cài cả gói GNU đầy đủ.
  • Chạy cùng một shell script không sửa đổi trên Linux, macOS và Windows mà không cần đổi sang tiện ích riêng của từng nền tảng.
  • Cross-compile userland cho target WASI hoặc WebAssembly — nơi toolchain C của GNU coreutils khó khớp vào.
  • Chọn dự án này làm đóng góp Rust đầu tiên — mỗi tiện ích nằm trong một crate uu_UTILNAME nhỏ riêng biệt.

Repo liên quan

Nguồn & ghi công

Thông tin và trích dẫn lấy từ repository GitHub uutils/coreutils và README của dự án (github.com/uutils/coreutils).

Dữ liệu GitHub · đồng bộ lần cuối 15 thg 8, 2026Đánh giá bởi Henry
Về TopGit

coreutils có đáng để bạn bỏ thời gian?

ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về coreutils.

GitHub