One way to build distributed systems is to include support for distribution in the programming language. A language can provide support to perform operations such as remote procedure calls or remote method invocations. Depending on the nature of the language different solutions exist; the idea is that the remote version should be as close to the local version as possible; access transparency. What if systems are built using different programming languages or run on different hardware platforms? We will take a look at remote procedure calls and compare how things are done in CORBA, Java RMI, WS and Erlang.