Skip to content

Latest commit

 

History

History
206 lines (162 loc) · 7.03 KB

README.md

File metadata and controls

206 lines (162 loc) · 7.03 KB
logo

Stellux OS

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.

badge contributors last update forks stars open issues license


📖 Table of Contents

🌟 About the Project

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.

📷 Screenshots

screenshot
screenshot

🖥️ Supported Architectures

x86 ARM64
X

🎯 Features

  • 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

⚙️ Getting Started

‼️ Prerequisites

Clone the repository

git clone https://github.com/FlareCoding/StelluxOS.git

Install dependencies

make install-dependencies

🛠️ Building and Running the Project

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

🔧 Debugging

  1. 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

  1. 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

🧭 Roadmap

  • 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

👋 Contributing

Contributions are always welcome through pull requests.

📰 License

License: MIT

💎 Acknowledgements

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.