A software development company

haskus-system is a framework written in Haskell that can be used for system programming. The long-term aim is to provide a full Haskell user-space environment on top of the Linux kernel.

If you would like to contribute to this project, consider subscribing.


2017-06-29 - Terminal demo

Here is a small demo of a terminal using FontyFruity and Rasterific (and haskus-system of course).

2017-06-10 - haskus-system-build tool

The next release of haskus-system will include a new tool: haskus-system-build.

With this tool, you just have to describe your system (Linux version to use, init program, kernel parameters, etc.) in a system.yaml file and the tool automatically downloads and builds everything (Linux kernel, ramdisk, etc.). It even launches QEMU with the appropriate options.

It can also start a new project from a template. Now the full “getting started” sequence is:

This is MUCH easier than having to perform everything manually. Please report any issue on the bugtracker.

In the same time, we have improved the documentation. It now covers the use of this new tool. Do not hesitate to provide feedback or to report errors.

2016-08-18 - First real boot (clock example)

This is the first time we boot a demo using haskus-system (called ViperVM at the time) on a real computer (an old notebook). The demo displays a clock dynamically rendered with Diagrams and its Rasterific backend. It uses haskus-system to directly access Linux’s DRM subsystem from Haskell.

2016-04-18 - Drawing and input

Demo showing a working environment tested with QEMU. It uses the input system to detect mouse moves and clicks and the graphics system to render on the screen. The user-space code is 99% Haskell thanks to haskus-system (called ViperVM at the time). The remaining 1% is GHC’s runtime system and its dependencies.

The yellowish background is "generated" directly; the ugly logo with an alpha shadow is read from a PNG image file with JuicyPixels; the path and the cursor are generated with Rasterific. The different elements are manually blended in the frame buffer.