EPOS is an multi-tasking OS for processors based on the IA32 architecture.
I started with a simple boot sector program, it was then expanded to multi-tasking kernel,
a basic file system, command interpreter and some test applications.

The source code of EPOS is available under the 2-clause BSD license.
You are at liberty to use EPOS in your own projects (educational, non-commercial
or commercial), as long as you respect the terms of the license.

* Goals of the project

EPOS is a minimalistic platform that implements the core of a multi-tasking operating
systems. It can be a starting point for your own projects in OS design and parallel
programming.

===============================================

ABOUT THE SOURCE CODE

===============================================

Currently I have published only the source code of the kernel ( because I think
it is the most interesting part ). There are also some drivers, the file system,
and a couple of user programs that I may publish in the future.

===============================================

ABOUT PROGRAMMING AN OPERATING SYSTEM

===============================================

Writing an OS from scratch seems like a daunting task. After all, there are some
good Operating Systems (and some not so good) with large communities, lots of
software and strong financial support form various businesses. The new Operating System
can be expected to face enormous difficulties competing with these giants.
So what's the point, really? I didn't think about any of this when I programmed EPOS.
It was just a fun thing to do.

It was also a great way to learn. Learning by building is one of the best ways to
learn and in the case of an OS this is the ultimate building exercise. There are
no debuggers (unless you write one!), no convenient libraries and tools. It is up to
your investigative effort to figure out what happens when your code breaks. Without
a governing OS your code has total freedom. The abstraction of the programming
language is destroyed very easily and code can behave in bizarre ways. You have to think
out of the box, just like a private detective investigating a murder case. Every clue
is important if you want to understand what's happening.

Building a multi-tasking OS is also a way to understand parallel programming,
synchronization, and the target processor architecture; It is an exercise in
designing a complex system. And it is a way to gain in-depth understanding
of how programming languages work.

Having said this, I do encourage people to write an OS, but without getting carried away
into details. Keep your focus. Writing an OS is a scary task but it can be great fun.