# 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