Hardware fault detection by diverse software