This chapter discusses two large classes of fault-tolerance protocols: • Single-version protocols, that is, methods that use a non-distributed, single task provision, running side-by-side with the functional software, often available in the form of a library and a run-time executive. • Multiple-version protocols, which are methods that use actively a form of redundancy, as explained in what follows. In particular recovery blocks and N-version programming will be discussed. The two families have been grouped together in this chapter because of the several similarities they share.