2.1 RFC 2119 Keywords

A specification MUST declare its use of RFC 2119 keywords in its conventions article (§3.1).

The following keywords, when they appear in uppercase, MUST be interpreted as described in RFC 2119:

KeywordMeaning
MUST, MUST NOTAn absolute requirement or prohibition
SHALL, SHALL NOTSynonyms for MUST and MUST NOT
SHOULD, SHOULD NOTA requirement that may be set aside for a stated reason, the consequences of which are understood
MAYGenuinely optional
REQUIRED, OPTIONALSynonyms for MUST and MAY, used adjectivally

A specification MAY use a subset. Its conventions article MUST list which keywords it uses.

2.1.1 Lowercase is not a keyword #

The same words in lowercase carry no normative weight. This is not a loophole to be exploited: a lowercase "must" in a passage that reads as a requirement is an editing defect, because the reader cannot tell whether an obligation was intended.

An author writing a requirement MUST use the uppercase form. An author writing description SHOULD reach for a verb that is not a keyword at all — "is", "carries", "produces" — rather than relying on case to carry the distinction.

2.1.2 Requirements are stated against a role #

A specification with more than one party MUST state each requirement against the role rather than the program (§3.2). An obligation on a consumer binds whatever process is acting as the consumer, and one program may serve different roles on different interfaces.

2.1.3 SHOULD means something #

A SHOULD is not a soft MUST and not a decorative MAY. It marks a requirement with a real exception, and a specification using one SHOULD say what the exception is — either inline or in an adjacent note.

Edit this page