The idea of a ubiquitious object store (as opposed to a file system) may also become a reality in the medium term (as hoped for in [4]). If this does happen, research in all kinds of distributed persistent stores, distributed cache management and distributed storage will be valuable.
The Distributed Shared Virtual Memory techniques used in this project were originally designed to allow applications on different machines to share their memory and processing resources in an attempt to solve a single problem. This kind of distributed processing and sharing of memory has been investigated at various levels in experimental operating systems, but has never become part of a mainstream operating system's design. The advent of Java and the possibility of platform independent applications may bring new importance to experimental operating systems. It may be now be possible to challenge existing operating systems since future operating systems need no longer attempt to emulate other systems, or try to be backwardly compatible. Instead all that is required is that they run the Java platform.
This leads to the possibility of radical experimentation at the Operating System level. The JVM could be changed to allow objects to reside not only in local memory, but also in a Distributed Shared Memory, thus enabling applications to reap the benefits of distribution with minimal or no changes to the programs themselves. At present our Persistent system supports the notion of faulting in objects from the persistent store when they are not found in local memory. It should be easy to change this process to fetch objects from a Shared Memory instead. The harder part of making this distributed memory shared between many JVMs is retaining the semantics of the Java synchronization primitives. In Java there is a synchronized structure which allows exclusive access to certain objects. This will have to be extended to a distributed system in some way. Another more challenging problem is that of distributed garbage collection.