This book presents a solution to the synthesis problem of distributed systems. It provides a complete characterization of the system architectures for which an automatic synthesis is feasible and presents a uniform decision procedure for all decidable cases.