Skip to content

Latest commit

Β 

History

856 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WinuxCmd β€” Unix commands, native on Windows. 176 commands, 1924 options, 93% differential pass rate (178 cases / 13 tracked platform diffs).

Real Unix commands. Real Windows paths. One ~3 MB executable. No WSL Β· No Cygwin Β· No MSYS2 Β· No path-translation pain v1.0.0 stable is out. πŸŽ‰

GitHub release GitHub downloads Stars License Platform

πŸ’Ύ Install Β· ⚑ Demo Β· πŸ‚ niubash Β· πŸ“¦ WPM Β· πŸ†š Compare Β· πŸ“š Docs Β· δΈ­ζ–‡


The problem, in one sentence

You're on Windows and you need grep -rn, sed -i, find -exec, xargs -0 β€” and every option so far is a compromise:

  • WSL β€” 1 GB+ install, and a VM filesystem boundary between you and your files
  • Cygwin β€” path-translation gymnastics and a 2–5 s startup
  • GnuWin32 β€” abandoned in 2012, stuck at 60% compatibility
  • uutils β€” a great Rust project, but ~100 commands and ~600 options

WinuxCmd skips the compromise. A single native Win32 executable that speaks GNU syntax on Windows paths: 176 commands, 1,924 options β€” with ongoing differential testing against a GNU coreutils 9.7 oracle (178 cases, 165 pass, 13 tracked platform diffs).

176 1,924 178 cases 2,420 ~4 MB
commands optionsΒΉ GNU diff Β· 93% pass unit tests Β· 99.6% pass single binary

ΒΉ 1,924 = OPTION( macro count in src/commands/. Command count excludes the internal wpm manager and the [ bracket alias of test. Differential corpus: 178 cases across 84 commands (165 pass / 13 known platform diffs, tests/differential/baseline.json). See the GNU comparison report.


⚑ Unix muscle memory on Windows

# Every GNU flag you know, on real Windows paths
ls -la
grep -rn "TODO" src/
sed -i 's/http:/https:/g' config.ini
find . -name "*.tmp" -exec rm {} \;

# Full pipelines, zero setup β€” command links land on your PATH,
# so there are no prefixes and nothing to configure
find . -name "*.cpp" -print0 | xargs -0 wc -l

# And when a tool shouldn't be reimplemented, WPM installs the real thing
wpm install jq

πŸ’Ύ Install

Installer (recommended) Grab WinuxCmd-<version>-x64-setup.exe (or the ARM64 setup) from GitHub Releases
Portable Unzip WinuxCmd-<version>-win-x64.zip anywhere and add it to your PATH
Build from source VS 2022 + CMake 3.30 + Ninja β€” see Building from source

πŸš€ Why WinuxCmd

  • πŸͺŸ Native, not emulated β€” talks to Win32 APIs directly. Understands C:\, UNC paths and NTFS ACLs (with cygpath and getfacl for bridging). No VM, no runtime DLLs, instant startup.
  • 🧠 GNU where it counts β€” find alone implements 88 options (full expression parser, -exec/-execdir/-ok, -printf); grep ships PCRE2; sed supports in-place -i editing.
  • πŸ“¦ WPM built in β€” a package manager for the tools that shouldn't be reimplemented: jq, ripgrep, fd, fzf, bat, make, neovim, curl, wget…
  • πŸ§ͺ Tested like it matters β€” 2,742 unit tests, plus a 178-case differential suite byte-compared against authoritative upstream sources (GNU coreutils 9.7, findutils 4.10.0, grep 3.12, sed 4.9, patch 2.7.6, util-linux 2.41, procps-ng 4.0.4). Every command audited line-by-line; reports in tests/differential/audit-*.md.
  • ⚑ Small, fast, PGO-built β€” 3.79 MB for 176 commands, statically linked, zero dependencies, ~19 ms cold start. Published x64 binaries are Profile-Guided Optimization builds trained on real workloads (sort βˆ’18%, nl βˆ’17% vs the same code without PGO). Methodology and data: docs/performance-roadmap.md.

πŸ‚ Better together: the niubash shell

WinuxCmd gives Windows real Unix commands. niubash gives them a real bash language to live in β€” the same unixwin org, two halves of one workflow:

# In niubash (native bash on Windows β€” no WSL):
for f in *.log; do
  grep -c ERROR "$f" | xargs -I{} echo "$f: {} errors"
done | sort -t: -k2 -rn | head -5
  • Real bash semantics β€” if/for/functions/arrays/pipelines run on niubash, powered by its rubash engine, green across the GNU Bash upstream test suite (86/86).
  • Agent-friendly β€” niu -c is quiet and deterministic: no banners, stable stdout/stderr, exact exit codes. The shell your AI tooling already speaks.
  • Zero glue β€” niubash injects WinuxCmd's command links onto the PATH at startup, so grep, sed and find above are the real binaries you're looking at right now.

Ship WinuxCmd alone in a 3 MB exe, or drop in niubash (v1.0.0) and get the whole bash workflow.

πŸ“¦ WPM package manager

wpm install jq          # JSON processor
wpm install goawk       # awk implementation
wpm install bsdtar      # BSD tar
wpm install openssh     # SSH client
wpm install make        # GNU make
wpm install neovim      # text editor
wpm install curl        # URL transfer
wpm install wget        # network downloader

wpm search json         # discover packages
wpm list --all          # see what's installed

Details in the WPM User Guide.

πŸ†š How it compares

Feature WinuxCmd uutils (Rust) GnuWin32 Cygwin busybox
Commands 176 ~100 ~90 ~200 ~300
Options 1,924 ~600 ~200 Full ~500
GNU compat 81% diff pass 95% 60% 99% 70%
Native Win32 βœ… ❌ βœ… ❌ ❌
Package manager βœ… WPM ❌ ❌ apt-cyg ❌
Test cases 2,420 ~2,000 0 β€” ~100
Binary size ~3 MB ~5 MB β€” 1 GB+ β€”
Startup Instant Instant β€” 2–5 s β€”
Maintained βœ… 2026 βœ… ❌ since 2012 βœ… ❌
Deep dive: vs uutils / GnuWin32 / Cygwin

vs uutils/coreutils (Rust)

Aspect WinuxCmd uutils
Language C++23 Rust
Commands 176 ~100
Options 1,924 ~600
Binary size ~3 MB ~5 MB
Dependencies None Rust runtime
Build time 2 min 15 min
Package manager WPM built-in None

vs GnuWin32

Aspect WinuxCmd GnuWin32
Maintenance Active Abandoned
Last update 2026 2012
Windows support Win10/11 WinXP+
Modern toolchain C++23, CMake C, autotools

vs Cygwin

Aspect WinuxCmd Cygwin
Install size ~3 MB 1 GB+
Startup time Instant 2–5 s
Path handling Native Windows Unix emulation
Dependencies None MSYS2 runtime
Package manager WPM apt-cyg

🧰 Command coverage

176 commands β€” full coverage table (click to expand)

GNU Coreutils (83 commands)

Category Commands Differential status
File Ops cp, mv, rm, ln, install, mkdir, rmdir, touch, unlink βœ… mostly verified; cp has 9+ options rejected on Windows (issue-140)
Text Processing cat, echo, head, tail, sort, uniq, cut, tr, wc, fold, fmt, join, comm βœ… diff PASS except fmt (OUT_DIFF, issue-140)
Directory Listing ls, dir, vdir βœ… ls PASS; dir Windows-columnar by design
Search find, xargs βœ…
Crypto/Hash base64, base32, basenc, md5sum, sha1sum, sha256sum, sha384sum, sha512sum, b2sum, cksum, sum βœ…
Date/Time date, touch, time, timeout βœ…
System Info uname, hostname, id, whoami, users, groups, nproc, uptime, arch ⚠️ whoami/users/groups thin stubs (≀1 declared option each)
Disk df, du, stat ⚠️ stat deep-path gap (OUT_DIFF, issue-140)
Env/Expr env, printenv, expr, seq, yes, true, false βœ…
Text Format pr, nl, expand, unexpand, column, paste, tsort, ptx ⚠️ tsort and ptx output-format gaps (OUT_DIFF, issue-140)
File Info file, stat, readlink, realpath, dirname, basename, pathchk, sync ⚠️ stat deep-path; file no-magic stub
Process nice, nohup, stdbuf ⚠️ nice thin (1 option); stdbuf EXIT_DIFF (issue-140)
Permissions chmod, chown, chgrp, chroot ⚠️ Linux ownership/SELinux options rejected on Windows
Other shred, factor, kill, truncate, fmt, numfmt, mktemp, dircolors, sum, csplit, split ⚠️ fmt OUT_DIFF gap

GNU findutils/grep/sed (3 commands)

Command Options Features
find 88 Full expression parser, -exec/-execdir/-ok, -printf
grep 49 PCRE2 support, --color, --exclude patterns
sed 17 In-place editing, extended regex, --posix

BSD tools (15 commands)

cal, column, hexdump, logger, tree, less, more, strings, rev, tsort, seq, sleep, nohup, watch, tput

Process management (13 commands)

ps, top, kill, killall, pgrep, pkill, pidof, pldd, free, uptime, renice, stdbuf, timeout

Cygwin/MSYS2 (14 commands)

cygpath, dos2unix, unix2dos, d2u, u2d

System info (16 commands)

hostname, id, who, pinky, stty, infocmp, tic, toe, locale, tput, getconf, getfacl, ldd, lsof, file, man

Custom extensions (10+ commands)

wpm (package manager), mpicalc, regtool, mkpasswd, mkgroup, mkfifo, mknod, clear, reset, tzset

πŸƒ Benchmarks

Test WinuxCmd uutils GNU (WSL2)
cat (100 MB) 0.8 s 0.9 s 0.7 s
sort (1M lines) 2.1 s 2.3 s 1.9 s
grep (100 MB) 1.2 s 1.1 s 1.0 s
find (10K files) 0.3 s 0.4 s 0.2 s

Consistently in the same league as uutils β€” and within ~10–15% of native GNU running under WSL2, without booting a VM.

Benchmark environment: Windows 11, Intel i7-13700K, 32 GB RAM, NVMe SSD

πŸ§ͺ Testing and GNU verification

  • 2,420 automated unit tests β€” 99.6% pass rate
  • Differential corpus: 178 test cases (131 corpus + 47 regressions, covering 84 commands), executed against a GNU coreutils 9.7 oracle with identical inputs β€” 165 pass / 13 tracked diffs (93%), machine-checked in tests/differential/baseline.json
  • Automated GNU comparison: scripts/compare_outputs.sh and gnu_comparison_tests.sh; per-case runner: tests/differential/runner.sh
Tracked diffs (13) Command / case Reason
id -g regressions/21-id-group platform: Windows has no POSIX gid; prints primary-group RID (197121)
cp -l, ln regressions/23-cp-link-option, ln/35-hard environment: hardlinks across \\wsl.localhost 9p unsupported in the WSL-side runner; verified on native NTFS
mkdir exists mkdir/30-exists format: GNU uses locale-dependent curly quotes (U+2018/2019); winuxcmd uses ASCII '
dd, envsubst, mktemp, namei, readlink, which, seq 9 remaining cases output-format/platform differences; per-case state lives in tests/differential/baseline.json

The eight former issue-140 gaps (dd, diff -u, tsort, fmt, stat, sdiff, ptx, stdbuf) all pass; normal-format diff hunk-header, hash-family separator, cksum line-ending, realpath forward-slash, and od -c octal-escaping gaps were all found and fixed in 2026-09.

See the GNU Comparison Report.

πŸ“š Documentation

Document Description
Compatibility Matrix Support status of all 176 commands
GNU Comparison Report Differential testing vs a GNU coreutils 9.7 oracle
Windows Features Windows-specific behavior
WPM Guide Package manager user guide
GNU Test Baseline GNU test framework

πŸ› οΈ Building from source

Prerequisites: Visual Studio 2022+ Β· CMake 3.30+ Β· Ninja

# Build
./scripts/build-with-vs.ps1

# Run tests
./scripts/build-with-vs.ps1 -Target winuxcmd-tests
build-vs/tests/winuxcmd-tests.exe

Profile-Guided Optimization (x64): release CI builds the published x64 binary with PGO automatically β€” instrumented build, training workloads, then an /USEPROFILE relink. To reproduce locally:

./scripts/build-pgo.ps1          # -> build-pgo/usr/bin/winuxcmd.exe

Training workloads (scripts/pgo-train.sh) are ported from uutils/coreutils' build-pgo.sh, so profiles stay machine-independent. ARM64 builds are not PGO'd: profile collection must run on the target architecture.

🀝 Contributing

Contributions welcome β€” see CONTRIBUTING.md.

License

MIT β€” see LICENSE.


WinuxCmd β€” because ls shouldn't require a Linux kernel. Pair it with niubash β€” the native bash shell that speaks GNU fluently on Windows.

⬆ Back to top

About

Lightweight, native Windows implementation of Linux commands | 3.0MB only | AI-friendly

Topics

Resources

Contributing

Stars

271 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages