In distributed algorithms, processes run concurrently and independently. Usually, each process has a limited view and information of the system. A distributed algorithm should run correctly, even if individual processes and communication channels operate at different speeds and even if some of the components fail [Lyn96]. Therefore, they must ensure some properties that guarantee progress and correctness. A property is an attribute of a program that is true for every possible execution of that program [MK99]. The two main properties for a distributed algorithm are safety and liveness [Lam77]:
These properties ensure users of the system to have a reasonable confidence in the services delivered by it. Other properties can be considered by the algorithm, such as fairness for example. This ability of the system to provide services that can be trusted is called dependability.