Skip to content

Windows 11 example for x86-64 - #369

Open
dreamliner787-9 wants to merge 5 commits into
mainfrom
windows_mark_ii
Open

Windows 11 example for x86-64#369
dreamliner787-9 wants to merge 5 commits into
mainfrom
windows_mark_ii

Conversation

@dreamliner787-9

@dreamliner787-9 dreamliner787-9 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Desktop guest OS now works reliably on top of mainline libvmm.

  • Ubuntu 26.04, works out of the box.
  • Windows 10, need to install virtIO drivers via the Windows installer GUI, otherwise works out of the box.
  • Windows 11, same as Windows 10, but need TPM and Secure Boot bypass, otherwise works out of the box.

For Windows to work, a kernel patch is required to enable Intel APICv (hardware accelerated APIC virtualisation) until I can get my RFC below ratified.

This is not quite ready yet, but opening a PR to keep track.

TODOs for me to get this finalised:

  • Complete RFC-24: Add support for Intel APICv seL4/rfcs#37
  • Ensure the above get integrated into Microkit.
  • Add Windows/Ubuntu boot into CI somehow. I'm thinking we have a golden image on the CI runners, then have an app that prints something to COM1 when Ubuntu/Windows get to the desktop. Unsure of licensing implications, something to look into.
  • Write down how to install Windows 10 or 11 on the VM. Especially the latter since the process is a bit complicated, maybe I can automate it.

Nice to haves before merging this:

Things to look into post-merging:

  • Support multiple VCPUs on x86-64 #368
  • Boot Windows on hardware. The main challenge is getting video out of the VM, other than that I don't think there are any huge issues, since I already got OVMF booting on hardware. Edit: got it working
  • On the topic of video, maybe I need to look into emulating, or providing a solid mechanism to passthrough a proper GPU some how. Right now I just passthrough the bochs-display device on QEMU.
  • Emulate an NVMe SSD rather than a virtIO block device, so users don't have to install the virtIO drivers. Same applies for networking.

Closes #279.

Example of Windows 11 virtualised on libvmm, running on QEMU, i.e. nested virtualisation. But it still runs with great performance all things considered:
image
image

Ubuntu:
image

@dreamliner787-9
dreamliner787-9 force-pushed the windows_mark_ii branch 7 times, most recently from ff3af3d to 5f9b13f Compare August 6, 2026 02:41
@dreamliner787-9
dreamliner787-9 force-pushed the windows_mark_ii branch 4 times, most recently from 1dbf958 to 3d71d46 Compare August 15, 2026 07:00
@dreamliner787-9
dreamliner787-9 force-pushed the windows_mark_ii branch 5 times, most recently from 720c031 to f5fd682 Compare August 20, 2026 08:32
@dreamliner787-9

Copy link
Copy Markdown
Collaborator Author

Need to fix potentially:
image
and
image

@dreamliner787-9
dreamliner787-9 force-pushed the windows_mark_ii branch 6 times, most recently from 93bb852 to 5080fcc Compare August 28, 2026 00:39
Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
cp -r examples/virtio_pci examples/windows

Except for ARM stuff, Linux and Buildroot config files.

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: renamed and purged stuff from virtio_pci

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: +QEMU RAM, fix virtio regs moving, +bochs-display

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: rm serial subsystem + boot UEFI

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: add bochs-display passthrough

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: bump guest RAM to 11G

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: passthrough kb + mouse

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: handle all IRQ passthrough

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: fix BSOD inaccessible boot device

Turns out Windows is very strict on ACPI DSDT parsing. The PCI devices
need an interrupt link device. The Link devices must have all the
methods even if they are dummy, else the Windows' resource arbiter will
not accept the interrupt and fail the viostor driver binding process.

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: purge linux

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: fix PS/2 KB+M not working on Windows

We need to tell Windows that our virtual PCI bridge decodes I/O Ports
range that these legacy devices live in.

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

HACK: enable Intel APICv operation

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

checkpoint windows 10+11 working on QEMU, just need APICv kernel patch

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: metaprogram clean ups

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: add debugging guide

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: lower guest RAM to 8GB, lower reso to 1080p

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: add install instructions

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: use OVMF with LionsOS logo

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: add UEFI repro instruction

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>

examples/windows: add steps for custom SDK

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create a Windows 10/11 example for x86-64

1 participant