Home

Awesome

<img src="https://github.com/Bareflank/boxy/raw/master/docs/boxy_logo.png" alt="boxy-logo" align="right" height="300" /> <br> <br>

GitHub version Build Status Codacy Badge CII Best Practices Join the chat at https://gitter.im/Bareflank-hypervisor/Lobby

Description

The Boxy Hypervisor is an open source hypervisor led by Assured Information Security, Inc. (AIS), that provides support for custom, lightweight Linux and Unikernel virtual machines on any platform including Windows, Linux and UEFI.

<br>

Project Goals:

Version 1 Targeted Use-Cases

Boxy is in its early stages of development and as such, it is not, and will not be capable of supporting all of the use cases that existing, more mature hypervisors are capable of supporting. Version 1 of Boxy aims to start somewhere by supporting the following use cases on Windows and Linux hosts:

There are several other use cases that we would like to support with Boxy in future versions like full Windows guest support, Containerization, and of course Cloud Computing, but for now the above use cases are our primary focus until version 1 is complete.

Virtualization vs Emulation

One question that comes up a lot is the difference between virtualization and emulation. In general, there are three ways in which you can talk to a physical piece of hardware.

Our goal with this project is to limit our use of emulation as much as possible. For Linux, this is simple as Linux can be modified to support our virtual devices, similar to how Xen and KVM work today. Unlike Xen and more like KVM, we aim to keep our modifications to Linux as self contained as possible while requiring Hardware Virtualization support (i.e. Xen's PVH model). Unlike KVM we wish to ensure things like PCI interfaces and QEMU in general are not required. We also aim to ensure our virtual interfaces support any host operating system including Windows, Linux and UEFI. To accomplish this, our virtual interfaces will only leverage hypercall (e.g. vmcalls on Intel) based APIs with the only exception being some CPUID based enumeraton logic needed when detecting the present of Boxy.

Compilation Instructions

To compile with default settings for your host environment, run the following commands:

git clone --recursive https://github.com/Bareflank/boxy.git
mkdir boxy/build; cd boxy/build
cmake ../hypervisor
make -j<# cores + 1>

Usage Instructions

To use the hypervisor, run the following commands:

make driver_quick
make quick

to get status information, use the following:

make status
make dump

to reverse this:

make unload
make driver_unload

to clean up:

make distclean

to execute a vm:

./prefixes/x86_64-userspace-elf/bin/bfexec --bzimage --path prefixes/vms/bzImage --initrd prefixes/initrd.cpio.gz --uart=0x3F8 --verbose