Introduction to Reliable and Secure Distributed Programming