This is the source code for the NOVA microhypervisor.
The NOVA microhypervisor combines microkernel and hypervisor functionality and provides an extremely small trusted computing base for user applications and virtual machines running on top of it. The microhypervisor implements a capability-based authorization model and provides basic mechanisms for virtualization, spatial and temporal separation, scheduling, communication, and management of platform resources.
NOVA can be used with a multi-server environment that implements additional operating-system services in user mode, such as device drivers, protocol stacks, and policies. On machines with hardware virtualization features, multiple unmodified guest operating systems can run concurrently on top of the microhypervisor.
This code is experimental and not feature complete. If it breaks, you get to keep both pieces.
The following tools are needed to compile the source code:
- make 4.0 or higher, available from https://ftp.gnu.org/gnu/make/
- binutils 2.38 or higher, available from https://ftp.gnu.org/gnu/binutils/
- gcc 11.4 or higher, available from https://ftp.gnu.org/gnu/gcc/
The build environment can be customized permanently in
ad hoc by passing the applicable
PREFIX_ variables to
the invocation of
make as described below.
PREFIX_aarch64sets the path for an ARMv8-A cross-toolchain
PREFIX_x86_64sets the path for an x86 (64bit) cross-toolchain
For example, if the ARMv8-A cross-toolchain is located at
/opt/aarch64-linux/bin/aarch64-linux-gcc /opt/aarch64-linux/bin/aarch64-linux-as /opt/aarch64-linux/bin/aarch64-linux-ld
For CPUs with ARMv8-A architecture and boards with
- either Advanced Configuration and Power Interface (ACPI)
- or Flattened Device Tree (FDT)
|QEMU Virt Platform||
||4 Cortex-A53, GICv2|
||2 Cortex-A53, 4 Cortex-A73, GICv2|
||4 Cortex-A55, GICv2|
||4 Cortex-A72, GICv2|
||4 Cortex-A53, 4 Cortex-A73, GICv2|
|NVIDIA Tegra X1||
||4 Cortex-A57, GICv2|
|NVIDIA Tegra X2||
||4 Cortex-A57, 2 Denver, GICv2, SMMUv2|
||6 Carmel, GICv2, SMMUv2|
|NXP i.MX 8M||
||4 Cortex-A53, GICv3|
|Qualcomm Snapdragon 670||
||6 Kryo 360 Silver, 2 Kryo 360 Gold, GICv3, SMMUv2|
|Renesas R-Car M3||
||4 Cortex-A53, 2 Cortex-A57, GICv2|
||4 Cortex-A53, 2 Cortex-A72, GICv3|
|Xilinx Zynq Ultrascale+ MPSoC CG||
||2 Cortex-A53, GICv2, SMMUv2|
|Xilinx Zynq Ultrascale+ MPSoC Ultra96||
||4 Cortex-A53, GICv2, SMMUv2|
|Xilinx Zynq Ultrascale+ MPSoC ZCU102||
||4 Cortex-A53, GICv2, SMMUv2|
For CPUs with x86 architecture
- Intel VT-x (VMX+EPT) + optionally VT-d
- AMD-V (SVM+NPT)
and boards with Advanced Configuration and Power Interface (ACPI).
||64bit or 32bit VMs|
Control-Flow Enforcement Technology (CET)
NOVA can be built with support for control-flow protection. Because control-flow protected binaries require a CPU with CET support and because of the resulting performance overhead, CFP is disabled by default. Protection features can be enabled at build time as follows:
|Build Command||Feature Level|
||No control-flow protection (Default)|
||CET indirect branch tracking (IBT)|
||CET supervisor shadow stacks (SSS)|
||CET IBT and CET SSS|
Trusted Execution Technology (TXT)
On TXT-enabled platforms, NOVA performs a measured launch to establish a Dynamic Root of Trust for Measurement (DRTM) if an SINIT Authenticated Code Module (ACM) matching the platform is present in TXT memory.
The SINIT ACM is typically loaded into TXT memory
- on server platforms: by the firmware
- on client platforms: by the bootloader
See the NOVA interface specification in the
doc directory for details
regarding booting the NOVA microhypervisor.
The NOVA source code is licensed under the GPL version 2.
Copyright (C) 2009-2011 Udo Steinberg <firstname.lastname@example.org> Economic rights: Technische Universitaet Dresden (Germany) Copyright (C) 2012-2013 Udo Steinberg, Intel Corporation. Copyright (C) 2014 Udo Steinberg, FireEye, Inc. Copyright (C) 2019-2023 Udo Steinberg, BedRock Systems, Inc. NOVA is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. NOVA is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 2 for more details.
Feedback and comments should be sent to email@example.com