This Month in Redox - January 2024

By Ron Williams on

This is the first in hopefully a regular series of posts about the progress we have made on Redox this month. We have been remiss in keeping you up to date on our progress, but this is an attempt to improve the situation.

Since the last news post on our progress, there have several major accomplishments and many smaller ones. Forgive us if a few are left out.

Request for Donations

With all the exciting accomplishments of our contributors, it’s hard to believe that Redox is getting by on only a few hundred dollars per month in donations. Our goal for this summer is to find funding for 3 or 4 Redox Summer of Code projects, which will require as much as $22,000 in new donations.

If you are able to help us out, you can donate on Patreon and Donorbox. Or for more donation options, please contact us at donate@redox-os.org.

New Board Member

The Redox OS Board of Directors is elected annually, and this month we had our 2024 elections. We would like to welcome our newest board member, Jacob Schneider.

“Jacob (JCake)’s portfolio stretches back over a Decade. Having begun with Windows Batch of all things, his fascination only grew. In this time, the desire to get to the absolute lowest levels of our modern tech stack has only grown stronger.

Jake found his feet in the world of Linux and other OSes a while back, and as his curious nature would have it, drove him to explore even more. Eventually stumbling on Redox, utter fascination to explore every crevice of it entirely took over. Jake now finds himself neck-deep in the most exciting project in the world."

Bios for the rest of the board are in our summer announcement.

Logo and T-Shirts

We recently refined our logo, which you can see in the screenshot below and on our T-Shirts. The logo shows up a little pixelated on the Teespring website, but it looks great on the actual shirts.

We also have new T-Shirt colors this month. Every purchase contributes approximately $14 towards Redox development and operations. Your contributions are appreciated.

We will continue updating our website and other graphics to use the new logo over the coming weeks.

Redox Logo

Technical Accomplishments

Redox Path Format

Redox has a microkernel core, with drivers and other resource providers running as tasks and providing “schemes”. A scheme is the name of a resource provider, and until now, resources have been accessed using URI/URL format. For example, files would be accessed as file:path/to/my_file, and a TCP connection would be accessed as tcp:127.0.0.1. This format, while forward-looking, has not been very backwards-compatible.

In order to simplify our efforts to port Linux software to Redox, we have decided to change our resource path format to the Linux-compatible /scheme/scheme_name/path/to/resource. Paths that do not begin with /scheme will be assumed to refer to the file scheme, so /path/to/my_file is treated by the system as /scheme/file/path/to/my_file, but the application will only see the /path/to/my_file portion. Using this format, normal paths now look just like Linux paths, while drivers and other resources can still be addressed without breaking software.

The implementation of this change has started, and the kernel and our relibc implementation of libc can translate between formats quite transparently. Applications and schemes are being updated as we get to them, so you may notice a few warts, but the essential part of the change has been completed and the system is performing well.

Raspberry Pi

Redox runs on Raspberry Pi 3 Model B+! Thanks to Ivan Tan, Redox can run our server-minimal configuration on the RP3B+.

Ivan has also helped us revamp our build system so it can handle multiple RP models, each with their own hardware configuration.

Kernel and Driver Improvements

I want to particularly highlight the contributions of Bjorn3. He has been zipping around fixing stuff like Spock at the end of TOS S3.E11. Major items include rework of the PCI driver, several fixes and some clean-up in the kernel, and improvements to the build system.

Relibc

A shoutout to Darley as well, he has has been making major progress on our libc alternative, relibc. He has completed the upgrade of our malloc code to a port of dlmalloc-rs. Our previous malloc code was written in C, and has now been completely removed.

Darley has also been working hard on Rust implementations of libm and libcrypt, and has implemented several new libc functions, including some wide-char string functions and some pseudo-terminal handling functions.

Stable ABI

As we work towards a stable ABI, 4lDO2 continues removing code that directly uses the redox_syscall crate. The new stable interface is libredox for Redox-specific Rust code and relibc for everyone else. This allows us to change the implementation of our current system calls, for example, moving functionality into user space, without changing the API.

Once we have a stable API, we can focus on the next step, which is a stable ABI provided through dynamic linking against relibc and a libredox library. Dynamic linking on Redox is not ready for prime time, but it should only be a matter of finding the time to get it done.

/dev/tty

With a little bit of relibc trickery, we have made it so /dev/tty refers to the process’s terminal. That may not sound like a big deal, but since most TUI libraries rely on /dev/tty to get the terminal’s properties, it has greatly improved our compatibility with libraries like crossterm. In fact, we are now able to discard our crossterm fork and use the upstream version directly.

Porting

Our ongoing efforts to port Linux software to Redox are starting to pay dividends. Ribbon has been identifying good candidates to port to Redox, and creating recipes for those apps. And more and more of them are starting to “just work”. Here are a few of the programs that now run on Redox.

The editors nano and Helix are now working, although we have yet to port any of the programming language integrations for Helix.

And many more.

Cosmic

Jeremy’s day job at System76 includes working on various aspects of the Cosmic Desktop. And when he has time, he is porting some of that work to Redox. We currently have cosmic-edit and cosmic-files running on our Orbital Windowing System.

More pieces will be added as Jeremy’s time permits. Special thanks to winit for its Redox support.

Cosmic Files

Cosmic Files

Cosmic Edit

Cosmic Edit

Contain

Contain is our sandboxing driver. In December, a Contain rewrite was completed, giving us much more fine-grained control over what files a user has access to.

Contain allows us to run applications in a modified namespace, where only specific files and directories are accessible. It currently can only run as root, as namespace modifications require root permission right now. But it can be used with login to create a restricted user shell, and we hope to use it with our web server when we have one ready.

Build System

We’ve added several new features to the build system, including:

Documentation

Ribbon continues to add to and improve the Redox Book, including a Developer FAQ to help guide new contributors, and a comparison of Redox features vs other Unixen.

Looking Forward

There’s still lots to do, but every week Redox feels more like a real system. We are rounding out areas of work for our summer projects, assuming we can find the funding. Some key areas of interest for the summer are:

We are super appreciative for all our contributors and the hard work they are putting in. Consider joining in the fun on our Matrix Chat!