By goyox86 on

This is the 32nd 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 , our Discourse forum or you can get an invite to our chat by sending an email request to info@redox-os.org .

What’s new in Redox?

TL;DR

Hello there! Welcome to another issue of TWiR!

This week @jackpot51 surprised us by sharing this on the Mattermost channel:

Yes! it’s cargo running on Redox! This milestone represents a significant step forward on our path to self-hosting. Kudos to @ids1024 who worked really hard on self-hosting during the GSoC.

It’s worth mentioning that cargo and rustc have been @jackpot51’s focus these last two weeks and many changes are directly related (but not limited) to this effort.

So, without further ado, let’s give you an overview of what happened this week in the Redox universe!

I’m gonna start with the book where @sajattack made some updates on installation and build instructions.

Moving to the kernel, @jackpot51 was focused on implementing the remaining cargo and rustc missing pieces, specifically: timeouts for futexes and improving interruption detection. Also in the kernel, @pzmarzly made a fix on elf.rs to prevent the inlining of some constants from goblin .

As always the Ion shell saw a lot of work. Including the introduction of a new fork abstraction, which will hopefully help to eliminate some redundancy caused by the manual handling of forking logic in command expansions and function prompts. There were also readln and quote termination refactorings as well as the elimination of heap allocations with !* designator. All of that thanks to @mmstick. @ids1024 also worked on in Ion, adding the set_var() and get_var() methods to IonLibrary while @KaKnife was busy implementing the random builtin in addition to @AgustinCB implementing escape and unescape as well as a major optimization to perform builtin Lookup when parsing now the builtin lookup once when parsing the statement, rather than performing a lookup for a given builtin command for each statement repeatedly.

This week, I saw a new contributor super active in the chat, asking many questions, and trying to port stuff to Redox. The result: the addition of recipes for vim , jansson and openssh to the cookbook. Give it up for @sajattack!

Continuing with the cookbook: @xTibor added recipe version to vttest in addition to a new periodictable recipe, along with lots of activity from @jackpot51 who cleaned up LLVM the build and improved build speed of the rust recipe, fixed llvm-config ’s path. Meanwhile @AgustinCB focused efforts on fixing the xz recipe.

On the Orbtk side of things, @BojanKogoj added clear() to Grid plus some examples. Continuing on the GUI work, the Orbterm emulator saw a bunch of updates, mostly related to bumping ransid who experienced a bunch of improvements: fixes to overflow, improvements on the vt100 compliance, better vttest performance and few enhancements to the parsing of nested control characters.

Moving onto pkgutils, few issues related to dependency resolution were addressed, and now we are retrieving the dependency list from repo.

A quick glimpse to the utilities land reveals a new small new crate: redox_users. Basically, we moved all of the users and groups functionality there (along with few new goodies and documentation improvements), functionality that was previously embedded on userutils which was not optimal. This was done by @goyox86 as part of his ongoing work on porting the exa to Redox.

The userutils coreutils packages were updated to redox_users in addition to some general refactoring and cleanup.

Another package updated to redox_users was Orbutils. The migration was done by @chebykinn and @AleVul.

And last but not least, newlib our C library got some attention from @sajattack who removed include of nonexistent endian.h file, added all the headers necessary for openssh to compile, replaced glibc headers with newlib ones where possible as well as implemented scandir() and alphasort() .

Now I leave you with the details. See you next time, hopefully with rustc compiling some interesting crates ;)!

Book

The Redox book.

@sajattack Made a change to highlight the fact that we need cargo install xargo . Details here.

. Details here. @sajattack Updated the build preparation instructions. Details here.

@sajattack Updated the toolchain installation instructions. Details here.

Kernel

The Redox microkernel.

@sajattack Added a LOC badge. Details here.

@jackpot51 Implemented futex timeouts. Details here.

@pzmarzly Made a fix on elf.rs to not inline constant from goblin library. Details here.

to not inline constant from goblin library. Details here. @jackpot51 Removed SwitchResult , used out of band data to detect interruption and updated debugging code. Details here.

Ion

The Ion Shell. Compatible with Redox and Linux.

@Eijebong Bumped bitflags to 1.0. Details here.

to 1.0. Details here. @mmstick Made process expansions to allow access to stdin. Builtin commands like read aren’t working yet. Details here.

@mmstick Created fork abstraction with cmd expansions and fn prompts. Details here.

@mmstick Refactored readln logic into it’s own module. Details here.

logic into it’s own module. Details here. @mmstick Refactored quote termination logic. Details here.

@mmstick Made a change when expanding arguments: if an argument evaluates to an empty argument, simply ignore the argument as if it didn’t exist. Details here.

@mmstick Implemented superior word designator support. Details here.

@mmstick Sorted the builtins and used binary search with lookups. Details here.

@mmstick Improved public API with fork method. Details here.

method. Details here. @mmstick Made further public API improvements. Details here.

@ids1024 Made IonError derive debug. Details here.

derive debug. Details here. @ids1024 Added set_var() and get_var() methods to IonLibrary . Details here.

and methods to . Details here. @mmstick Further public API Improvements. The IonLibrary interface was removed, and integrated directly, within the shell’s main module. Details here.

interface was removed, and integrated directly, within the shell’s main module. Details here. @xTibor Fixed string comparisons in documentation. Details here.

@mmstick Implemented the execute_function() method for public API. Details here.

method for public API. Details here. @ids1024 Added a get_array() method to the public API. Details here.

method to the public API. Details here. @mmstick Replace sys::getpid() with process::id() . Details here.

with . Details here. @mmstick Handled signals with forks, closing #577. Details here.

@mmstick Eliminated Heap allocation with !* designator. Details here.

designator. Details here. @mmstick Refactored the binary module. Details here.

module. Details here. @mmstick Made some assignment optimizations. Details here.

@AgustinCB Escaped unescape. Details here.

@KaKnife Added --help argument and the random builtin. Partial fix for issue #528. Details here.

argument and the builtin. Partial fix for issue #528. Details here. @mmstick Enhanced the fork API & simplified the public API. Details here.

@KaKnife Documented builtins. Details here.

@mmstick Fixed builtin documentation style. Details here.

@AgustinCB Implemented escape & unescape Methods (#579). Details here.

& Methods (#579). Details here. @AgustinCB Made a major optimization: Perform Builtin Lookup when parsing (#587). Rather than performing a lookup for a given builtin command for each statement repeatedly, we now perform the builtin lookup once when parsing the statement. Details here.

@AgustinCB Made ./examples/run_examples.sh loudly fail. Details here.

loudly fail. Details here. @AgustinCB Fixed a test with negative numbers. Details here.

Cookbook

A collection of package recipes for Redox.

@dlrobertson Added documentation for Gentoo Linux. Details here.

@sajattack Added recipes for vim , jansson and ssh . Details here.

, and . Details here. @sajattack Made a quick fix to the ssh recipe. Details here.

recipe. Details here. @xTibor Added recipe version to vttest recipe. Details here.

recipe. Details here. @sajattack Fixed vim.patch . Details here.

. Details here. @sajattack Change ssh recipe to use custom branch of newlib . Details here.

recipe to use custom branch of . Details here. @jackpot51 Updated pkgutils . Details here.

. Details here. @jackpot51 Fixed prboom recipe. Details here.

recipe. Details here. @sajattack Created jansson.patch in the jansson . Details here.

in the . Details here. @xTibor Added periodictable recipe. Details here.

recipe. Details here. @jackpot51 Cleaned up LLVM build in Rust recipe. Details here.

@jackpot51 Improved build speed of Rust recipe. Details here.

@jackpot51 Fixed llvm-config path. Details here.

path. Details here. @AgustinCB Fixed xz recipe. Details here.

recipe. Details here. @jackpot51 Cleaned up compilation of Rust. Details here.

@jackpot51 Added version for ca-certificates . Details here.

. Details here. @jackpot51 Disabled LLVM ninja build, Enable compilation of codegen tests. Details here.

Orbtk

The Orbital Widget Toolkit. Compatible with Redox and SDL2.

@BojanKogoj Added clear() to Grid and example. Details here.

pkgutils

Redox Packaging Utilities.

@jackpot51 Removed dependency resolution in tar.gz package case. Details here.

package case. Details here. @jackpot51 Made a change to retrieve dependency list from repo. Details here.

@jackpot51 Retrieve dependency list from repo. Details here.

Orbterm

Orbital Terminal, compatible with Redox and Linux.

@jackpot51 Fixed an issue when resizing smaller than cursor. Details here.

@jackpot51 Updated ransid . Details here.

. Details here. @jackpot51 Fixed enter character, update ransid . Details here.

. Details here. @jackpot51 Updated ransid . Details here.

. Details here. @jackpot51 Updated to git ransid . Details here.

. Details here. @jackpot51 Updated to git ransid . Details here.

. Details here. @jackpot51 Added resize event. Details here.

@jackpot51 Released version 0.3.0 . Details here.

Orbutils

The Orbital Utilities. Compatible with Redox and SDL2.

@chebykinn Migrated to redox_users in orblogin . Details here.

in . Details here. @AleVul replace userutils with redox_users in orblogin . Details here.

ransid

Rust ANSI Driver - a backend for terminal emulators in Rust.

@jackpot51 Fixed overflow. Details here.

@jackpot51 Improved vt100 compliance. Details here.

compliance. Details here. @jackpot51 Improved vttest performance. Details here.

performance. Details here. @jackpot51 Released 0.3.7 . Details here.

. Details here. @jackpot51 Improved parsing of nested control characters. Details here.

@jackpot51 Used VTE for lower level state machine. Details here.

@jackpot51 Added test pattern. Details here.

pattern. Details here. @jackpot51 Handled parameters. Details here.

@jackpot51 Fixed ESC D and ESC E behavior. Details here.

and behavior. Details here. @jackpot51 Fixed some wrapping behaviors. Details here.

@jackpot51 Fixe CSI m . Details here.

. Details here. @jackpot51 Implemented titlebar. Details here.

@jackpot51 Released 0.4.0 . Details here.

. Details here. @jackpot51 Disabled xenl . Details here.

. Details here. @jackpot51 Released 0.4.1. Details here.

@jackpot51 Released 0.4.2 - Which fixes cursor before printing char. Details here.

@jackpot51 Released 0.4.3 - Fixing pb . Details here.

Users

Redox OS APIs for accessing users and groups information.

@goyox86 Initial commit. Details here.

@goyox86 Added LICENSE and README. Details here.

@goyox86 Tweaked comments. Details here.

@goyox86 Tweaks README. Details here.

@goyox86 Updated README. Details here.

@goyox86 Updated Cargo.toml. Details here.

@goyox86 Made some renaming and improved docs. Details here.

@goyox86 Moved Group users field to be a vector of String s. Details here.

field to be a vector of s. Details here. @goyox86 Implemented AllUsers iterator. Details here.

Userutils

User and group management utilities.

@goyox86 Migrated to the new redox_users crate, some refactoring and docs. Details here.

crate, some refactoring and docs. Details here. @goyox86 Updated README and some more documentation tweaks. Details here.

Coreutils

The Redox coreutils.

@goyox86 Migrated to the new redox_users crate. Details here.

Newlib

A fork of newlib from git://sourceware.org/git/newlib-cygwin.git with Redox support

@sajattack Removed include of nonexistent endian.h file. Details here.

@sajattack Added all the headers necessary for openssh to compile. Details here.

to compile. Details here. @sajattack Replaced glibc headers with newlib ones where possible. Details here.

headers with newlib ones where possible. Details here. @sajattack Removed ioctl.h and revert netdb.h for breaking ncurses and bash. Details here.

and revert for breaking ncurses and bash. Details here. @sajattack Removed un.h for breaking openssl. Details here.

for breaking openssl. Details here. @sajattack Added ssh dependencies. Details here.

dependencies. Details here. @sajattack Implemented scandir() and alphasort() . 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:

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