1. A system for recovering software components in a computer system after a failure that affects operation of the computer system including one or more computers for executing software components and a stable log that survives a failure of said computer system, said system comprising: a) a plurality of piecewise deterministic components that adhere to a first set of obligations between each other for making them persistent that are achieved by logging data to a stable log; and b) one or more related components that interact with at least one of the persistent components, said related components interacting with said persistent components by communications that do not require logging of facts concerning a state of the related component to the stable log in order to re-instantiate the related component in response to a failure.