microsoft/openvmm
Publicmirrored fromhttps://github.com/microsoft/openvmmAvailable
Guide/src/index.md
100lines · modecode
| 1 | # Introduction |
| 2 | |
| 3 | OpenVMM is a modular, cross-platform, general-purpose Virtual Machine Monitor |
| 4 | (VMM), written in Rust. |
| 5 | |
| 6 | The project is open-source, MIT Licensed, and developed publicly at |
| 7 | [microsoft/openvmm](https://github.com/microsoft/openvmm) on GitHub. |
| 8 | |
| 9 | **Cross-Platform** |
| 10 | |
| 11 | OpenVMM supports a variety of host operating systems, architectures, and |
| 12 | virtualization backends: |
| 13 | |
| 14 | | Host OS | Architecture | Virtualization API | |
| 15 | | ------------------- | ------------- | -------------------------------------- | |
| 16 | | Windows | x64 / Aarch64 | WHP (Windows Hypervisor Platform) | |
| 17 | | Linux | x64 | KVM | |
| 18 | | | x64 | MSHV (Microsoft Hypervisor) | |
| 19 | | macOS | Aarch64 | Hypervisor.framework | |
| 20 | | Linux ([paravisor]) | x64 / Aarch64 | MSHV (using [VBS] / [TDX] / [SEV-SNP]) | |
| 21 | |
| 22 | **General Purpose** |
| 23 | |
| 24 | Similar to other general-purpose VMMs (such as Hyper-V, QEMU, VirtualBox), |
| 25 | OpenVMM is able to host a wide variety of both modern and legacy guest operating |
| 26 | systems on-top of its flexible virtual hardware platform. |
| 27 | |
| 28 | - Modern operating systems can boot via UEFI, and interface with a wide |
| 29 | selection of paravirtualized devices for services like networking, storage, and |
| 30 | graphics. |
| 31 | |
| 32 | - Legacy x86 operating systems can boot via BIOS, and are presented with a |
| 33 | PC-compatible emulated device platform which includes legacy hardware such as |
| 34 | IDE hard-disk/optical drives, floppy disk drives, and VGA graphics cards. |
| 35 | |
| 36 | OpenVMM is regularly tested to ensure compatibility with popular operating |
| 37 | systems (such as Windows, Linux, and FreeBSD), and strives to maintain reasonable |
| 38 | compatibility with other, more niche/legacy operating systems as well. |
| 39 | |
| 40 | **Modular** |
| 41 | |
| 42 | OpenVMM is designed from the ground up to support a wide variety of distinct |
| 43 | virtualization scenarios, each with their own unique needs and constraints. |
| 44 | |
| 45 | Rather than relying on a "one size fits all" solution, the OpenVMM project |
| 46 | enables users to build specialized versions of OpenVMM with the precise set of |
| 47 | features required to power their particular scenario. |
| 48 | |
| 49 | For example: A build of OpenVMM designed to run on a user's personal PC might |
| 50 | compile-in all available features, in order support a wide variety of |
| 51 | workloads, whereas a build of OpenVMM designed to run linux container |
| 52 | workloads might opt for a narrow set of enabled features, in order to minimize |
| 53 | resource consumption and VM-visible surface area. |
| 54 | |
| 55 | * * * |
| 56 | |
| 57 | One particularly notable use-case of OpenVMM is in |
| 58 | [**OpenHCL**](./user_guide/openhcl.md) (AKA, OpenVMM as a paravisor). |
| 59 | |
| 60 | Unlike in the traditional virtualization model, where a VMM runs in a privileged |
| 61 | host/root partition and provides virtualization services to a unprivileged guest |
| 62 | partition, the "paravisor" model enables a VMM to provide virtualization |
| 63 | services from _within_ the guest partition itself. |
| 64 | |
| 65 | This is exciting, as it enables a wide variety of useful and novel |
| 66 | virtualization scenarios. |
| 67 | |
| 68 | For example: at Microsoft, OpenHCL plays a key role in enabling several |
| 69 | important Azure scenarios: |
| 70 | |
| 71 | - Enabling existing workloads to seamlessly leverage [Azure Boost] (Azure's |
| 72 | next-generation hardware accelerator), without requiring any modifications to |
| 73 | the guest VM image. |
| 74 | |
| 75 | - Enabling existing guest operating systems to run inside hardware-backed |
| 76 | [Confidential VMs]. |
| 77 | |
| 78 | - Powering [Trusted Launch VMs] - VMs that support Secure Boot, and include a |
| 79 | vTPM. |
| 80 | |
| 81 | * * * |
| 82 | |
| 83 | To learn more about different facets of the OpenVMM project, check out the |
| 84 | following links: |
| 85 | |
| 86 | | | | |
| 87 | | ----------------------------------------------------------------------------- | ----------------------------------------- | |
| 88 | | [Getting Started: OpenVMM](./user_guide/openvmm.md) | Running OpenVMM as traditional host VMM | |
| 89 | | [Getting Started: OpenHCL](./user_guide/openhcl.md) | Running OpenVMM as a paravisor (OpenHCL) | |
| 90 | | [Developer Guide: Getting Started](./dev_guide/getting_started.md) | Building OpenVMM / OpenHCL locally | |
| 91 | | [[Github] microsoft/openvmm](https://github.com/microsoft/openvmm) | Viewing / Downloading OpenVMM source code | |
| 92 | | [[Github] OpenVMM issue tracker](https://github.com/microsoft/openvmm/issues) | Reporting OpenVMM issues | |
| 93 | |
| 94 | [paravisor]: ./user_guide/openhcl.md |
| 95 | [VBS]: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs |
| 96 | [Azure Boost]: https://learn.microsoft.com/en-us/azure/azure-boost/overview |
| 97 | [Confidential VMs]: https://azure.microsoft.com/en-us/solutions/confidential-compute |
| 98 | [Trusted Launch VMs]: https://learn.microsoft.com/en-us/azure/virtual-machines/trusted-launch |
| 99 | [TDX]: https://www.intel.com/content/www/us/en/developer/tools/trust-domain-extensions/overview.html |
| 100 | [SEV-SNP]: https://www.amd.com/content/dam/amd/en/documents/epyc-business-docs/white-papers/SEV-SNP-strengthening-vm-isolation-with-integrity-protection-and-more.pdf |
| 101 | |