Haskell User's Operating System and Environment

Note: Kenny Graunke has made available a a newer version of House, ported to GHC 6.8.2 (October 2008)

House is a demo of software written in Haskell, running in a standalone environment. It is a system than can serve as a platform for exploring various ideas relating to low-level and system-level programming in a high-level functional language. More details are available in our ICFP 2005 paper: A Principled Approach to Operating System Construction in Haskell .

House is based on

A PS2 mouse driver (Iavor Diatchki).

Simple graphics support, using VBE 2.0 and a variant of Grub to boot into graphics mode and get access to a linear frame buffer. Interestingly enough, we were able to implement the graphics primitives in Haskell, with decent performance, and our Haskell implementation for parsing, decompressing and rending GIF images was fast enough to let us use House to present our slides at ICFP 2005. (Thomas Hallgren).

Support for running binary executables in a separate address space (Andrew Tolmach). Page fault handlers and system call handlers are written in Haskell.

A driver for NE2000 compatible network cards (Iavor Diatchki). (This is the type of card emulated by QEMU.)

A driver for Intel PRO/100 network cards (Thomas Hallgren). (This is the type of card found in e.g. IBM Thinkpad laptops.)

A network protocol stack, with basic support for Ethernet, IPv4, ARP, DHCP, ICMP (ping), UDP, TFTP and TCP. (Iavor Diatchki and Thomas Hallgren).

To this, we have added

There is also work in progress on implementing an L4 compatible microkernel based on this platform (Rebekah Leslie and Mark P Jones).