By Jackpot51 & Ticki on

Recently there have been questions about Redox on Github and Reddit about the state of the project. Commenters have stated that git commits are regular, but the project has not released any news. The truth is that we have been working very diligently to bring a huge update, and near a possible release milestone (even though we had no plans on doing so).

So, instead of the regular “This Week in Redox”, we bring you a summer edition, featuring internet support, a memory allocator, and loads of loads of more.

Working autonomously, with no direction, we stumbled on a massive list of changes that make Redox much, much more interesting.

If you would like, go to our github and star, watch, fork, pull, and/or build. Don’t forget to checkout out our organization page, it contains most of our repositories.

1. Internet support

Major changes to the Redox network stack allow for routing to the internet and back:

DHCP using dhcpd

DNS integrated into std::net::lookup_host

HTTP using wget [path]

IRC using irc [nickname] This means we can kinda code in rust from redox via #rust’s playbot ;-)

added basic netcat command, nc

Images downloaded from here using wget

IRC client

2. Ralloc.

Ralloc is a brand-new memory allocator, which is now the default in Redox. Ralloc features high security and many debugging utilities, along with a good performance (although, it is to be improved).

We have been able to remove links to the C library (newlib) from our Rust standard library. Ralloc has been much more performant, as it minimizes expensive syscalls.

Ralloc is quite memory efficient, due to using arbitrarily sized blocks in the bookkeeping.

Custom out-of-memory handlers

Thread-specific OOM handlers.

Debug check: double free

Debug check: memory leaks.

Partial deallocation.

Separate deallocation

Static checking

Lock reuse

Platform agnostic

Local allocators

Safe SBRK

Advanced logging

Arbitrary alignments

Here’s an example log of the inner workings of ralloc:

| : BRK'ing a block of size, 80, and alignment 8. (at bookkeeper.rs:458) | : Pushing 0x5578dacb2000[0x0] and 0x5578dacb2050[0xffb8]. (at bookkeeper.rs:490) |x : Freeing 0x1[0x0]. (at bookkeeper.rs:409) x| : BRK'ing a block of size, 4, and alignment 1. (at bookkeeper.rs:458) x| : Pushing 0x5578dacc2008[0x0] and 0x5578dacc200c[0xfffd]. (at bookkeeper.rs:490) x|x : Reallocating 0x5578dacc2008[0x4] to size 8 with align 1. (at bookkeeper.rs:272) x|x : Inplace reallocating 0x5578dacc2008[0x4] to size 8. (at bookkeeper.rs:354) _|x : Freeing 0x5578dacb2058[0xffb0]. (at bookkeeper.rs:409) _|x : Inserting block 0x5578dacb2058[0xffb0]. (at bookkeeper.rs:635)

3. TTF and PNG support

Using rusttype, we are able to display TTF fonts in pure Rust without using FreeType!

orbfont, a TTF renderer for orbital

character map for viewing TTF fonts

ttf in terminal

add start menu

PNG and BMP backgrounds and cursors are now supported, use the /etc/orbital.conf file to configure the background path

Viewer can display PNGs

Viewer will show alpha as a grid like the other image viewers

Start menu and character map

4. Games

added reblox

pythoneer added texture mapping

pixelcannon running on Redox (at 150 FPS)

reblox

5. Terminal ANSI

Lots of changes have been happening beneath the hood to ensure feature completeness and correctness in the Redox terminal

Ransid unifies the ANSI handling in both the kernel terminal and terminal emulator. It brings a lot of new features, color support, raw mode, bold, underlined, and inverted text.

Termion has been overhauled, and released. It supports many new features, and is the client counterpart to the ransid server. They are developed together, in addition with testing termion on Linux, to ensure feature completeness.

Liner is a new crate similar to readline that provides line editing on top of termion. It has history and auto-completion features.

Ion, our shell, has been updated to allow complete use of these crates, including auto completion and pretty colors.

terminal bold support

colorized default prompt for ion

Terminal with TTF fonts, obligatory screenfetch

6. Handbook

We have started a handbook, which can be viewed here, and made a terminal viewer for MD files

MD terminal renderer mdless

less and mdless can read from a pipe by reconnecting to the terminal (only works in kernel terminal until PTTY system)

info displaying the Redox handbook, using mdless

7. RedoxFS

Our filesystem, RedoxFS, can be used on Linux using FUSE and has been tested thoroughly, builds are done by mounting a new filesystem using the FUSE driver.

improve redoxfs performance

fixed write support in redoxfs

8. Kernel

Kernel security - check all pointers - https://github.com/redox-os/redox/commit/3f53e5f3cdb94354061576e9509e38cd2021b3e7

removed allocation from syslog, it is now a ring buffer like in Linux and BSD

many debugs go into syslog, so they can be reviewed using less syslog:

magical ansi terminal size detection when using vga=no \x1B[s\x1B[9999;9999f\x1B[6n\x1B[u

add simple reboot command

command fixed udp scheme

huge networking fixes

ability to configure ip, subnet, router, and dns netcfg:

ability to use router to get to the big internet

Removing some allocations.

9. Ports and Libc

Nasm and ndisasm ported to Redox

Can compile binutils now. In comes as, ar, ld, objdump, readelf, etc.

Convert ports to use a patch system

Removing libc from our libstd

What’s next?

ANSI Sodium (text editor) through Termion.

Major overhaul to ralloc, with the focus on performance.

More networking utilities (including a text-based web “browser”)

Improvements to mdless .

. Improvements to RANSI.

Magnet — the package manager.

Thanks to

This list is likely incomplete, please contact Jackpot or Ticki for updating it.

Jackpot51

Ticki

nilset

mmstick

stratact

ca1ek

and many more…

10. There was probably more

Due to the amount of time since the last update, and the hundreds of commits since, it was hard to create a list about what had changed. My recommendation: go to our github and star, watch, fork, pull, and/or build. Don’t forget to checkout out our organization page, it contains most of our repositories.