Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nebulet/nebulet
A proof-of-concept microkernel that implements a WebAssembly "usermode" that runs in Ring 0.
https://github.com/nebulet/nebulet
microkernel nebulet operating-system osdev rust webassembly
Last synced: about 2 months ago
JSON representation
A proof-of-concept microkernel that implements a WebAssembly "usermode" that runs in Ring 0.
- Host: GitHub
- URL: https://github.com/nebulet/nebulet
- Owner: nebulet
- License: mit
- Archived: true
- Created: 2018-02-19T19:46:35.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-28T21:27:36.000Z (almost 2 years ago)
- Last Synced: 2024-08-01T03:21:14.203Z (4 months ago)
- Topics: microkernel, nebulet, operating-system, osdev, rust, webassembly
- Language: Rust
- Homepage:
- Size: 1.09 MB
- Stars: 2,331
- Watchers: 125
- Forks: 75
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- awesome-rust - nebulet/nebulet
- awe-wasm - Nebulet - activity/m/nebulet/nebulet) ![Language](https://img.shields.io/github/languages/top/nebulet/nebulet) (Runtimes / **Rust**)
- awesome-rust-zh - nebulet/nebulet - 实现在 Ring 0 中,运行的 WebAssembly“usermode”的微内核。 (应用 / 操作系统)
- awesome-rust - nebulet/nebulet
- awesome-rust-cn - nebulet/nebulet
README
# Nebulet
[![Join the chat at https://gitter.im/nebulet/nebulet](https://badges.gitter.im/nebulet/nebulet.svg)](https://gitter.im/nebulet/nebulet?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://travis-ci.org/nebulet/nebulet.svg?branch=master)](https://travis-ci.org/nebulet/nebulet)## What is Nebulet?
Nebulet is a Google Summer of Code project started during the summer of 2018. More details about Nebulet and GSoC are [here](https://lsneff.me/the-end-of-the-beginning.html).
Under the hood, Nebulet is a microkernel that executes WebAssembly modules in ring 0 and a single address space to increase performance. This allows for low context-switch overhead, syscalls just being function calls, and exotic optimizations that simply would not be possible on conventional operating systems. The WebAssembly is verified, and due to a trick used to optimize out bounds-checking, unable to even represent the act of writing or reading outside its assigned linear memory.
The [Cranelift](https://github.com/CraneStation/cranelift) compiler is used to compile WebAssembly to native machine code. Once compiled, there are no complex interactions between the application and the runtime (unlike jit compilers, like v8) to reduce surface area for vulnerabilities.
Right now, Nebulet isn't ready to do anything yet, but it'll get there.
## Building & Running
MacOS requires you to first [cross compile binutils](https://os.phil-opp.com/cross-compile-binutils/) and to add the newly compiled ld-bfd to your path.
```sh
# checkout code and associated submodules
$> git clone https://github.com/nebulet/nebulet.git
$> cd nebulet/ && rustup override set nightly# install tools
# make sure that `python` is accessible.
$> rustup component add rust-src
$> rustup target add wasm32-unknown-unknown
$> cargo install cargo-xbuild
$> cargo install --git https://github.com/nebulet/bootimage --branch packaging# build userspace
$> cargo userspace# compile the kernel
$> bootimage build --release# compile and run the kernel in qemu
$> bootimage run --release -- -serial stdio
```