PincerOS Demo
About The Project π¦
PincerOS is a bare-metal monolithic kernel multi-core operating system written from the ground up in Rust targeting the Raspberry Pi 4B. The project aims to be a distributed, scalable, and secure operating system for general-purpose use. We aim to support a wide range of applications such as networked video games, distributed computing, and more.
PincerOS is an open source project and the source code can be found in the our GitHub Repository
Targeted Features β¨
- Monolithic Kernel Architecture
- Multi-core Support
- Memory Management
- Process Scheduling
- File System with Journaling Support
- Inter-process Communication (IPC)
- Device Drivers
- Networking
- Security
Kernel Architecture π
PincerOS has the following key kernel components:
- Kernel Core: Handles basic system operations, syscalls, scheduling, and IPC
- Memory Management: Implements virtual memory and memory protection
- Device Drivers: Manages hardware interfaces
- Network Stack: Provides networking capabilities
- Security: Handles access control and system security
Userspace Features
PincerOS makes the following features and applications availabile in its userspace
- ulib - a userspace library which provides user level applications with an API to use system calls
- Display Server - Allows for multiple processes to have graphical windows which simultaneously display content on a monitor. Please view the demo on the PincerOS blog to see the display sever in action for applications such as Doom, a drawing application, and more!
- Shell - a userspace shell with common utilities
Installation π¦
Currently, the project can be tested on QEMU version 9.0 or higher. If your package manager doesnβt have it, you will have to build QEMU from source.
Dependencies
- Rust toolchain (https://www.rust-lang.org/tools/install)
- QEMU >= 9.0 (https://www.qemu.org/download/)
- Just (https://github.com/casey/just?tab=readme-ov-file#packages)
Setup
-
Clone the repository:
git clone https://github.com/pincerOS/kernel.git
-
Build and run the kernel
This can be accomplished by navigating to the cloned kernel directory and then running the following series of shell commands:
./crates/kernel/scripts/compile-init.sh
./crates/kernel/scripts/build.sh user
./crates/kernel/scripts/run-usb.sh
Alternativley, you can also use Just
To build and run the main example:
cd crates/kernel
just build-and-run
We also provide scripts for debugging and running with ui:
just --list
Available recipes:
build example=example profile=profile target=target # Build the kernel
build-and-run example=example profile=profile # Build and run in one command
build-and-run-debug example=example # Build and run with debug profile
build-debug example=example target=target # Build with debug profile
debug # Run with debug mode (wait for debugger)
debug-ui # Run with debug mode and UI display
default # Default: build and run the kernel
run qemu_target=qemu_target qemu_debug=qemu_debug qemu_display=qemu_display debug_args=debug_args # Run the kernel in QEMU
run-rpi3b # Run on Raspberry Pi 3B
run-ui # Run with UI display
Development Status π§
Kernel | Status | Usermode | Status |
---|---|---|---|
Runs on QEMU | β | Language runtime support (minimum libc) | β |
Runs on Hardware | β | Processes + process management syscalls | β |
Concurrent events/threading/scheduling | β | User mode threads | β |
Parallel | β | Signals | β |
Sync prims | β | mmap | β |
Kernel preemption | β | fork | β |
Virtual memory + mmap | β | exec | β |
Tracing/debugging | β | File io syscalls | β |
File system | β | Sockets | β |
UART | β | Network presence (IP, discoverable) | β |
VGA or equivalent | β | User ids | β |
Sound card | β | Login | β |
Mouse | β | Access control | β |
Keyboard | β | Capabilities | β |
NIC | β | Shell (text) | β |
Timer | β | Shell (GUI) | β |
DMA | β | Window manager | β |
Disk | β | Sound | β |
Processes | β | Graphics | β |
Distributed | β | Init system | β |
Shared libraries and dynamic loading | β | Applications | β |
Β | Β | Running video game | β |
Β | Β | Distributed fork | β |
Credits π
This project is a collaboration between students at the University of Texas at Austin. π€
- Aaron Lo (@22aronl)
- Alex Meyer (@ameyer1024)
- Anthony Wang (@honyant)
- Caleb Eden (@calebeden)
- Hunter Ross (@hunteross)
- @InsightGit
- Joyce Lai (@hexatedjuice)
- Neil Allavarpu (@NeilAllavarpu)
- @Razboy20
- Sasha Huang (@umbresp)
- Slava Andrianov (@Slava-A1)
This project also incorporates code from CSUD, made by Alex Chadwick and licensed under the MIT License (See CSUD_LICENSE for more details). CSUD was used as a base for the USB implementation and additional support of Interrupt & Bulk Endpoints were added on.
License π
This project is licensed under the MIT License.
βRust never sleeps.β -Neil Young