The authors present a technique for maximizing the redundancy level of tasks and tolerating hardware faults by majority voting in the context of a network of workstations. The idea is to compute dynamically the number of copies allocated to each task, according to the number of sites and the tasks' criticality parameters. This technique leads to maximum utilization of the available resources in the distributed system, i.e. it reduces the idleness of resources and increases the redundancy of tasks. A reduction in fault dormancy and error latency is thus provided. This technique, called the saturation technique, is compared with similar approaches. A detailed description and the results obtained by simulation showing the advantages and the cost of implementing the saturation technique are given. The authors underline the structure of a convenient distributed operating system, including the execution model and task designation, to support the execution of multiple copies of tasks. The fault assumptions are discussed, and the different phases of a distributed scheduler are detailed.