By goyox86 on

This is the 30th 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! And welcome to another edition of TWiR!

As usual, we have been busy making Redox better and we have a couple of exciting news to share. So, Let’s get started!

First of all, @andre pointed out that the Docker experience has been improved. Among others, consecutive builds are now way faster because cargo downloads are cached with named volumes. Also, there’s documentation for running the container interactively now. Please check it out here!

We are super excited about the work done by @jackpot51 towards the installer support. For example, the bootloader now supports filesystem UUID detection and is able to send that information to the kernel at boot time. The kernel has notably gained the ability to receive environment variables at the main entry point ( kmain ) this is needed to being able to receive that REDOXFS_UUID environment with the filesystem UUID to be mounted. It’s also worth mentioning that @jackpot51 made some refactoring to the kernel arguments infrastructure.

The other very important change is related to schemes. Redox now supports hierarchical schemes enabling for example, more than one disk controller.

Other exciting news in the kernel is the work on capability based security. Basically, capability mode will make a process unable to open new file descriptors unless it has required access to it, improving security and allowing more reasoning about the system. The sys:iostat scheme for example, should tell you what any process is allowed to do, once it is in capability mode. You can read more about capability based security here and also check out FreeBSD’s implementation of this model.

Along with this work is the support for disk hierarchies added to the AHCID driver and the support for capability mode added to all the drivers by using the 0 namespace (also known as null namespace). In addition to that, we have now a vmmouse driver which should improve significantly the mouse support in QEMU .

Redoxfs was cleaned to allow use of most functions when linking the library, including mounting and creating file systems. It was also extended to allow a bootloader to be written during redoxfs-mkfs but, without doubt, the most notable feature is the addition of UUID support, enabling file systems to be mounted by UUID (used by the installer).

Moving up to the userland we have Ion which experienced a lot of changes and improvements notably: The initial work on library support, the support for custom prompts via the PROMPT function, the implementation of $find() and @split_at() , support multi-line array assignments and lots of refactoring to the words module all by @mmstick.

The cookbook got some new packages (a lot of the related to games and emulators ;)): notably 2048 , cleye , rust64 and rs-nes thanks to @jackpot51.

The coreutils yes utility was improved by @youknowone to show invalid parameter error rather than silencing ‘y’.

On the GUI side of things Orbital was updated to use the null namespace and @dummie999 was busy with Sodium adding line numbers, wrapping long lines, fixing a bug that could cause panic when deleting lines, fixing a bug when entering invalid commands in prompt and making buffers behave more consistent.

Bonus: There is a new release in the works. It should be out in the next few days, make sure you give it a spin!

Bootloader

Redox OS Bootloader

@jackpot51 Made a change to prepare bootloader for use in installer. Details here.

for use in installer. Details here. @jackpot51 Printed UUID, cleaned up print functions, and reformated kernel arguments. Details here.

@jackpot51 Added support to send REDOXFS_UUID to kernel. Details here.

@jackpot51 Fixed an off-by-one error when copying env. Details here.

Kernel

The Redox microkernel

@jackpot51 Updated README.md. Details here and here.

@jackpot51 Created LICENSE. Details here.

@jackpot51 Fixed the output of build script. Details here.

@jackpot51 Updated dependencies. Details here.

@jackpot51 Fixed more documentation. Details here.

@jackpot51 Updated features for latest nightly. Details here.

@jackpot51 Chnaged hybrid -> micro. Details here.

@jackpot51 Updated README.md. Details here.

@jackpot51 Downgraded goblin crate. Details here.

crate. Details here. @jackpot51 Allowed the listing of root scheme. Details here.

scheme. Details here. @jackpot51 Reformated kernel arguments. Details here.

@jackpot51 Passed env to the first function. Details here.

to the first function. Details here. @jackpot51 Moved location of live disk. Details here.

@jackpot51 Adedd target-c-int-width to x86_64 target. Details here.

to target. Details here. @jaje Deduplicated memcpy , memmove , memset and memcmp functions. Details here.

, , and functions. Details here. @jackpot51 Added capability mode support using null namespace. Details here.

namespace. Details here. @GabrielMajeri Updated to bitflags version 1.0. Details here.

Drivers

Redox OS Drivers

@jackpot51 Updated cargo.lock. Details here.

@jackpot51 Made a change to use disk hierarchy. Details here.

@jackpot51 Added vmmouse support. Details here.

support. Details here. @jackpot51 Updated Cargo.lock. Details here.

@jackpot51 Added support to use capability mode ( null namespace) for drivers. Details here.

namespace) for drivers. Details here. @jackpot51 Update Cargo.lock. Details here.

Ion

The Ion Shell. Compatible with Redox and Linux.

@mmstick Added initial library support. Details here.

@mmstick Made variables struct cloneable. Details here.

@mmstick disable tcsetpgrp when using Ion as a library. Details here.

when using Ion as a library. Details here. @mmstick Implemented PROMPT function support, to use a function to generate a prompt, simply create a function whose name is PROMPT . Details here.

function support, to use a function to generate a prompt, simply create a function whose name is . Details here. @mmstick Re-ran cargo fmt . Details here.

. Details here. @mmstick Made export VAR exports local variables. Details here.

exports local variables. Details here. @mmstick Added better error message for detected invalid implicit cd commands. Details here.

commands. Details here. @mmstick Made a change so commands can be expanded now. Details here.

@jackpot51 Updated Cargo.lock. Details here.

@mmstick Applied fixed for #543, closes #543. Details here.

@mmstick Applied fixes for #544, closes #544. Details here.

@mmstick Fixed the integration tests. Details here.

@mmstick Implemented the -n flag, closes #529. Details here.

flag, closes #529. Details here. @mmstick Switched to d128 fork of calculate , this addresses precision issues with floating point math by converting. Details here.

fork of , this addresses precision issues with floating point math by converting. Details here. @mmstick Reverted to master branch of calculate crate. Details here.

branch of crate. Details here. @mmstick Improved methods documentation. Details here.

@mmstick Fixed #549, closed #549. Details here.

@Kvikal Changed is_array to properly return false when multiple arrays are present. Details here.

to properly return when multiple arrays are present. Details here. @Kvikal Fixed a TODO in is_array function: [1 2 3][0] is now treated as a string. Details here.

in function: [1 2 3][0] is now treated as a string. Details here. @mmstick Refactored the words module. Details here.

module. Details here. @mmstick String method args unescape

and \t sequences. Details here.

and sequences. Details here. @mmstick Implemented $find() & @split_at() . Details here.

& . Details here. @mmstick Improved method argument parsing. Details here.

@jackpot51 Updated Cargo.lock. Details here.

@mmstick Improved string methods. A bit of refactoring to make handling method arguments simpler. Details here.

@mmstick Applied a fix for #551. Updated variables for commands that start with ~ too. Closes #551. Details here.

too. Closes #551. Details here. @mmstick Applied a fix for #532. Liner seems to be doing some very limited form of multi-line comment, support, itself. This change strips out the excess characters, that are returned by liner. Details here.

@mmstick Made a change to let builtin prints variables. After the refactoring of how let and other builtins were parsed we lost the ability to get a list of local variables just by supplying the let command without any arguments. This fix re-implements that. Details here.

and other builtins were parsed we lost the ability to get a list of local variables just by supplying the command without any arguments. This fix re-implements that. Details here. @mmstick Made some work so get_vars() now returns an iterator. Details here.

now returns an iterator. Details here. @mmstick Made some refactoring to string method. Details here.

@mmstick Implemented multi-line array assignments. Details here.

@mmstick Made more refactoring on the words module. Details here.

Cookbook

A collection of package recipes for Redox.

@jackpot51 Added recipes for 2048 , cleye , and rust64 . Details here.

, , and . Details here. @jackpot51 Added upstream URLs. Details here.

@jackpot51 Updated the rustual-boy fork. Details here.

fork. Details here. @jackpot51 Added rs-nes . Details here.

. Details here. @jackpot51 Added upstream link if necessary. Details here.

@jackpot51 Update the status script. Details here.

script. Details here. @jackpot51 Added upstream status script. Details here.

@jackpot51 Added diff sub commands. Details here.

sub commands. Details here. @jackpot51 Used color and –stat for status command. Details here.

command. Details here. @jackpot51 Added difftool sub commands. Details here.

Orbital

Redox Windowing and Compositing System

@jackpot51 Made a change to utilize the null namespace. Details here.

namespace. Details here. @pharaone Updated README.md. Details here.

Redoxfs

The Redox Filesystem

@jackpot51 Made a cleanup to allow use of most functions when linking the library, including mounting and creating filesystems. Details here.

@jackpot51 Updated FUSE. Details here.

@jackpot51 Fixed cargo doc . Details here.

. Details here. @jackpot51 Cleaned up FUSE backend, also, made a fix to send signal at correct time. Details here.

@jackpot51 Fixed compilation on Redox. Details here.

@jackpot51 Update spin crate. Details here.

crate. Details here. @jackpot51 Added docs.rs badge. Details here.

badge. Details here. @jackpot51 Allowed a bootloader to be written during redoxfs-mkfs. Details here.

@jackpot51 Fixed offset calculations. Details here.

@jackpot51 Implemented UUID . Details here.

. Details here. @jackpot51 Added UUID matching. Details here.

matching. Details here. @jackpot51 Fixed the disk scheme path. Details here.

Sodium

Sodium: The Text Editor

@dummie999 Added line numbers and wrapped lines that are too long. Details here.

@dummie999 Fixed a bug that could cause panic when deleting lines. Details here.

@dummie999 Fixed a bug when entering invalid command in prompt. Details here.

@dummie999 Made buffers behave more consistent. Details here.

Coreutils

The Redox coreutils.

@youknowone Improved ‘yes’ to show an invalid parameter error rather than silencing ‘y’. 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.