The scope of this second edition of the introduction to fundamental distributed programming abstractions has been extended to cover ‘Byzantine fault tolerance’. It includes algorithms to implement these abstractions in vulnerable distributed systems.