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:
- Build requirements and instructions.
- How to run on qemu.
- Overview of the directories.
- The kernel.
- The user space.
How it looks like (text mode via UART only) running on qemu:
init device riscv,plic0... OK (8,0)
init device ns16550a... OK (13,0)
VIMIX OS 64 bit (RISC V) kernel version 36bb03d is booting
Console: ns16550a
Timer source: sstc extension
init memory management...
init process and syscall support...
init filesystem...
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 device virtio,mmio... OK (1,1)
fs root device: virtio,mmio (1,0)
SBI implementation: OpenSBI (version 65541)
SBI specification: v2.0
SBI extension SRST detected: register SBI reboot/shutdown functions
init userspace...
CPU 0 starting
CPU 2 starting
CPU 3 starting
CPU 1 starting (boot CPU)
forkret() mounting /... OK
forkret() loading /usr/bin/init... OK
init mounting /dev... OK
init mounting /sys... OK
init mounting /home... OK
init starting /usr/bin/sh
$ ls /
/:
drwxr-xr-x root root 1024 B 2.11.2025 19:48:58 .
drwxr-xr-x root root 1024 B 2.11.2025 19:48:58 ..
.rw-r--r-- root root 5911 B 2.11.2025 19:43:25 README.md
drwxr-xr-x root root 0 B 2.11.2025 19:48:58 dev
drwxr-xr-x root root 5120 B 1.11.2025 12:38:22 etc
drwxr-xr-x root root 256 B 2.11.2025 09:34:08 home
drwxr-x--- root root 128 B 19.10.2025 08:45:18 root
drwxr-xr-x root root 0 B 2.11.2025 19:48:58 sys
drwxr-xr-x root root 7168 B 26.10.2025 16:43:02 tests
drwxrwxrwt root root 128 B 31.10.2025 23:16:27 tmp
drwxr-xr-x root root 256 B 31.10.2025 21:40:22 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.