Sunday, August 27, 2006

Alpha version available soon

I've been working on ROLF for some time, off and on, and I've got to the point where I'm almost willing to let other people have a look.

The applications include the Iconbar and Filer, plus a simple image viewer for JPEG and PNG files (try some PNGs with transparency) and a terminal application (supporting ONE font and ONE screen size).

Everything is very slow and flickery, even on a 2GHz machine, but fairly functional. You don't want to have anything important running or edit important documents at the moment, though!

Currently, I'm working on supporting SVG in the bitmap library (OK, the name's bad, I'll probably change it), but librsvg seems to want me to install an entire X windows system to get it to compile!

Architecture (in brief)

The basic ROLF software consists of three applications and two libraries:

Wimp : the central process that all ROLF applications communicate with. It manages the window stack and the on-screen pointer, handles inter-process messaging, and communicates with the input devices (keyboard and mouse). Access to the Wimp is managed in a co-operative multi-tasking manner (as with RISC OS), with a couple of differences: firstly, applications can continue processing independently of the Wimp and, secondly, multiple applications may be asked to (re)draw non-overlapping rectangles of the screen simultaneously.

Iconbar : this ROLF application must be run first by the Wimp (to be ready to provide its services to other applications, including the Filer) and provides the backdrop and iconbar functionality.

Filer : this ROLF application provides a GUI representing the files on the system and handles loading or running of files and applications. Filetypes will be stored in the Linux directory structure (initially as hidden files including the file type in their names) so that the types of all the files in a directory can be read in almost the same time as simply reading their names.

Furniture library : a library linked with each ROLF application that handles window furniture (title bar, size icon, etc.) using the facilities provided by the Wimp. Having a separate library should avoid feature creep in the Wimp, so that modifications to the Wimp should consist only of optimisations and support for additional hardware.

Bitmap library: a library for handling images in an abstract way, so that the internal format of a bitmap need not be known by external software. Source Images can be rendered to Destination Images, without having to know anything about the internal representations of either. Pixels are nominally 16 bits each of Red, Green, Blue and Alpha, although most major operations will be optimised to use the minimum required. Scalable images (SVG, DrawFiles and Fonts) are also handled by this mechanism.

What ROLF is

ROLF is a GUI framework using the framebuffer device on Linux to provide a look and feel similar to that of the RISC OS operating system.

The RISC OS GUI is largely unchanged in concept since the late 1980's, not because of any lack of development, but because it just worked, better in many people's opinion than any of its competitors, then and now.

ROLF is not intended to take over from RISC OS, or even to run RISC OS native applications (although that may become possible with the use of Brandy, QEMU and a command line interpreter, among other things), but to allow Linux applications to be written or modified to work in the manner of the RISC OS GUI (with some newer twists, like translucent windows and preemptive scheduling, not to mention multi-gigahertz processors).

Another aspect of RISC OS I would like to emulate is to keep the system lightweight and modular, so that it will work on devices with limited resources as well as highly powerful and resource-rich desktop machines.