Requirement levels

The key words “must”, “must not”, “required”, “should”, “should not”, “recommended”, “may”, and “optional” in this report are to be interpreted as described in RFC 2119 [3]. Specifically:

must
This word means that a statement is an absolute requirement of the specification.
must not
This phrase means that a statement is an absolute prohibition of the specification.
should
This word, or the adjective “recommended”, mean that valid reasons may exist in particular circumstances to ignore a statement, but that the implications must be understood and weighed before choosing a different course.
should not
This phrase, or the phrase “not recommended”, mean that valid reasons may exist in particular circumstances when the behavior of a statement is acceptable, but that the implications should be understood and weighed before choosing the course described by the statement.
may
This word, or the adjective “optional”, mean that an item is truly optional.

In particular, this report occasionally uses “should” to designate circumstances that are outside the specification of this report, but cannot be practically detected by an implementation; see section 5.4. In such circumstances, a particular implementation may allow the programmer to ignore the recommendation of the report; it may even exhibit reasonable behavior. However, as the report does not specify the behavior, these programs may be unportable, that is, their execution might produce different results on different implementations.

Moreover, this report occasionally uses “required” to designate circumstances that are an absolute requirement of the specification, equivalent to “must”, and “not required” to note the absence of an absolute requirement.