Re: Question about BCP 14 / RFC 8174

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 8/30/2025 12:24 AM, Carsten Bormann wrote:
On Aug 30, 2025, at 07:15, Christian Huitema <huitema@xxxxxxxxxxx> wrote:
Not that SHOULD effectively means "MUST UNLESS". That is, "You SHOULD do this" is equivalent to "You MUST do this, unless you have a very good reason not too" ... but the reason is generally left unstated, except in the "SHOULD but MAY" construct as in the examples above.
For a previous message, I asked an LLM to find BCP 14 SHOULD/RECOMMENDED usages without stated exception conditions, for example in RFC 8949.
It found some, including a NOT RECOMMENDED in

https://www.rfc-editor.org/rfc/rfc8949.html#section-3.4-10

Good to know that an LLM can help finding these.

But in this case, the whole paragraph is there to alert the registrant (who is the one addressed by the NOT RECOMMENDED) about the undesirable consequences of an exception to this NOT RECOMMENDED.
So I think in this instance we are well within the spirit of what is being discussed here.

This makes me not so sure we want to enshrine specific phrasings of the "You SHOULD do X because if you don’t, you get Y, which is less preferable because Z” (here: You SHOULD NOT do X̅ because if you do, you don’t get Y̅, which is preferable because Z) into further rulemaking.

This sub-thread about MUST/SHOULD started with Toerless questioning the use of MUST or MUST NOT in operational documents. I have to read a bit between the lines, but he seemed to be concerned that WG will specify that the operator MUST do something when in fact their was a bit of a gray area and some operators had a need to break the rule for good reasons, and that the strict requirement could lead to interoperability failures between those enforcing the mandate and those believing they cannot follow it. Should we somehow update BCP 14 to somehow qualify MUST statements in standards?

For me, that's the core of the difference between MUST and SHOULD. If a behavior is mandated by a MUST statement, not following it is a protocol violation, and the peers MAY take some action such as terminating the connection. It is indeed an interop failure, but that failure is caused by the peer not following the standard. The onus is on the offender to change their implementation and correct their behavior. On the other hand, if the recommended behavior is actually optional, not following it is OK. An entity who would refuse to interop because the peer doe not follow the recommendation is wrong. They, not their peers, have to change their implementation or their behavior.

All this has implications on how we write and review standards. If we are too strict and write "MUST" when there are in fact good reasons for exceptions, we cause future interop failures. But there are also consequences of being to lenient, because standards that allow exceptions do cause the kind of "standard drift" outlines in RFC 9413. Good standard writing means avoiding these two failure modes. If there are known exceptions, it is better to list them, using either something like "SHOULD but MAY" or "MUST ... UNLESS". If there are unknown exceptions, then the standard should use SHOULD, but it should also explain what to do if the peer does not follow the recommendation.

The good news is that many reviewers are aware of that. It is quite common to see last call reviews flagging the use of unqualified SHOULD and asking the authors to specify what kind of exceptions they have in mind. That's a behavior that we need to encourage -- and I don't think that we need to rewrite BCP 14 to do that.

As for Toerless original point, if the way a proposed standard is written does cause interop failure, the remedy is probably to file an errata and trigger a discussion in the working group.

-- Christian Huitema






[Index of Archives]     [IETF Annoucements]     [IETF]     [IP Storage]     [Yosemite News]     [Linux SCTP]     [Linux Newbies]     [Mhonarc]     [Fedora Users]

  Powered by Linux