By goyox86 on

This is the 25th 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.

(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?

TL;DR

Big news this week: We released 0.3.0.It is a big release including many improvements notably the Cookbook based build system and a new ACPI stack. Go read the announcement!

Now to this weeks summary: We shipped a couple of changes to the bootstrap script and the cookbook that should make the on-boarding on macOS smooth again. Go ahead try and give us feedback <3.

The kernel was very active this week, particularly with the landing of the initial support for signals by @jackpot51! Also, a new API for specifying custom memory allocators and changes in the alloc crate API landed in nightly so the kernel had to be updated. Mr @CWood1 added an HPET (High Precision Event Time) driver to the kernel and also moved the PIT (Programmable Interval Timer) driver from the bootloader to the kernel as part of his ongoing work on ACPI. @ids1024 shipped some fixes to kernel’s dup2() and exec() too.

Ion impressive streak continues mainly propelled (but no limited to) by @mmstick and @huntergoldstein. Ion’s biggest highlight this week? The completion of job control and addition of the fg builtin command! Also asynchronous history writing, the addition of an array! macro to ease the creation of inline Array s in Ion’s codebase, initial support for herestrings, the extraction of calc to it’s own crate, refactoring to signal handling, forking, the reimplementation of pipelines::collect into a recursive descendent parser, set -x ’s implementation and many fixes. You should try it , works in Linux too ;).

Drivers had to also be updated to the new alloc API (mainly vesad ). Coreutils now have a base64 command by @goyox86, a new shiny dirname command along with recent support for rm for the -f flag thanks to @ids1024.

Other important highlight is the addition of initial mtime/ctime support and the implementation of futimens in Redoxfs.

Last but not least the cookbook saw a lot of activity with a new system for compile-time dependencies by @ids1024 and package recipes for git , gawk , findutils , GNU sed , pastel , nasm , rustual-boy .

Kernel

https://github.com/CWood1 Added an HPET (High Precision Event Time) driver to the kernel and also moved the PIT (Programmable interval timer) driver from the bootloader to the kernel.

@ids1024 Made dup2() work even if second file descriptor doesn’t exist. Details here.

work even if second file descriptor doesn’t exist. Details here. @ids1024 Made a fix for process::exec() by stripping whitespaces after shebangs. Details here.

by stripping whitespaces after shebangs. Details here. @ids1024 Made a fix for process::exec() and now it passes the relative, not canonicalised, path to scripts. Details here.

and now it passes the relative, not canonicalised, path to scripts. Details here. @ids1024 Made pipe::read() return when write end is closed (but it was afterwards reverted). Details here.

return when write end is closed (but it was afterwards reverted). Details here. @jackpot51 Updated the kernel to the new Rust allocator API. Details here.

@jackpot51 Implemented passthrough of futimens . Details here.

@jackpot51 Added the initial implementation of signal handling. Details here.

@jackpot51 Allowed simple signal delivery to PID 1 (the kernel idle process). Details here.

Ion

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.

@mmstick Ensured the termination of pipes and jobs. Details here.

@z3ntu Updated version_check to 0.1.3. Details here.

to 0.1.3. Details here. @huntergoldstein Made Test able to interpret the empty string along with a big refactor. Details here.

able to interpret the empty string along with a big refactor. Details here. @mmstick Implemented async history writing with his liner until the async work gets mainstreamed to liner . Details here.

until the async work gets mainstreamed to . Details here. @huntergoldstein Made tilde now properly expand inside a normal word. Details here.

@huntergoldstein Added support for resolved quotes not being an escaped character. Details here.

@mmstick Documented Shell structure. Details here.

structure. Details here. @clippix Fixed the build by changing the type of a field in Shell to Option . Details here.

to . Details here. @huntergoldstein Added an array! macro for creating inline Array s. Details here.

macro for creating inline s. Details here. @huntergoldstein Made tildes now part of normal tokens. Details here.

@huntergoldstein Support for herestrings and heredocs is now completed. Details here.

@jackpot51 Made a small fix to shell::pipe() . Details here.

. Details here. @huntergoldstein Fixed autocompletion for partially escaped filenames. Details here.

@huntergoldstein Updated example in README to reflect tilde expansion rules. Details here.

@huntergoldstein Added a warning when a script completes with a statement in memory. Details here.

@mmstick Completed Job Control: fg works now! Details here.

works now! Details here. @mmstick Refactored signals code. Details here, here and here.

@mmstick Refactored forking code. Details here.

@mmstick Fixed signal ignoring with cat /dev/urandom | head . Details here.

. Details here. @huntergoldstein Rewrote pipelines::collect to be a recursive descent parser. Details here.

to be a recursive descent parser. Details here. @mmstick Made background jobs display command arguments. Details here.

@mmstick Implement set -x . Details here.

. Details here. @mmstick Re-enabled ability to break control flow when signalled. Details here.

@mgmoens Extracted calc to it’s own crate. Details here.

Drivers

@jackpot51 Updated vesad to the new alloc API and added a gitignore . Details here.

Redoxfs

@jackpot51 Removed unnecessary feature gate for associated constants. Details here.

@jackpot51 Added initial mtime/ctime support. Details here.

support. Details here. @jackpot51 Add times to stat. Details here.

@jackpot51 Implemented futimens . Details here.

. Details here. @ids1024 Made a fix for fcntl preventing it from clobbering access mode. Details here.

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.

@ticki Made an update to parking_lot and owning_ref in chasmap and a added some docs to sync::Treiber . Details here.

and in and a added some docs to . Details here. @ticki Added a debug assertion against faulty hazards. Details here.

Coreutils

@jackpot51 Fixed the formatting of symlink in long mode in ls . Details here.

. Details here. @ids1024 Made a fix to stat in order to format time properly and display user and group name. Details here.

in order to format time properly and display user and group name. Details here. @ids1024 Made touch to use the filetime crate. Details here.

to use the crate. Details here. @goyox86 Corrected the filetime dependency so it points to the mainstream repo. Details here.

dependency so it points to the mainstream repo. Details here. @ids1024 Added the -f argument to rm . Details here.

argument to . Details here. @goyox86 Removed some unneeded code in uptime . Details here.

. Details here. @ids1024 Added the dirname command. Details here.

command. Details here. @goyox86 Added the base64 command. Details here.

Cookbook

The cookbook the collection of package recipes of Redox.

@ids1024 Added a system for compile-time dependencies; (used in openssl ). Details here.

). Details here. @ids1024 Added a git recipe. Details here.

recipe. Details here. @xTibor Added rustual-boy package recipe. Details here.

package recipe. Details here. @ids1024 Fixed repo.sh call for build dependencies. Details here.

call for build dependencies. Details here. @ids1024 Remove some unneeded code in the python recipe. Details here.

@ids1024 Added a recipe for gawk . Details here.

. Details here. @goyox86 Added some code in the cookbook system to determine tools at runtime and fix macOS build. Details here.

@ids1024 Added a recipe for GNU sed . Details here.

. Details here. @ids1024 Added a recipe for uutils findutils . Details here.

. Details here. @jackpot51 Add a recipe for pastel . Details here.

. Details here. @7h0ma5 Added a recipe for nasm . Details here.

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.

Luca Weiss 🎂

Thomas Gatzweiler 🎂

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