<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-balsamic-00" category="info" consensus="true" submissionType="IETF" obsoletes="2119, 8714" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title>Simplified Language for Specifying Interoperability</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-balsamic-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="21"/>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 44?>

<t>The key words used to establish interoperability requirements,
can be reduced to a single key word, "MUST".
All others are either redundant
or cover for latent interoperability issues
and can be discouraged.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/balsamic/draft-thomson-balsamic.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-balsamic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/balsamic"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The most cited RFC ever, RFC 2119 <xref target="BCP14"/>,
defines 10 key words -- phrases really --
for use in specifications.
THese key words have formed the backbone of interoperable specifications
in many fields,
not just the IETF.</t>
      <t>These words and phrases represent part of the identity of the IETF.
The list is also unnecessarily long.</t>
      <t>This note argues that a single key word suffices: "MUST".</t>
      <t>The remainder of this document provides arguments
for why all other key words are unnecessary.</t>
    </section>
    <section anchor="redundant-key-words">
      <name>Redundant Key Words</name>
      <t>Most of the set of 10 key words or phrases used are strictly redundant
with the term "MUST".</t>
      <section anchor="shall-and-required">
        <name>SHALL and REQUIRED</name>
        <t>The terms "SHALL" and "REQUIRED" are defined to have the same definition as "MUST".</t>
        <t>Neither term has ever been favoured relative to "MUST".</t>
        <t>Of the 803 documents published after RFC 9000,
644 of these cite BCP 14.
In those 644 documents,
the word "MUST" appears 17,327 times,
not including the quote from BCP 14.
The word "SHALL" appears just 810 times.</t>
        <t>This ratio (~21.4) is lower than for the RFCs between 2501 and 3000 (~8),
which suggests a decline in the popularity of "SHALL".</t>
        <t>As a perfect synonym of "MUST",
it would be easy to stop using "SHALL" entirely.</t>
        <t>The term "REQUIRED" has become even less popular than "SHALL".
Though frequency of usage in RFCs 2501 through 3000
is close to that of "SHALL",
it appears just 490 times in recent documents.</t>
        <t>This word lends itself more to the use of passive voice,
which has gradually fallen out of favour in technical writing.
This would be easier to retire than "SHALL".</t>
      </section>
      <section anchor="may-and-optional">
        <name>MAY and OPTIONAL</name>
        <t>A "MAY" or "OPTIONAL" define optional behaviour.</t>
        <t>On the face of it, these might seem necessary.
In defining interoperability,
every option that one actor might exercise
requires every other actor to support that choice.
That is, every "MAY" for one is a "MUST" for others.</t>
        <t>For instance, if a field in a message is optionally present,
every recipient of that message has to tolerate its presence or absence equally.
It is therefore more precise to define requirements in terms of the mandatory behaviour
of participants other than the one that can exercise choice.</t>
      </section>
      <section anchor="negations">
        <name>Negations</name>
        <t>Negations include "MUST NOT", "SHALL NOT", and "SHOULD NOT".
The undefined and confusing "MAY NOT" appears in several RFCs as well,
more early in the series,
but also as recently as RFC 9783.</t>
        <t>The inclusion of negations in key words is unnecessary.
Saying "MUST not do X" is equally comprehensible
to the shoutier "MUST NOT do X".</t>
        <t>It is often better to phrase such statements positively,
avoiding the use of negation entirely.
By specifying the expected reaction of other protocol participants
to a forbidden action --
such as to mandate the generation of a fatal error --
the prohibition is both more effective and more fully defined.</t>
      </section>
    </section>
    <section anchor="ambiguous-language-should-and-recommended">
      <name>Ambiguous Language: SHOULD and RECOMMENDED</name>
      <t>"SHOULD", its synonym "RECOMMENDED",
and its antonym "SHOULD NOT",
like the phrases from RFC 6919 <xref target="EXTRA"/>,
are best avoided in protocol specifications.</t>
      <t>The use of the term "SHOULD" is one of the most hotly debated
and misused
of the key words defined in BCP 14.
The IESG statement clarifying key word usage <xref target="IESG-KW"/>
takes special effort to identify some of these inappropriate uses.</t>
      <t>Use of "SHOULD" is almost always better phrased in less ambiguous terms,
by defining the preferred behaviour,
and the conditions where it is acceptable to deviate from that practice.</t>
      <t>In many cases,
"SHOULD" is used to cover deliberate ambiguity in specifications
where agreement on specifics could not be reached.
A commitment to stop using this language
would also lead to better specification discipline
and more interoperable specifications;
see also <xref target="RFC9413"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security of protocols can critically depend
on the precision of the language used in specifications.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IESG-KW" target="https://datatracker.ietf.org/doc/statement-iesg-statement-on-clarifying-the-use-of-bcp-14-key-words/">
          <front>
            <title>IESG Statement on Clarifying the Use of BCP 14 Key Words</title>
            <author initials="" surname="IESG" fullname="IESG">
              <organization/>
            </author>
            <date year="2025" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="EXTRA">
          <front>
            <title>Further Key Words for Use in RFCs to Indicate Requirement Levels</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>RFC 2119 defines a standard set of key words for describing requirements of a specification. Many IETF documents have found that these words cannot accurately capture the nuanced requirements of their specification. This document defines additional key words that can be used to address alternative requirements scenarios. Authors who follow these guidelines should incorporate this phrase near the beginning of their document:</t>
              <t>The key words "MUST (BUT WE KNOW YOU WON\'T)", "SHOULD CONSIDER", "REALLY SHOULD NOT", "OUGHT TO", "WOULD PROBABLY", "MAY WISH TO", "COULD", "POSSIBLE", and "MIGHT" in this document are to be interpreted as described in RFC 6919.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6919"/>
          <seriesInfo name="DOI" value="10.17487/RFC6919"/>
        </reference>
        <reference anchor="RFC9413">
          <front>
            <title>Maintaining Robust Protocols</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The main goal of the networking standards process is to enable the long-term interoperability of protocols. This document describes active protocol maintenance, a means to accomplish that goal. By evolving specifications and implementations, it is possible to reduce ambiguity over time and create a healthy ecosystem.</t>
              <t>The robustness principle, often phrased as "be conservative in what you send, and liberal in what you accept", has long guided the design and implementation of Internet protocols. However, it has been interpreted in a variety of ways. While some interpretations help ensure the health of the Internet, others can negatively affect interoperability over time. When a protocol is actively maintained, protocol designers and implementers can avoid these pitfalls.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9413"/>
          <seriesInfo name="DOI" value="10.17487/RFC9413"/>
        </reference>
      </references>
    </references>
    <?line 179?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Stuart Cheshire made the observation that a "MAY" for one is a "MUST" for others.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
CYei7h/VvslR/2cv8l++FAQOfRQAAA==

-->

</rfc>
