Aim is to learn advanced concepts, principles, design methods, and technologies of distributed software systems. Emphasis is on communication, synchronization, replication, fault tolerance, consistency and security of distributed systems. The minimum level is to understand problems and various proposed solutions related to the aforementioned concepts. Some implementation technologies of distributed systems are discussed (e.g. Corba and J2EE), but learning to construct systems using such technologies is not covered in this course.