A distributed system is a collection of independent computers that appears to its users as a single coherent system. Key characteristics include no shared memory, each computer runs its own local OS, and heterogeneity. Distributed systems aim to present a single-system image to hide the underlying hardware complexity and provide transparency. Middleware plays an important role in enabling communication and resource sharing across networked computers in a distributed system.