The Windows or MacOS application
is written assuming that the program can generally access any file by mere
knowledge of its name in the directory structure. Such programs may indeed
query the list of available names. What response should be made to such
a query from a conventional application?
The Windows Application Cocoon
This is mainly an exercise not in interface to the user, but in interface
to the application. We start this design exercise by presuming that the
application be informed that there are no files on the system except for
those created when the application was installed. Each time the application
is newly instantiated, the application is presented with an accessible
system state just like that immediately subsequent to its installation.
The apparent state as installation begins is just that immediately after
installation of the simulated Windows or MacOS. Every application will
perceive that it is the first to be installed.
Many applications accumulate user preferences as state with which to
begin new jobs. This is indeed useful and labor saving but there are some
problems even when the application runs in its conventional environment:
The site of this state is mysterious. The user may wish to move or duplicate
this state onto a new machine, or maintain different preferences for different
circumstances.
An idea from the Lisa comes to the rescue. (The Lisa was a predecessor
to the Mac from Apple.) The Lisa came with a LisaWrite icon on the screen.
It behaved much like the Mac "Stationery" icon that the Mac reinvented
years later. If you want your default font size to be 11, you click on
the original LisaWrite icon and an empty document appears. Its font size
attributes are as delivered by Apple. You change the font size and save
as a new document, yielding a new icon. The two icons are now the same
status. Now the site of the user preferences is manifest and natural. Fewer
concepts are required by the user.
In this plan it is not necessary to inform the application when a backup
copy is made of its state.
A new question concerns the illusion to present to the application that
wants to write a file. In the simple word processor model the written file
is not normally read by the instance of the application that wrote it and
it suffices to pretend that the file was written. On the other hand most
word processors only write a file when specifically instructed by the user,
either as part of a "save now" operation or pursuant to "save periodically"
instructions. A "save now" operation may be intended by the user to keep
a document sate in addition to the state that he plans to drive the "in
RAM" version. Our system has the opportunity of displaying both of these
states on the screen at once, if we can find the appropriate manifestation
concept.
Cocoon Summary
The cocoon is a box to contain an application that presents the illusion
from inside the box, of a single time line to the "present". From the outside
of the box there is a branching tree of instances. The state of each instance
of the application has evolved from the actions performed on the ancestors
along those portions of the tree since the installation at the root. Within
the box it appears as a machine on which there is only one application.
Within the box only files and other artifacts created by the application
can be seen by the application. In the simple model if the application
quits the state is lost.
Limitations of the Cocoon
There are clearly some extensions of cocoon logic required. No mechanism
is yet available to combine two documents. No OLE (Windows) or Publish-Subscribe
(Mac) support is possible. Some applications recover from RAM exhaustion
by crashing, presumably to restart from a saved document. This design may
have been chosen when memory was not virtual, in short supply and not available
after application launch.
Cocoon Tricks
When application X sends a query to application Y the intent is presumably
to transfer information from Y to X. The nature of the transaction, however,
allows information to flow from X to Y as well. The cocoon allows an interesting
solution to this: Clone Y, yielding Y', permit X to query Y' and then delete
Y'. Y is unaware of having been queried.