A cross-platform port of GNU's coreutils to Go
This is a port of GNU's coreutils (http://www.gnu.org/software/coreutils/) that aims to be a drop-in, cross-platform replacement.
It's currently under development.
Because it imports from github.com/EricLagergren/go-gnulib, and I'm constantly
refactoring, parts could break from day-to-day.
I'd recommend running go get -u ... before you file a bug report!
Pull requests are more than welcome.
Also, see https://www.github.com/EricLagergren/go-gnulib for a similar project that this project depends on.
| Utility | Completeness | Cross Platform | Need Refactor |
|---|---|---|---|
| cat | 100% | Yes (Unix/Windows) | No |
| chown | 0% (* see note #1) | No | Yes (-R) |
| env | 100% | Yes (Unix/Windows) | No |
| false | 100% | Yes (Unix/Windows) | No |
| logname | 100% | No | No |
| pwd | 100% | Yes (Unknown) | No |
| sync | 100% | Yes (Unix/Windows) | No |
| true | 100% | Yes (Unix/Windows) | No |
| tsort | 100% | Yes (Unix/Windows) | No |
| tty | 100% | Yes (Unix/Windows) | No |
| uname | 100% | No | No |
| uptime | 90% | Yes (Unix/Windows, no FreeBSD) | No |
| users | 100% | No | No |
| wc | 100% | Yes (Unix/Windows) | No |
| whoami | 100% | Yes (Unix/Windows | No |
| xxd | 100% | Yes (Unix/Windows) | No |
| yes | 100% | Yes (Unix/Windows) | No |
Side notes:
Obviously there's some things Go can do better (parallelism and concurrency), but for the most part these tools should have nearly the same speed, with Go being slightly slower.
eric@archbox $ time ./wc_go -lwmc one_gigabyte_file.txt
32386258 146084896 1182425560 1183778772 one_gigabyte_file.txt
real 0m25.206s
user 0m24.900s
sys 0m0.313s
eric@archbox $ time wc_c -lwmc one_gigabyte_file.txt
32386258 146084896 1182425560 1183778772 one_gigabyte_file.txt
real 0m22.841s
user 0m22.570s
sys 0m0.257sThese utilities should be nearly identical to GNU's coreutils.
Since parsing the output of shell commands isn't uncommon (even if it is bad behavior), most of the commands should have output that is nearly identical to the original GNU commands.
Do note that sometimes the results could differ a little for select commands.
For example, GNU's wc utility relies on the current locale to determine
whether it should parse multi-byte characters or not.
The Go version, on the other hand, uses the unicode/utf8 package
which natively detects multi-byte sequences. The trade-off is this: the
Go version is technically more correct, while the C version is faster.
Our implementation of xxd is actually much faster than the native xxd
implementation found on most *nix machines -- try it out!
(Depends on platform and command...)
…It (as a whole) is licensed under the GPLv3 because it's mostly a transliteration of GNU's coreutils, which are licensed under the GPLv3.
However, certain parts have their own licenses (e.g., xxd is public domain).
No open issues yet, or sync has not completed.