Foundations of reliable distributed systems (DSs), including failure and system models, and communication and agreement problems. 

- Basic concepts and definitions (e.g., system models, failure models, time) 
- Group communication with crash failures (e.g., failure detectors, consensus, membership) 
- Crash recovery and Byzantine failures (e.g., Paxos) 
- Data replication, scalability (e.g., quorum systems, distributed storage systems) 
- Distributed transactions and commit (e.g., Two- and Three-Phase Commit, Non-blocking Atomic Commit) 
- Consistency (e.g., linearizability, causal consistency, strict serializability) 
- More hard problems (e.g., leader election, uniform reliable broadcast, terminating reliable broadcast) 
- Programming support for reliable DSs (e.g., Pi calculus,  and behavioral typing, debugging, model checking)