Кратко

  • RFC 984 предложил постоянное хранилище для устойчивого глобального состояния почты; несколько ПК одного пользователя держали локальные копии и синхронизировали их при подключении.
  • Описатели примерно по 100 байтов позволяли хранить полный перечень писем без всех текстов. Пакетный режим копил действия вне сети; DMSP требовал атомарных операций и явного подтверждения.

Компьютер выключили в конторе и повезли домой. Возможно, на заднем сиденье машины: именно такую сцену David Clark и Mark Lambert допускали в PCMAIL в мае 1986 года. Куда в это время доставлять новые письма? В постоянно доступное хранилище с большим диском, где лежит устойчивое общее состояние пользовательской почты. Машины приезжают и уезжают, адрес ящика остаётся.

Личный компьютер был удобным путешественником со скромным багажником. Можно было иметь один на работе, другой дома. Но типичный пример RFC обладал менее чем мегабайтом памяти и дискетой около 360 килобайт. Не вся почта помещалась на таком носителе. Зато помещалась её опись.

Каждое письмо делилось на описатель и тело. Описатель занимал обычно около 100 байтов независимо от объёма текста, хранил идентификатор, размер, полезные поля заголовка и отметки состояния. Клиент мог держать весь набор описателей, а полные тексты забирать по мере появления места. Человек видел, что пришло письмо, прежде чем находил место для его содержания. Маленькая карточка обходила ограничение диска без потери обзора ящика.

У хранилища было глобальное состояние, у каждого ПК — локальное. Интерактивный режим при постоянной связи немедленно отражал изменения и приносил новые письма. Пакетный режим позволял работать без сети, складывать действия в очередь и отправлять их при возвращении. Протокол DMSP обеспечивал операции и синхронизацию. На время отсутствия связи два домашних для одного пользователя компьютера могли помнить почту по-разному.

Возвращение требовало строгого расчёта. Операции DMSP были атомарными: либо выполнялись целиком, либо терпели неудачу целиком. Без явного подтверждения операция считалась неудачной. Внезапный обрыв во время удаления письма не должен был оставлять испорченные состояния. Хранилище отмечало изменения, ещё не увиденные каждым клиентом. В описанной реализации после недели отсутствия клиент становился неактивным; при возвращении ему выдавали полную копию глобального состояния вместо долгого воспроизведения мелких изменений.

Карточка редакции RFC датирует предварительный проект маем 1986 года и указывает, что позже его заменил RFC 993. Разделение обязанностей читается ясно: хранилище помнит, ПК ездит, стобайтовая опись экономит место, а протокол решает, какое действие пережило обрыв связи. Компьютер уехал; почтовое отделение продолжило работу.