This project has been reimplemented in Go as wslkit disk, part of wslkit, and this repository is now archived and read-only.
Where each command went
| wsldisk |
wslkit |
wsldisk list |
wslkit disk list |
wsldisk info <distro> |
wslkit disk info <distro> |
wsldisk trim <distro> |
wslkit disk trim <distro> |
wsldisk compact [distro] |
wslkit disk compact [distro] |
wsldisk usage <distro> |
wslkit disk usage <distro> |
wsldisk orphans |
wslkit disk orphans |
wsldisk relink <distro> <path> |
wslkit disk relink <distro> <path> |
wsldisk move <distro> <dir> |
wslkit disk move <distro> <dir> |
wsldisk config ... |
wslkit disk config ... |
wsldisk completion <shell> |
wslkit completion <shell> |
The flags, the exit codes and the --json shape are unchanged, so a script written against wsldisk keeps working once the command name changes.
Why
The wsl tools share most of their platform layer. Registry reading, VHDX parsing, volume queries, redaction and the undo journal were all duplicated here. One binary means one signing identity, one release, one --json contract and one exit-code contract across every tool in the kit.
Reading further
- docs/wsldisk-parity.md tracks the port row by row, including the behaviours that each cost this project a bug report.
- ADR 0011 records the reasoning and the three places the Go version deliberately differs: no self-elevation, hand-parsed settings, and a command-line flag that beats the config setting in either direction.
What stays here
The C++ source and its history, frozen. docs/RESEARCH.md in particular holds measurements that wslkit cites and does not repeat: the virtual disk API parameter shapes that work unelevated, how long the utility VM holds a disk after a distribution stops, and why a duplex pipe deadlocks an elevated worker.
The feat/elevate branch carries the attach-read-only compaction work. It was never wired to a flag and is not ported, because wslkit does not self-elevate.
This project has been reimplemented in Go as
wslkit disk, part of wslkit, and this repository is now archived and read-only.Where each command went
wsldisk listwslkit disk listwsldisk info <distro>wslkit disk info <distro>wsldisk trim <distro>wslkit disk trim <distro>wsldisk compact [distro]wslkit disk compact [distro]wsldisk usage <distro>wslkit disk usage <distro>wsldisk orphanswslkit disk orphanswsldisk relink <distro> <path>wslkit disk relink <distro> <path>wsldisk move <distro> <dir>wslkit disk move <distro> <dir>wsldisk config ...wslkit disk config ...wsldisk completion <shell>wslkit completion <shell>The flags, the exit codes and the
--jsonshape are unchanged, so a script written against wsldisk keeps working once the command name changes.Why
The wsl tools share most of their platform layer. Registry reading, VHDX parsing, volume queries, redaction and the undo journal were all duplicated here. One binary means one signing identity, one release, one
--jsoncontract and one exit-code contract across every tool in the kit.Reading further
What stays here
The C++ source and its history, frozen.
docs/RESEARCH.mdin particular holds measurements that wslkit cites and does not repeat: the virtual disk API parameter shapes that work unelevated, how long the utility VM holds a disk after a distribution stops, and why a duplex pipe deadlocks an elevated worker.The
feat/elevatebranch carries the attach-read-only compaction work. It was never wired to a flag and is not ported, because wslkit does not self-elevate.