By Ron Williams and Jeremy Soller on
This year’s Redox Summer of Code program has seen us add some exciting capabilities to Redox. Our three interns each came up with their own project proposals, and delivered major new functionality. In addition to our paid internships, our volunteer contributors also made major strides this summer.
Redox Summer of Code Projects
VirtIO drivers - Andy-Python-Programmer
Andy is the creator of the Aero Operating System. For his first RSoC internship this year, Andy suggested implementing the VirtIO standard for Redox, for use when running Redox in a virtual machine/emulator such as QEMU. This allows Redox to support a variety of devices efficiently, and will allow us to add GPU acceleration when running in an emulator. Andy has completed block device and network drivers, as well as 2D graphics. 3D acceleration is still to come.
Revirt-U and using Linux drivers on Redox - Enygmator
This is Enygmator’s third RSoC internship. Their goal: To have a Linux instance running in a virtual machine on Redox, giving Redox the ability to use Linux’s device drivers. This requires implementing virtual machine infrastructure for Redox (Revirt-U) plus a way to communicate from Redox to the Linux instance. It will greatly expand Redox’s driver compatibility when running on real hardware, without sacrificing Redox’s separation of drivers from the kernel.
You can read about Enygmator’s work here. Congratulations to Enygmator on their recent graduation and new job!
On-demand paging - 4lDO2
Back for his fourth RSoC (he never really left, he’s been a constant contributor), 4lDO2 has added on-demand paging and other memory management enhancements. This work is quite broad in scope, as it replaces not only how memory management works for applications, but also kernel access to user-space memory, application sharing of memory with device drivers, and even how physical hardware addresses are mapped to virtual addresses in user-space device drivers. It also gives a nice performance bump, and leaves room for further memory management optimization.
Our many volunteer contributors continue to help move Redox forward. Our focus this summer has been on improving Redox compatibility with POSIX and Linux.
We have our own implementation of the C standard library called
relibc, compatible with Linux and Redox. We have rewritten many
libc functions in Rust. Redox has also moved large chunks of functionality from the kernel into user-space, and a lot of that functionality can be found in the Redox variant of
relibc. This summer, we’ve had eight different contributors to
relibc, with a few of the additions being:
- various time and clock related functions
- group id handling
- wide-char/wide-string functions
- improved ARM64/AArch64 compatibility
- several memory management related improvements
- a few bug fixes
Some other contributions and accomplishments this summer include:
- Rust GUI libraries Slint and Iced both have upstream support for Redox’s Orbital Windowing System as a backend, using the softbuffer and winit crates.
- Some elements of the Cosmic Desktop have been tested against Redox, in particular cosmic-text and libcosmic.
- Rust code cleanup (move to 2021 Edition and removal of warnings) is ongoing. Some of our new contributors are helping out here.
- We have a draft implementation of the 9p protocol, which will allow Redox running in QEMU to access the host Linux filesystem.
- nushell is essentially working - it doesn’t exit cleanly but is otherwise ok.
- crossterm is working well, although there are some improvements to be done on the Redox side before we upstream our changes.
- A few hundred FOSS applications have been packaged for cross-compilation to Redox. Most of these programs do not yet work, but it has helped us improve our build system and prioritize our POSIX and Linux compatibility work.
Request for Donations
For those of you that would like to provide financial support for Redox and our Summer of Code program, you can donate using these links:
Or consider supporting one of the many Open Source projects that we depend on, e.g.:
- ACPI in Rust
- uutils (CoreUtils in Rust)
- Or your favorite Written-in-Rust application - Join us on Matrix Chat to let us know what it is!
Find Out More
If you have questions, join us on Matrix Chat! You can see other discussions of this post on social media at the links below: