В вычислительной технике принцип надежности — это руководство по проектированию программного обеспечения, которое гласит: «будьте консервативны в том, что вы делаете, будьте либеральны в том, что вы принимаете от других». Его часто перефразируют как: «будьте консервативны в том, что вы отправляете, будьте либеральны в том, что вы принимаете». Этот принцип также известен как закон Постела , в честь Джона Постела , который использовал эту формулировку в ранней спецификации TCP . [1]
Другими словами, программы, которые отправляют сообщения на другие машины (или на другие программы на той же машине), должны полностью соответствовать спецификациям, но программы, которые получают сообщения, должны принимать несоответствующие входные данные, если их смысл ясен.
Среди программистов для создания совместимых функций известен также принцип в форме: быть контравариантным по входному типу и ковариантным по выходному типу.
RFC 1122 (1989) расширил принцип Постела, рекомендовав программистам «предположить, что сеть заполнена злонамеренными сущностями, которые будут отправлять пакеты, разработанные так, чтобы иметь наихудший возможный эффект». [2] Протоколы должны позволять добавлять новые коды для существующих полей в будущих версиях протоколов, принимая сообщения с неизвестными кодами (возможно, регистрируя их). Программисты должны избегать отправки сообщений с «легальными, но неясными функциями протокола», которые могут выявить недостатки в получателях, и разрабатывать свой код «не только так, чтобы выживать с другими некорректно ведущими себя хостами, но и сотрудничать, чтобы ограничить количество сбоев, которые такие хосты могут вызвать в общем средстве связи». [3]
В 2001 году Маршалл Роуз охарактеризовал несколько проблем развертывания при применении принципа Постела в разработке нового протокола приложения. [4] Например, дефектная реализация, которая отправляет несоответствующие сообщения, может использоваться только с реализациями, которые допускают эти отклонения от спецификации, пока, возможно, несколько лет спустя, она не будет связана с менее терпимым приложением, которое отклоняет ее сообщения. В такой ситуации выявление проблемы часто бывает сложным, а развертывание решения может быть дорогостоящим. Поэтому Роуз рекомендовал «явные проверки согласованности в протоколе... даже если они налагают накладные расходы на реализацию».
В 2018 году в статье о технологиях повышения конфиденциальности, написанной Флорентином Роше и Оливье Перейрой, было показано, как использовать принцип надежности Постела в протоколе маршрутизации Tor , чтобы нарушить анонимность onion-сервисов и клиентов Tor. [5]
В 2023 году Мартин Томсон и Дэвид Шинази утверждали, что принцип надежности Постела на самом деле приводит к отсутствию надежности, включая безопасность: [6]
Недостаток может закрепиться как фактический стандарт. Любая реализация протокола должна воспроизводить аномальное поведение, иначе он несовместим. Это является как следствием терпимости к неожиданностям, так и результатом естественного нежелания избегать условий фатальной ошибки. Обеспечение совместимости в этой среде часто называют стремлением к « совместимости баг-к-багу ».