Skip to content
My toy Operating System. Some low-level fun stuff !
C C++ Assembly Makefile Shell
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


My toy operating system. Though the most accurate description right now would be "ring 0 application".

The plan is rather to make something like a video game or graphics demo implemented on very low level.
It's mostly just for fun and out of technical interest - it taught me a lot about x86 (the architecture and the assembly), and how to debug some very obscure and nasty problems.

It's also somehow written in its "own C dialect", thanks to the assumption I'll always use a modern GCC.
There's type inference with let and auto, there are generics thanks to C11, a super-powerful assert (assert_cmp), etc.
See include/__prelude.h and various calls to logd() for how it looks like.


Pretty graphics!
Pretty graphics

Boot time.

Debugging with GDB (shortened into make run and make dbg).

What does/can it do ?

  • Write color data to a VESA BIOS Extensions (VESA)-provided framebuffer.
  • Rasterize an embedded XBM font.
  • Log messages through a pre-defined "debug" serial port.
  • Catch hardware exceptions and enable SSE and SSE2.

It doesn't enable paging for now. All addresses are physical.

I had tested it on my laptop for real at some point and I'm unsure if it still works. I might take a photo if I get it to work again.

What's planned ?

The way is open for a lot of fun stuff !

  • Dynamic memory allocation : we know about a large chunk of available memory but haven't used it yet.
  • Basic software rasterization of triangle meshes.
  • Better support for keyboard and mouse (the rough basics are there);

And in general a lot of stuff that is listed in src/main.c.

What does it run on ?

It is an IA-32 kernel (that is, the 32-bit legacy mode of modern PCs, which are on x86-64).
The kernel image is Multiboot-compliant and relies on GRUB for booting right now.

I'd like to move to x86-64 in the future because it's standard today. Eventually, moving to UEFI would be cool too, I guess.


Development happens on Ubuntu. Haven't given a thought about Windows, OS X and stuff.

And probably some other stuff I left out, because it's been too long since last time.

make will build everything.
To test, you might want to install qemu-system-i386 (sudo apt-get install -y qemu)
Then run it with : qemu-system-i386 -cdrom FerOS.iso (make run happens to do this).

You can’t perform that action at this time.