131 lines
4.8 KiB
Markdown
131 lines
4.8 KiB
Markdown
# xOS
|
|
**A multi-architecture operating system built from scratch targeting x86, ARM, and RISC-V**
|
|
|
|
![System Overview][system_overview]
|
|
|
|
---
|
|
|
|
## What This Is
|
|
|
|
An operating system implemented entirely from scratch (no existing kernel), spanning kernel development, driver architecture, filesystems, userland applications, and UI frameworks.
|
|
|
|
### Technical Scope
|
|
|
|
- **Multi-architecture kernel**: x86/x86-64, ARMv7, Arm64, RISC-V support with unified codebase
|
|
- **Custom bootloaders** for each architecture with ELF validation and secure boot integration
|
|
- **Full userspace stack**: C/C++ standard libraries, Objective-C runtime, UI framework, window server
|
|
- **Production OS features**: Ext2 filesystem, virtual filesystem layer, process management, POSIX signals, TTY subsystem
|
|
|
|
---
|
|
|
|
## Core Technical Implementation
|
|
|
|
### Kernel Architecture
|
|
|
|
**Preemptive Multitasking & Scheduling**
|
|
- Priority-based round-robin scheduler with 12 priority levels
|
|
- Per-CPU runqueues for SMP support (multi-core)
|
|
- Conditional kernel preemption (`PREEMPT_KERNEL` flag for real-time responsiveness)
|
|
- Interrupt depth counter preventing race conditions during context switches
|
|
- Idle threads for zero-allocation interrupt handling
|
|
|
|
**Memory Management**
|
|
- Virtual memory manager with per-process address spaces
|
|
- Demand paging and swap support
|
|
- Kernel/userspace memory isolation with access validation
|
|
- Shared buffers for zero-copy IPC
|
|
|
|
**System Call Interface**
|
|
- 60+ system calls following POSIX conventions (`fork`, `exec`, `read`, `write`, `mmap`, etc.)
|
|
- Architecture-specific syscall dispatch (software interrupts on x86, `svc` on ARM)
|
|
- Kernel-mode syscalls (`ksys1`-`ksys4`) for internal operations
|
|
|
|
### Boot Process & Security
|
|
|
|
**Custom Bootloader Chain**
|
|
- **Stage 1** (x86): Real-mode to protected-mode transition, memory map collection
|
|
- **Stage 2/Prekernel**: ELF loader, device tree initialization, MMU setup
|
|
- **Kernel validation**: SHA256 + RSA signature verification before execution
|
|
- Passes boot arguments (`boot_args_t`) with memory layout, framebuffer, device tree
|
|
|
|
### Filesystem & Device Management
|
|
|
|
- **Ext2 filesystem** with full read/write support
|
|
- **Virtual filesystem (VFS)** layer abstracting file operations
|
|
- `/dev` (device nodes) and `/proc` (process/system introspection) filesystems
|
|
- Device tree parsing for ARM/RISC-V hardware discovery
|
|
- Device driver framework with pluggable driver registration
|
|
|
|
### Userland & UI
|
|
|
|
**Window Server** (compositing manager)
|
|
- Client-server architecture using IPC
|
|
- Desktop and mobile window management modes
|
|
- Hardware-accelerated rendering via LibG
|
|
- Menu bar, dock, popup system
|
|
|
|
**Libraries**
|
|
- **LibC/LibCxx**: POSIX-compliant C library and C++ STL
|
|
- **LibObjC**: Objective-C runtime (message dispatch, ARC)
|
|
- **LibFoundation**: Event loop, shared buffers, collections (Cocoa-inspired)
|
|
- **LibG**: 2D graphics (pixel buffers, fonts, PNG/BMP loaders)
|
|
- **LibUI**: High-level UI widgets (buttons, text fields, windows)
|
|
|
|
---
|
|
|
|
## Key Engineering Decisions
|
|
|
|
**1. Multi-Architecture Support**
|
|
Abstracted platform-specific code (`kernel/platform/{x86,arm32,arm64,riscv}`) with common interfaces for MMU, interrupts, context switching. Enables same kernel codebase across all targets.
|
|
|
|
**2. Build System**
|
|
GN (Generate Ninja) meta-build system for fast incremental builds. Compiles for multiple architectures from single source tree.
|
|
|
|
**3. Bootloader Security**
|
|
Validates kernel ELF binary cryptographically before loading—prevents tampered kernel execution (verified boot).
|
|
|
|
**4. Preemptive vs Cooperative**
|
|
Kernel preemption is compile-time optional (`-DPREEMPT_KERNEL`). Enables low-latency scheduling when enabled, or simpler non-preemptive model for easier debugging.
|
|
|
|
**5. Window Server Architecture**
|
|
Separates compositing from applications—crash in user app doesn't take down entire UI. Similar to X11/Wayland model.
|
|
|
|
---
|
|
|
|
## Features
|
|
|
|
### Kernel
|
|
|
|
* x86/x86-64, ARMv7 and Arm64 kernel with pre-emptive multi-threading
|
|
* Ext2 filesystem
|
|
* /dev and /proc filesystems
|
|
* Local sockets
|
|
* POSIX signals
|
|
* TTY
|
|
* [learn more](https://code.ayaantunio.me/ayaan/Custom-Operating-System/src/branch/master/docs/kernel.md)
|
|
|
|
### Libraries
|
|
|
|
* Runtime & support: LibC, LibCxx, LibObjC
|
|
* Rich functionality: LibFoundation
|
|
* UI functionality & rendering: LibG, LibUI
|
|
* [learn more](https://code.ayaantunio.me/ayaan/Custom-Operating-System/src/branch/master/docs/libs.md)
|
|
|
|
### Userland
|
|
|
|
* Composing windows manager for desktop and mobile
|
|
* Simple UI apps
|
|
* Terminal
|
|
|
|
### Boot
|
|
|
|
* Custom bootloaders
|
|
* Kernel validation during the boot proccess
|
|
* Custom device tree
|
|
* [learn more](https://code.ayaantunio.me/ayaan/Custom-Operating-System/src/branch/master/docs/boot.md)
|
|
|
|
## How to build and run xOS?
|
|
|
|
See the [build instructions](https://code.ayaantunio.me/ayaan/Custom-Operating-System/src/branch/master/docs/build.md)
|
|
|
|
[system_overview]: /Images/sysarch.svg "System Architecture Diagram" |