Welcome to the Persistence Group!
Persistence is all about making objects stay around for the whatever time is necessary without having to worry about saving them to disk or tape. Persistence is said to be Orthogonal if it works regardless of the type of object.
On a microscopic level it means that when an object is referenced a PersistentObjectManager works out how to get at the object. It may be that the object is in memory and so it can be directly manipulated as normal. Sometimes though it will exist on disk and the PersistentObjectManager will be responsible for loading it and presenting it to the process that made the request. The object might even be stored in a database or on tape. It could be anywhere. The PersistentObjectManager provides the interface for locating and loading the objects. Client processes don't need to know the specifics of how to get at an object.
Some comparisons can be made with traditional VirtualMemory.
The PersistentObjectManager is also responsible for managing the storage of objects. It must respond to requests to stabilise the whole system of interacting objects by committing each object to non-volatile storage. It must also ensure that objects are stored efficiently, perhaps by aging each object and moving old, less used objects to disk and keeping frequently used objects in memory. This could work in a similar manner to a ThreadScheduler.
There are issues, of course, with latency and performance and there should be a way of marking certain objects so that they are more likely to reside in media with fast access times (such as RAM).
On a macroscopic level documents would be persistent in that they would never need saving. The OS itself would be persistent - when the system is shut down the PersistentObjectManager would stabilise all the objects so that when the system is restarted the OS would pick up from where it left off.
We also need to think about the possibility of transactioning. It would be possible in a persistent system to mark a point (i.e. stabilise it) and then roll back to this point if a system crash occurs. We could (possibly) make this more fine grained - down to the process level?
Some background work has been done already: ObjectPersistence, OrthogonalPersistence, Grasshopper
Low level standard file system access is being developed by the FilesystemGroup.
This working group is part of the ArchitectureGroup