RFC 2119

Key words for use in RFCs to Indicate Requirement Levels

๐Ÿ“… published March 1997, from ietf

Key words for use in RFCs to Indicate Requirement Levels ๐ŸŽ€

okay so before we get into it, here's the lineup ๐Ÿซถ

  • RFC number: 2119
  • Title: Key words for use in RFCs to Indicate Requirement Levels
  • Author: S. Bradner, Harvard University
  • Date: March 1997
  • Category: Best Current Practice (BCP: 14) ๐Ÿฆ‹
  • Obsoletes / Updates: nothing listed in the title block, so it doesn't obsolete or update anything ๐Ÿ’…

Status of this Memo โœจ

this doc is an Internet Best Current Practice for the Internet Community, and it's literally asking for discussion and suggestions to make it better ๐ŸŒธ distribution of this memo is unlimited, so share it with everyone ๐Ÿงš

Abstract ๐Ÿ’–

so in lots of standards track docs, people use a handful of words to show what's required in the spec, and they usually capitalize them so you can spot them ๐Ÿ‘€ this doc says exactly how those words should be read in IETF documents. if you're an author who wants to follow these guidelines, put this line near the top of your doc:

   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.

and one more thing ๐Ÿ”ฅ the force of these words depends on the requirement level of the document they show up in, so the same word can hit different depending on where it lives ๐Ÿ’…

1. MUST โœจ

"MUST", or "REQUIRED" or "SHALL", means the definition is an absolute requirement of the spec. no wiggle room, no cap ๐Ÿ’œ

2. MUST NOT ๐Ÿ™ˆ

"MUST NOT", or "SHALL NOT", means the definition is an absolute prohibition of the spec. full stop, don't do it ๐Ÿ’€

3. SHOULD ๐ŸŒˆ

"SHOULD", or the adjective "RECOMMENDED", means there may be valid reasons in particular circumstances to ignore a particular item. but the full implications must be understood and carefully weighed before you pick a different path ๐Ÿงš

4. SHOULD NOT ๐Ÿ“

"SHOULD NOT", or "NOT RECOMMENDED", means there may be valid reasons in particular circumstances where the behavior is acceptable or even useful. but the full implications should be understood and the case carefully weighed before you implement any behavior with this label ๐Ÿซถ

5. MAY ๐Ÿฆ‹

"MAY", or the adjective "OPTIONAL", means an item is truly optional ๐ŸŒธ one vendor may include it because a marketplace needs it or because they think it makes the product better, while another vendor may skip the same item, and that's totally fine โœจ

an implementation that doesn't include a particular option MUST be prepared to interoperate with another implementation that does include the option, though maybe with reduced functionality ๐ŸŽ€ and in the same vein, an implementation that does include a particular option MUST be prepared to interoperate with another implementation that does not include the option (except, of course, for the feature the option provides.) it's a two-way street, bestie ๐Ÿ‘‘

6. Guidance in the use of these Imperatives ๐Ÿ’…

okay this part is giving responsibility ๐Ÿ˜ญ imperatives of the type defined in this memo must be used with care and sparingly. they MUST only be used where it is actually required for interoperation or to limit behavior that has potential for causing harm (e.g., limiting retransmisssions) for example, they must not be used to try to impose a particular method on implementors when that method isn't required for interoperability ๐Ÿ™ˆ

don't use these words as a power move to boss implementors around. only use them when it's really needed for things to work together or to stop something harmful ๐Ÿšซ

7. Security Considerations ๐Ÿ’€

not gonna lie, this section is serious and I'm here for it ๐Ÿ˜ญ these terms are frequently used to specify behavior with security implications. the effects on security of not implementing a MUST or SHOULD, or of doing something the spec says MUST NOT or SHOULD NOT be done, can be very subtle ๐Ÿ”ฅ document authors should take the time to spell out the security implications of not following recommendations or requirements, because most implementors won't have had the benefit of the experience and discussion that produced the spec. so please, explain the stakes ๐Ÿซถ

8. Acknowledgments ๐ŸŒธ

the definitions here are an amalgam of definitions taken from a bunch of RFCs. and a bunch of people helped out with suggestions, including Robert Ullmann, Thomas Narten, Neal McBurnett, and Robert Elz ๐Ÿงš๐Ÿ’–

9. Author's Address ๐ŸŽ€

   Scott Bradner
   Harvard University
   1350 Mass. Ave.
   Cambridge, MA 02138

   phone - +1 617 495 3864

   email - sob@harvard.edu
๐Ÿ“ฆ where this page comes from