Tom Hallam

Speaking & ConferencesLinkedInGitHubSubscribe

Playing around with IncludeOS

March 13, 2020

I recently stumbled across IncludeOS, a cool project that allows developers to embed a tiny operating system into their applications, allowing them to be run without any interaction with a classic operating system like Linux or Windows.

This is exciting as it allows the application to be run with the absolute bare minimum dependencies, ensuring a lightweight distributable image. According to the creators, applications can be booted in tens of milliseconds, and have a low memory footprint. This puts this project in the same arena as AWS Lambda and other Function as a Service (FaaS) providers.

It takes a little bit of setting up, but I found my experience was made a fair bit easier with Multipass from Ubuntu. Using this tool, I created a light Ubuntu VM on my Mac and set up all of the dependencies within it.

apt-get install python3-pip python3-dev git cmake clang-6.0 gcc nasm make qemu
pip3 install setuptools wheel conan psutil jsonschema
conan config install https://github.com/includeos/conan_config.git

I could then build the hello world example, and boot it using QEMU. Remember, this is an entire operating system spinning up here, not just a container (!!):

git clone https://github.com/includeos/hello_world.git
mkdir build && cd "$_"
conan install ../hello_world -pr clang-6.0-linux-x86_64
source activate.sh
cmake ..
cmake --build .
boot hello

When I booted the application, the console was filled with a whole heap of stuff, but importantly:

[...]
 IncludeOS 0.15.1-5 (x86_64 / 64-bit)
 +--> Running [ Hello world - OS included ]
[...]

How cool is that? I downloaded and installed the dependencies, and within five minutes I had my own operating system running locally. The team at IncludeOS have also written a really neat tutorial on how to get the net-enabled examples running on Google Compute Engine. Check it out here.

When I was playing, I tried to use my newly compiled (and GRUB-loaded) images on DigitalOcean through their Custom Image functionality. Even though I managed to get the image converted to a VMDK (VirtualBox disk image), and could get a Droplet to launch, I could not get the IP to respond with the application. More digging required I think!

I will be following the development of this project closely. It would be super cool to try and write a toy FaaS platform based around this technology! :)

Profile picture
Thanks for reading.My name is Tom and I'm an engineer and technical leader from the UK, now based in Christchurch, New Zealand. My interests include platform engineering, software architecture and DevOps. Outside of work I love playing the drums and am studying for my private pilot's licence.
© 2022, Built with Gatsby