StelluxOS is a personal operating system project inspired by Symbiote project's philosophy of providing runtime privilege level switching mechanism for userspace threads. This would ultimately allow the kernel to be a pool of hot-swappable and restartable components that can elevate themselves when performing privileged tasks and staying lowered the rest of the time.
Stellux OS is an operating system project inspired from my research with Tommy Unger and Jonathan Appavoo at Boston University. The work that inspired it is Symbiote - a chronokernel approach to dissolving the barrier between userspace and kernelspace. The motivation behind Symbiote was to provide an "elevation" mechanism for userspace threads to allow them to run at privileged supervisor level. The benefit of this approach is that it combines debuggability and ease of development of userspace applications, encourages the use of third-party libraries, while providing functionality and performance benefits of a kernel module.
The goal for Stellux operating system is to be developed stemming and being built on top of Symbiote's philosophy that userspace threads can make a runtime choice of elevating themselves to kernel level. This design allows the kernel to be a pool of userspace components that can be monitored by a watchdog process and if any part of the kernel fails, rather than crashing the whole system, that individual component could be restarted or hot-swapped. This unlocks a whole new world where there are no kernel-specific modules or drivers, but everything is a userspace application. Drivers and kernel modules can be normal userspace applications that elevate themselves at will whenever they need to either take critical paths or make use of kernel resources.
x86 | ARM64 |
---|---|
✓ | X |
- Userspace and syscall support
- Multithreading
- SMP multicore support
- Kernel and userspace thread management
- kElevate/kLower mechanisms for runtime privilege switching
- PCI device enumeration
- Optimized write-combining graphics buffer management
- HPET and time measuring support
- Stacktrace dump from the interrupt context
Clone the repository
git clone https://github.com/FlareCoding/StelluxOS.git
Install dependencies
make install-dependencies
To build the Stellux image, simply run
make
Running in QEMU in a separate graphical window
make run
Running in QEMU headless in the current shell
Note: use this if in ssh session
make run-headless
Running unit-tests
make execute-unit-tests
- Run a headless QEMU session in the current shell
make run-debug-headless
Note: This will hang until a GDB client connects to the stub
- In a separate shell connect to the GDB server
make connect-gdb
Note: Type 'y' in the prompt and continue, the kernel will hit a breakpoint on kernel entry
- Write-combining graphics framebuffer optimization
- Arbitrary kLower mechanism
- Multithreading
- AP processor startup (leads into SMP)
- SMP support in the scheduler
- Unit testing infrastructure
- Improved thread creation & management mechanism
- xhci controller driver
- USB support for a generic HID keyboard and mouse
- Complete rework of the kprint and dmesg interface
- GUI and window management subsystem
- Virtual filesystem and initramfs
- Kernel command-line argument support
Contributions are always welcome through pull requests.
Special thanks to Dr. Tommy Unger for the Symbiote and kElevate work and Dr. Jonathan Appavoo for supporting this project from inception and all the technical knowledge they brought to the table.