hypervisor
FreeARM64 Type-1 bare-metal hypervisor in no_std Rust, runs at EL2 on QEMU virt, boots Linux with FF-A v1.1 SPMC.
About hypervisor
A bare-metal ARM64 Type-1 hypervisor (Secure Partition Manager) written entirely in no_std Rust. It replaces Hafnium as the S-EL2 SPMC, boots Linux guests, and runs alongside Android pKVM on the same chip. The project implements the FF-A v1.1 protocol, GICv3 driver, page table walker, and SPMC event loop from scratch with zero dependencies beyond Rust core. It boots a Linux 6.12 kernel to a BusyBox shell on QEMU virt with 4 vCPUs, virtio-blk, and virtio-net, and passes 35 end-to-end tests through the full stack (Linux kernel module → pKVM → TF-A SPMD → SPMC → Secure Partitions). Designed for learning ARM's Secure architecture by building it, the codebase is fully auditable, GDB-steppable, and includes 457 passing assertions. The repo also offers a bilingual (English/Chinese) book draft and an architecture overview.
Key Features
Pros & Cons
- Written in Rust — catches real bugs at compile time (e.g., match guards against invalid SP state transitions)
- Single dependency (no_std Rust core) — full auditability and no hidden behavior
- Hand-coded implementation of every component — no auto-generated or imported code
- Comprehensive test suite with 457 passing assertions and 35 E2E tests
- Open source with detailed architecture documentation and bilingual book draft
- Designed to be skimmed in layers: README → ARCHITECTURE.md → book → src/
- Requires ARM64 hardware with EL2 and EL3 support (currently runs only on QEMU virt)
- Still an early-stage project (14 stars, 2 forks) — not yet production-ready
- Limited to specific FF-A v1.1 use cases; not a general-purpose hypervisor
- Documentation is primarily text-based; fewer visual diagrams or tutorials beyond those in the repo
- Dependency on a specific FF-A compatible firmware stack (TF-A SPMD) and pKVM for full integration