FORGE: A File-Oriented Reflective Graphical Environment
What is FORGE?
FORGE is a language-independent, OS-independent, and GUI-independent windowing API provided as a virtual filesystem.
Instead of defining a programming interface as a set of functions, the FORGE API is a set of filing operations. FORGE is inherently object-oriented -- however, the objects are all files and the methods are POSIX filing calls.
For example, a window's title is mapped to a file named "title", whose contents are the window's title string. Writing the file sets a new title, which is visible immediately in the GUI.
Watch the screencast.
By keeping GUI resources behind a user/kernel boundary, an application is not limited to running in a single process -- it can exist as a collection of cooperating programs -- or for that matter, a shell script. It can be written line by line interactively by the user with immediate feedback. Running applications can be queried and manipulated by navigating their directory structure.
Therefore, FORGE (a) provides rapid application prototyping and development, (b) makes the development of 'real' applications accessible to users competent at scripting but not programming, and (c) allows for unprecedented modularity in application structure.
How is it used?
Here's Hello World in FORGE:
cd $FORGE/gui/port/hello # select a window port named "hello" exec 9> lock # exclusively retain the port for our use ln new/caption view # add a caption as the window's view echo Hello world > v/text # set the caption text touch window # create the window
That creates a centered, minimally sized, untitled window with the text "Hello world" at the upper left.
Well, the text doesn't look right flush against the window border, so let's modify the previous example:
rm view # remove the caption from the window ln new/frame view # add a frame instead ln new/caption v/view # add a caption as the frame's subview echo Hello world > v/v/text # set the caption text again echo 4 > v/padding # set the frame's padding
That removes the caption, recreates it inside a frame, and sets the frame's padding to 4 pixels.
What implementations exist?
A prototype of FORGE is implemented in MacRelix; a port to FUSE is in progress.