1. About systems

Typical computer programs don’t directly deal with hardware components (processor, video chipsets, keyboard, mouse, network chipset, storage, etc.). Instead they rely on a lot of abstractions provided by other software. The main one being the kernel which directly handles the hardware with device specific drivers. It provides a common framework that all the other programs have to use to access the hardware.

Linux is one of such kernels and it is the one we use. Typical computer programs usually don’t use the interfaces provided by the Linux kernel directly. They use abstractions built on top of them and provided by system libraries which compose an operating system (OS).

Many operating systems based on the Linux kernel use more or less the same abstractions on top of it: these are the Unix-like Linux distributions. Examples of abstractions commonly used by these distributions: libc, libinput, Wayland/X11 server, PulseAudio, dbus, etc. As they differ only in minor ways, they can execute the same applications (Firefox, LibreOffice, etc.).

It is also possible to build non Unix-like operating systems on top of Linux. These operating systems may provide totally different abstractions to the applications. One example of such OS is Android which mainly supports applications written in Java that use specific interfaces to communicate with the hardware.

haskus-system is a framework that provides Haskell interfaces to the Linux kernel (hence to the hardware). It also provides higher-level interfaces built upon them. You can use these interfaces to build custom systems (Unix-like or not). It is also up to you to decide if your system has the concept of “application” or not: you may design domain specific systems which provide a single domain specific application or game.