6 Commits
Author SHA1 Message Date
James Stringer 4898c4692f Remove TODO planning docs; complete THIRD-PARTY-NOTICES for the bundled deps
- 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.
2026-06-30 18:42:49 -04:00
James Stringer c66928bfff Vendor NetKVM as a committed JIT zip (vendor/virtio-win)
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.
2026-06-28 22:23:20 -04:00
James Stringer 0d4897dd6b Windows guest on Mac host via QEMU+HVF + ivshmem transport
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)
2026-06-21 18:30:59 -04:00
James Stringer 717c5b5148 Add ARM64 (Windows on ARM) support
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.
2026-06-04 19:00:27 -04:00
James Stringer 93a0722214 Vendor WebView2Loader binaries so fresh clones build without setup
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.
2026-05-17 10:55:47 -04:00
James Stringer 5db568ea4e Initial commit 2026-03-18 18:44:36 -04:00