The term redundancy in an engineering sense implies duplicating critical components of a system with the intention of increasing its reliability. In some safety-critical systems such as fly-by-wire aircraft, parts of the system may be triplicated, such that an error in one component may then be out-voted by the other two. A good example is the SACEM system which controls train movements on the RER A (regional express metro) in Paris. The automated system optimizes the real-time running of each train. The ground based computers used in the system are duplicated and fitted with an automatic switch-over system in case of failure (the active computer is changed every day).
Hardware redundancy is not difficult because most times failures are statistically independent. The failure of a hard-drive on one machine will probably not preempt the failure of a hard-drive on another. A common mode failure occurs when one event causes multiple systems to fail. Software redundancy is more difficult because unlike physical structures, software has the same point of origin. Using the same algorithm, written using the same compiler, yet distributed on different machines does not imply redundancy. Ariane 5 contained both a primary and backup IRS, both with the same software, resulting in exactly the same behavior – they shut themselves down exactly as they were suppose to do. If the same software is used, then the same input will cause the same sequence of statements to be executed, resulting in the same outcome. To properly facilitate software redundancy, one must design software which does the same work, but is algorithmically different.