This Month in Redox - March 2024

By Ribbon and Ron Williams on

March was a very exciting month for Redox! Here’s all the latest news.

If you would like to support Redox, please consider donating or buying some merch!

Nonprofit Crypto Wallets

We added two new donation options for the Redox OS Nonprofit, Bitcoin and Ethereum.

This will give our donors more choices for supporting Redox development.

Performance Improvements

4lDO2 replaced the Redox memory manager buddy allocator with a linked-list-based O(1) frame allocator that reduced the global memory allocation overhead from 35% to 0.9%, while the overhead reduction at boot was 95%! Read all about it in his excellent post “Significant performance and correctness improvements to the kernel”.

He also reduced the base system call overhead a lot, from 344 to 116 cycles on x86_64!

The program loading was improved to the point where it opens instantly (using a NVMe SSD).

We are very excited about these and other upcoming optimizations!

Finishing The libredox Migration

The libredox library is part of our strategy to provide a stable ABI on Redox. libredox greatly reduces the impact of breaking changes on Redox, and allows us to make improvements to core functionality more rapidly. This required the migration of many system components and libraries from using the less-stable redox_syscall crate to libredox.

4lDO2 finished the migration of all system components, leaving only a few Rust crates to be updated.

Scheme Cancellation

4lDO2 implemented scheme request cancellation on some system components to mimic the POSIX signals behavior and fix a bug when closing file descriptors. This is one of several steps we are taking to make our signal implementation more compatible with POSIX signals.

RedoxFS

Jeremy fixed a bug on his recent records optimization on RedoxFS. Records were being deallocated on read when the size of the record didn’t match expectations. This has been corrected.

Jeremy plans to implement safe wrappers for block allocation and deallocation that insures such things are very difficult to do in future.

Thankfully there are very few places doing raw block allocation and deallocation so it was easy to review them all.

Drivers

bjorn3 removed more duplicated code and moved more drivers to device categories.

He also fixed some driver bugs during the cleanup.

Boot Loader

bjorn3 implemented many changes to make our kernel “boot loader agnostic”. It will allow Redox to be booted from GRUB or Limine.

Build System

4lDO2 improved the build system’s recipe search algorithm a lot, now it takes around 1 second (using a NVMe SSD) to verify the location and sources of all recipes (packages) on the filesystem configuration.

Web Server

The Apache HTTP server was ported by Chocimier to the point where it can host pages using localhost. There is still work to be done, but this is an exciting first step for the Redox Server edition!

Packages and Porting

We are continuing to add programs to our package build system. Several more programs compiled successfully, but still need to be tested on Redox. With hundreds of programs packaged and ready for testing, we have lots of work ahead of us, but we continue to make good progress.

Python Support

RustPython was enabled by default in the desktop and dev builds to offer Python 3.11+ support. We still need to work on the support libraries and we need to do testing to see how complete our Python support is.

CPython is still work-in-progress.

Documentation

Ribbon made several improvements to the book:

Packages

Ribbon improved the package policies documentation, the binary size limit was reduced from 100MB to 50MB to improve the RAM usage with static binaries.

Looking Forward

We are happy to see some progress on Redox as a web server, and we are very excited with the recent performance and stability improvements. If you would like to help out, join us on Matrix.

Look for the next update at the end of April!