Skip to content

Replace VZ with HV as default macOS backend #250

Open
5 of 6 issues completed
Open

Description

@AprilNEA

Current decision

The strategic target is now All-in-HV runtime by default.

For linux/amd64 on Apple Silicon, the next decision gate is #292: evaluate FEX64 inside the HV guest as the default runtime translator. If FEX64 is good enough, VZ/Rosetta should be retained only as an optional docker build --platform linux/amd64 backend or compatibility escape hatch, not as a second always-on runtime VM. If FEX64 is not good enough, #290 remains the fallback dual HV+VZ runtime routing plan.

Summary

The HV (Hypervisor.framework) backend is already the de facto default for non-Rosetta workloads: resolve_backend() returns HV for VmBackend::Auto when Rosetta is not requested. The remaining strategic question is no longer “keep VZ as the default until HV is ready”, but “can HV also cover amd64 runtime workloads via FEX64?”

Blockers / decision gates

  1. [Correctness] Pause / resume / snapshot dispatch is VZ-only — HV-backed VMs must not call Virtualization.framework lifecycle code.
  2. [Test coverage] At least one E2E suite must boot a Linux guest through HV and reach network + filesystem smoke tests.
  3. [Verification] DAX end-to-end path must be verified: guest mmap → FUSE_SETUPMAPPING → hv_vm_map → page fault.
  4. [Feature] Balloon device is missing from initialize_darwin_hv().
  5. [Performance] Interrupt coalescing / EVENT_IDX batching must land on the hottest device paths.
  6. [amd64 strategy] Evaluate FEX64 as default linux/amd64 runtime inside HV #292 must validate whether FEX64 can be the default linux/amd64 runtime inside HV.

Evidence for HV readiness

Exit criteria

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions