1. A method for protecting a software system comprising: executing a first software component of a software system wherein the first software component has been designated for protection; determining whether a fault occurred during execution of the first software component; and restoring the software system to a state before execution of the first software component if the fault is detected.