RFC про фразы MUST, MUST NOT, RECOMMENDED, NOT RECOMMENDED, OPTIONAL

Во всяких интернетовских документах очень часто используются слова MUST, SHOULD, MAY и подобные. Например, в спецификации протокола PSGI, или в спецификации языка описания REST API Swagger.

Слова эти написаны большими буквами, и часто в начале документа есть абзац текста:

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119.

В этом абзаце перечислены 10 фраз:

Понятно, что эти фразы означают разные уровни требований, но что конкретно означает каждая фраза — не ясно. Точное объяснение содержится именно в RFC 2119.

После чтения RFC становится понятно, что эти 10 фраз означают не 10 разных уровней, а всего 5. Вот что написано в RFC:

Забавно, но в описании RFC встречается фраза, которой нет в абзаце из 10 фраз — "NOT RECOMMENDED".

Еще одну забавность я увидел в спецификации PSGI, версия 1.102 этой спецификации использует фразу "NOT REQUIRED", которая не была упомянута в RFC.

Мне очень нравятся стандарты (всегда проще следовать инструкции, чем изобретать свое), но, на мой взгляд, этот стандарт несколько сложен. Я считаю, что для описания 5 состояний нужно использовать 5 фраз, а не 11. Если я буду что-то писать с использованием этих слов, написанных большими буквами, то я буду использовать:

Такой способ описания никак не конфликтует с правилами, которые описаны в RFC 2119, но, на мой взгляд, такое использование все упрощает.

Иван Бессарабов
ivan@bessarabov.ru

11 ноября 2015