ALOS is a minimalist operating system kernel written in C and x86 Assembly, designed for learning purposes and running on QEMU. It implements core OS concepts including memory management, interrupt handling, storage, filesystem support, and a TCP/IP networking stack.
Note: Code comments in this project are written in French. The codebase serves as both a learning resource and a functional kernel.
- GDT/IDT setup
- Physical Memory Manager
- Kernel Heap
- Virtual Memory (Paging) - Identity mapping
- RTC Real-Time Clock
- PIT Programmable Interval Timer
- Kernel Logging System (file-based, /system/logs)
- System logs
- ACPI Support (power management, shutdown/reboot)
- SMP/Multi-core support
- APIC/x2APIC (Advanced interrupt handling)
- Kernel modules loading (dynamic drivers)
- Virtual Memory (Paging) - Identity mapping
- Demand paging / Page fault handler
- Copy-on-Write (COW)
- Memory-mapped files (mmap)
- Shared memory (SHM)
- Swap support
- Multitasking (Round Robin scheduler)
- Context Switching (kernel threads)
- User Space (Ring 3) with TSS
- System Calls (POSIX/BSD-like interface)
- Priority-based scheduler
- Process groups and sessions
- Fork/exec implementation
- Signals (POSIX-like)
- Real-time scheduling (SCHED_FIFO, SCHED_RR)
- Pipes (anonymous and named/FIFO)
- Message queues
- Semaphores
- Shared memory segments
- Unix domain sockets
- PCI Enumeration
- ATA/IDE Driver (PIO)
- VFS Layer
- Ext2 Read Support
- Ext2 Write Support
- File/Directory Creation (vfs_create, vfs_mkdir)
- AHCI/SATA driver (DMA support)
- NVMe driver
- FAT32 support
- ISO9660 (CD-ROM filesystem)
- File locking mechanisms
- Inotify/fsnotify (file change notifications)
- RAID support (software)
- Ethernet/ARP
- IPv4/ICMP
- UDP/DHCP
- DNS Resolver (A, PTR, CNAME + cache)
- Ping with DNS support
- TCP Implementation (full state machine)
- Simple HTTP server based on storage
- IPv6 support
- Network bridging/routing
- Firewall/packet filtering (iptables-like)
- Raw sockets
- Unix domain sockets
- TLS/SSL
- SSH server/client
- FTP/SFTP
- NFS client
- VGA Console
- PS/2 Keyboard
- Azerty keyboard (with keymap abstraction)
- USB stack (XHCI/EHCI/UHCI)
- USB HID (keyboard/mouse)
- USB Mass Storage
- Audio driver (AC97/Intel HDA)
- Ethernet driver Intel I219-V
- WiFi support (with WPA2/WPA3)
- Graphics card drivers (Intel/AMD/NVIDIA)
- Serial port (COM1-4) advanced support
- Parallel port support
- Interactive Shell with history
- Persistent history (
/config/history) - GUI + Mouse
- Window manager/compositor
- OpenGL support
- Framebuffer console (VESA/GOP)
- UTF-8 string and console
- Font rendering (TrueType/FreeType)
- Desktop environment
- Widget toolkit
- Multi-monitor support
- ELF Loader (32-bit executables)
- ELF 64-bit support
- Dynamic linking (shared libraries .so)
- Standard C library (libc)
- POSIX thread library (pthread)
- Math library (libm)
- Compression libraries (zlib, gzip)
- Core utilities (ls, cp, mv, rm, cat, grep, etc.)
- Text editor (vi/nano-like)
- Package manager
- GCC/Compiler toolchain port
- Scripting files (
/config/startup.sh) - Network configuration files (
/config/network.conf) - Persistent history (
/config/history) - Init system (systemd/OpenRC-like)
- Service management
- Environment variables
- User authentication (/etc/passwd, /etc/shadow)
- Permissions and ACL
- Cron/scheduled tasks
- User/group management
- File permissions (chmod/chown)
- Access Control Lists (ACL)
- Sandboxing/containers
- Secure boot support
- ASLR (Address Space Layout Randomization)
- DEP/NX bit enforcement
- Encrypted filesystems
- SELinux/AppArmor-like MAC
- GDB stub (remote debugging)
- Kernel debugger (kdb)
- System call tracing (strace-like)
- Performance profiling tools
- Memory leak detection
- Code coverage tools
- Virtualization support (KVM guest)
- Containers/namespaces
- Control groups (cgroups)
- Hibernation support
- Laptop features (battery, backlight)
- Bluetooth stack
- TPM support
- Hot-plug devices support
- API documentation
- User manual
- Automated testing suite
- Continuous integration
- Benchmarking suite
src/
├── arch/x86/ # x86-specific code (boot, GDT, IDT, TSS, usermode)
├── config/ # Kernel configuration
├── kernel/ # Kernel core (main, console, keyboard, syscalls, elf)
├── mm/ # Memory Management (PMM, heap, VMM)
├── drivers/ # Hardware drivers
│ ├── ata.c/h # ATA/IDE disk driver
│ ├── pci.c/h # PCI bus driver
│ └── net/ # Network drivers (PCnet)
├── fs/ # Filesystems
│ ├── vfs.c/h # Virtual File System layer
│ └── ext2.c/h # Ext2 filesystem driver
├── net/ # Network stack
│ ├── core/ # Network infrastructure
│ ├── l2/ # Layer 2 (Ethernet, ARP)
│ ├── l3/ # Layer 3 (IPv4, ICMP, Routing)
│ └── l4/ # Layer 4 (UDP, TCP, DHCP, DNS)
├── shell/ # Command interpreter
│ ├── shell.c/h # Shell core (readline, history, parsing)
│ └── commands.c/h # Built-in commands (help, ping, exec, etc.)
├── userland/ # User space programs (server, hello, test)
└── include/ # Shared headers (Multiboot, linker script, ELF)
┌─────────────────────────────────────────────────────────┐
│ User Space (Ring 3) │
│ ELF Programs │ Userland libc │
├─────────────────────────────────────────────────────────┤
│ System Calls (int 0x80) │
├─────────────────────────────────────────────────────────┤
│ Kernel Space (Ring 0) │
├─────────────────────────────────────────────────────────┤
│ VFS API │ Network API │
│ (open, read, readdir) │ (send, recv, socket) │
├──────────────────────────┼──────────────────────────────┤
│ Ext2 │ (Future FS) │ TCP/UDP │ ICMP │ DHCP/DNS │
├──────────────────────────┼──────────────────────────────┤
│ ATA Driver │ IPv4 │ ARP │ Ethernet │
├──────────────────────────┼──────────────────────────────┤
│ IDE Controller │ PCnet Driver │
├──────────────────────────┴──────────────────────────────┤
│ PCI Bus │
├─────────────────────────────────────────────────────────┤
│ Hardware (x86) │
└─────────────────────────────────────────────────────────┘
- Cross-compiler:
i686-elf-gcc(in~/opt/cross/bin/) - Assembler:
nasm - Emulator:
qemu-system-i386 - Disk utilities:
e2fsprogs(for creating Ext2 disk images)
# Build the kernel
make
# Clean build artifacts
make clean
# Full rebuild
make clean && make# Create a 32MB Ext2 disk image
dd if=/dev/zero of=disk.img bs=1M count=32
mkfs.ext2 disk.img
# Add files to the disk (using debugfs on macOS)
echo "Hello from ALOS!" > /tmp/hello.txt
debugfs -w disk.img -R "write /tmp/hello.txt hello.txt"
# Verify contents
debugfs disk.img -R "ls"make # Compile le kernel
make iso # Crée l'ISO bootable (télécharge Limine si nécessaire)
make run # Lance QEMU avec l'ISO
make clean # Nettoie les fichiers compilés
make distclean # Nettoie tout, y compris Limine- Primary Master IDE disk:
disk.img(Ext2 formatted)
This project is intended for educational purposes.
Contributions are welcome!