Distributed systems consist of components located across a network that communicate and coordinate their actions by passing messages. Key challenges of distributed systems include independent component failures, insecure communication, and lack of a global clock. Distributed systems aim to provide distribution transparency to present a single system view to users. They can satisfy requirements like resource sharing, openness, scalability, fault tolerance, and heterogeneity. However, developing distributed systems risks false assumptions about reliability, security, and performance of the network.