RuxOS
A unikernel operating system written in Rust.
RuxOS was inspired by Unikraft and ArceOS
๐ง Working In Progress. See RuxOS Book for more information.
Features & TODOs
- Architecture: x86_64, riscv64, aarch64
- Platform: QEMU pc-q35 (x86_64), virt (riscv64/aarch64)
- Multi-thread
- FIFO/RR/CFS scheduler
- VirtIO net/blk/gpu drivers
- TCP/UDP net stack using smoltcp
- Synchronization/Mutex
- SMP scheduling with single run queue
- File system
- Compatible with Linux apps
- Dynamically loading apps
- Interrupt driven device I/O
- Async I/O
Latest News ๐
2025
- [2025/07/24] RuxOS [v0.1.0](https://github.com/sโฆ
RuxOS
A unikernel operating system written in Rust.
RuxOS was inspired by Unikraft and ArceOS
๐ง Working In Progress. See RuxOS Book for more information.
Features & TODOs
- Architecture: x86_64, riscv64, aarch64
- Platform: QEMU pc-q35 (x86_64), virt (riscv64/aarch64)
- Multi-thread
- FIFO/RR/CFS scheduler
- VirtIO net/blk/gpu drivers
- TCP/UDP net stack using smoltcp
- Synchronization/Mutex
- SMP scheduling with single run queue
- File system
- Compatible with Linux apps
- Dynamically loading apps
- Interrupt driven device I/O
- Async I/O
Latest News ๐
2025
- [2025/07/24] RuxOS v0.1.0 Released!
- [2025/07/22] Add support for support multi-process and virtual memory management for riscv64
- [2025/06/26] Add support for FUSE file system with exfat verified
- [2025/06/25] Add support for sshd for aarch64 after some fixes
- [2025/05/13] Add support for GICv3 for aarch64 with DTB support
- [2025/02/26] Add support for static routed network with loopback support
- [2024/11/14] Add support for virtio-console for virt platform
- [2024/10/10] Add support for multiprocess for aarch64 in single address space
- [2024/09/29] RuxOS v0.0.3 Released!
Example apps
Example applications can be found in the apps/ directory. All applications must at least depend on the following modules, while other modules are optional:
- ruxruntime: Bootstrapping from the bare-metal environment, and initialization.
- ruxhal: Hardware abstraction layer, provides unified APIs for cross-platform.
- ruxconfig: Platform constants and kernel parameters, such as physical memory base, kernel load addresses, stack size, etc.
- axlog: Multi-level formatted logging.
The currently supported applications and programming languages, as well as their dependent modules and features, are shown in the following table:
Rust applications
| App | Extra modules | Enabled features | Description |
|---|---|---|---|
| display | axalloc, ruxdisplay | alloc, paging, display | Graphic/GUI test |
| shell | axalloc, ruxdriver, ruxfs | alloc, paging, fs | A simple shell that responds to filesystem operations |
C applications
| App | Enabled features | Description |
|---|---|---|
| helloworld | A minimal app that just prints a string by C | |
| envtest | alloc, paging | An environment variable test |
| memtest | alloc, paging | Dynamic memory allocation test by C |
| filetest | alloc, paging, fs, blkfs | File system operation test |
| httpclient | alloc, paging, net | A simple client that sends an HTTP request and then prints the response by C |
| httpserver | alloc, paging, net | A multi-threaded HTTP server that serves a static web page by C |
| udpserver | alloc, paging, net | A simple UDP server that send back original message |
| systime | rtc | A simple test for real time clock module |
| basic | alloc, paging, multitask, irq | A simple test for basic pthread-related API in C standard library |
| parallel | alloc, paging, multitask | Parallel computing test to test synchronization by C |
| pipe | alloc, paging, multitask, pipe | A test for pipe API |
| sleep | alloc, paging, multitask, irq | Thread sleeping test |
| tsd | alloc, paging, multitask, irq | A test for pthread-key related API |
| dl | paging, alloc, irq, musl, multitask, fs, pipe, poll, rtc, signal, virtio-9p | An example for dynamically loading apps |
| libc-bench | alloc, multitask, fs, musl | A standard libc test for musl libc integration |
| sqlite3 | alloc, paging, fs, fp_simd, blkfs | A simple test for Sqlite3 API |
| iperf | alloc, paging, net, fs, blkfs, select, fp_simd | A network performance test tool |
| redis | alloc, paging, fp_simd, irq, multitask, fs, blkfs, net, pipe, epoll, poll, virtio-9p, rtc | Redis server on Ruxos |
| cpp | alloc, paging, irq, multitask, fs, random-hw | C++ benchmark |
| nginx | alloc, paging, fp_simd, irq, multitask, fs, blkfs, net, pipe, epoll, poll, select, rtc, signal | Run Nginx as web server |
| wamr | alloc, paging, fp_simd, irq, multitask, fs, virtio-9p, signal, smp | Wasm runtime |
Other applications
You can try more applications built with musl libc, such as:
- busybox
- opensshd
- mount.fuse-exfat
Alpine Linux would be a good choice for you finding or building your own applications.
Programming languages
| Language | Description |
|---|---|
| C | Run C apps by standard musl libc supported by ruxmusl. Evaluated by libc-bench. |
| C++ | Run C++ apps by c++ static library provided by musl libc. Passed c++ benchmark. Evaluated by c++ benchmark. |
| Perl | Run Perl standard library by musl libc. Evaluated by Perl benchmark. |
| Python | Run Python apps by dynamically loading Python modules. Evaluated by Python benchmark. |
| Rust | Run Rust standard library by modifying Rust std source. Evaluated by Rust tests. |
Build & Run
Install build dependencies
Install cargo-binutils to use rust-objcopy and rust-objdump tools:
cargo install cargo-binutils
for build&run C apps
Install libclang-dev:
sudo apt install libclang-dev
Download&Install cross-musl-based toolchains:
# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrc
export PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:$PATH
Example apps
# in ruxos directory
make A=path/to/app ARCH=<arch> LOG=<log>
Where <arch> should be one of riscv64, aarch64๏ผx86_64.
<log> should be one of off, error, warn, info, debug, trace.
path/to/app is the relative path to the example application.
More arguments and targets can be found in Makefile.
For example, to run the shell on qemu-system-aarch64:
make A=apps/fs/shell ARCH=aarch64 LOG=info run BLK=y
Note that the BLK=y argument is required to enable the block device in QEMU. These arguments (NET, GRAPHIC, etc.) only take effect at runtime not build time.
Your custom apps
Rust
Create a new rust package with no_std and no_main environment.
1.
Add axstd dependency and features to enable to Cargo.toml:
[dependencies]
axstd = { path = "/path/to/ruxos/ulib/axstd", features = ["..."] }
Call library functions from axstd in your code, just like the Rust std library.
1.
Build your application with RuxOS, by running the make command in the application directory:
# in app directory
make -C /path/to/ruxos A=$(pwd) ARCH=<arch> run
# more args: LOG=<log> SMP=<smp> NET=[y|n] ...
All arguments and targets are the same as above.
C
Create axbuild.mk and features.txt in your project:
app/
โโโ foo.c
โโโ bar.c
โโโ axbuild.mk # optional, if there is only one `main.c`
โโโ features.txt # optional, if only use default features
Add build targets to axbuild.mk, add features to enable to features.txt (see this example):
# in axbuild.mk
app-objs := foo.o bar.o
# in features.txt
alloc
paging
net
Build your application with RuxOS, by running the make command in the application directory:
# in app directory
make -C /path/to/ruxos A=$(pwd) ARCH=<arch> run
# more args: LOG=<log> SMP=<smp> NET=[y|n] ...
How to build RuxOS for specific platforms and devices
Set the PLATFORM variable when run make:
# Build helloworld for raspi4
make PLATFORM=aarch64-raspi4 A=apps/helloworld
You may also need to select the corrsponding device drivers by setting the FEATURES variable:
# Build the shell app for raspi4, and use the SD card driver
make PLATFORM=aarch64-raspi4 A=apps/fs/shell FEATURES=driver-bcm2835-sdhci
# Build Redis for the bare-metal x86_64 platform, and use the ixgbe and ramdisk driver
make PLATFORM=x86_64-pc-oslab A=apps/c/redis FEATURES=driver-ixgbe,driver-ramdisk SMP=4
RuxGo
A convient tool to run RuxOS applications by concise command. See RuxGo-Book for more information.