Reflecting on reflective computing.

David Jeske jeske@home.chat.net
Fri, 23 Oct 1998 12:22:20 -0700


On Thu, Oct 22, 1998 at 05:34:13PM -0700, Christopher Barry wrote:
> Looking back at that it seemed a little trollish, and I didn't mean to
> sound that way, and am sorry. But what you guys want to do is
> sooooooooooooooo ambitious. 

Apology accepted, and I agree on both counts. :)

> I was in a way suggesting a more immediate goal with my entire reply
> that could directly help with getting a working Tunes
> implementation.

I understand. I think I'm a bit more practical minded than some of the
other people on this list. Which is probably the reason I'm replying
to your post instead of ignoring you after your 'comments of
questionable judgement'. :)

However, the right way to do this, is to first of all, try and
understand what Tunes is, before you start trying to propose an
alternate route to get there.

> > The idea of Tunes is that if we change the nature of the system, and
> > how pieces of software are described to the world, we can allow
> > computers to perform much more useful tasks, with much less work. Some
> > of us might even argue that a Tunes-like approach may end up as a
> > necessary prerequisite to a system any of us would call intelligent.
> > 
> 
> How would you argue that Tunes is a necessary prerequisite though, I'm
> curious. This could get very confusing and technical very quickly. I
> would argue that intelligent components and algorithms and compiler
> technology are a necessary prerequisite to the Tunes system. Chicken and
> egg.

In my opinion, your analogy is flawed. To me, the idea of developing
an 'intelligent' computer with today's technology is like developing
the internet before there is written language to communicate with on
it.

Tunes (and some of the associated tertiary ideas) are intended to be a
means for computers to 'speak' to each other with a common lanuage. 

For example... if I took the netscape binary off your Linux machine,
changed it's name, and handed it to you, how would you figure out what
it was? How would you describe to the system how to use it? Even if
you could figure this out, the computer couldn't. At a base level,
Tunes is about describing software to computers in a different
way. When a computer can (through some habitual, hard-coded behavior)
go out on the internet, pull down some piece of software, and 'use'
it, without a human having to install the program, and setup
environment variables, and interact with the UI, THEN computers will
be approaching a stage where they can talk to eachother. At that
point, it might be possible to get some emergent intelligence to come
out of a computer. It might not be able to have a human conversation
with you, but it will be getting closer to the point where it can do
things like help you construct software.

> > What do you do with this 'environment' you've made? What useful work
> > does it perform for you? How much time did you spend learning to
> > control it, and how much time will you spend when you realize
> > something different offers better control? What do you think it could
> > do for you that it dosn't do today? What things have you not even
> > considered it doing, because you are used to its limitations?
> 
> Believe me, I've thought long and hard about this, and the only way it
> could get any better to me is if the applications and system had more
> intelligence. There was a time when I wanted much more. When I was using
> command line DOS, I was exremely unsatisfied. When I got Windows 3.x, I
> was able to do more, but still very unsatisfied. I remember when I first
> checked out NeXT, I was very impressed, but the hardware was
> prohibitively expensive, and there was still much missing. Now I've got
> Linux, and a window manager and applications that provide all of what I
> like with the NeXT UI and address most of what I felt were limitations,
> because I prefer the keyboard and macros for most operations, because
> the keyboard can be chorded in numerous combinations instantaneously. I
> really am feeling kind of content for the first time, and am really
> examining what needs to be done ultimately for real progress, and that
> is AI.

Interesting.. I think there is alot of stuff between here and what I
presume you mean by AI. (I presume you mean some kind of intelligent
computer you can talk to, and which can perform tasks you ask it to
do, etc)

I'd be content if we (as the software community) could just write a
block of code to (say to decode a new image format ) _once_ instead of
50 times. (once for Linux in netscape, once for windows/activeX, once
for MacOS, once for BeOS Datatypes, once for Java, etc, etc)

Just think of how many programmers we would free up to work on AI...

> > In Tunes, the idea is to remove all the 'implementation' dependent
> > work in the above picture. To draw a half-correct analogy, you would
> > merely ask Tunes to "run your kernel in a software emulation
> > environment", and it would do the rest of the above stuff for you. It
> > might need to know where to map input and output devices to (like the
> > emulated PC's screen), so it would either make some safe-choice, or
> > ask you what you wanted it to do.
> >
> 
> I have no idea how on earth Tunes could do this, or what this would look
> like or how you would do work with it, what work Tunes would do and what
> you would do.

That's exactly what this list is for. Some of us have an idea of how
we think the above system would work. They are all a little different,
as we all come from different backgrounds, but we believe the above is
possible.

> > I believe you when you say that you can't imagine how Tunes can make
> > computing better. You don't seem to want anything different than you
> > have now. I'm telling you that _I_can_ imagine how computing could be
> > better, and I call that idea in my head Tunes.
> >
> 
> No, I have an idea about how it could be better, but the same processes
> no longer apply to make it any better, and there are no more trivial
> things to improve, IMO. But I don't see how Tunes solves some of the
> fundamental AI problems that need addressing for real progress.

You seem to be stating that you think AI is the enabling technology to
bring software to the next level. I don't know that I agree with you.

>  
> > I can imagine a world where when an HTML browser crashes, it dosn't
> > take down the other 29 HTML windows.
> 
> How about it doesn't crash in the first place. It's called Lynx, or
> Emacs W3, but they kinda suck compared to Netscape. And yes, Netscape
> does crash....

Come on.. I can't believe you are sitting there telling me that Lynx
or Emacs W3 are somehow gifted by a higher-being to 'not crash'. All
software has bugs, thus all software can crash.

> > I can imagine a world where I can actually install
> > a new version of an application without breaking the old one.
> 
> The Debian GNU/Linux package management system does a damn good job of
> not letting multiple versions of the same libraries step on each others
> toes and letting stuff like the above happen. It's the most stable Linux
> there is, probably the most well organised operating system there is.
> Yes, multiple versions of the same library is not the One True Way, but
> it's a working solution today if you want to run almost identical
> versions of the same software with almost identical dependencies.

IMO, It does a terrible job. What if I installed libc-6.1, and it
works fine, but Netscape and that version of libc have some parasitic
bug, so I want to have only netscape use libc-6.0. I have to hack up a
different lib directory, and setup LD_LIBRARY_PATH. What a pain... I'm
sick of knowing all these silly UNIX details just to keep software
working.

When it comes to applications Debian is terrible. You can install two
versions of netscape at the same time, because the binaries will
conflict.

> > And I'm not even talking about Tunes yet...
> > 
> > I can imagine Tunes, where I can ask the system for a list of all the
> > web pages I've seen in the last two weeks with the word "dog" in
> > them...where I can ask the system to cross-reference the list of
> > people I have had email or phone correspondence with in the last year
> > with the list of people that work at my new company to find out if
> > I've met anyone there before...
> 
> You could do this with today's technology, but I guess the point you are
> making is that Tunes will do this without you thinking to set it up in
> advance, and without you going to the pain to learn to set it up? In
> which case, Tunes sounds like it would be pretty disk space intensive if
> it were to store this information for you.... 

Tunes will probably use alot more disk, because it'll store alot more
information. However, you'll save almost as much disk because in Tunes
you will really only have one set of 'jpeg decode' code. Instead of
having it static compiled into everything all over the place like it's
done in most systems today.

> For it to list all of the web pages that have "dog" in it that
> you've visited in the last 2 weeks, it would have to either store
> all of those pages on your disk, or visit every URL in your history
> file when you ask which would take forever, and could also be easily
> done with some Perl anyways that wgets the URLs in your history and
> then matches the REGEXP with every page it retrieves.

There is probably not a single example I can come up with which you
can't "explain" how I might do it with some custom perl script, or
something else. However, in tunes, you won't have to write some custom
perl script. You will just ask the system to index every webpage you
ever see, and it'll do it, and later on you can search the index. No
pathnames, no perl scripts, no custom web browser to throw the pages
you view into the index, none of that UNIX pain.

> > where I can run out of disk space, pick
> > up a new drive, drop it on my machine, and have it say "10gb
> > available", no partitioning, no moving data around, nothing. Where I
> > can do all of the above without having to deal with 'installing' or
> > 'configuring' even a single 'application'.
> 
> This isn't that impressive. You usually don't have to change any
> hardware settings anyways to just drop a new disk in. And like
> partitioning and formatting is *that* much of a PITA.... And of
> course there is the "plug and play" concept for other hardware like
> sound cards, provided a driver is already written and available. Now
> if Tunes could write a driver for you, that would be something....

If this isn't that impressive, then why can't I _do_ it?

I'm not talking about 'partitioning' being a pain because you have to
use fdisk (alhthough it is). I'm talking about the fact that
afterwords, you have to deal with having one 'directory' which is a
disk with 200meg free, and another one which is 2gb free. I don't care
about that.. when I put a disk on my machine... I want more space. I
don't want to live with this mistake of mixing physical with logical
anymore. 

There are a few volume managers done for other platforms (for SGI,
IBM, and probably Sun). They are also a pain. They require you to know
far too much about UNIX and how your machine works. 

When I think of Tunes, I think of this: "I'm tired of this UNIX
administration information taking up space in my head. Please
make it go away, it hurts."

I know how to do things on UNIX, better than any unix admin I've met,
because I'm primarily a developer, and I know the ins and outs of most
UNIX software (including UNIX kernels). I'm tired of all this
arbitrary knowledge. I'm tired of knowing that I don't teach UNIX to
do what I want... it teaches me what I must do, and how I must bend
over backwards, to get it to do what I want.

> > It's not like that. There are many optimizations which are much better
> > done by people who know about the hardware, then people who are
> > writing software. That's why you use languages like C, with C
> > compilers. Because the hardware people tell the C compiler people what
> > optimizations to perform. However, there are a whole bunch of types of
> > optimizations which can be done better if you change the software
> > model a bit. Go take a look at MIT's "Tick-C" pages.
> > 
> > However, it's not even about this (to me anyhow). It's about removing
> > all the add-hoc libraries and headers, and manual installation and
> > configuration which is necessary to actually use new optimizations, or
> > build with new stuff.
> 
> So how does one do the equivalent with Tunes?

There are many ways, some of which we understand, some of which we
don't.

If I were describing the incremental steps to solve problems we are
having today, I would list:

- separating physical naming from logical naming. For example, instead
of locating a program by listing it's physical location (i.e. unix's
/usr/local/bin/netscape), locate it by it's logical name
"application/x-app/netscape-4.05" or something. Guarantee that it'll
have the same logical name everywhere. Make sure that it's physical
location is irrelevant.

- allow entities to describe top-down dependence so you can map that
however you want externally. If an app wants to launch a 'web
browser', let it export that request to the system, and launch the
user's preferred web browser. Don't tie an app directly to
"/usr/local/bin/netscape". If an app needs "libc" recognize that there
may be different implementations of libc, and that the system should
be able to map it based on who the requester is, and what the user
wants. (See my example above about netscape and libc)

- provide information hiding for all entities. OO has only barely
started to influance programming languages, and components installed
in today's systems are not encapsulated at all. When you install an
app, it strews files all over, and it's certainly not encapsulated. In
UNIX, there are often hard-coded path dependencies compiled into the
app. Take a look at what NewtonScript did with 'soups', or EROS does
with the space-bank.

- draw a distinct between information "about" an item, and the item
itself. Allow the system to 'learn' (i.e. collect) new information
about an item. To do this, we have to establish uniqueness for
items. Once this is done, we can automatically propagate information
like "hey, netscape dosn't work with libc-5.1". No perl scripts, no
LD_LIBRARY_PATH, no UNIX hacks.

-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske@chat.net