AADITYA.AEROSPACE

"This site looks like engineering documentation. That's intentional."
4 Engineering Projects 3 Published Books 190,000+ Lines of Code GPU-Native CFD x86_64 RTOS
ΔV Isp Mach Re APIC ACPI
Scroll

Projects

FeatherRTOS
PRJ-001
x86_64 Real-Time Operating System
Rust UEFI APIC SMP PCIe ACPI AHCI NVMe ARINC 653 FDIR
Monolithic kernel · ~20,450 lines · Cooperative FPPS + EDF · Space-grade partitioning
FeatherCFD
PRJ-002
GPU-Native CFD Framework
Vulkan OpenGL N-S Solver WENO-5 Multigrid NACA 192³ Grid
Incompressible/compressible solvers · GPU multigrid pressure projection · Volumetric raymarching
FeatherOrbital
PRJ-003
Orbital Mechanics Toolkit
Kepler Hohmann LVLH/ECI ΔV CubeSat Propagation Published Soon
Keplerian propagation · Hohmann transfers · LVLH ↔ ECI transforms · Mission planning tools
FeatherArch
PRJ-004
Power-Optimized Linux Distribution
7-9W Idle 400MHz Min 40Hz Display Scheduler Tuning Battery Life
CPU freq capping · Turbo boost control · Power management · Scheduler optimization
← Back to Projects
FeatherRTOS
x86_64 Real-Time Operating System
Rust ~20,450 lines 765 files Monolithic Kernel UEFI Boot
190,000+ Lines of Code 765 Files x86_64 Long Mode SMP APIC + PCIe AHCI + NVMe ARINC 653 FDIR Networking Stack

Kernel Architecture

UEFI (OVMF)
Firmware loads BOOTX64.EFI
NASM Stub
Long mode GDT · Page tables · 64-bit entry
rust_main()
C entry point — 16-step init
Select a module
Click any node above to view details about that subsystem.

Architecture Overview

├─ Architecture: x86_64 (UEFI boot, long mode)
├─ Language: Rust (no_std, no_alloc)
├─ Total: ~20,450 lines of kernel code
├─ Monolithic kernel — all drivers + services in single ELF + PE32+ binary
├─ Display: VirtIO-GPU 1920x1080 + Intel iGPU fallback
├─ Scheduler: Cooperative FPPS + EDF hybrid
├─ IPC: Semaphores, mutexes, message queues, event flags
├─ Storage: AHCI SATA (Q35) + NVMe + FAT32
├─ Networking: Intel E1000e, ARP/IPv4/ICMP/UDP/DNS
└─ Target: QEMU q35 (TCG/KVM) + Dell N5110 real hardware

Source Tree

├─ arch/ 8,470 lines (41%) — GDT, IDT, APIC, PCIe, ACPI, HPET, AHCI, VirtIO, NVMe, xHCI, I2C, USB
├─ gui/ 1,802 lines ( 9%) — Window manager, 2D renderer, terminal, app launcher
├─ sched/ 1,293 lines ( 6%) — FPPS + EDF scheduler, syscalls, IPC, timers, ARINC 653 partitions
├─ net/ 1,032 lines ( 5%) — E1000e NIC, ARP, IPv4, ICMP, UDP, DNS
├─ fs/ 875 lines ( 4%) — FAT32, block device, vnode abstraction
├─ memory/ 791 lines ( 4%) — Frame bitmap allocator, 4-level paging, buddy heap
├─ hal/ 148 lines ( 1%) — Serial, timer, GPIO, framebuffer HAL
├─ main.rs 1,294 lines ( 6%) — Entry point, boot init, task_wm
├─ asm files 991 lines ( 5%) — UEFI stub, interrupt wrappers, boot assembly
└─ other 156 lines ( 1%) — ELF loader, macros

Boot Flow

1GDT init + TSS (long mode segments)
2IDT init (48 interrupt handlers — exceptions, IRQs, syscall)
3Serial init (COM1, 115200 baud, debug output)
4ACPI init (RSDP, MCFG, HPET, MADT)
5PCI enumeration via ECAM
6HPET init + APIC timer calibration (50 microsecond period)
7Memory init — frame allocator bitmap + 4-level page tables
8AHCI SATA init (probe drives, DMA command lists)
9VirtIO-GPU init (1920x1080, double-buffered flips)
10Intel iGPU probe (fallback display if no VirtIO)
11FAT32 test on AHCI port 1 + splash screen
12Scheduler init (idle task) + timer init
13Task creation: task_wm (priority 2) + task_fault (priority 1)
14sti; loop { hlt } — WM auto-starts

Memory Map (256 MB QEMU)

0x00000000 — 0x000FFFFFReal mode IVT, BDA, EBDA (reserved)
0x00100000 — kernel_endKernel code + data (.text, .rodata, .data, .bss)
kernel_end — bitmap_endFrame allocator bitmap (1 bit per 4K frame)
0x01000000 — 0x0FFFFFFFFree frames (available for allocation, 65536 frames)
0x10000000+MMIO — PCI bars, APIC, HPET
0x80000000+QEMU virtio/ahci MMIO regions
0xE0000000PCI ECAM (MMCONFIG configuration space)

GUI / Window Manager

├─ Sway/Cinnamon-inspired: master-stack tiling + floating windows
├─ Bottom panel with menu button + window list
├─ Fuzzel-style launcher: Super+Space → fuzzy-search → launch
├─ Built-in terminal: 80x50 cells, scrollback, dirty-cell tracking
├─ Double buffering: two VirtIO-GPU resources, atomic SET_SCANOUT flip
├─ Dirty rect tracking: cell-level → pixel-level → GPU region flush
├─ Wallpaper: loaded from FAT32 at boot (1920x1080 BGRA raw)
├─ Cursor: 16x16, Arrow or I-Beam shape
└─ Rendering pipeline: wallpaper → windows → launcher → panel → cursor → flip

Network Stack

NIC DriverIntel E1000e — DMA rings (TX: 4, RX: 64), interrupt-driven RX, link detection
ARPIPv4 → MAC resolution, 4-entry cache
IPv4Stack address 10.0.2.15, gateway 10.0.2.2
ICMPEcho request/reply (ping)
UDPDNS queries to 10.0.2.3 (QEMU user-mode gateway)
DNSHostname resolution via UDP port 53

Scheduler & IPC

├─ Model: Cooperative round-robin with priority levels
├─ FPPS: Fixed-priority preemptive scheduling for periodic tasks
├─ EDF: Earliest-deadline-first for real-time tasks
├─ Priorities: 0 (idle) — 255 (highest), 8 task slots
├─ States: Idle, Ready, Running, Blocked
├─ Per-task kernel stacks: 4 KB each (BSS array)
├─ Syscalls: SYS_GETC (keyboard read), SYS_YIELD (int 48)
├─ IPC: Semaphores, mutexes, message queues, event flags
└─ Software timers: 64 slots, periodic watchdog

ARINC 653 Partition Model

Spatial and temporal partitioning per the ARINC 653 specification — the same separation model used in Boeing 787 and Airbus A350 avionics. Each partition runs in its own PML4 page table. Cross-partition memory access triggers a page fault detected by the health monitor.

IDNameCPU BudgetMemoryRole
0System35ms1024 pagesWM, shell, idle
1NAV30ms256 pagesGPS simulation, navigation
2GUID30ms256 pagesAttitude control, guidance
3TELM25ms256 pagesIMU simulation, telemetry
4HMON15ms64 pagesHealth monitor, FDIR
5PAYL25ms256 pagesPower system, payload
Major cycle: 25ms fixed cyclic schedule with exclusive time windows per partition.

FDIR — Fault Detection, Isolation & Recovery

├─ Every task registers a heartbeat with the health monitor
├─ 3 consecutive missed heartbeats (5s timeout) → declared Failed
├─ Fault injection: Super+F triggers memory corruption → page fault → HMON escalation
├─ Recovery: Super+R restores faulted task, resets priority + heartbeat
├─ Escalation levels: Warn → Cold → Critical (configurable per partition)
└─ Fault events logged to flight recorder with microsecond timestamps

Flight Recorder (Black Box)

├─ 4096-entry ring buffer — logs every significant system event
├─ Events: Boot, TaskCreate/Exit, ContextSwitch, Syscall, ISR, Partition, HealthMonitor, FaultInjection
├─ Dump via events shell command or SYS_DUMP_EVENTS syscall
└─ Format: T+ µs.timestamp | EVENT | task | description

CubeSat In-Space Simulator

├─ 4 kernel tasks running inside ARINC 653 partitions:
│ ├─ task_gps_sim (NAV) — LEO 420km, 51.6° inclination, triangle-wave propagation
│ ├─ task_imu_sim (TELM) — accelerometer data (gravity + vibration)
│ ├─ task_att_ctrl (GUID) — reaction wheel control, attitude quaternion, thermal state
│ └─ task_power (PAYL) — solar panel charging, battery drain, critical alerts
├─ Inter-partition communication via ARINC 653 sampling ports (no shared memory)
├─ Telemetry dashboard (Super+D): GPS, IMU, attitude, battery, RPM, sun/eclipse state
└─ WCET metrics: worst-case/average/last execution time per task

Driver Status

Local APIC PCIe ECAM HPET ACPI (RSDP/MCFG/MADT) AHCI SATA NVMe VirtIO-GPU (1920x1080) Intel iGPU (Gen12) E1000e NIC PS/2 Keyboard + Mouse I2C-HID Touchpad UART 16550 xHCI USB 3.0 FAT32

Fix Roadmap

Known issues and planned fixes across the kernel — actively tracked in the development log.

Phase 1Fix the LagFrame allocator next-fit hint, batch framebuffer flushes, context switch speedup, HLT idle loop, dirty rect tracking
Phase 2Memory & Driver BugsAHCI DMA allocation, free_memory() math, ACPI page mapping, PCI address fix, page table hardening, PCI dedup, sector 0 guard
Phase 3Core InfrastructureBottle VM launch + EPT, partition CR3 switch, VirtIO timeouts
Phase 4Network & FilesystemNetwork poll mode, FAT cluster O(1) alloc, file manager refactor
Phase 5CleanupDead code removal, redundant sti cleanup, transmute fix, bitmap volatile
Status: 24 tasks tracked · All phases planned · Active development

Project Timeline

← Back to Projects
FeatherCFD
GPU-Native CFD Framework
Python + ModernGL Vulkan Compute 192³ Grid

GPU-native CFD framework for aerospace simulation and real-time volumetric flow visualization. Features incompressible/compressible solvers, multigrid pressure projection, WENO-5 advection, CAD import, NACA airfoils, and aerodynamic validation — all running entirely on consumer GPU hardware.

Key Features

Fluid Solvers
Incompressible Navier-Stokes
Compressible Euler
SSP-RK3 / RK4 time integration
Adaptive CFL timestepping
Numerical Methods
GPU multigrid pressure projection
Red-Black Gauss-Seidel smoothing
FFT / DST pressure solver paths
WENO-5 advection + BFECC dye transport
Aerodynamics
NACA airfoil generation
Adjustable angle of attack
Lift / drag force integration
Reynolds-number-based simulation control
Geometry Support
Sphere / cylinder / box obstacles
CAD mesh import (.stl, .obj)
GPU voxelization pipeline
Signed Distance Field obstacle generation

Real-Time Visualization

├─ Volumetric raymarching — real-time flow field rendering
├─ Velocity field, dye/smoke, vorticity, and Mach number visualization
├─ Schlieren-style density visualization for compressible flows
└─ All visualization runs on GPU at interactive framerates

Flow Visualization

Solver Pipeline

Forces / BCs Advection
WENO-5
Divergence Pressure Solve
MG / FFT / DST
Projection Density
Advection

Validation Suite — 16/16 Passing

1Sod Shock Tubeρ error 8.9%, u error 2.3%, p error 12.8% — all below 15% threshold
2Compressible Cylinder (M 0.5-3.0)All 4 Mach numbers stable, bow shocks form, M_max correct
3Compressible Sphere (M 0.5-3.0)All 4 Mach numbers stable, M_max verified
4Compressible Wedge 15° (M 1.5-3.0)3 Mach sweep, oblique shocks match θ-β-M theory
5Cylinder Vortex Shedding (Re=100)St=0.1682, reference 0.165 — error 1.9%
6NACA 0012 Cl/Cd Sweep (Re=4000, 0-10°)Multigrid V-cycle pressure solve, Cl/Cd within expected range
7NACA 0012 Long-Duration (500 steps)No blowup, forces remain finite throughout
8Divergence Stabilitymax div = 0.0036, no-slip walls exact
9Pressure Solve ComparisonRBGS vs V-cycle — both converge to comparable Cl
10Smagorinsky SGS ModelEddy viscosity active, solution stable
11GPU Obstacle MaskGPU mask cell count matches expectation
12FFT PreconditionerPressure solve converges, no divergence spikes
13DST Poisson with ObstaclePressure field smooth, boundary conditions met
14Advection Clamp ModesAll 4 modes produce finite lift
15Vulkan Full PipelineNACA 0012 at AoA 5°, forces finite, divergence bounded
16Orchestrator (Sod + obstacles + NACA)All cases pass, report generated with per-case status
References: Sod (1978), Toro (1999), Anderson (2001), NACA Report 1135, Sheldahl & Klimas (1981), Smagorinsky (1963)

Technical Specifications

MethodFinite-Volume (Incompressible NS + Compressible Euler)
Grid192 x 192 x 192 (~7 million cells)
Pressure SolveGauss-Seidel / Multigrid V-Cycle / FFT / DST
AdvectionWENO-5, BFECC dye transport
Time IntegrationSSP-RK3, RK4, adaptive CFL
BackendOpenGL 4.6 fragment shaders + Vulkan compute
Obstacle HandlingSDF embedded boundary, GPU voxelization
VisualizationVolumetric raymarching, velocity/vorticity/Mach/schlieren
← Back to Projects
FeatherOrbital
Orbital Mechanics Toolkit
Published Soon Keplerian Hohmann LVLH / ECI

Orbit Visualization

Hover an orbit path to highlight. The schematic shows LEO, GTO, and TLI transfer trajectories in an engineering wireframe style — no textures, no photorealism.

Transfer Calculator

Altitude km
Inclination °
ΔV (Hohmann)3.14 km/s
Period93.4 min
Velocity7.66 km/s
← Back to Projects
FeatherArch
Power-Optimized Linux Distribution
Arch Linux MSI GF63 Intel H-series 34 Wh battery

Current Results

Idle Power Draw7-9 W
Light Browsing10-12 W
Battery Life (Idle)~4h 50m
Battery Life (Work)~3h 30m
Battery Capacity51 Wh → 34 Wh (degraded)

Tuning Applied

├─ CPU frequency capped to 800 MHz during battery operation
├─ CPU minimum frequency reduced to 400 MHz
├─ Turbo boost disabled on battery
├─ Display refresh rate reduced to 40 Hz
├─ Runtime power management enabled
├─ NVIDIA power usage reduced aggressively
├─ Background activity minimized
└─ Scheduler and system tuning for low idle overhead

Goals

FeatherArch is an attempt at building a Linux system that feels lightweight, calm, and efficient without sacrificing usability. The goal is to make a system that stays out of your way, wastes as little power as possible, feels smooth and responsive, remains highly customizable, and still gives you full control over the machine.

├─ Power optimization and low idle usage
├─ Scheduler and system tuning
├─ Lightweight desktop behavior
├─ Minimal background activity
├─ Clean, distraction-free user experience
└─ Efficiency-per-watt over synthetic benchmark numbers

Philosophy

Modern systems do far more work than they need to. Instead of maximizing resource usage all the time, FeatherArch minimizes unnecessary wakeups, reduces idle power draw, stays responsive without constant turbo boosting, keeps background activity low, and prioritizes efficiency over synthetic benchmark numbers. Built mainly because systems engineering is fun.

Research

Computational Fluid Dynamics
├─ GPU-accelerated finite-volume methods for aerospace CFD
├─ WENO-5 advection schemes on consumer GPU hardware (192³ grid, ~7M cells)
├─ Multigrid pressure projection on Vulkan compute pipelines — V-cycle, FFT, DST solvers
├─ GPU voxelization for immersed boundary methods — SDF obstacle carving
├─ Comparative analysis: OpenGL fragment shaders vs Vulkan compute for N-S solvers
├─ Sod shock tube validation: ρ error 8.9%, u error 2.3%, p error 12.8% (all < 15%)
├─ Cylinder vortex shedding at Re=100: St=0.1682 vs reference 0.165 (1.9% error)
├─ NACA 0012 Cl/Cd sweep: multigrid V-cycle pressure solve across 0-10° AoA
├─ Compressible flow benchmarks: bow shocks, oblique shocks, Mach sweeps (M 0.5-3.0)
├─ Smagorinsky SGS turbulence model integration with eddy viscosity
├─ BFECC dye transport for density advection with numerical diffusion control
└─ Volumetric raymarching for real-time flow field visualization
Operating Systems & Flight Software
├─ ARINC 653 spatial/temporal partitioning in hobby OS kernels — PML4 page table isolation
├─ Fixed-priority preemptive scheduling with EDF hybrid model — 8 task slots, 256 priority levels
├─ FDIR (Fault Detection, Isolation & Recovery) on bare-metal x86_64 — heartbeat monitoring
├─ 3-level fault escalation: Warn → Cold → Critical, configurable per partition
├─ CubeSat in-space simulator: GPS, IMU, attitude control, power telemetry as ARINC 653 tasks
├─ Flight recorder (black-box): 4096-entry ring buffer with microsecond event logging
├─ UEFI boot flow optimization — 14-step init sequence from firmware to scheduler launch
├─ PCIe ECAM enumeration, MSI-X interrupt configuration, BAR allocation
├─ VirtIO-GPU double-buffered compositor at 1920×1080 with dirty-rect tracking
├─ Intel E1000e NIC driver with DMA rings — ARP, IPv4, ICMP, UDP, DNS stacks
├─ SMP bring-up: SIPI trampoline, per-CPU run queues, lock-free MPSC channels
└─ Software timers: 64-slot periodic watchdog with microsecond precision
Orbital Mechanics & Astrodynamics
├─ Keplerian orbit propagation using universal variable formulation
├─ Hohmann transfer ΔV optimization for LEO-GEO-TLI mission planning
├─ LVLH ↔ ECI coordinate transforms for relative motion analysis
├─ CubeSat mission design: 420 km LEO, 51.6° inclination, sun-synchronous targeting
├─ Ground track analysis and repeating orbit calculations
├─ Lambert solver for interplanetary transfer trajectory design
├─ Porkchop plot generation for launch window optimization
└─ Mantis: lightweight astrodynamics library (Rust) — in development
Rocket Propulsion
├─ Rocketisium book series: 3-volume technical reference on propulsion history and chemistry
├─ Hypergolic propellant chemistry — NTO/MMH ignition mechanisms and handling
├─ F-1 engine gas generator cycle analysis: thrust chamber, turbopump, nozzle design
├─ Specific impulse calculation: Isp = F/(ṁ·g0) for various propellant combinations
├─ Thrust-to-weight ratio optimization for small satellite propulsion systems
├─ Rocket equation (Tsiolkovsky): ΔV = Isp · g0 · ln(m0/mf) mission planning
└─ Combustion chamber pressure vs. expansion ratio trade studies
Systems & Power Engineering
├─ Linux power optimization for degraded battery systems (51 Wh → 34 Wh)
├─ CPU frequency capping (800 MHz battery, 400 MHz min) and scheduler tuning
├─ Display refresh rate reduction to 40 Hz for power-constrained operation
├─ Runtime power management for hybrid NVIDIA/Intel GPU architectures
├─ Idle power reduction from 15W to 7-9W through systematic tuning
├─ Real-time power monitoring: tracking per-component draw, wakeup sources, C-state residency
├─ Scheduler optimization: minimizing unnecessary wakeups and timer interference
└─ Benchmark methodology: measuring real-world battery life vs. synthetic power numbers
Publications & Technical Notes
├─ Rocketisium: The History of Rockets (2021, ISBN 9781685862831)
├─ Rocketisium 2.0: How Does Rocket Engine Work? (Dec 2021, 90pp, ISBN 9798885469616)
├─ Rocketisium 3.0: The World of Hypergolic Propellants (Jun 2023, 70pp, ISBN 9798890663603)
├─ FeatherRTOS Architecture Document — kernel design, ARINC 653 model, FDIR
├─ FeatherCFD Validation Report — 16 test cases, all passing
├─ FeatherArch Power Analysis — tuning methodology and measured results
├─ GPU-Accelerated CFD: A Comparative Study of OpenGL vs Vulkan for N-S Solvers
├─ ARINC 653 Partitioning on x86_64: A Hobby OS Implementation
└─ CubeSat Mission Simulation Using Partitioned Real-Time Systems

Log Entries

LOG ENTRY 015
Multigrid Pressure Projection on Vulkan Compute
Implementing a geometric multigrid V-cycle for the pressure Poisson equation entirely in Vulkan compute shaders. Performance comparison against Red-Black Gauss-Seidel and FFT preconditioners.
The pressure projection step is the bottleneck in any incompressible Navier-Stokes solver. On a 192³ grid (~7M cells), a naive Gauss-Seidel solve takes hundreds of iterations to converge. I implemented three paths: (1) Red-Black Gauss-Seidel with successive over-relaxation, (2) FFT-based direct solve via shader-based DST, and (3) a geometric multigrid V-cycle with restriction/prolongation operators in compute shaders. The multigrid approach converges in 8-12 V-cycles regardless of grid size — a 15-20x speedup over GS for the same residual tolerance. The restriction operator uses full-weighting injection; prolongation is trilinear interpolation. Boundary conditions are enforced at each level via GPU push constants. The V-cycle dispatches 6 compute passes per cycle: residual compute, restrict, coarsest solve, prolongate, correct, and smooth post-correction.
Read more →
LOG ENTRY 014
NACA 0012 Validation: Cl/Cd Across the Polar
Running the FeatherCFD solver through a full angle-of-attack sweep (0-10°) for the NACA 0012 airfoil at Re=4000. Comparing lift/drag coefficients against established reference data.
The NACA 0012 is the canonical validation case for CFD codes. I set up a 2D simulation in FeatherCFD's incompressible solver at Re=4000, running angles of attack from 0° to 10° in 2° increments. Each run used the multigrid V-cycle pressure solver with WENO-5 advection. The grid was 192x192 cells with a C-mesh topology around the airfoil embedded via the SDF obstacle mask. Cl values tracked the reference polar within 6% across the range — Cl(0°) = 0.0, Cl(10°) ~ 0.95. Drag polars matched slightly less tightly (higher Cd at low AoA, likely from insufficient near-wall resolution), but the overall trend was correct. The 16-test validation suite now passes all cases with the multigrid solver as default.
Read more →
LOG ENTRY 013
ARINC 653 Partition Scheduling on x86_64
Implementing spatial and temporal partitioning per ARINC 653 in FeatherRTOS. Six partitions, fixed cyclic schedule, PML4 page table isolation, and the health monitor integration.
ARINC 653 defines a partitioned architecture where each software partition runs in its own memory space with a guaranteed CPU budget. In FeatherRTOS, each partition gets a dedicated PML4 page table with no cross-mappings. The scheduler runs a fixed cyclic schedule: 25ms major frame, with exclusive time windows for System (35ms), NAV (30ms), GUID (30ms), TELM (25ms), HMON (15ms), and PAYL (25ms) across a 160ms minor cycle. Partition context switches flush the TLB and load a new CR3 value. The health monitor (HMON) detects partition violations — any cross-partition memory access triggers a page fault that HMON catches, logs to the flight recorder, and escalates through the FDIR chain. The CubeSat simulator runs as four tasks distributed across the NAV, GUID, TELM, and PAYL partitions.
Read more →
LOG ENTRY 012
FeatherArch: 7-9W Idle — The Full Tuning Log
Systematic power tuning on an MSI GF63 with a degraded battery. CPU capping, scheduler tuning, display refresh, and GPU management. Measured results from 15W to 7W idle.
The MSI GF63 came with an Intel H-series CPU and a 51 Wh battery, now degraded to 34 Wh. Stock Linux idle was 15W — unacceptable for portable use. The tuning process: (1) CPU frequency capped at 800 MHz on battery with minimum 400 MHz, (2) turbo boost disabled entirely on battery via intel_pstate, (3) display refresh rate dropped from 60 Hz to 40 Hz via xrandr — saves 1.2W alone, (4) NVIDIA GPU placed in lowest power state via runtime PM, (5) background services minimized (no updatedb, no tracker-miner, no avahi). After tuning: 7-9W idle, 10-12W light browsing. Battery life went from ~2h to ~4h50m idle, ~3h30m work. Real-world improvement: 2.4x.
Read more →
LOG ENTRY 011
Flight Recorder: The Kernel Black Box
Design and implementation of a 4096-entry ring buffer event logger in FeatherRTOS. Microsecond timestamps, typed events, and the dump interface.
Every aerospace system needs a black box. FeatherRTOS now has a 4096-entry ring buffer that logs every significant system event: boot sequence, task creation and exit, context switches, syscalls, ISR entries, partition switches, health monitor events, fault injections, and timer callbacks. Each entry carries a microsecond timestamp (from the HPET or APIC timer) and a typed event structure. The buffer is implemented as a lock-free MPSC ring: the writer is always the current CPU (interrupt context), and the reader is the shell task. The `events` shell command dumps the buffer in chronological order with the format: T+1234567.890 | TASK_CREATE | task 3 (nav_gps). During fault injection testing, the flight recorder captured the exact sequence of events leading to the HMON escalation — invaluable for debugging.
Read more →
LOG ENTRY 010
Volumetric Raymarching for Real-Time CFD
Rendering 3D flow fields in real-time using GPU-based volumetric raymarching. Velocity magnitude, vorticity, and schlieren-style density visualization.
FeatherCFD's visualization pipeline uses volumetric raymarching implemented in OpenGL compute shaders. The 192³ density/velocity field is stored as a 3D texture on the GPU. For each frame, a fragment shader marches rays through the volume, sampling the 3D texture at adaptive step sizes (controlled by the local gradient magnitude to avoid undersampling sharp features). Transfer functions map density to color and opacity — blue for low density, white for high, with the option to switch to velocity magnitude or vorticity magnitude. A schlieren-style mode renders |∇ρ| to capture shock waves. The entire visualization runs at interactive framerates (20-30 fps on the RTX 3050) without copying data back to the CPU.
Read more →
LOG ENTRY 009
CubeSat Simulator: Four Tasks in ARINC 653 Partitions
A complete CubeSat in-space simulator running inside FeatherRTOS. GPS, IMU, attitude control, and power telemetry as partitioned real-time tasks with inter-partition communication.
The CubeSat simulator runs four kernel tasks inside ARINC 653 partitions, modeling a 1U CubeSat in a 420 km LEO at 51.6° inclination. task_gps_sim (NAV partition) generates GPS-like position/velocity data using a triangle-wave propagation model. task_imu_sim (TELM) simulates accelerometer readings — gravity vector plus vibration noise. task_att_ctrl (GUID) implements a reaction wheel control law, maintaining a target attitude quaternion with thermal state monitoring. task_power (PAYL) simulates solar panel charging during sunlit periods and battery drain during eclipse. Partitions communicate exclusively through ARINC 653 sampling ports — no shared memory between partitions. Super+D toggles the telemetry dashboard showing GPS coordinates, IMU readings, attitude, battery SOC, RPM, and sun/eclipse state.
Read more →
LOG ENTRY 008
Hohmann Transfer ΔV Calculator
Building the orbital transfer calculator for FeatherOrbital. Hohmann, bi-elliptic, and plane-change maneuvers. Real-time ΔV display with interactive orbit visualization.
The Hohmann transfer is the most fuel-efficient two-impulse transfer between circular orbits. The math: ΔV₁ = √(μ/r₁)(√(2r₂/(r₁+r₂))-1) for the first burn, ΔV₂ = √(μ/r₂)(1-√(2r₁/(r₁+r₂))) for the second. Total ΔV = ΔV₁ + ΔV₂. For a LEO (420 km, 7.66 km/s) to GEO (35,786 km) transfer: ΔV₁ = 2.45 km/s, ΔV₂ = 1.46 km/s, total 3.91 km/s. The FeatherOrbital calculator extends this to support plane-change maneuvers (ΔV = 2v sin(Δi/2)) and bi-elliptic transfers for high-ratio orbits. The orbit canvas renders the transfer trajectory in real-time as the user adjusts altitude and inclination sliders.
Read more →
LOG ENTRY 007
FDIR: Fault Detection, Isolation, and Recovery
Designing a three-level fault escalation system for FeatherRTOS. Heartbeat monitoring, fault injection testing, and automatic task recovery.
The FDIR system in FeatherRTOS mirrors the fault management architecture used in satellite flight software. Every real-time task registers a heartbeat with the health monitor — a periodic timer interrupt that checks whether each task has yielded or called a heartbeat syscall within a configurable deadline (default 5s, 3 consecutive misses). On violation, the system escalates through three levels: WARN (log the fault, continue), COLD (reset the offending partition, preserving other partitions), CRITICAL (full system reset). A fault injection mechanism (Super+F) corrupts a random kernel memory location to trigger a page fault, which HMON catches and escalates. Super+R triggers recovery, which restores the faulted task state and resets its priority and heartbeat counter.
Read more →
LOG ENTRY 006
WENO-5 Advection on Consumer GPUs
Implementing Weighted Essentially Non-Oscillatory fifth-order advection in OpenGL fragment shaders. Shock capturing, BFECC dye transport, and GPU texture memory optimization.
WENO-5 is a high-order shock-capturing scheme that uses a weighted combination of three candidate stencils to reconstruct interface values while avoiding Gibbs oscillations at discontinuities. In FeatherCFD, WENO-5 is implemented as a GLSL fragment shader that reads from a 2D RGBA32F texture (the velocity/density field) and writes the advected result to a ping-pong buffer. The shader computes five numerical fluxes per cell (left and right biased for each dimension) using the Lax-Friedrichs flux splitting. GPU texture memory is arranged for coalesced access: the 192³ grid is stored as 192 slices of 192x192, accessed via texture3D. BFECC (Back and Forth Error Compensation and Correction) is layered on top for dye transport — advect forward, advect backward, compute error, correct — adding ~30% compute overhead but dramatically reducing numerical diffusion.
Read more →
LOG ENTRY 005
VirtIO-GPU Double-Buffered Compositor
Building the FeatherRTOS GUI compositor on top of VirtIO-GPU. Double buffering, dirty rect tracking, and the rendering pipeline from cell-level to GPU flip.
The FeatherRTOS window manager uses VirtIO-GPU for display output at 1920x1080. The compositor maintains two GPU resources — front buffer (scanout) and back buffer (render target). The rendering pipeline: the terminal emulator writes characters to a cell grid, the renderer converts dirty cells to pixel-level dirty rects, the 2D GPU renderer blends wallpaper layers, window content, and the cursor into the back buffer, then a SET_SCANOUT flip atomically swaps the buffers. Dirty rect tracking is critical for performance — instead of redrawing the entire 1920x1080 framebuffer (8.3 MB per frame), the compositor tracks which cells changed and only flushes those regions. For a typical terminal update (a few lines of text), the dirty rect covers <1% of the screen, reducing GPU bandwidth from 250 MB/s to ~2 MB/s per frame.
Read more →
LOG ENTRY 004
Sod Shock Tube: First Validation Test
Running the Sod shock tube benchmark on FeatherCFD. Density error 8.9%, velocity error 2.3%, pressure error 12.8% — all under the 15% acceptance threshold.
The Sod shock tube is the classic 1D Riemann problem for validating compressible flow solvers. The setup: a 1D domain with a diaphragm at x=0.5 separating high-pressure (left, ρ=1.0, p=1.0) and low-pressure (right, ρ=0.125, p=0.1) regions. At t=0, the diaphragm bursts, generating a right-moving shock, a contact discontinuity, and a left-moving expansion fan. FeatherCFD's compressible Euler solver reproduces all three wave features. Quantitative comparison against the exact solution (computed via the Godunov method): L1 errors of 8.9% (density), 2.3% (velocity), and 12.8% (pressure). The pressure error is highest due to smearing at the contact discontinuity. All errors are below the 15% threshold, and the shock speed matches the Rankine-Hugoniot condition within 2%.
Read more →
LOG ENTRY 003
Implementing x86 SMP Support
APIC initialization, IPI delivery, and bringing up application processors on bare metal. Cache coherency challenges and lock-free MPSC queues.
The Local APIC is memory-mapped at 0xFEE00000 and configured via the APIC-base MSR (0x1B). Each CPU core has its own LAPIC with a unique ID read from the APIC ID register (0x20). The boot processor (BSP) starts first and must send a Startup IPI (SIPI) to wake each Application Processor (AP). The SIPI vector points to a 4K trampoline page in low memory (below 1 MB) that the AP executes to enter long mode, set up its own GDT/IDT, and signal readiness via a spinlock. Once all APs are running, the BSP distributes work through a per-CPU run queue with cache-coherent MPSC channels. Lock-free atomics (xchg, cmpxchg) manage the queue heads to avoid spinlock contention under high inter-CPU traffic.
Read more →
LOG ENTRY 002
PCIe Enumeration on Bare Metal
ECAM-based configuration space access, device scanning, BAR allocation, and MSI-X interrupt setup on QEMU q35.
PCI Express uses Enhanced Configuration Access Mechanism (ECAM), mapping the full 256 MB configuration space to a memory region specified by the MCFG ACPI table. On QEMU q35, this is at 0xB0000000. Each device function gets 4 KB of space: 256 bytes of standard config header plus 256 bytes of PCIe extended caps. The enumeration walks bus 0, discovers the host bridge (00:00.0), then recursively probes secondary buses behind PCI-to-PCI bridges. For each device, the driver reads vendor/device ID, assigns Base Address Registers (BARs) by writing all-ones and reading back the size, then allocates MMIO or IO space from the available pool. MSI-X capability is parsed from the capabilities list; the driver programs the table BAR and PBA BAR, then configures each interrupt vector with a unique message address/data pair.
Read more →
LOG ENTRY 001
Setting Up the x86_64 Cross-Compiler
Building a Rust no_std target, crafting the UEFI PE32+ wrapper, and the first "Hello" from ring zero via serial.
The toolchain starts with Rust nightly and a custom target.json: no_std, no alloc, relocation-model=static, code-model=kernel. The build pipeline compiles to ELF, objcopys to binary, wraps as a COFF object, then links into a PE32+ executable via a NASM stub. The UEFI stub (uefi_stub.asm) parses the embedded kernel binary, sets up long-mode page tables identity-mapping 0-16 MB, loads a 64-bit GDT, and calls rust_main(). The first sign of life is a '!' character written to COM1 at 115200 baud via the UART 16550 driver. On the QEMU monitor, 'serial0' shows the character immediately. From there, the GDT, IDT, and ACPI tables are parsed — and the kernel has a foundation to build on.
Read more →

> YouTube Channel

Loading latest video...

Profile

Name
Aaditya Nair
Mission
Building aerospace software, simulation systems, and experimental engineering tools.
Age
Current Status
B.Tech Aerospace Engineering (starting soon)
Focus Areas
  • Flight Software (FeatherRTOS, ARINC 653, FDIR)
  • CFD (GPU Compute, WENO-5, Multigrid)
  • Orbital Mechanics (CubeSat, Hohmann, LEO/GTO)
  • Systems Programming (Rust, OS Dev, Linux Tuning)
  • Power Optimization (CPU freq, scheduler, battery)
Current Work
  • FeatherRTOS Graphics Stack — GPU-accelerated window compositor
  • FeatherCFD Validation Suite — Expanding to turbulent flow benchmarks
  • Orbital Mission Planner — Lambert solver & porkchop plot generator
  • Rocketisium 4.0 — Next volume in the series
Publications
  • Rocketisium: The History of Rockets (2021) — ISBN 9781685862831
    Early rocket development, the Space Race, major launch vehicles, and the Saturn V era. A beginner-friendly entry point for space enthusiasts tracing rocketry from its origins through Apollo.
  • Rocketisium 2.0: How Does Rocket Engine Work? (Dec 2021, 90pp) — ISBN 9798885469616
    Rocket propulsion fundamentals: how engines work, thrust generation, and the F-1 engine. The transition from history into engineering — covering the basic physics behind every launch vehicle.
  • Rocketisium 3.0: The World of Hypergolic Propellants (Jun 2023, 70pp) — ISBN 9798890663603
    Hypergolic propellant chemistry, ignition mechanisms, and spacecraft propulsion systems. Written during Class 10 — an early technical deep-dive into satellite and mission-critical propulsion.
Contact
  • GitHub: /Aaditya-Nair-Aero
  • GPG: [key fingerprint]
"This site looks like engineering documentation. That's intentional."
404
NOT FOUND
The requested trajectory could not be plotted.
← RETURN TO BASE
aaditya@aerospace ~
> FeatherRTOS terminal ready. Type help for commands.
>