Skip to content

Windows 11 example for x86-64 - #369

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

Windows 11 example for x86-64#369
dreamliner787-9 wants to merge 8 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, running on QEMU.

  • 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
Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
For above 4G region on x86_64.

Signed-off-by: Bill Nguyen <bill.nguyen@unsw.edu.au>
Windows like to read this sometimes. If we don't handle it then it will
triple fault.

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>
If seL4 is built with AVX on then expose AVX
to the guest as well.

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>
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