Distributed computer systems aim to hide differences between computers and networks from users. They face challenges including heterogeneity across hardware, software, networks and developers. Distributed systems must also be open, secure, scalable and handle failures and concurrency. Transparency aims to conceal the distributed nature of the system and make resources appear as a single system to users.