Sunday, December 03, 2006
Welcome to the Metashell Project Blog. This blog will detail updates and events related to the Metashell Project (hosted on Google Code), which aims to demonstrate two new concepts: the Generic Content Model, and the Hybrid User Interface
The Generic Content Model
When a user enters ls -l into bash, or launches Windows Explorer, they don't want a text listing of files, nor do they want a bunch of pictures of files. They want to know what files are there, and the structure follows this desire. The presentation likewise follows this structure, determining the final output. An example of this principle being violated is seen when a user runs ls -l | sort from a POSIX command-line. The result isn't a list of files sorted by name (an intelligent default, since the user didn't specify what to sort on), but a sorted list of the lines of the output. This means that the header to the output is towards the bottom, and the files themselves are sorted by their permissions.
By contrast, the Generic Content Model should tell us that sort shouldn't receive the formatted file listing, but some structure representing the files which is transformed as needed. In Metashell, this is accomplished by having all commands return XML, which is then transformed by other commands as they see fit.
The Hybrid User Interface
One might well ask why traditional command-line interfaces are still used when we have made such strides towards optimal graphical user interfaces. To answer this, try and use Konqueror, Nautilus or Windows Explorer to move every file in a folder that ends in .jpeg to a another folder. You'll find that you have to manually select the files in question and drag them somewhere, rather than simply writing out what you want done. Under a command line like bash, that's easy: mv *.jpeg /home/foo/pictures/. Conversely, it's much easier to skim a list of files annotated with icons representing their types, and it is much easier to quickly grasp the structure of a filesystem by looking at a tree view with opened folders and closed folders having distinct icons. To understand the power of a graphical user interface even more, try browsing Wikipedia with lynx or some other text browser. Without relative font sizes, indenting, visual separators and whatnot, the site quickly becomes somewhat illegible.
In light of these relative advantages and disadvantages, it is desirable to design a user interface that combines these benefits. In Metashell, this is accomplished by transforming all output from commands to a structured language chosen by a frontend to the system (such as the Gtk# frontend transforming all output to XHTML). This structure allows the frontend to render the output in a rich, graphical manner and present the user with a visual interpretation of the data they requested.
These two ideas in conjunction give us the outlines of the Metashell project. It aims to create a new shell in which all commands return structured output, and in which all results can be graphically interpreted. I hope that you find these goals as interesting and exciting as I do, and that you'll watch here for updates to the project.