This page details some of the side projects that I work on. You can find more information about them, including feature details, screenshots and code, on their GitHub pages.
Kiwi is an operating system supporting 64-bit x86 PCs, with Raspberry Pi support also in progress. It uses a custom kernel design/API, taking inspiration from both POSIX/UNIX and Windows NT. Some POSIX compatibility is implemented by userspace libraries on top of the native kernel API, which is currently capable of running some UNIX command line software such as Bash and Nano. It has a work-in-progress network stack supporting IPv4, TCP and UDP.
KBoot is a general-purpose boot loader, which supports both BIOS- and UEFI-based PCs, as well as the Raspberry Pi 3 & 4. It started off as a custom boot loader for the Kiwi project, but grew into a standalone project. I have used this as the boot loader on all of my PCs since 2015. It is also used by the Mezzano operating system project.
Gemini is a hobby 3D engine project. It is designed exclusively for modern APIs (currently Vulkan is supported), and aims to be able to take advantage of the capabilities of those APIs (multithreading, multiple GPU queues, pre-baked pipeline state objects, etc.). It implements a tile-based deferred renderer with physically-based shading. This is based around a render graph which automatically manages synchronisation and transient memory allocation.
Orion was my first 3D engine project which I started while at university. It implements a simple deferred renderer with classic Blinn-Phong shading, using OpenGL 3. It was superseded by the Gemini project, with the goal of moving to a more modern renderer design.
Haiku is an open source alternative operating system inspired by BeOS. I worked on it as part of Google Summer of Code 2012, as well as for a few years after that. I did the initial port of the OS to 64-bit x86 PCs (it was previously 32-bit only).
Masters Degree Project
My final Masters degree project at the University of York was titled “FPGA Implementation of Parallel Programming Languages for Particle Simulation”. For this project I designed and evaluated a customisable framework for implementing particle simulations on FPGAs, based on the Xilinx HLS (High-Level Synthesis) tool. The project focused on how to maximise performance of the hardware design, looking at areas such as memory (caching mechanisms to reduce memory overhead) and numeric representation (fixed point vs. floating point, data widths, and the trade-off between accuracy and performance).