Motivation (programmers)

The Unix file system is an object-oriented database. It supports opaque data types, associative links, executability and organization by containment. Its name space being decoupled from the mounted devices further adds to its flexibility as a general purpose access interface for persistent objects.

For some reason we have not taken full advantage of this object-oriented aspect of Unix. Instead, following tradition, we organize our files by type: our commands, libraries, configurations files, application data and documentation all have their special “sections” in the name space. Unfortunately, this type-oriented thinking is now limiting our progress.

One ideal in programming environments is that the continuum of lower level entities serving as building blocks for ever higher level ones is as smooth and natural as possible. Not to mention unlimited. Unix never had the elegance of a Forth system in this regard. But it did introduce the novel idea of having the command line interpreter be a programming language, which we have embraced. But being stuck with type-orientedness has capped our ability to raise abstraction level beyond this point.

It took 30 years (1940–1970) to progress through

machine code → subroutine → link library → scripting (executable programs as primitives)

Embarassingly, we have made very little progress in automatability during the 30+ years since then.[1]

211274070 seconds has passed since Rob Pike's talk at Copenhagen, where he posed a number of thought provoking questions, including entertaining the possibility that “... Unix got it wrong.” I think Unix did get it (mostly) right. But maybe we still don't understand Unix? (And didn't merely stop understanding it.)

I believe we should follow the “Unix constitution” and simply take the next evolutionary step: use the Unix tool approach to build higher-order, stateful tools. And for this leap it helps if we recognize the object-oriented database nature of the file system.

I call these higher-order entities UnixObjects, for they are made of Unix objects (files and directories), only arranged tighter than before.

  1. ^ The graphical user interface, while certainly a very useful facility, can not be considered progress from a system software standpoint because it does not raise the level of automatability. If anything, it is regression because it asks the user to repeatedly carry out the same manual maneuvers which is the antithesis of automation.