  We describe the voting farm, a tool which implements a distributed software
voting mechanism for a number of parallel message passing systems. The tool,
developed in the framework of EFTOS (Embedded Fault-Tolerant Supercomputing),
can be used in stand-alone mode or in conjunction with other EFTOS fault
tolerance tools. In the former case, we describe how the mechanism can be
exploited, e.g., to implement restoring organs ($N\!$-modular redundancy
systems with $N\!$-replicated voters); in the latter case, we show how it is
possible for the user to implement in an easy and effective way a number of
different recovery strategies via a custom, high-level language. Combining such
strategies with the basic fault masking capabilities of the voting tool makes
it possible to set up complex fault-tolerant systems such as, for instance,
$N$-and-$M$-spare systems or gracefully degrading voting farms. We also report
about the impact that our tool can have on reliability, and we show how,
besides structural design goals like fault transparency, our tool achieves
replication transparency, a high degree of flexibility and ease-of-use, and
good performance.
