RustyHermit - A Rust-based, lightweight unikernel
RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing. Unikernel means, you bundle your application directly with the kernel library, so that it can run without any installed operating system. This reduces overhead, therefore, interesting applications include virtual machines and high-performance computing.
The kernel is able to run Rust applications, as well as C/C++/Go/Fortran applications.
The repository contains following directories and submodules:
- demo is a small demo application based on the data-parallelism library Rayon
- hermit-abi contains the platform APIs and builds the interface between library operating system and the application
- hermit-sys contains a crate to automate the build process of the library operating systems
- libhermit-rs is the kernel itself
- netbench provides some basic network benchmarks
Background
RustyHermit is a rewrite of HermitCore in Rust developed at RWTH-Aachen. HermitCore was a research unikernel written in C (libhermit).
The ownership model of Rust guarantees memory/thread-safety and enables us to eliminate many classes of bugs at compile-time. Consequently, the use of Rust for kernel development promises fewer vulnerabilities in comparison to common programming languages.
The kernel and the integration into the Rust runtime are entirely written in Rust and do not use any C/C++ Code. We extended the Rust toolchain so that the build process is similar to Rust's usual workflow. Rust applications that use the Rust runtime and do not directly use OS services are able to run on RustyHermit without modifications.
Requirements
Building your own applications
Have a look at rusty-demo.
Use RustyHermit for C/C++, Go, and Fortran applications
If you are interested to build C/C++, Go, and Fortran applications on top of a Rust-based library operating system, please take a look at https://github.com/hermitcore/hermit-playground.
Missing features
- Multikernel support (might be coming)
- Virtio support (partly available)
- Network support (partly available)
Wiki
Please use the Wiki to get further information and configuration options.
Credits
RustyHermit is derived from following tutorials and software distributions:
- Philipp Oppermann's excellent series of blog posts.
- Erik Kidd's toyos-rs, which is an extension of Philipp Opermann's kernel.
- The Rust-based teaching operating system eduOS-rs.
HermitCore's Emoji is provided for free by EmojiOne.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
RustyHermit is being developed on GitHub. Create your own fork, send us a pull request, and chat with us on Zulip.
Publications
The following scientific publications are related to RustyHermit:
- S. Lankes et al. - Exploring Rust for Unikernel Development
- M. Sung et al. - Intra-unikernel isolation with Intel memory protection keys
- S. Lankes et al. - RustyHermit: A Scalable, Rust-Based Virtual Execution Environment
Funding
The development of this project was partially funded by the European Unionβs Horizon 2020 research and innovation programme under grant agreement No 957246 - IoT-NGIN.