A hobbyist UNIX-like kernel made with C. The ultimate goal is to make it as POSIX compliant as possible and self-hosting
This project is a hobby OS so it's not perfect. I am trying to make the codebase as clean as possible, however as I'm still very much learning in this field, many parts are not the prettiest / most documented code ever.
Pull requests to help build this OS further are encouraged!
I highly reccomend checking out the osdev wiki if you're new as much of the code here is based on information found on the wiki. I've put some helpful links to the bottom of this README
- x86
- x86-64
- ARM
- Multitasking
- Multiprocessing
- User mode
- Monolithic kernel
- Preemptive kernel
- Virtual filesystem
- ELF exec driver
- Memory management (WIP)
- Ramdisk support
- Moduling system
- VGA text mode
- VESA 3.0 graphics
- Multiboot compliant bootloader
- Code cleaning
- User mode
- A proper C standard library
- I/O device drivers
- Filesystem support
In order to build AtomOS, you'll need a GCC crosscompiler (the version of GCC bundled with your OS will not work). I'll write a guide on how to create this crosscompiler eventually but for now this guide from the osdev wiki is the best source. You'll also need a copy of NASM capable of assembling for i386.
Running build.sh
will build all of AtomOS's files. You can build an ISO file with iso.sh
(requires GRUB and Xorriso).
The easiest way to run AtomOS is qemu.sh
. This will automatically build an ISO from source and run it with QEMU. If you don't have QEMU installed, you can follow the instructions from the official site for your operating system.
NOTE: It's important to install QEMU with i386 support, on some platforms this may require installing additional packages (such as qemu-arch-extra
for Arch Linux based distros)
AtomOS currently does not support any other emulators such as Bochs. If you can get this thing to run on real hardware you're a legend.
osdev wiki and forum:
The osdev subreddit:
The James Molley kernel development tutorials
Important to note that these articles are plagued with problems. I wouldn't reccomend them if you're brand new as they don't generally explain information that deeply, The tutorials also contain a fair amount of bugs. Check this article from the osdev wiki for a detailed list. I'm still linking these tutorials because they can help, just err on the side of caution.
Writing a Simple Operating System — from Scratch - Nick Blundell
A book that explains the beginning of an OS and bootloader from the ground up. Contains a fair amount of detail but stops after writing a simple VGA driver
os-tutorial - cfenollosa
A very good resource if you're just starting out. Heavily based on the document by Nick Blundell and James M's tutorials.