A distributed system is a computer system consisting of several independent computers, connected by a network, that can work together to perform a task or provide a service. In this course, we aim to provide students with a deeper understanding of distributed systems. In particular, we focus on the principles, techniques, and practices relevant to the design and implementation of distributed systems. The course takes a systems-oriented view of distributed systems, concentrating on infrastructure software and providing hands-on experience in implementing distributed systems.