In the case of distributed systems, the correctness is highly desired and expressed in the form of two properties namely Safety and Liveness. The definitions of these properties are distinct, but they are often confused with each other. So, users need to be able to distinguish one from another.
Liveness is a guarantee that something good will happen, eventually. Eventually does not imply a timebound but if you let the system run long enough then it must guarantee liveness. For example, there is a guarantee that at least one of the athletes will win a gold medal in a 100-meter running race.
Safety, on the other hand, is the guarantee that something bad will never happen in the system. For example, a peace treaty between two nations is an example of a safety property that guarantees that war will never happen between those two nations. Again, this is a desired property, but this is not always what happens, as ceasefires are observed to have been violated despite peace treaties among many nations. This tells us that treaties are not safe all the time, but it’s a desired property in the example of war.
In the context of open networks, we can define both the correctness properties as follows:
Safety: As long as the network does not have more than 2/3rd of its nodes as faulty participants, a node cannot be convinced to accept corrupted data.
Liveness: As long as the network does not have more than 2/3rd of its nodes as faulty participants, a node cannot be prevented from accepting legitimate data.
Both safety and liveness are inseparable properties of fault-tolerant open networks. Protocols use many techniques to guarantee liveness, safety, or both.
Let us now understand the safety and liveness properties of the MOI network in the following sections.