For this article, distributed programming means using different autonomous computers connected over a network to solve a single problem. Such a hardware configuration is called a multi-computer; these computers don't have direct access to each other's memory and peripherals. Programming multi-computers requires models which are different from normal systems and in which the programmer can transfer data between different parts of the program through shared memory, either in global variables or in the stack.
Among the reasons for writing distributed programs are the following:
To run a distributed application, the following problems should be addressed:
Starting a program on another computer is not very hard using programs like telnet or rsh. Exchanging data and synchronizing, however, can be quite difficult and complicated. These problems can distract the programmer from his original project and can be the source of numerous bugs.
Linux already has some mechanisms for processes in the same computer to exchange data and synchronize between themselves. This is called Inter-Process Communication or IPC. One prominent example is the System V IPC, first introduced in AT&T's System V UNIX. This is a set of mechanisms, which includes:
These mechanisms are documented in many UNIX programming books, and provide a familiar interface for IPC in many flavors of UNIX.