

The first popular implementation of RPC on Unix was Sun's RPC (now called ONC RPC), used as the basis for Network File System (NFS). One of the first business uses of RPC was by Xerox under the name "Courier" in 1981. Lupine automatically generated stubs, providing type-safe bindings, and used an efficient protocol for communication. This was soon followed by "Lupine" by Andrew Birrell and Bruce Nelson in the Cedar environment at Xerox PARC. One of the earliest practical implementations was in 1982 by Brian Randell and colleagues for their Newcastle Connection between UNIX machines. In 1978, Per Brinch Hansen proposed Distributed Processes, a language for distributed computing based on "external requests" consisting of procedure calls between processes. The idea of treating network operations as remote procedure calls goes back at least to the 1970s in early ARPANET documents. Remote procedure calls used in modern operating systems trace their roots back to the RC 4000 multiprogramming system, which used a request-response communication protocol for process synchronization. Bruce Jay Nelson is generally credited with coining the term "remote procedure call" in 1981. Request–response protocols date to early distributed computing in the late 1960s, theoretical proposals of remote procedure calls as the model of network operations date to the 1970s, and practical implementations date to the early 1980s. Many different (often incompatible) technologies have been used to implement the concept. RPCs are a form of inter-process communication (IPC), in that different processes have different address spaces: if on the same host machine, they have distinct virtual address spaces, even though the physical address space is the same while if they are on different hosts, the physical address space is different. Remote calls are usually orders of magnitude slower and less reliable than local calls, so distinguishing them is important. The RPC model implies a level of location transparency, namely that calling procedures are largely the same whether they are local or remote, but usually they are not identical, so local calls can be distinguished from remote calls. In the object-oriented programming paradigm, RPCs are represented by remote method invocation (RMI). This is a form of client–server interaction (caller is client, executor is server), typically implemented via a request–response message-passing system. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. In distributed computing, a remote procedure call ( RPC) is when a computer program causes a procedure ( subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction. Mechanism to allow software to execute a remote procedure
