# 1. Introduction¶

haskus-system is a framework written in Haskell that can be used for system programming. Fundamentally it is an experiment into providing an integrated interface leveraging Haskell features (type-safety, STM, etc.) for the whole system: input, display, sound, network, etc.

## 1.1. The big picture¶

A typical operating system can be roughly split into three layers:

• Kernel: device drivers, virtual memory management, process scheduling, etc.
• System: system services and daemons, low-level kernel interfaces, etc.
• Application: end-user applications (web browser, video player, games, etc.)

Linux kernel

haskus-system is based directly and exclusively on the Linux kernel. Hence,

• it doesn’t rely on usual user-space kernel interfaces (e.g., libdrm, libinput, X11, wayland, etc.) to communicate with the kernel
• it doesn’t contain low-level kernel code (device driver, etc.)

Note, however, that programs using the haskus-system are compiled with GHC: hence they still depend on GHC’s runtime system (RTS) dependencies (libc, etc.). Programs are statically compiled to embed those dependencies.

haskus-system acts at the system level: it provides interfaces to the Linux kernel (hence to the hardware) in Haskell and builds on them to provide higher-level interfaces (described in the Volume 2 of this documentation).