During the academic year 2003/2004, I was extremely interested in the construction of operating systems, and their internal working. In order to learn some concrete lessons about operating systems, I decided to build my own. This page is a record of what I achieved.

On the name

I decided to call my operating system Nodes based on the term "NO DESign". I felt, and still feel, that the name is apt, because I never bothered about operating system design issues while writing Nodes. My aim was to learn about the hardware, and how low level software interacted with it. Thus my primary focus was to produce code that worked, and I decided I would deal with new issues as they appeared.


To make it easier for me to start producing code that worked, the structure of my system is modelled on early versions of the Linux kernel. I also borrowed ideas and code from Minix.

The system

I stopped working on Nodes in February/March 2004. Nodes was designed to work on the Intel x386 architecture, as that was the only machinery I had access to at that time. At the time development stopped, Nodes was capable of:

That is admittedly not a very grand set of features, but it is something, and writing code which implemented these features served the purpose of getting me acquainted with low level hardware.

Nodes used the GNU tools, in particular, GCC (3.2), GAS (2.13), GNU Make (3.79), GNU Arch (1.1), The GNU Linker (2.13). It also used GNU Grub as the bootloader.

The code

For what its worth, you will find the latest, working, version of the Nodes code here. After that, I did some development on a page fault handler, but I have lost that code!

If you actually want to boot Nodes, and see it in action, you can download an image of a Nodes boot floppy here.

This page was last updated on 3 May 2007.

Back to Apurva's home