In this talk, I will address the challenges arising from device and OS complexity. First, I will present the first research consideration of peripheral device failures. I describe Carburizer, a code-rewriting tool and associated runtime, that handles the problems arising due to device failures and automatically recovers using restart/replay. I will then demonstrate the broad implications of these recovery techniques in modern drivers by showing some results from a study of drivers. Finally, I will describe how driver recovery can be improved by introducing a novel checkpoint/restore mechanism for drivers.