Programming reversible recoverable systems

 
 

Despite the development of many techniques to add reliability and availability to distributed systems (including exception handling, checkpointing and rollback-recovery schemes, replication protocols, transaction management facilities), programming dependable systems remains a challenge. This is in no small part due to the fact that abstractions available to a system or application programmer are very heterogeneous in scope and function, present different tradeoffs and focuses, do not compose well, have no common semantical basis and suffer from limited programming language support. 

For the most part, these abstractions are available only as separate programming language libraries, with differing if not conflicting requirements in terms of programming model assumptions and constraints.


The REVER project aims to address this challenge by facilitating the programming of recoverable systems, i.e. of systems that can tolerate faults by means of system recovery techniques.

Programming recoverable systems is approached in REVER by adopting a radical position.

Recognizing that all system recovery schemes rely on some form of undo or rollback, REVER intends to study the implications, from a programming model point of view, of the following question:


what if we could undo any single action in a distributed program?


More precisely, the REVER project aims to study the possibility of defining semantically well-founded and composable abstractions for dependable computing on the basis of a reversible programming language substrate, where reversibility means the ability to undo any distributed program execution, possibly step by step, and to revert it to a state consistent with the past execution. The critical assumption behind REVER is that by adopting a reversible model of computation, and by combining it with appropriate notions of compensation (to deal with non-reversible elements in distributed computations such as real-world effects) and modularity (in particular to support fault isolation), one can develop systematic and composable abstractions for recoverable and dependable programming.


The REVER workprogramme is articulated around three major objectives:


• To investigate the semantics of reversible concurrent processes, in particular the relationship that exists between  reversibility and causality, and notions of simulation and equivalence between reversible processes.

• To study the combination of reversibility with notions of compensation, isolation and modularity in a concurrent and distributed setting, in order to obtain composable abstractions for programming recoverable systems.

• To investigate how to introduce these abstractions in a practical (typically, object-oriented and functional) programming language design, and how they can be implemented efficiently in a distributed and multicore execution environment.


The REVER project is a 4-year project funded by ANR and coordinated by INRIA. The scientific partners are: CEA (LIST/MeASI team), the (CNRS-Paris 7) PPS laboratory, and INRIA (Focus and Sardes teams).

 

Summary

Contact:

Jean-Bernard Stefani (INRIA-Sardes)

Phone: +33 4 76 61 52 57

Email: Jean-Bernard.Stefani@inria.fr