Microkernel

The core kernel of Mercury will be highly limited, implementing only necessary portions. This allows other functionality to be simply run in userspace.

Additionally, most code should be put into separate libraries then pulled into the kernel code. This will likely be done via git submodules.

Initially, it will be built for RISC-V, then ARM (focused on running in a VM), then on a Raspberry Pi. Afterwards, we can put focus towards building out various features.

Support for multiple targets will be done via Cargo.toml targets, cross-compilation, and conditional compilation.

Concurrency

For performance, we will be using various concurrency programming techniques.

For IO intensive operations, async will be used. This will include the filesystem, actors, and GUI.

CPU-bound operations are better suited to individual threads, however. This might include operations like hashing, encryption, and indexing.

Boot Process

TODO

Memory Management

TODO

Processes

TODO

Error Handling

All errors must be handled gracefully by the kernel. If possible, they should simply log an error. If not, they can display it to the user, preferably in a simple format, maybe using something like const_panic or snafu.