Virbio is the user-space library that provides most of the functionality
necessary to run applications in user-space. It is found in
The user-space memory manager provides a
free like interface for
C code and a
GlobalAlloc implementation for rust programs. We rely on the
same allocator that the kernel
uses for small--medium sized blocks (between 0 and 2 MiB). Everything else is
mapped directly by allocating memory with the map syscall.
A rumpkernels is a componentized NetBSD kernel that can run in many different environments. It contains file systems, a POSIX system call interface, many PCI device drivers, a SCSI protocol stack, virtio, a TCP/IP stack, libc and libpthread and more.
Vibrio has a
rumprt module which provides the necessary low-level interface to
run a rumpkernel inside a user-space process (e.g., the
rumpuser API and some more). This has the
advantage that it's possible to run many POSIX compatible programs out of the
box without building a fully-fledged POSIX compatibility layer into NrOS.
- Bare-metal and Xen implementations for rumprun
- Some supported applications
- PhD thesis about rumpkernels
Vibrio uses the following crates / dependencies:
vibrio ├── arrayvec ├── bitflags ├── crossbeam-utils ├── cstr_core ├── hashbrown ├── kpi ├── lazy_static ├── lineup ├── log ├── rawtime ├── rumpkernel ├── serde_cbor ├── slabmalloc ├── spin └── x86