It has been well established that the United States needs better programming technology to assure the safety and reliability of the nation's software infrastructure. The National Research Council, the President's commission on critical infrastructure protection, and the PITAC report reach similar conclusions: that the nation depends on fragile software, and technologies for building reliable software are inadequate. To address these problems, this research develops a new programming model, called speculations, for ensuring software reliability.
A speculation is a computation that depends on an assumption that may be difficult or impossible to verify prior to evaluating the computation. If the assumption is later found to be false, the computation is rolled back. Speculations are especially useful in distributed systems, where failures are inevitable: the network may fail, processors may fail, and the code itself may have errors. In this new approach, speculations are used to wrap potentially unsafe computations. If a fault occurs, the program is restored to a well-known program state where the fault can be easily resolved.
The research develops the theory and design automation tools for speculations in three parts: first, the programming language theory is expanded to provide a basis for speculation; second, the theory is used to implement compiler and operating system extensions that automate the support for speculations; and third, speculations are used to develop new distributed communication protocols and algorithms. Speculations conform to a widely-understood design model based on transactions, easing deployment as a general-purpose programming tool. The results of the research are open source and freely available.