On Thu, Jun 08, 2006 at 07:51:32AM -0700, David Leimbach wrote:
> I know people who think files should be for files, and that's it.
> That abstracting the filesystem to mean anything else is almost as bad
> as overloading operators in C++.
I disagree strongly! In fact when I was in Madrid we had a very nice
conversation with Nemo during which he managed to put in words things
I've long felt but was never able to pinpoint. Mainly, why such
thing as abstracting everything as file makes *lots* of sense.
Its rather simple, really, as an application developer my ideal world
would be the one where I can reuse useful components/services literally
in a manner of LEGO bricks. The world where a component that gives
me a "binary editor" capability would be equally easily accessible
from my debugger, my editor, the application I use to edit fonts, etc.
Ideally I shouldn't even care about where component resides or what
language/infrastructure it is implemented in. A SOA of sorts.
Do we live in an ideal world ? Not really, but a before I state why
Plan 9 comes as close to it as one would hope to get, lets look at
some of the "proposed" solutions to this universal reusability
problem.
Java comes to mind right away. Its widespread and it abstracts you
sufficiently enough from the outside world, so that you don't have
to care how to create threads or windows -- its all part of the
grandure API. It also provides the level of reusability I've mentioned
via [Net]Beans and such. However, the unbelievably high price
you have to pay for this is that you absolutely have to remain in
Java's world. Both from an VM and from an API standpoint. Suppose
I even have that binary editor module coded as a [Net]Bean and
it works fine in that framework, but can I get to it from my favorite
editor ? From my favorite debugger ? From a command line prompt ?
No! I have to use Java and Java alone to "glue" this piece of
functionality to the rest of my working environment.
It is sort of like having LEGO bricks which not only do not stick
to each other if you put 'em together, but require a particular brand
of glue to form any sort of complex structure. The glue called Java
in my previous example, or the glue called C language, or what not...
Now, the question becomes is it even possible to have anything at all
which would let my LEGO bricks just stick together ?
My answer is -- yes and it is called files!
Files are my true universal glue, the lowest common denominator
of sorts, the one and only API present in absolutely *all* common
programming languages and systems.
It takes a bit of time to realize just how far the lack of files
as a universal glues pushed various developers. Do you know
that when you do "getline a < /inet/tcp/lport/rhost/rport" in (g)awk
the right thing happens ? Do you realize how much extra code was
duplicated and how many bugs were reintroduced ? Same question
about all these jolly Java APIs -- sure its fun to reinvent the
wheel, but you should at least start from wood, not from carbon
molecules...
> For some, ignorance really is bliss. And never needing to touch the
> shell and still be productive is actually a dream come true.
In a world where vendors actually listen to their customers that would
be a true statement, but I'm yet to see a system where I don't have
to tweak things so that they feel right.
Thanks,
Roman.