Yet another stupid OS in Rust for no reason. Not even close to memory safe and blazingly fast.
I am trying to build pure capability based OS. Currently kernel does only minimal stuff: vmm, pmm, scheduling and capability maintenance. Other stuff will live in userspace.
For now capability rights are not enforced, but will one.
Kernel exports object to userspace which are referenced by capabilities:
- Virtual memory space (VMS)
- Virtual memory object (VMO)
- Thread
- Task
- Port (IPC primitive)
- Factory
... others are coming later
Userspace can create new objects via Factory object which is created once during kernel boot. Factory is a mechanism of enforcing permissions on object creation. Ideally all applications should have a manifest with needed capabilities and during task creating only needed capabilities should be transferred to it. However now capabilities are not enforced, but they are built into the design.
Tasks can communicate via Ports. Port primitive is simple blob transport with support of transferring capabilities between Tasks (looks very similar to GMU MACH ports). IPC is asynchronous by default. There is a custom async runtime on top of ports, which can be found in rokio/ directory.
To make life of developers (me) easier custom IDL language along with the compiler generates pretty rust bindings for communication. Bindings are async-aware and depend on rokio/ runtime.
- aarch64 (qemu)
Maybe riscv64 one day. I am not messing with long, real, unreal engine 5 modes in x86 ever in my life.
You don't.