This Month in Redox - June 2024

By Ribbon and Ron Williams on

June 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!

Funding!

NLnet NGI Zero Core

We are very excited to announce that the NGI Zero Core program from the NLnet Foundation will be funding our project Redox OS Unix-style Signals.

Redox currently has a basic implementation of Signals, but this project will allow us to move most of signals code out of the kernel into user-space, and bring us much closer to POSIX compliance.

The project also includes a Process Manager Daemon in user-space, to manage the session/process group/process/thread hierarchy, especially with respect to signals, and to help support sigqueue.

4lDO2 will do the heavy lifting on this project, with the Redox team creating a test suite for the work and acting as backup for bug fixes.

Radworks

Radworks has very generously provided a donation of $13,000 USD in USDC and Rad tokens using the Drips Network, to support Redox’s termion library.

The Radicle project is funded by Radworks. “Radicle is a sovereign peer-to-peer network for code collaboration, built on top of Git.”

The termion library, a Redox sub-project, is a terminal manipulation library used for writing text-based user interfaces (TUI), written in Rust, and supporting Linux, Redox, BSD, and Mac OS X. termion is a dependency of Radicle.

New Orbital Visual

We changed our default wallpaper, title bar and panel bar colors to make the user experience more pleasant, you can see it below:

New Orbital Visual

The wallpaper is the Tarantula Nebula from NASA, also available on the COSMIC desktop.

Software Showcase 1

We have uploaded our first software showcase to our YouTube channel! This is just a small part of the software that works on Redox. We will be uploading more showcases in the near future. Like, Subscribe, and Comment to help bring more attention to Redox!

Performance Improvements

4lDO2 doubled the RedoxFS performance by reducing the number of context switch roundtrips per block read and write.

He also applied this improvement on the SATA, NVMe, USB SCSI and VirtIO Block drivers.

Relibc Improvements

The pread() and pwrite() functions are now implemented using the proper syscalls (rather than seek-based emulation) in relibc. This is part of an effort to improve the handling of file offsets across Redox.

Scheme Improvements

4lDO2 improved the redox-scheme crate and the scheme protocol to provide a cleaner API for drivers and daemons.

He updated bootstrap and initfs to use the new scheme interface.

User-Space Debugging From GDB

Thanks to bjorn3, the GNU Debugger, running outside the VM, can read the Redox user-space tasks when the gdbserver is not available. This is helpful if you are debugging, for example, drivers during startup, but is not for general use.

USB Improvements

bjorn3 added a 2ms sleep on the poll loop of the xHCI driver to reduce the CPU usage a lot, while we await the implementation of xHCI interrupts.

Quoting his MR description:

“This significantly reduces cpu usage. On my laptop before this change a single core would be fully loaded while running at 3-4GHz. With this change it would only be loaded for about 50% while running at 1-2GHz. This improves battery lifetime while also preventing the fan from spinning up to a distracting level.

This shouldn’t noticably affect latency given that most keyboards and mice don’t support polling at 500Hz anyway.”

PCI Improvements and Cleanup

Continuing his work on driver cleanup and improvement, bjorn3 did a wide-ranging cleanup of the PCI/PCIe driver, refactoring, removing unneeded code, and generally improving the clarity and maintainability of the code.

VirtIO Improvements

bjorn3 implemented the Modern transport for our x86 VirtIO drivers. The original implementation was using the Legacy transport, which is not commonly used.

Recoverable Components

4lDO2 adapted the lived system component to use the new offset-based read/write scheme protocol!

On microkernel-based operating systems, it is desirable to have most system components able to be restarted in case of a crash, without needing a system reboot. Using the offset-based read/write protocol allows us to remove file position tracking from the driver, bringing us one step closer to having the ability to restart drivers.

Programs

Ribbon added an ABI separation on the LLVM recipe, to protect programs with a dependency on LLVM from breakage when the LLVM version is updated.

(Like most Linux distributions does)

He also fixed many recipe scripts, many Rust programs built successfully for the first time!

Many Rust libraries were fixed with the recent changes on Redox, Ribbon is checking the TODOs of each program.

Many WIP software ports were missing cross-compilation scripts for CMake, Ribbon fixed this.

These CMake scripts may be incomplete but it saves a lot of time from packagers trying to complete our cross-compilation scripts.

Build System Improvements

Contributor grnmeira discovered that our “server-minimal” variant lacked network support and created confusion about the name.

Based on 4lDO2’s suggestion for the new variant name, Ribbon renamed the “server-minimal” configuration to “minimal”.

He also created the “minimal-net” configuration for network support.

Now the most minimal OS image is called “minimal”

We have not yet attempted to make the “minimal” system suitable for a truly minimal computer, but we have several ideas for future improvement.

Ribbon added the “Development Tools” package group from Fedora to our setup script bootstrap.sh, to avoid missing any development packages and reduce the number of items to be installed for the Fedora target in the script.

USB Support Status

When we announced the support for USB input devices on the April report we neglected to update the documentation to change the USB status.

We recently added support for USB input devices, and this support is being improved, but it is to be expected that some devices are not working.

Our nightly images have been frozen since May 30, so if you tested after that date you would not have received the latest improvements for USB.

If you want to test the latest USB improvements we recommend that you download the build system and build the Redox image, you can learn how to that on this page.

Documentation

Ribbon updated the book to say that USB input devices are supported, improved the binary packages explanation and documented the environment leakage problem.

He also documented how Redox took inspiration from OpenBSD on the “BSD” part of this section of the website FAQ.

Quoting the section:

Website

Ribbon improved our FAQ as always, he improved some benefits of Redox and the image variants information.

He also updated the FAQ to report that we support USB HID devices, improved the Community page to recommend Fractal instead of Nheko as a Matrix client alternative for Element, because it’s written in Rust, better maintained and has advanced features.

Discord Server

We now have a Discord server! It’s for people that don’t want to use Matrix, and hopefully it will be more convenient.

The messages from Matrix are sent to Discord and the messages from Discord are sent to Matrix througn a Matrix bridge bot.

Once you join the server, request to be a member on the #join-requests room.

You can open the invite here.

Join us on Matrix Chat

If you want to contribute, give feedback or just listen in to the conversation, join us on Matrix Chat.