Redox OS is a complete Unix-like general-purpose microkernel-based operating system written in Rust. August was a very exciting month for Redox! Here’s all the latest news.
Sorry for the delayed report, a combination of busy development, time off, conference attendance, other work, and various random factors got in the way.
If you would like to support Redox, please consider donating or buying some merch!
Wildan Mubarok improved UEFI compatibility, which allowed the MSI Modern 14 C7M laptop to boot!
lbecher implemented multi-core support for AArch64/ARM64, and made some fixes. More testing need to done to determine the extent of the performance improvements.
After some months of work Ibuki Omatsu and Anhad Singh implemented a ring buffer communication API (Redox Rings) equivalent to Linux io_uring system call API to improve performance on supported drivers, with guidance from 4lDO2 and help from Wildan Mubarok to fix bugs.
This work improves the I/O performance for the NVMe driver, RedoxFS and RAMFS by a significant factor. In the benchmark below (bypassing the RedoxFS file system) it’s measured to improve I/O performance by 14-15x!!
redox_syscall (using synchronous system calls to measure NVMe read/write performance) and redox_ring (using ring buffers to measure NVMe read/write performance) benchmark comparison

After months of investigation by Wildan Mubarok on gradual GCC compilation performance degradation, he found and fixed a kernel memory leak that was causing the os-test test suite compilation time in GCC (on QEMU) to increase from 2 hours up to 10 hours, and causing out of memory (OOM) errors. Once fixed, the compilation time was reduced from 10 hours to around 30 minutes.
Aadarsh (aka EuclidDivisionLemma) implemented the initial support for NUMA-based memory management. As we currently use QEMU to test NUMA behaviour, any help to test on real hardware would be much appreciated.
He also implemented local node allocation (locality of data) by default and a libredox API to modify NUMA allocation policies.
Akshit Gaur implemented support for process priorities and system priority tuning, which improved general performance.
He also wrote the last EEVDF article giving the complete explanation after optimizations. Thanks a lot Akshit for the great work!
Ribbon and Wildan Mubarok confirmed/tested that QEMU is working on Redox. Ribbon tested the server variant of Redox in QEMU terminal mode and Wildan tested the desktop variant including the GTK frontend.
Redox does not yet have support for KVM-like virtual machine acceleration, so performance can be significantly slow.



Wildan Mubarok improved the Linux support of Redox installer to allow a dual-boot installation of Redox, you can see this page to learn how to use it and the new GUI installer options.

4lDO2 implemented support for kernel binary size profiling to measure where it can be reduced, also reducing memory usage.
Ibuki Omatsu created a diagram that summarizes how the openat function is used to resolve paths, using the namespace manager, as part of capability-based security. Read this for more details.
4lDO2 documented the relibc safety philosophy and goals (for our POSIX/C Standard Library) to reduce the probability of undefined behavior and logic bugs being introduced. This primarily focuses on restricting unsafe code to the “leaf functions” of relibc for better oversight/review and less unsafe code in unexpected places. It also includes using more Rust-like error handling internally, to give more information than POSIX errors (easing the investigation of certain classes of bugs).
redox_syscall library code into the kernel repository to ease changesFUTEX_WAIT64 system callpcid bug that Clippy detectedldd tool implementationlibsoupinputd non-fatal panic when no display is availableinputd deadlocksgetaddrinfo function code to leaf functions to reduce bugs by using concentration for much better readabilityRELIBC_COMMIT_HASH environment variable to show the relibc commit hash to fully confirm if static objects were updated with local changes or up-to-dateSCM_RIGHTS on recvmsg function, a bug that was revealed after file descriptor allocation migration to user-spacegetsockname and getpeername functions address length computation, which fixed some mio library testsrlct_clone function for Linux to fix pthread tests on Linux ARM64setvbuf functionLD_DEBUG environment variable to show the relibc shared object memory location range to greatly improve crash debugging on dynamic linkingepoll performance by calling the open function directlystdio initializationtimer_ttokio library panic on package managerclock_getres function behaviorfstatat functionptsname_rpthread_kill-self testtcgetsid functionSYS_DUP_INTO, SYS_READ, and SYS_WRITE system calls with SYS_CALL system call to reduce system callsas casting usage to prevent problems in code refactoringstzset and POSIX handling in mktime functionstzset functionMSG_NOSIGNAL in sendto functionO_SYMLINK to allow symlink traversal across schemesinputdcontain sandbox management tool to use the new namespace management, which now creates a per-process filter scheme that holds an actual namespace file descriptor, mediating all openat function calls by providing a file descriptor filter to programs (full chroot implementation is still WIP)winit and softbuffer libraries to allow Wayland testing in the futureacid test suite to detect performance regressions--all-* options usage, for example: make r.base,--all-binariesCOOKBOOK_TREELESS_CLONE environment variable to enable treeless clone in all recipes to greatly save storage space and and reduce download timemake rebuild-push command (verify recipe source or package changes, incrementally rebuild or download and push new changes) not updating the filesystem configuration recipes, now the system can be properly and quickly updated in a existing Redox filesystem imagecargo fix on codels tool by tree in show-package.sh script to make it much more useful by showing all recipe package directories and filesTo test the changes of this month download the server or desktop variants of the daily images.
Use the desktop variant for a graphical interface. If you prefer a terminal-style interface, or if the desktop variant doesn’t work, please try the server variant.
Read the following pages to learn how to use the images in a virtual machine or real hardware:
Sometimes the daily images are outdated and you need to build Redox from source. For instructions on how to do this, read the Building Redox page.
To test the changes on applications and libraries, see if the wanted program is available in the following lists and run the following command to install them: sudo pkg install package-name
There’s also a package web interface if you want detailed package information:
If you want to contribute, give feedback or just listen in to the conversation, join us on Matrix Chat.