You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[enhancement] Give the option to boot into the linux system as a VM from Windows #178
The easiest first step for a user would be to test out their system as a windowed/fullscreen QEMU VM or soemthing from Widnows itself, the next step would be to reboot into it.
Proposed solution
give the option as a first stepp to boot into the liux system as a VM
Alternatives considered
No response
Contribution
Yes — I'd like to work on this (would you like a good-first-issue tag?)
Worth recording what's actually in the tree, because the code for this already exists.
app/vm_windows.go implements the whole feature:
GetFreshVMCapability() / TryInVMFresh(imageRef) — builds preview.raw from an OCI image in a headless builder VM, then launches an interactive preview window. This is exactly the "try it as a VM first" step this issue asks for.
GetVMCapability() / BootInVM() — boots the installed system in a VM (SPEC §6.2).
The frontend has a vmpreview screen and a "Try in VM" button on the launchpad, gated on state.freshVmCapability?.available.
So the feature isn't missing — it's dark. GetFreshVMCapability() refuses unless it finds QEMU, the edk2 firmware, and a bundled Alpine builder kernel/initramfs under C:\wootc\qemu\.
payload/builder/build-builder.sh already existed to produce those builder artifacts, but nothing referenced it — not the justfile, not CI, not the docs. So they were never built, the capability check always failed, and the button never appeared.
PR #187 adds just build-builder to wire that script up.
What's still needed to close this is packaging, not code: a release has to actually ship builder-vmlinuz + builder-initramfs.img, QEMU, and the edk2 firmware alongside wootc.exe. That's a distribution-size and hosting decision (QEMU alone is ~100 MB), which is why I've left it rather than guessing — and it's the same question as #177, which PR #187 also addresses on the image side.
The 2026-09-26 experiments show that this needs more than packaging. The original helper did not load its VirtIO disk driver, exited zero after failure, and the Windows caller could mistake an existing blank disk for success. #411 fixes that false-success path. The required product journey is now explicit in ADR 0004: one persistent Linux disk, first used inside Windows, then eligible for native boot without losing the user's work.
The revised helper actually provisioned a Bluefin disk under KVM, and that disk booted to GDM. Account authentication worked, but the pinned Bluefin desktop crashed and returned to login. This is not a usable-desktop pass. A fresh Yellowfin trial is in progress in fix(builder): prepare persistent Linux disks with explicit scratch and results #415.
feat: build and verify an x86 Windows VM runtime bundle #419 builds a signed runtime ZIP of 183,295,958 bytes (321,059,722 unpacked), including the helper. The reduced package executes guest code with headless TCG and interactive GTK on Windows without loading DLLs from the separately installed QEMU copy. Its production extractor verified and installed all 3,284 files on native Windows; negative tests reject tampering, missing files, unsafe paths and cancellation.
Still required before closing this issue: an ordinary fresh Windows user obtains the runtime through the app, reaches a usable Linux desktop, keeps a file and setting across shutdown/relaunch, and follows a proven same-disk native promotion path. Low-memory/low-disk recovery and actual older-PC compatibility need their own evidence. Server KVM/WHPX results do not establish that hardware coverage. Runtime source/dependency provenance must also be complete before release distribution.
Experiment records: docs/experiments/vm-first-2026-09-26.md and docs/experiments/windows-vm-runtime-2026-09-26.md (the latter in #419).
2026-09-26 experiment update: Phase 1 must start inside Windows
I confirm the originally stated Phase 1: the person first prepares and uses Linux in a Windows VM, then may move that same persistent system to native boot. We have been restoring that product direction in ADR 0004; native-only migration remains useful but cannot stand in for this first step.
New component evidence since the ADR:
On Linux KVM, a corrected and digest-pinned Yellowfin image reached an authenticated GNOME desktop using a 2 GiB preparation VM. The installed desktop preserved a user file and a GNOME setting after a clean shutdown and relaunch of the exact same disk.
A separate capacity trial provisioned and booted a 32 GiB target with an 8 GiB scratch disk. The authenticated desktop had about 23.7 GiB available in the writable user workspace and shut down cleanly.
The helper's isolated Linux results do not prove Windows WHPX. The managed Windows VM/runtime product path has not passed its full account → desktop → edit → stop → relaunch journey yet.
Native promotion remains unproven. The source review identified that the current deployer rewrites BLS entries for NTFS loop boot. A future transition must preserve VM boot entries and prove the same user's work after native boot and return to VM.
Detailed immutable evidence is linked from the merged wootc PR #415 (docs/experiments/vm-helper-2026-09-26.md) and PR #429. The product gate is still open; only the Windows-hosted round trip can establish the North Star journey.
Activity
feat: offline image bundle, and build the Try-in-VM assets (#177, #178)…
hanthor commentedon Aug 21, 2026
Worth recording what's actually in the tree, because the code for this already exists.
app/vm_windows.goimplements the whole feature:GetFreshVMCapability()/TryInVMFresh(imageRef)— buildspreview.rawfrom an OCI image in a headless builder VM, then launches an interactive preview window. This is exactly the "try it as a VM first" step this issue asks for.GetVMCapability()/BootInVM()— boots the installed system in a VM (SPEC §6.2).vmpreviewscreen and a "Try in VM" button on the launchpad, gated onstate.freshVmCapability?.available.So the feature isn't missing — it's dark.
GetFreshVMCapability()refuses unless it finds QEMU, the edk2 firmware, and a bundled Alpine builder kernel/initramfs underC:\wootc\qemu\.payload/builder/build-builder.shalready existed to produce those builder artifacts, but nothing referenced it — not the justfile, not CI, not the docs. So they were never built, the capability check always failed, and the button never appeared.PR #187 adds
just build-builderto wire that script up.What's still needed to close this is packaging, not code: a release has to actually ship
builder-vmlinuz+builder-initramfs.img, QEMU, and the edk2 firmware alongsidewootc.exe. That's a distribution-size and hosting decision (QEMU alone is ~100 MB), which is why I've left it rather than guessing — and it's the same question as #177, which PR #187 also addresses on the image side.feat: assemble an offline release bundle, and pin the installer to it (…
docs: refresh ROADMAP into the road to 1.0 — version ladder, mileston…
docs: roadmap to 1.0 with milestone ladder and tracking boards (#214)
docs: record 1.0 scope decision cutting pre-install Try-in-VM (M4.3) (#…
hanthor commentedon Sep 26, 2026
The 2026-09-26 experiments show that this needs more than packaging. The original helper did not load its VirtIO disk driver, exited zero after failure, and the Windows caller could mistake an existing blank disk for success. #411 fixes that false-success path. The required product journey is now explicit in ADR 0004: one persistent Linux disk, first used inside Windows, then eligible for native boot without losing the user's work.
Observed so far:
Still required before closing this issue: an ordinary fresh Windows user obtains the runtime through the app, reaches a usable Linux desktop, keeps a file and setting across shutdown/relaunch, and follows a proven same-disk native promotion path. Low-memory/low-disk recovery and actual older-PC compatibility need their own evidence. Server KVM/WHPX results do not establish that hardware coverage. Runtime source/dependency provenance must also be complete before release distribution.
Experiment records:
docs/experiments/vm-first-2026-09-26.mdanddocs/experiments/windows-vm-runtime-2026-09-26.md(the latter in #419).hanthor commentedon Sep 26, 2026
2026-09-26 experiment update: Phase 1 must start inside Windows
I confirm the originally stated Phase 1: the person first prepares and uses Linux in a Windows VM, then may move that same persistent system to native boot. We have been restoring that product direction in ADR 0004; native-only migration remains useful but cannot stand in for this first step.
New component evidence since the ADR:
Detailed immutable evidence is linked from the merged wootc PR #415 (
docs/experiments/vm-helper-2026-09-26.md) and PR #429. The product gate is still open; only the Windows-hosted round trip can establish the North Star journey.