Sigh. Another April 1st a... (01 Apr 2003)

Sigh. Another April 1st and, once again, we have an April Fool's overload. Come on people, only post them if they're any good!

I sent the following to coderman in reply to this blog entry. It was a little rushed since I was typing over a dial-up ssh (as am I with this actually) and it has inspired me to actually code up something, even if it's far short of what it could be. Hopefully it will give some insights (agl's nth rule: you don't understand it until after you code it).

What you are talking about it very close to `the Unix philosophy'. One of the
fantastic things about Unix is: cat /dev/sda1 | gzip > /backup/`date +%s`.gz

Utility goes up super-linearly with the number of pluggable components.

Now this stuff gives me nightmares, mainly because I'm generally always
thinking about this stuff off and on, and have been for years. Your design of
interfacing P2P with the filesystem is a good example of increasing the utility
(and usability, from my point of view) of an application by exposing it using
common interfaces. The design of those interfaces is just fantastically

The `everything's a file' idea of Unix is good. But what is really missing is a
userfs module in the kernel. Such things have existed at points in time, but
never has there been a polished one (or even one included in the main kernel
src). This limits the filesystem abstraction to devices and a few other little
things and leaves bodges like PRELOAD libraries and GnomeVFS around. But we
really need to expose application data and not have to end up writing fragile
regexps which break on every minor release.

I'm always wondering about designing a `better' system for this but generally
get stuck in a loop:

* Requires a fantastic number of components
* and a lot of abstraction points that we don't have at the moment
  (most programs output falls into a few simple blocks like `typed table'
   (think `ls`) or `dictionary' (something like ifconfig) or nestings of the
   same. ls shouldn't know anything about terminals, it should just output
   a table and let the UI handle if (if the output is going to a UI). But then,
   if we are doing this properly, all code should use `ls` to get directory
   listings and that's a lot of forking and stuff data over pipes. Thus...
* it would be fantastic if everything was in a single address space
* so a `safe' language is needed. Quite possibly a new language completely
* but that's a hell of a lot of work and makes the barrier to adoption
  pretty high.
* So we cut down the number of components and dream about making it better..

(that was a bit unplanned, but I'm on a metered dialup at the moment I'm
-- Adam Langley (+44) (0)7986 296753 PGP: 9113 256A CC0F 71A6 4C84 5087 CDA5 52DF 2CB6 3D60