By goyox86 on

This is the 20th post of a series of blog posts tracking the development and progress of Redox, the Rust operating system. If you want to know more about Redox in general, visit our Github page.

With this post we restart the tradition of the weekly report and this one in particular is a catchup and it’s a big one! So bear with us please! ;)

(edited by goyox86)

PSA

If you have any questions, ideas, or are curious about Redox, we recommend joining #redox on irc.mozilla.org or our Discourse forum!

What’s new in Redox?

Kernel

@jackpot51 implemented timeouts.

@jackpot51 implemented an memory allocator that recycles frames when possible using an inner bump allocator if it cannot recycle. This new recycling allocator also allows the allocation of larger frames.

@jackpot51 added the sys:iostat scheme.

scheme. @jackpot51 implemented Implement CLOEXEC for root scheme and initfs.

@jackpot51 Other things include increasing the kernel heap size, fixed some bugs in the interrupts mechanism on serial devices, fixed memmove() , fixed some deallocation issues, cleaned the debug scheme and added xargo support.

, fixed some deallocation issues, cleaned the debug scheme and added xargo support. @jackpot51 added support to pass a live filesystem in the FILESYSTEM environment var to the live scheme.

@pi-pi3 has improved the performance of memcpy() family of functions.

@CWood1 has been working on adding AML support for the ACPI subsystem.

@InsidiousMind did some work on the PIT (Programmable interval timer). Now the PIT interrupt properly context switches fixing crashes in the kernel.

@bjorn3 added support for listing all schemes using the : scheme.

Ion

There has been so much work ion shell that we have it’s own section for this issue. Ion is a shell for UNIX platforms, and is the default shell in Redox. It is still a work in progress, but much of the core functionality is complete. It is also currently significantly faster than Bash, and even Dash, making it the fastest system shell to date.

@ids1024 has been working on Redox’s Newlib’s fork. Adding support for getuid(), getgid(), getcwd(), fixed execve() and many others.

@jFransham landed a patch enabling LTO which yields a ~15% speedup. Details here.

@jFransham reduced the number of allocations. Details here.

@Maaarcocr added descriptions to functions. Details here.

@paezao added the echo builtin . Details here.

@amw-zero added s small change so whenever you type fn it will give you the set of currently defined functions. Details here.

@mmstick added support for user’s home directories in non-redox systems. Details here.

@mmstick rewrote the control flow mechanism! Details here.

@mmstick implemented basic arithmetic for let/export in. Details here.

@mmstick reworked the while loops and they now work as they do in other shells . Details here.

@mmstick implemented the && and || operators. Details here.

@mmstick implement aliasing support. Details here.

@mmstick added the ability to pass variables into subshells by expanding inner variables before performing process expansion. Details here.

@mmstick refactored the parser and also added process recursion. Details here.

@mmstick added the ability to split statements in a single line). Details here.

… and many small things!

Drivers

@jackpot51 added support for the VirtualBox guest driver and implemented resizing on it.

@jackpot51 added initial support for the Atheros ALX ethernet driver.

@jackpot51 added initial support for the BGA mode setting.

@jackpot51 added scroll events to orbclient.

@jackpot51 added support for absolute mouse events in the VESA driver.

@jackpot51 done some fixes to the PS/2 driver related to interrupts.

@jackpot51 added support for retrying commands to ps2d.

@jackpot51 implemented path for the e1000d and ahcid drivers.

for the e1000d and ahcid drivers. @kaedroho migrated pcid from rustc-serialize to serde. He also added a few new keymaps to ps2d.

Coreutils

@Mojo4242 added support for stdin and stdout to dd . Details here

. Details here @DaanHoogland added recursion support to mv . Details here

. Details here @n0npax added basic support for symbolic links to ls . Details here

. Details here @n0npax extended ls with new options for showing dates. Details here

with new options for showing dates. Details here @n0npax added the ln utility. Details here.

utility. Details here. @n0npax refactored the format_date function. Details here

function. Details here @bertinatto added the --unique option to sort . Details here

option to . Details here @bertinatto added the unique command. Details here

command. Details here @simondesloges added the -f and -F options to tail . Details here

and options to . Details here @simondesloges changed ls to use BufWriter . Details here

to use . Details here @vladimiroff made wc consider Unicode spaces when counting words. Details here

consider Unicode spaces when counting words. Details here @jackpot51 reimplemented shutdown on top of the kill system call.

TFS

TFS is a modular, fast, and feature rich next-gen file system, employing modern techniques for high performance, high space efficiency, and high scalability.

There has been enough work done in TFS that we added this section in this edition so you can have an idea about how the progress is going there.

First of all: Great news! @ticki has been working on many aspects of TFS and he considers that it is pretty near to functional. One of the great things is that as a product of this work several crates with interesting data structures and algorithms were created:

chashmap - Concurrent hashmaps.

cbloom - Concurrent bloom filters.

lz4 - An implementation of lz4.

speck - An implementation of SPECK cipher.

tm - transactional memory.

atomic-hashmap - Atomic hashmaps (you can read the blog post).

mlcr - A machine-learning based cache replacement strategy.

seahash - A hash function.

concurrent - Hazard pointers implementation.

TFS has a logo.

There is a specification document.

A bunch of blog posts on design: https://github.com/redox-os/tfs#resources-on-design.

And according @ticki there’s a ton of interesting things to write about, and eventually he will be doing an in-depth blog post about them.

Package Management

There has been a ton of work on this topic specially on the pkgutils. Redox OS packaging utilities and in the cookbook the collection of package recipes.

@ids1024 migrated pkg to Hyper. Details here.

to Hyper. Details here. @ids1024 made pkg able to install packages from a given path. Details here.

able to install packages from a given path. Details here. @ids1024 made possible to use the pkgutils library on Linux and install to custom destination. Details here.

@ids1024 pkgutils now use the tar-rs library instead of the tar binary. Details here.

binary. Details here. @ids1024 added support for package metadata. Details here.

@ids1024 added a Package struct. Details here.

struct. Details here. @jackpot51 added a method for configuring repos to pkg .

. @jackpot51 started the work on upgrading logic in pkg .

. @jackpot51 worked on package signature verification so we determine the need for re-downloading packages.

New contributors

Since the list of contributors are growing too fast, we’ll now only list the new contributors. This might change in the future.

Sorted in alphabetical order.

Abdel-Rahman 🎂

Adrian Neumann 🎂

Aurélien DESBRIÈRES 🎂

Clint Byrum 🎂

Ian Douglas Scott 🎂

Konrad Lipner 🎂

Michael Köppl 🎂

Niklas Claesson 🎂

Petr 🎂

Richard Dodd 🎂

bjorn3 🎂

equal-l2 🎂

n0npax 🎂

If I missed something, feel free to contact me (Ticki) or send a PR to Redox website.