The Bareflank Hypervisor's main goal is to provide the "bare" minimum hypervisor. Since Bareflank supports C++ 11/14, multiple operating systems, and a full toolstack, it's not as simple as say SimpleVisor, but still adheres to the same basic principles of leaving out the complexity of a full blown hypervisor in favor of an implementation that is simple to read and follow.
It is our goal to provide a hypervisor that others can extend to create their own hypervisors. To this end, the purpose of this repository, is to provide a set of APIs that enables the creation and management of guest virtual machines. Because this set of APIs is designed to be generic, we intended to support (over time) the following different guest virtual machine types:
- VM applications (think LibVMI in a VM with no OS)
- Unikernels (e.g. IncludeOS)
- PV Kernels (e.g. modified Linux kernel)
- Thick VMs (e.g. unmodified Windows, Linux, BSD, etc...)
To setup the hyperkernel, we must clone the extension into the Bareflank root folder and run make (the following assumes this is running on Linux).
cd ~/
git clone https://github.com/Bareflank/hypervisor.git
cd ~/hypervisor
git clone https://github.com/Bareflank/extended_apis.git
git clone https://github.com/Bareflank/hyperkernel.git
./tools/scripts/setup-<xxx>.sh --no-configure
sudo reboot
cd ~/hypervisor
./configure -m hyperkernel/bin/hyperkernel.modules
make driver_load
make
make quick
Currently, to test out the hyperkernel, you can run the following test VM applications. The applications are basic C and C++ applications that print "hello world" using either C or C++, and execute in a virtual machine with no OS.
./makefiles/hyperkernel/bfexec/bin/native/bfexec /home/user/hypervisor/makefiles/hyperkernel/tests/basic_c/bin/cross/basic_c
./makefiles/hyperkernel/bfexec/bin/native/bfexec /home/user/hypervisor/makefiles/hyperkernel/tests/basic_cxx/bin/cross/basic_cxx
Bareflank Hypervisor Website
Bareflank Hypervisor API Documentation
The project roadmap can be located here
The Bareflank Hypervisor is licensed under the GNU Lesser General Public License v2.1 (LGPL).