ArxOS is a small 32-bit x86 operating system kernel built from scratch in C and assembly. It boots in protected mode using a Multiboot-compatible entry point, initializes the GDT and IDT, sets up a basic VGA console, and provides an interactive shell for simple commands.
Status: early-stage kernel. It is intended for experimentation and learning, not as a production OS.
- 32-bit x86 protected mode kernel
- Multiboot-compatible boot flow via GRUB
- GDT and IDT setup
- IRQ0 timer handling and IRQ1 keyboard handling
- VGA text-mode console output
- Simple PS/2 keyboard input loop
- Minimal built-in shell with command execution
- Heap initialization and debug dump support
.
├── boot.asm Boot entry and Multiboot header
├── linker.ld Linker script for the kernel layout
├── makefile Build and run commands
├── README.md Project overview and usage notes
├── include/ Public headers
│ ├── gdt.h
│ ├── heap.h
│ ├── hw_io.h
│ ├── idt.h
│ ├── keyboard.h
│ ├── printf.h
│ ├── shell.h
│ └── vga.h
├── lib/
│ └── printf.c Minimal printf implementation
├── src/
│ ├── gdt.c Global descriptor table setup
│ ├── heap.c Basic heap initialization and dump utility
│ ├── hw_io.c I/O port helpers for x86 access
│ ├── idt.c Interrupt descriptor table setup
│ ├── interrupts.asm Interrupt entry stubs
│ ├── kernel.c Kernel entry point and main startup flow
│ ├── keyboard.c Keyboard interrupt/input handling
│ ├── shell.c Command parser and shell loop
│ ├── vga.c VGA text-mode driver
│ └── loader.c Additional loader-related code
├── iso/
│ └── boot/
│ └── grub/
│ └── grub.cfg GRUB config for the ISO boot image
└── LICENSE GPL license information
- gcc with 32-bit support
- GNU assembler (
as) - GNU linker with ELF32 support
- NASM for assembly interrupt stubs
- GRUB utilities (
grub-mkrescue) for creating an ISO image - QEMU for testing (
qemu-system-i386orqemu-system-x86_64)
makeThis produces the kernel binary Arx.bin.
make isomake runmake run-isomake cleanWhen the kernel boots, it prints startup messages and starts the shell. The login prompt expects the password:
arc
Once unlocked, the shell prompt appears as:
Arc:kernel>
help Show available commands
clear Clear the display
about Display kernel details
ping Echo "pong"
heap-dump Dump heap state if available
The shell is intentionally minimal and is used to demonstrate interrupt-driven keyboard input, command parsing, and kernel output.
boot.asmsets up the Multiboot header and transfers control to the kernel.kernel_main()initializes the display, GDT, IDT, heap, and shell.- Keyboard interrupts are processed through the PS/2 path.
- The shell awaits user input and dispatches commands.
- The timer interrupt increments
timer_ticksand is used as a basic timing hook.
- BIOS/legacy boot flow only; no UEFI support
- No paging or virtual memory management
- No filesystem implementation
- No multiprocessing or scheduler
- Minimal command set and kernel utilities
- Educational code with no full OS runtime guarantees
This project is useful for learning:
- Multiboot kernel entry and boot process
- x86 protected mode fundamentals
- Global descriptor tables and interrupt descriptor tables
- PIC remapping and IRQ handling
- VGA text-mode output
- Assembly-to-C integration
- Basic keyboard input and shell design
This project is licensed under the GNU GPL v3.0. See the LICENSE file for details.
The repository includes some naming inconsistencies, such as the internal kernel label Arcxzs in the Makefile versus the project name ArxOS. The core OS is still early in development, but the current build flow and shell already work for a simple x86 hobby kernel demonstration.