Distributed Systems and Parallel Programming Foundations