I have been quiet for a while, not because I am introverted, but because I have been working very, very hard.
I want to show off some things that have come about over the course of the last week, with help from the Redox Team.
First off, I asked contributions to the kernel to be limited over the past few days, because I was planning a complete overhaul of the kernel. LazyOxen, k0pernicus, stratact, and Ticki made contributions that were integrated into the rewrite. There were several reasons for the rewrite, and now that the majority of the work is completed, I would like to explain why this is the most important set of changes in Redox history, because it means that Redox is Serious.
The following things were completely and totally possible in a program one week ago:
- Access to IO ports
- Access to kernel memory
- Access to other processes's memory
Also, the following problems were present:
- External input, correctly constructed, could crash the kernel
- Schemes did not run in a context, and did not have resources tracked correctly
- Program allocations were not tracked at all, allowing for memory leaks
- The entire graphics stack (all the way to the desktop!) was inside of the kernel
- Very low utility of the terminal
- Very low portability of applications
- Start all user applications in usermode (ring 3)
- Prevent all access to I/O ports in usermode
- Prevent all access to memory not mapped for a process
- Start all schemes as processes, and switch to a message passing system for IPC
- Track allocations for every process, clean them up on exit, and map them on each context switch
- Utilize a get_slice function to safely catch out of bound indexes
- Improve process management, so that a list of processes can be seen, and crash dumps are more expressive
- Move the graphics stack into the orbital scheme, accessed through F2
- Create a Console struct to deal with the F1 console
- Run the terminal app in the F1 console by default
- Vastly improve the terminal app's commands
- Improve the newlib Redox support
- Create a port system to port a number of open source applications and libraries
After these changes, Redox runs very well, and can be exercised through either the console or the desktop environment.
Here is the desktop enviroment, running on real hardware, with an SDL example showing:
The process list, at context:, will show kernel processes, schemes, and programs. Used memory and open file descriptors are shown
Here you can see, the test program can no longer write to random addresses or reboot the system!
The network stack is fixed, much of it is in userspace, and it is working on real hardware! Here is Redox receiving pings
And my Ubuntu system sending pings
Finally, I am working on an installer!
There may be things I forgot in these lists. Also, ZFS support is very close to being ready to use in a real system.
P.S. Here is Redox only a month ago: