Making reliable distributed systems in the presence of software errors — 2003 doctoral thesis by Joe Armstrong