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 64-bit RISC V).
By now VIMIX runs on 32 and 64-bit RISC V as well as 64-bit ARM.
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:
Flushing early printk buffer to console:
VIMIX OS 64 bit (RISC V) kernel version 9934d509 is booting
SBI implementation: OpenSBI (version 65544)
SBI specification: v3.0
System model: riscv-virtio,qemu
System compatible: riscv-virtio
Using boot loader provided DTB
init early memory management...
init new page table...
init devices list...
init console: ns16550a
init device riscv,plic0... OK (8,0)
Redirecting printk to first console device...
init device ns16550a... OK (13,0)
init remaining devices...
init device /dev/null... OK (3,0)
init device /dev/random... OK (10,0)
init device /dev/zero... OK (4,0)
init device syscon... OK (7,0)
init device google,goldfish-rtc... OK (6,0)
init device virtio,mmio... OK (1,0)
init filesystem...
found root file system on device: virtio,mmio (1,0)
init userspace...
CPU 1 entering scheduler
CPU 0 entering scheduler (boot CPU)
CPU 2 entering scheduler
CPU 3 entering scheduler
forkret() mounting /... OK
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 8.9.2026 17:25:28 .
drwxr-xr-x root root 2048 B 8.9.2026 17:25:28 ..
.rw-r--r-- root root 6961 B 8.9.2026 17:24:40 README.md
drwxr-xr-x root root 0 B 8.9.2026 17:25:28 dev
drwxr-xr-x root root 5120 B 7.9.2026 18:35:43 etc
drwxr-xr-x root root 256 B 7.9.2026 19:02:32 home
.rw-r--r-- root root 437943 B 8.9.2026 17:03:32 kernel-vimix.xdbg
drwxr-x--- root root 192 B 7.9.2026 19:02:32 root
drwxr-xr-x root root 0 B 8.9.2026 17:25:28 sys
drwxr-xr-x root root 10240 B 6.9.2026 13:43:12 tests
drwxrwxrwt root root 128 B 23.8.2026 07:42:45 tmp
drwxr-xr-x root root 256 B 23.8.2026 07:42:45 usr
drwxr-xr-x root root 192 B 23.8.2026 07:42:45 xdbg
$ id
uid=0(root) gid=0(root) groups=0(root),42(wheel)
$ pwd
/root
$ cat /README.md | grep RISC | wc
5 91 734
$ 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).
- ARM 64-bit support.
- The user space tries to mimics a real UNIX. Some apps can get compiled unchanged for Linux too.
- Changed memory map; app stack grows 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.
- Can be build with clang.