By goyox86 on

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

Welcome back to a new edition of TWiR! We have a lot to share this time. Let’s get started!

A new reset facility and iopl support were added by @jackpot51 to the kernel along the uname infrastructure done by @ids1024 who also shipped a couple of fixes for pipes.

Ion continues on fire! Gaining a new contributor this week: @drosseau who shipped a ton of stuff including fixes for echo , comparison operators and the range syntax. All of that with new features like the not builtin and some general refactoring. Well done!

@mmstick has been also very busy this week with the starting the new Ion’s user manual. He also improved the recently added job control in conjunction with many bug fixes and refactorings.

Ion also received love from @huntergoldstein who added support for inline expressions in methods and made case statements implicitly ended.

On the land of the drivers there was not much activity: some improvements to the network drivers configuration and the splitting of pcid ’s configuration into initfs and fs by @jackpot51.

As part of his GSoC @ids1024 did some work on Redoxfs preventing permission related failures on file creation as well as a fix to unlink (also related to permission handling).

What about TFS ? Well, @ticki was on fire this week! Mostly hardening the test suite of the various concurrent data structure libraries that conform the base of TFS. He even found a segfault in conc::hazard::Hazard ’s safe code. But to be honest, I don’t think I’m honouring all the work I saw while looking at the commit history. So, go ahead and check yourself ;)

Coreutils also progressed with the addition of a --reset flag to shutdown by @jackpot51. @goyox86 extracted the ArgParser to it’s own library and migrated coreutils and userutils to it. @ids1024 added the uname utility and shipped fixes for both rm and which .

@goyox86 tried to improve overall quality of userutils by reimplementing whoami and id from scratch using system calls (previous implementations relied on environment vars). He also added docs to all user utilities and applied most of the recent coreutils code conventions there.

On the netstack @jackpot51 trimmed the network configuration while @ids1024 corrected fpath() implementation on tcpd and fixed a bug in tcpd responsible of the breakage HTTPS in curl .

The cookbook was not as active as in past weeks only with some fixes to the pastel recipe and all the hard work from @ids1024 on the git one.

Last but not least Orbital Redox’s composition and windowing manager received some attention from @jackpot51 resulting on the addition of left corner resizing and the starting of a new event based method.

Phew! That was a lot, thanks for staying tuned!

Kernel

@jackpot51 Added reset code. Details here.

@jackpot51 Reduced the scope of context blocks. Details here.

@jackpot51 Implemented iopl . Details here.

. Details here. @ids1024 Updated pipes to return ESPIPE when you try to seek on them. Details here.

when you try to on them. Details here. @ids1024 Implemented sys:uname . 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 Converted children: Vec<Option<Child>> to Vec<u32> on pipes. Details here.

to on pipes. Details here. @mmstick Resolved some SIGPIPE issues in job control. Details here.

issues in job control. Details here. @mmstick Made a fix on shell expansion: if it’s not a glob then the original word is kept. Details here.

@mmstick Added support to remember last background job ID. Now when the fg and bg commands are executed without arguments, the last background job ID will be used as the argument. Details here.

@chenl Fixed a typo in the README. Details here.

@mmstick Made some work to only enable context with interactive sessions. This speeds up script executions. Details here.

@mmstick Extracted binary logic from the shell module. Details here.

@mmstick Migrated readln prompt Into binary logic. Details here.

@drosseau Fixed a bug in which echo was treating anything preceded by - as an option flag. Details here.

was treating anything preceded by as an option flag. Details here. @drosseau Made an improvement and now jobs no longer use a separate list of builtins to determine the command type. Details here.

@drosseau Made an fix for || and && which were not working as expected. Details here.

and which were not working as expected. Details here. @drosseau Added the not builtin. Details here.

builtin. Details here. @drosseau Made a fix for echo . Details here.

. Details here. @jackpot51 Fixed an issue with the bytecount crate when using Rust nightly. Details here.

crate when using Rust nightly. Details here. @clippix Added support to only read init file when using interactive shell. Details here.

@huntergoldstein Added support for inline expressions in methods. Details here.

@huntergoldstein Did some misc improvements on the code of shell words expansion. Details here.

@huntergoldstein Added a change for case statements which makes them implicitly ended now. Details here.

@drosseau Made the builtins a little neater (Closures weren’t very friendly for debuggers/backtrace). Details here.

@drosseau Added more consistency to builtins. Details here.

@richiejp Improved error handling during process spawning. Details here.

@drosseau Added the matches builtin and fixed a grammar issue. Details here.

builtin and fixed a grammar issue. Details here. @drosseau Fixed some range syntax bugs. Details here.

@mmstick Started an mdbook based user manual for Ion! Details here.

Drivers

@jackpot51 Added newlines to the config of the network drivers. Details here.

@jackpot51 Divided pcid config into initfs and fs . Details here.

config into and . Details here. @jackpot51 Made a change to use dashes for mac addresses on the network drivers. Details here.

Redoxfs

@ids1024 Added a change to prevent the failure due to file permissions on creation. Details here.

@ids1024 Made a fix to require same uid as owner to unlink , not write permission. 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 Changed the trap values of conc::hazard::Hazard , so it can safely store null and 0x1 pointers. Details here.

, so it can safely store null and 0x1 pointers. Details here. @ticki Added tests to conc::hazard::Hazard , revealing a segfault in safe code. Details here.

, revealing a segfault in safe code. Details here. @ticki Fixed conc::hazard::tests::hazard_set_get() test, as suggested by Reddit user sebzim4500 . Details here.

test, as suggested by Reddit user . Details here. @ticki Removed a broken double-panicking test in conc::hazard . Details here.

. Details here. @ticki Fixed conc tests failing because the RefCell in the local state TLS variable is not mutually exclusive. Details here.

tests failing because the in the local state TLS variable is not mutually exclusive. Details here. @ticki Added a change to not expect T: ?Sized for conc::Guard<T> . Details here.

for . Details here. @ticki Added support for catching endless looping caused by conc::Guard::try_new (and friends) calling garbage collecting functions. Details here.

(and friends) calling garbage collecting functions. Details here. @ticki Added support for counting the number of read spins of conc::hazard::Hazard enabling the detection of infinite loops in debug mode. Details here.

enabling the detection of infinite loops in debug mode. Details here. @ticki Removed some hardcoded constants in conc::hazard . Details here.

. Details here. @ticki Added a check against freeing blocked hazards through local::free_hazard() in conc .Details here.

in .Details here. @ticki Added a test for debug assertions in conc . Details here.

. Details here. @ticki Documented how conc::Atomic is represented. Details here.

is represented. Details here. @ticki Added conc::sync::Treiber::top() for getting the top item of the stack w/o popping. Details here.

for getting the top item of the stack w/o popping. Details here. @ticki After reverted conc::sync::Treiber::top() as it was unsound as it could cause double drop. Details here.

as it was unsound as it could cause double drop. Details here. @ticki Set a spin limit for conc::hazard::Hazard up to avoid spurious panics in debug mode. Details here.

up to avoid spurious panics in debug mode. Details here. @ticki Added a test for panicking in destructor of conc::sync::Treiber . Details here.

. Details here. @ticki Added a test to make sure that the destructor actually runs in conc::local . Details here.

. Details here. @ticki Added a test to make sure that the destructor actually runs in conc::global . Details here.

. Details here. @ticki Added support for handling unwinding destructors in conc::Garbage by crashing when they panic. Details here.

by crashing when they panic. Details here. @ticki Allowed destructors in conc to unwind. Details here.

to unwind. Details here. @ticki Added conc tests for sending hazards cross threads. Details here.

tests for sending hazards cross threads. Details here. @ticki Switched to spin locks in conc due to an issue with parking_lot . Details here.

Coreutils

@jackpot51 Added a reset flag to shutdown . Details here.

. Details here. @goyox86 Extracted the ArgParser to it’s own library and migrated coreutils to it. Details here.

to it’s own library and migrated to it. Details here. @ids1024 Fixed directory support in rm . Details here.

. Details here. @ids1024 Made which work with multiple directories in PATH . Details here.

work with multiple directories in . Details here. @ids1024 Added a uname utility. Details here.

Userutils

@goyox86 Reimplemented whoami again on top of system calls (previously was based on env vars). Details here.

again on top of system calls (previously was based on env vars). Details here. @goyox86 Reimplemented id again on top of system calls along with refactoring of the crate and added documentation to all utilities. Details here.

again on top of system calls along with refactoring of the crate and added documentation to all utilities. Details here. @goyox86 Made tweaks to id docs and copy-paste typos. Details here.

docs and copy-paste typos. Details here. @goyox86 Made a revision of getty improving error-handling, migrated to ArgParser and improved docs. Details here.

Netstack

@jackpot51 Trimmed the network configuration. Details here.

@ids1024 Corrected fpath() for tcpd . Details here.

for . Details here. @ids1024 Fixed a bug in tcpd s partial reads that was breaking https in curl . Details here.

Netutils

@jackpot51 Add newlines to network config. Details here.

@jackpot51 Fixed trim usage in dhcpd . Details here.

Orbital

Orbital is the windowing system and compositor for Redox.

@jackpot51 Made a fix to close display and socket before launching orblogin . Details here.

. Details here. @jackpot51 Started the work on moving to an event based method. Details here.

@jackpot51 Removed a lot of debugging. Details here.

@jackpot51 Added support for left side and bottom left corner resizing. Details here.

@jackpot51 Made a change to add /ui/bin to PATH when launching the first orbital application.

Cookbook

The cookbook the collection of package recipes of Redox.

@jackpot51 Made an update to the drivers recipe. Details here.

recipe. Details here. @jackpot51 Added file types to pastel . Details here.

. Details here. @jackpot51 Added a manifest for Pastel, placing it in /ui/bin. Details here.

@ids1024 Updated the git recipe to override git s SHA1 implementation. 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.

Chen Rotem Levy 🎂

Cooper Paul EdenDay 🎂

Danny 🎂

Danny Rosseau 🎂

Jean-Loup ‘clippix’ Bogalho 🎂

m4b 🎂

Richard Palethorpe 🎂

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