In Spring 2019, I developed the majority of a operating system kernel known as “Weenix” as part of the CSCI1670: Operating Systems course (and its optional half-credit lab CSCI1690: Operating Systems Laboratory) at Brown University.

Weenix was designed to be developed over the course of the entire semester. I did my best to start things as early as possible, and after writing over 6,000 lines of code, I ended up finishing the project three weeks early. (Phew!)

I implemented the following features as part of Weenix:

  • Procs. Threads, processes, and synchronization primitives.
  • Drivers. Device drivers for terminals, disks, and the memory devices /dev/zero and /dev/null.
  • VFS (Virtual File System). A common interface between the operating system kernel and the various file systems (such as S5FS and device drivers).
  • S5FS (System V File System). A file system based on the original Unix file system.
  • VM (Virtual Memory). User address space management, running user-level code, servicing system calls, and basically everything else needed to combine all of the previous componenets into a fully functioning operating system. This includes virtual memory maps, handling page faults, memory management via anonymous objects and shadow objects, and system calls (in particular, the elusive fork syscall).


Weenix was developed in Spring 2019.
see official documentation