Контрактная модель программирования является основой большинства технологий, предназначенных для создания распределенных систем. В рамках контрактной модели сущности системы разделяются условно на клиенты и серверы.
Клиентом называется любая сущность, использующая ресурсы другой сущности (называемой сервером). Поведение сущности характеризуется услугами, которые она оказывает другим сущностям. Такой подход концентрирует внимание на внешних проявлениях сущности и приводит нас к понятию контракта между клиентом и сервером. Контракт обычно выражается в виде формальных описаний ответственности сервера, ответственности, которую сервер обязуется нести и в рамках которой клиенты могут обращаться к серверу.
Описание контракта приводится на каком-либо формальном языке и может содержать объявление типов, исключений, процедур и функций. Конкретный набор применяемых в контракте языковых конструкций зависит от технологии, в рамках которой существует контракт.