VIMIX OS is a small Unix like OS which started as a fork of xv6 (which is a partial re-implementation of Unix version 6 for RISC V 32 and 64-bit).
See contributors for original xv6 contributors and authors of other 3rd party components.
Compile and try out:
- getting started with the development
- Details about the kernel.
- Details about the user space.
How it looks like (text mode via UART only) running on qemu:
Early console detected: SBI
VIMIX OS 64 bit (RISC V) kernel version 62ff674 is booting
Timer source: sstc extension
SBI implementation: OpenSBI (version 65543)
SBI specification: v3.0
init early memory management...
init new page table...
init devices list...
init console: ns16550a
init device riscv,plic0... OK (8,0)
init device ns16550a... OK (13,0)
Redirecting printk to console device...
init remaining devices...
init device /dev/null... OK (3,0)
init device /dev/zero... OK (4,0)
init device /dev/random... OK (10,0)
init device google,goldfish-rtc... OK (6,0)
init device syscon... OK (7,0)
init device virtio,mmio... OK (1,0)
init filesystem...
found root file system on device: virtio,mmio (1,0)
init userspace...
CPU 0 entering scheduler (boot CPU)
forkret() mounting /... OK
Loaded kernel debug symbols from /kernel-vimix.xdbg.
forkret() loading /usr/bin/init... OK
init mounting /dev... OK
init mounting /sys... OK
init starting /usr/bin/login
$ ls /
/:
drwxr-xr-x root root 2048 B 22.4.2026 20:41:14 .
drwxr-xr-x root root 2048 B 22.4.2026 20:41:14 ..
.rw-r--r-- root root 6413 B 5.4.2026 19:17:33 README.md
drwxr-xr-x root root 0 B 22.4.2026 20:41:14 dev
drwxr-xr-x root root 5120 B 29.3.2026 11:00:31 etc
drwxr-xr-x root root 256 B 4.1.2026 20:23:49 home
.rw-r--r-- root root 367488 B 22.4.2026 20:41:13 kernel-vimix.xdbg
drwxr-x--- root root 128 B 4.1.2026 20:23:49 root
drwxr-xr-x root root 0 B 22.4.2026 20:41:14 sys
drwxr-xr-x root root 9216 B 12.4.2026 18:38:11 tests
drwxrwxrwt root root 128 B 4.1.2026 20:23:49 tmp
drwxr-xr-x root root 256 B 4.1.2026 20:23:49 usr
$ cat /README.md | grep RISC | wc
4 78 607
$ fortune
I'd spell creat with an e. - Ken Thompson when asked what he would do differently if he were to redesign UNIX
$
- Added documentation in
docs. - Cleanups: Reorganized code, separate headers, renamed many functions and variables, using stdint types, general refactoring, reduced number of GOTOs, ...
- Support 32-bit RISC V (in addition to 64-bit), both booting in M-mode and S-mode in a SBI environment. Inspired by a 32-bit xv6 port by Michael Schröder (https://github.com/x653/xv6-riscv-fpga/tree/main/xv6-riscv).
- The user space tries to mimics a real UNIX. Some apps can get compiled unchanged for Linux too.
- Changed memory map; app stacks grow dynamically.
- Added applications:
- Added syscalls:
- Support multiple devices, not just two hard coded ones.
- Added devices:
- The file system was changed to store more meta data and support larger files. It was also moved behind a virtual file system abstraction.
- Parse the device tree at boot.
- Added /dev as a special file system exposing all devices.
- Added /sys as a special file system exposing various kernel objects.
- Boot in M-mode now mimics SBI to the S-mode kernel.
- Added a buddy allocator.
kmalloc()now supports smaller allocations of one page via a slab allocator (see memory_management). - Added Inter Processor Interrupts.
- Relocated the kernel after boot to the upper half of the address space.