- Delete the TODO/ planning + runbook docs, and fix the four code/README comments
that pointed at them (asb_transport.c/.h; the tools/ivshmem and vendor/qemu-ivshmem
READMEs now point at the vendored QEMU directly).
- THIRD-PARTY-NOTICES.md: add the bundled QEMU stack (QEMU GPL-2.0; GLib +
gettext/libintl LGPL-2.1; PCRE2 BSD; EDK2/TianoCore BSD-2-Clause-Patent) and
NetKVM (BSD-3) -- shipped/staged by the app but previously absent from the
top-level notices. The QEMU entry cross-references the bundled
vendor/qemu-ivshmem/LICENSES/NOTICE.md + WRITTEN_OFFER.txt. A usage audit
confirmed every listed dependency is still in use, so nothing was removed.
Store the signed ARM64 NetKVM driver (Red Hat VirtIO Ethernet Adapter, v100.101.104.28500,
WHQL-signed) as vendor/virtio-win/netkvm-arm64.zip so the Mac app JIT-pulls it from the public
repo (raw.githubusercontent.com) and caches it, instead of bundling it. License kept visible
alongside. Redistributed unmodified under BSD 3-Clause.
Run Windows 11 ARM64 guests on macOS over QEMU+HVF, with an ivshmem
shared-memory transport carrying every guest channel (agent control,
display/VDD, input, audio, clipboard, SSH, 9P) - no guest networking
required.
- tools/transport: one guest transport API, two backends (PC AF_HYPERV,
Mac ivshmem); SPSC ring with an acquire-barrier fix for SSH integrity
- tools/ivshmem: our own KMDF ivshmem BAR-mapping driver (no third party)
- src/backend_mac: Mac-host ivshmem transport, QEMU VM lifecycle, IDD
display consumer, agent/SSH proxies, ISO->disk patcher, Windows create
- tools/agent + channel EXEs + tools/vdd: wired to asb_transport
- tools/agent_win: staged guest payload (interim, pending JIT pull)
- vendor/qemu-ivshmem: vendored QEMU 11.0.1 fork (ivshmem-plain) + LGPL
source mirror for the self-contained app bundle
- tools/sign/make-release.ps1: use the host-native ARM64 MSBuild so the
WDK driver ApiValidator runs (the x86 validator fails on ARM64)
Build, EV-sign, Microsoft attestation-sign, and package AppSandbox for
Windows on ARM with feature parity to x64 except the vTPM and guest-state
isolation (neither is supported by ARM Windows HCS). Target architecture is
resolved at compile time (ASB_IS_ARM64 in disk_util.h); the supported pairing
is x64 build/host/guest and ARM64 build/host/guest, so one flag drives every
architecture decision. x64 behavior is unchanged throughout.
Runtime:
- hcs_vm.c: omit SecuritySettings (vTPM + GuestStateOnly isolation) on ARM;
Secure Boot is retained.
- disk_util.c: emit the arch token in every autounattend/unattend
processorArchitecture attribute; on ARM, bypass the Win11 Setup hardware
checks via the HKLM\SYSTEM\Setup\LabConfig keys across all VM-creation
paths; select the arch-correct OpenSSH Server MSI.
- d3dlayers.c / agent.c: resolve, download, and stage the arm64 D3D mapping
layers for GPU-PV; stage the Vulkan ICD manifest under the arch-neutral
name dzn_icd.json.
Build and release pipeline:
- AppSandbox.sln: add the missing AppSandboxPackage Release|ARM64 Build.0 so
the VS GUI actually runs sign+package for the ARM64 config.
- AppSandboxPackage.vcxproj: run make-release.ps1 for Release on x64 or ARM64,
passing -Platform $(Platform).
- make-release.ps1 / sign-drivers.ps1: -Platform ARM64 selects bin\Release-ARM64,
the ARM64 attestation profile, and the AppSandbox-<ver>-win-arm64.zip name.
Sanitize LIB before Add-Type so the .NET Framework C# compiler does not fail
(CS1668) on the non-existent atlmfc\lib\ARM64 path the VS ARM64 build adds to
LIB.
- Directory.Build.props: disable ApiValidator only when cross-building ARM64 on
a non-ARM64 host (the x86 ApiExtractor cannot read ARM64 PEs); Microsoft
re-runs full API validation on every attestation submission.
- Package.vcxproj: stage the vendored ARM64 devcon.exe into the ARM64 drivers
output, mirroring the x64 devcon copy.
- vendor/devcon/arm64/devcon.exe: add the vendored ARM64 devcon.exe, un-ignored
in .gitignore mirroring the existing vendor/webview2/arm64 precedent.
The repo's README claims WebView2Loader.dll lives under vendor/webview2/,
but only the headers and devcon.exe were tracked. The DLL+import lib for
both x64 and arm64 sat in developers' working trees and were blocked
from git by the over-broad Visual Studio .gitignore rules x64/ and
[Aa][Rr][Mm]64/ (which match any directory of that name at any depth).
Fresh clones therefore hit MSB3073 (xcopy exit 4) at the AppSandbox
post-build step because the source DLL was missing.
Microsoft's WebView2 SDK license permits redistribution of
WebView2Loader.dll; the files are 150 KB each, stable, and required at
runtime. Added negation rules in .gitignore so future vendor binaries
in those paths don't get re-blocked.