# Structure Draft based on EROS paper: - Ideas - What type of persistence this system implements? - How objects (data) are treated depending on their longlivety (how long they are used by the program)? - What abstractions are used to provide persistency? - How the interface providing persistence is integrated inside programming environment (language)? - Where the layer of software providing persistence is located? - What it expects to have? - What code should be executed using it or on top of it? - What are non-functional requirements defined by this system (if any)? - Were there any problems that are irrelevant now? - Are there any ways to integrate non-persistent code? - is there any model for integration of this environment? - What are preferred ways of communication between computers? - two cases: - the same system - generic case: non-persistent system - hardware commands (can we make the same state as we needed) - What are proposed applications of the system? - implementation - How persistent storage is organized? - On which hardware it is supposed to be run? - On which level the persistency is implemented? (hardware) - is there any software layer underneath? - What it can provide? (what is the purpose of having this layer) - how it deals with errors made by this level - How does it deal with errors that may affect persistence? - hardware errors - accident errors - software errors - how it deals with unexpected shutdowns? - syscalls - IPC - Data - external resources - hardware (example: graphics state) - Does the implementation conform with specified non-functional requirements? - are there any specific security measures? - Physical access to the hardware - TCB granularity/sizes - Network communication