Hacking on NodeOS

Building a operating system, even a simple one, is no small feat. For starters, you will have to be familiar with programming in Assembly or a low level language like C/C++. In addition to possessing technical know-how of your chosen language, a lot of thought would have to go into its design:

does it have a GUI, a command line, or both?

what processor architecture will be designed for? 32-bit or 64-bit?

build from scratch or use an existing kernel?

use an existing boot loader or roll your own?

which API to implement for easier porting of applications from other OSes?

go with a monolithic or microkernel?

and so on ...

Given the high barrier of entry, it doesn't come as a surprise that not just every programmer out there wants to build an OS - at least not in the conventional sense. Not unless, of course, you have the right tools to make OS development much easier - tools like docker. In fact, the project author Jacob Groundwater did just that when he started working on NodeOS.

For now, NodeOS seems more of an experimental idea which presents a custom shell - nsh - on top of the Linux kernel. However, the project has ambitious goals - with the author intent on getting it to work on hardware, hypervisors (VirtualBox, VMWare), as well as on cloud providers like Joyent and Amazon.

System Structure

NodeOS can be broken down into layers, making development much easier. There are 5 layers at this point in time, and they are all managed by docker:

Layer-0: boot loader and kernel, provided by Docker

Layer-1: Linux shared libraries

Layer-2: Node.js binary

Layer-3: core NodeOS - init daemon and package manager

Layer-4: customizing distributions by adding userland modules

Want to add changes to the NodeOS core? Add code to Layer 3. Feel the need to customize the NodeOS distribution by packaging userland modules? Add them to layer 4.

Getting Started

To get started with NodeOS, you need docker and nodejs installed on your machine. I recommend spinning up a virtual machine with Ubuntu Precise 12.04 (LTS) (64-bit) as your operating system of choice.

Install Docker

If you don't already have docker, use this curl script to automate your installation.

curl -s https://get.docker.io/ubuntu/ | sudo sh

Install NodeJS

Use the nodejs apt repository to get your installation up and running:

apt-get install python-software-properties

add-apt-repository ppa:chris-lea/node.js

apt-get update

apt-get install nodejs

Run the Demo!

Loading the default NodeOS demo is as easy as running a single docker command:

sudo docker run -i -t nodeos/nodeos

Once the container loads, you're introduced to the nsh shell. Go ahead and try some basic commands like ls, cat and pwd. NodeOS provides implementations for these commands via layers 3 and 4: