jlf and I just had an interesting
conversation. We were talking about the parallels people
often try to draw between electrical engineering and
software engineering. i.e. there is the notion that EEs can
take a packaged IC off of a shelf and just use it, knowing
the inputs and knowing the outputs. The parallel idea in
software is often discussed as "reusable
software." Related to that, I remember Rob Pike saying
something about how 80-90% of the work he did on Plan9 was
just "compatibility" stuff - POSIX, TCP, etc. So... what if
we were all able to download a POSIX library and just use it
in our work, a la pulling an IC off a shelf?
The language <=> language problem is not a big issue, it's
been solved many times many ways. (One) problem with the
idea not often discussed is that software, and software
engineers, have to deal with all the different hardware
architectures and operating system platforms out there. This
is where the software engineering <=> electrical engineering
analogy breaks down. Imagine you're an EE and the laws of
physics are slightly different every time you start a new
job. Now those pre-packaged ICs are less useful, yeah?
That's the difficultly facing the issue of reusable
software. Ultimately any piece of software has to run on
some piece of hardware. There are plenty of
POSIX-compatibility libraries out there, but in order to be
used they all have to run on an appropriate hardware/OS
platform. That's why there are so many of those libraries!
So what's to be done? Right now, and I really
stress the "right now," the great leveller we have is the
network. So imagine there was a big machine out there on the
Internet which exported the entire POSIX API via some form
of RPC. Now anyone on any platform in any language really
would have access to a reusable POSIX implementation... Erm,
provided their
computer is attached to the network. For that reason (and
others) POSIX via RPC is not really a serious
solution, but I wanted to throw out that example in the
search for truly reusable software.