Skip to content

Jango73/EXOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

142 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EXOS

TL;DR

Multi-threaded operating system for x86-32 and x86-64. Tested on QEMU, Bochs, ACER Predator.

What it is

This is an ongoing operating system project that was abandoned in late 1999. Back then, it was 32 bit only and compiled with gcc and nasm, and linked with jloc. Build was recently ported to i686-elf-gcc/nasm/i686-elf-ld, then ported to x86-64.

Debian compile & run

Setup dependencies

./scripts/1-1-setup-deps.sh

./scripts/1-2-setup-qemu.sh <- if you want a recent QEMU (9.0.2)

Build (Disk image with ext2)

./scripts/build --arch <x86-32|x86-64> --fs ext2 --release (or --debug)

( add --clean for a clean build )

Build (Disk image with FAT32)

./scripts/build --arch <x86-32|x86-64> --fs fat32 --release (or --debug)

( add --clean for a clean build )

Build for UEFI boot

./scripts/build --arch <x86-32|x86-64> --fs ext2 --release (or --debug) --uefi

( add --clean for a clean build )

Run

./scripts/run --arch <x86-32|x86-64>

( add --gdb to debug with gdb ) ( or ./scripts/(arch)/5-5-start-bochs.sh to use Bochs )

Dependencies

C language (no headers)

bcrypt

Used for password hashing. Sources in third/bcrypt (under Apache 2.0, see third/bcrypt/README and third/bcrypt/LICENSE). Compiled files in kernel: bcrypt.c, blowfish.c. bcrypt is copyright (c) 2002 Johnny Shelley jshelley@cahaus.com

utf8-hoehrmann

Used for UTF-8 decoding in layout parsing. Sources in third/utf8-hoehrmann (MIT license, see headers).

Fonts

Bm437_IBM_VGA_8x16.otb from the Ultimate Oldschool PC Font Pack by VileR, licensed under CC BY-SA 4.0. See third/fonts/oldschool_pc_font_pack/ATTRIBUTION.txt and third/fonts/oldschool_pc_font_pack/LICENSE.TXT.

Things it does

  • Multi-architecture : x86-32, x86-64
  • Virtual memory management (paging) with a buddy allocator for physical pages
  • Heap management (free lists)
  • Process spawning, task spawning, scheduling
  • Security at kernel object level
  • File system management : FAT16, FAT32, EXT2, NTFS, EXFS (EXOS file system)
  • I/O APIC & Local APIC management
  • PCI device management
  • ATA, SATA/AHCI & NVMe storage drivers
  • xHCI driver (USB 3)
  • ACPI shutdown/reboot
  • Console management
  • PS/2 keyboard and mouse drivers
  • USB keyboard (HID) and mouse drivers
  • USB mass storage device driver
  • Primitive graphics using VESA standard (broken)
  • Virtual file system with mount points
  • Scripted shell with kernel object exposure
  • Configuration with TOML format
  • E1000 network driver
  • ARP/IPv4/DHCP/UDP/TCP network layers
  • Minimal HTTP client
  • Kernel pointer masking, handles in userland
  • A few test apps

Historical background

In 1999, I started EXOS as a simple experiment: I wanted to write a minimal OS bootloader for fun.
Very quickly, I realized I was building much more than a bootloader. I began to re-implement full system headers, taking inspiration from Windows and low-level DOS/BIOS references, aiming to create a complete 32-bit OS from scratch. It was a year-long solo project, developed the hard way:

  • On a Pentium, in DOS environment, without any debugger or VM
  • Relying on endless console print statements to trace bugs
  • Learning everything on the fly as the project grew

Metrics (cloc)

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                              227          23531          24642          79491
C/C++ Header                   183           4903           5819          12152
Assembly                        20           1861           1214           5750
-------------------------------------------------------------------------------
SUM:                           430          30295          31675          97393
-------------------------------------------------------------------------------