Author: Christian.Queinnec@lip6.fr

## Introduction

With distributed programming, you can build applications running on several machines that work together through a network to accomplish a task. The computation model described here is parallel programming with distributed memory. Local and remote programs communicate using a network protocol. The best-known and most widely-used of these is IP (Internet protocol) and its TCP and UDP layers. Beginning with these low-level layers, many services are built on the client-server model, where a server waits for requests from different clients, processes those requests, and sends responses. As an example, the HTTP protocol allows communication between Web browsers and Web servers. The distribution of tasks between clients and servers is suitable for many different software architectures.
The Objective CAML language offers, through its `Unix` library, various means of communication between programs. Sockets allow communication through the TCP/IP and UDP/IP protocols. This part of the `Unix` library has been ported to Windows. Because you can create ``heavyweight'' processes with `Unix.fork` as well as lightweight processes with `Thread.create`, you can create servers that accept many requests at once. Finally, an important point when creating a new service is the definition of a protocol appropriate to the application.