Coreutils in Rust
An in-progress safe implementation of coreutils
aiming for a minimal and yet
complete set of utilities. This project aims at the POSIX specification basic
requirements, plus common and useful features present in other implementations
of the utility.
This project has no intent to be 100% compatible with GNU's coreutils, like Uutils' coreutils, but if it happens to be, it's okay too.
Minimum Rust Version Policy
This project's minimum supported rustc
version (MSRV) is 1.58.0.
This will not be conservative until we get to a 1.0 version. So it can be changed at any point in time.
Compilation tests guarantees
The compilation is tested for Rust Tier 1 and Tier 2 x86_64 Unix/Unix-like platforms (except Redox), with CI.
All platforms are tested on MSRV and stable Rust, and Tier 1 platforms are also tested on beta and nightly Rust (Tier 2 and 3 only guarantee stable full capacity).
Also, note that Tier 3 Rust tests can fail before it hits the compilation check,
since my only option is to use a Linux system, add the target, and do
cargo check --target
, and they often are not available as a target for any
Tier 1 platforms. If you use one of these platforms and have the right MSRV
requirements and it build successfully, let me know, if it fails, open an issue
with the compilation error.
Compilation
Since not all targets provide full Unix API coverage (they aren't Unix or
lack libc crate support), some can provide a Cargo.toml
that have all
utilities that should work on the target.
Compilation example for
cp <PLATFORM>.toml Cargo.toml
cargo build --release
Tools
Name | Not Started | Started | Done |
---|---|---|---|
basename | X | ||
cat | X | ||
chgrp | X | ||
chmod | X | ||
chown | X | ||
chroot | X | ||
clear | X | ||
comm | X | ||
cp | X | ||
csplit | X | ||
cut | X | ||
date | X | ||
dd | X | ||
df | X | ||
diff | X | ||
dirname | X | ||
du | X | ||
echo | X | ||
env | X | ||
expand | X | ||
expr | X | ||
false | X | ||
groups | X | ||
hash | X | ||
head | X | ||
id | X | ||
install | X | ||
join | X | ||
link | X | ||
ln | X | ||
logname | X | ||
ls | X | ||
mkdir | X | ||
mktemp | X | ||
mkfifo | X | ||
mv | X | ||
nice | X | ||
nl | X | ||
nohup | X | ||
od | X | ||
paste | X | ||
patch | X | ||
printf | X | ||
pwd | X | ||
rm | x | ||
rmdir | X | ||
sed | X | ||
seq | X | ||
sort | X | ||
sleep | X | ||
split | X | ||
stat | X | ||
stty | X | ||
tail | X | ||
tee | X | ||
test | X | ||
time | X | ||
touch | X | ||
tr | X | ||
true | X | ||
tsort | X | ||
tty | X | ||
uname | X | ||
unexpand | X | ||
uniq | X | ||
unlink | X | ||
uptime | X | ||
users | X | ||
wc | X | ||
who | X | ||
whoami | X | ||
yes | X |
Licensing
This software is licensed under the Mozilla Public License, v. 2.0 (MPL). If a copy of the MPL was not distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/.
Contributing
We appreciate contributions, please check CONTRIBUTING.md for guidelines on how to contribute to the project with issue reports, git commits messages, etc.
The document also gives orientation on where to start if you wanna implement a pending tool from scratch.
Contributors
Without them, this project would not be what it is today.
- Ashwin-A-K
- @bojan88 - Bojan Đurđević
- @Celeo - Celeo
- @FedericoPonzi - Federico Ponzi
- @Larisho - Gab David
- @silverweed - Giacomo Parolini
- @marcospb19 - João M. Bezerra
- @kegesch - Jonas Geschke
- Ladysamantha
- @mkindahl - Mats Kindah
- @MichelKansou - Michel Kansou
- @twe4ked - Odin Dutton
- @rodrigocam - Rodrigo Oliveira Campos
- @Albibek - Sergey Noskov
- @palfrey - Tom Parker-Shemilt
- @tobbez - Torbjörn Lönnemark
- @envp - Vaibhav Yenamandra
- @muskuloes - Victor Tuekam