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.)
When you use
haskus-system, it is as follow:
- Kernel: Linux
- System: your own system built using
- Application: you decide if your system has the concept of “application” or not
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.
Systems built with
haskus-system are compiled with GHC, hence they still
have non-Haskell dependencies: GHC’s runtime system (RTS), libc, etc.
Systems 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. You can use these interfaces to build custom systems.
Then it is 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”.