As distributed systems become increasingly available, the need for a fundamental discussion of the subject has grown. This book covers the fundamental concepts in distributed computing systems such as time, state, simultaneity, order, knowledge, failure, and agreement in distributed systems.