Words of Advice
jecel@lsi.usp.br
jecel@lsi.usp.br
Mon, 12 May 1997 13:54:26 -0400 (EDT)
.. and bits of history:
I designed a LogoMachine back in 1983 (didn't finish it because
I moved on to better things) and have been doing "exotic OSes"
even since.
A key to success is to be able to separate reasonable suggestions
from plain nagging. An example of the latter is all those people
who kept complaining about the Macintosh when it came out
because it had no slots. When they released a machine with slots
(nicer ones than the PC had, I might add) none of those people
were interested - they just moved on to other complaints! So
the proper response is to pay close attention to potential and
current users, but simply point the nags to an alternative
solution: "sorry, we don't have that. Try the store down the
road..." Of course, this doesn't apply to LispOS until it is
actually defined.
Similar to plain nagging is the ephemeral requirements. It
can be fatal to ignore those, as I found out when I sensibly
answered "no! that is silly" when my partner asked "can you
write a Unix OS in Smalltalk?" The proper response is to say
"of course" (and maybe even prove it is possible) and assign
it to some future, unspecified release. *Then* you can ignore
it, and you will find that as time passes and things change
that people will simply forget about it. Remember how Win NT was
going to have DOS, Windows, OS/2 and Posix personalities all
running in the same kernel? So there are some things you have
to promise to survive, but there is no need to deliver (am
I becoming a politician??).
Here are some decisions I made for my OS that may, or may
not, be relevant for LispOS:
- There will be two versions - one will run directly on
hardware (PCs, initially) and the other will run on top
of existing OSes (Linux and Win32 are my first targets).
Sharing the machine lowers performance a lot, but also
greatly reduces the "cost" of people trying it out. If
they don't try it (and take a good look at how many neat
things out there most people, including you, have never
tried) they will never adopt it.
- Backwards compatibility is simply too costly. If they
ever want to run something from the old days, then they
have to boot an old OS (they can run my system on top
of that, side by side with their old app).
- "Snarfing" drivers and other parts from working systems
is so tempting, but I won't do it. If the only things
I can get working in the first releases are VGA video
and IDE drives and you need something more exotic, then
get an old OS and run my system on top of that. See the
Apertos OS for how continuations for drivers make most
existing code look ridiculous. And I intends to use
inheritance to good effect for all those strange hardware.
How would I do that if I import drivers as black boxes?
- When running on other OSes (some systems that already
do this: Inferno, Oberon, Pick, Magic Cap) try to blend
in. My idea is that a person might find a tictactoe.xyz
file on the net and download it to his machine. He then
finds he must also get a xyz.exe to run this (much like
all those pages that keep telling you to get Acrobat
Reader to see their PDF files). Now that everything is
ready, just clicking on the tictactoe.xyz file (or
whatever works on this system) will bring up a window
with the game in it. There is a whole other OS now
loaded on the machine, but there is no need for the user
to worry about this. Clicking on another .xyz file will
launch it much faster as the OS is already up (has
"booted"). And bringing another .xyz from the net is
now as simple as any other file type. xyz.exe looks
like a native executable to the host OS, but it could
also be a plugin for a web browser (see Dolphin Smalltalk
for a great example of this).
- I use the host OS as a "hardware platform". No native
widgets, no font managers, etc. I just need some space to
blast pixels to - let my code do the rest. My system doesn't
have files ( just a global persistent object store divided
into soups of objects called regions), but the regions
can be encapsulated inside the host OS's files (like the
.xyz examples above). This conflicts with the "blend in"
idea, but if care is taken in having visual preferences
(see Smalltalk/X for an example of this) so the look and
feel can be varied, then the applications can match others
running beside it closely enough so users are satisfied.
- The GUI should stand out in a crowd so that someone going
past a long row of PCs will double back and take a second
look at one running my system (see
http://www.lsi.usp.br/~jecel/next/merlin_menu.gif). This
seems to conflict with having applications run in their
own windows and feel part of the host OS. My idea is that
any object can be directly mapped to an output screen
(or window, in the case of an underlying OS) and the GUI
is just another such object. BTW, mapping a regular application
object to a whole hardware screen is great for kiosks and
other embedded uses.
I hope this helps a little, and doesn't just add more noise
to this hyperactive list...
--
-----=============( Jecel Mattos de Assumpcao Jr )===========-----
http://www.lsi.usp.br/~jecel/merlin.html | mailto:jecel@lsi.usp.br