[Standards] XMPP Council Minutes 2010-10-10

Dave Cridland dave at cridland.net
Sun Oct 14 11:17:08 UTC 2018


On Sat, 13 Oct 2018, 19:10 Tedd Sterr, <teddsterr at outlook.com> wrote:

> > *2) PR #706 - Update BCP 14 language to comply with RFC 8174* -
> https://github.com/xsf/xeps/pull/706
>
> I have to wonder whether "an implementation must" could mean anything
> different from "an implementation MUST" -- how else could it be
> interpreted? Would 'must' mean it's actually not mandatory, but 'MUST'
> does? I've always considered the upper-casing as little more than
> highlighting/emphasis.
>

Three things:

* Firstly, the easy bit - you must have considered that people may use
ordinary English words in their ordinary English meanings. So while one
can't say "an implementation must X" and mean anything but "X is
mandatory", should other phrasings be used the RFC 2119 interpretations may
not apply. This is particularly important with negations and "should",
which should always be considered a grey area in English usage.

* Secondly, RFC 2119 language is indicative of a requirement for
"interoperation or to limit behavior[sic] which has the potential for
causing harm". You can't say "An implementation MUST back this data onto a
SQL database", for example.

* Equally, not all interoperability requirements are spelt out (or indeed
should be spelt out) as RFC 2119 language. I personally find it easier to
write (and read) "The maximum number of items returned is ten" than the
more tortuous "Implementions MUST NOT return more than 10 items" - though I
appreciate that non-native English speakers often prefer the second.

This does mean that "an implementation must X" doesn't automatically mean
that an implementation has an absolute requirement to do X due to
interoperability or to limit behaviour which has the potential to cause
harm - even though the specification is saying that to conform, the
implementation must nonetheless do X. You're more likely to see such usage
with "recommended", however.

So if some author wrote "implementions must X" and really meant to say
"implementations MUST X", all that's missed is the reasoning; but an author
who wrote "implementations are recommended to do X", but really meant
"implementations SHOULD X" has changed the meaning (since
SHOULD/RECOMMENDED really means something much stronger than "recommended"
in normal English).

All that said it was fashionable a few years back to treat the RFC 2119
keywords as case-insensitive; I personally think this caused much more
trouble than it could possibly have solved.


> Anyway, one dirty Python program later, and it doesn't look like the most
> fun task for anyone (even considering only 'current' XEPs.) But from a
> quick look, most usage doesn't appear likely normative.
>
>
> *Dump follows…*
>
> Format is:
>  - one section per status (Active, Final, Draft, Proposed, Experimental)
>  - list of RFC-2119 magic words (upper and lower-case versions), with
> total counts for the section
>  - list of XEPs containing lower-case instances, and counts for each of
> those
>  - (negated-phrase counts are not separated, e.g. "MAY" is for both "MAY"
> and "MAY NOT")
>
> *** Active ***
>   MAY           102
>   MUST          145
>   OPTIONAL      4
>   RECOMMENDED   21
>   REQUIRED      3
>   SHALL         3
>   SHOULD        251
>   may           210
>   must          62
>   optional      5
>   recommended   17
>   required      12
>   shall         111
>   should        48
> XEP-0001    required=1, should=10, must=31, may=43, shall=39, recommended=2
>

"it is not recommended for such implementations to be included in the
primary release for a software product" - delightful. "Primary releases of
a software product SHOULD NOT include such implementations" would be the
best RFC 2119 rewrite, but note that you can't use RFC 2119 to tell people
what to release. (And yes, we could also use NOT RECOMMENDED, with the same
caveat).

The uses of "shall" are interesting - they're often used in the same sense
of an edict that RFC 2119 intends, but it's not clear that these are RFC
2119 cases.


> XEP-0002    must=1, may=4, shall=1
> XEP-0019    should=1, may=2
> XEP-0049    may=1
> XEP-0053    should=1, must=3, may=7, shall=38
> XEP-0054    should=2, must=1, may=3
> XEP-0055    required=1, shall=1
> XEP-0068    should=2, must=8, shall=1, recommended=1
> XEP-0076    may=1, shall=1
> XEP-0082    should=1, shall=1, recommended=1, optional=2
> XEP-0083    should=3
> XEP-0100    required=3, should=1, must=3, may=17, recommended=1
> XEP-0114    may=1
> XEP-0127    may=1
> XEP-0128    must=2, may=4
> XEP-0132    may=7, shall=11, recommended=2, optional=1
> XEP-0133    may=46, shall=2
> XEP-0134    should=1, must=5, may=3, shall=1
> XEP-0143    required=3, should=5, must=1, may=8, recommended=1, optional=1
> XEP-0145    required=1
> XEP-0147    should=1, may=2, recommended=1
> XEP-0148    may=5, shall=1
> XEP-0149    should=1, may=9
> XEP-0153    should=1, may=2, recommended=1
> XEP-0157    required=1, should=1, may=9
> XEP-0160    may=3, shall=1
> XEP-0169    should=1, must=1
> XEP-0170    may=2, shall=1, recommended=1
> XEP-0178    shall=1, recommended=1
> XEP-0182    required=1, may=3
> XEP-0183    may=4, shall=2
> XEP-0185    should=1, recommended=1
> XEP-0201    should=1, shall=3
> XEP-0205    required=1, must=2, may=12, recommended=2
> XEP-0207    should=3, may=2, shall=1
> XEP-0222    must=2, may=1, shall=1
> XEP-0223    must=1, may=1, shall=1
> XEP-0239    may=1, shall=2
> XEP-0245    recommended=1
> XEP-0263    shall=1
> XEP-0286    should=8, must=1, may=3, recommended=1, optional=1
> XEP-0295    should=3, may=3
>
> *** Final ***
>   MAY           75
>   MUST          195
>   OPTIONAL      8
>   RECOMMENDED   10
>   REQUIRED      7
>   SHOULD        143
>   may           41
>   must          6
>   optional      10
>   recommended   10
>   required      18
>   shall         8
>   should        19
> XEP-0004    required=2, should=9, must=1, may=8, shall=1
> XEP-0012    shall=2
> XEP-0030    required=1, should=1, must=3, may=17, optional=1
> XEP-0047    shall=2
> XEP-0077    required=14, should=2, must=2, may=4, shall=2, recommended=1
> XEP-0138    may=5
> XEP-0174    required=1, recommended=7, optional=8
> XEP-0199    should=2, may=2, shall=1
> XEP-0202    should=3, may=5, recommended=1, optional=1
> XEP-0203    should=2, recommended=1
>
> *** Draft ***
>   MAY           544
>   MUST          1499
>   OPTIONAL      53
>   RECOMMENDED   99
>   REQUIRED      44
>   SHALL         11
>   SHOULD        841
>   may           284
>   must          50
>   optional      19
>   recommended   25
>   required      64
>   shall         117
>   should        102
> XEP-0013    required=1, should=1, must=1, may=2
> XEP-0033    should=2, must=1, may=1, shall=1
> XEP-0045    required=11, should=3, must=6, may=18, shall=19,
> recommended=1, optional=4
> XEP-0048    should=2, may=2, recommended=1
> XEP-0050    required=5, should=7, may=5
> XEP-0059    should=2, may=4, shall=3
> XEP-0060    required=7, should=2, must=4, may=79, shall=14, recommended=1,
> optional=1
> XEP-0065    required=2, shall=2, optional=1
> XEP-0066    must=1, recommended=1, optional=2
> XEP-0070    should=1, may=3, shall=3
> XEP-0072    required=8, should=5, must=3, may=17, recommended=2, optional=1
> XEP-0079    should=3, may=5, shall=5
> XEP-0080    may=1, shall=5
> XEP-0084    may=1, shall=1
> XEP-0092    required=1, may=1
> XEP-0106    required=1, should=4, may=14, shall=2, optional=2
> XEP-0107    should=1, may=1, shall=1
> XEP-0108    should=1, may=2, shall=1
> XEP-0115    required=2, should=2, must=9, may=7, shall=2, recommended=1
> XEP-0118    should=2, may=2, shall=1
> XEP-0122    should=5, may=5, shall=6
> XEP-0124    required=3, should=3, must=1, optional=1
> XEP-0131    must=1, may=13
> XEP-0141    required=1, may=4
> XEP-0144    required=2, should=6, may=4, recommended=2
> XEP-0152    shall=1
> XEP-0155    required=6, should=1, must=5, may=26, shall=3
> XEP-0156    shall=1
> XEP-0158    required=3, should=4, must=3, may=8, shall=2
> XEP-0163    must=2, may=4, shall=5
> XEP-0166    shall=7, recommended=10, optional=1
> XEP-0167    shall=8
> XEP-0171    required=3, should=5, must=1, may=1, recommended=2, optional=1
> XEP-0172    may=1, shall=1
> XEP-0176    shall=2, optional=1
> XEP-0177    required=1, shall=1
> XEP-0184    shall=2
> XEP-0191    required=2, should=2, must=1, may=1, shall=6
> XEP-0198    should=1, may=1
> XEP-0206    required=1, should=1, may=1
> XEP-0220    should=2, must=1, shall=1
> XEP-0221    may=1, recommended=1, optional=1
> XEP-0227    should=1, may=5
> XEP-0231    must=1, may=1, optional=1
> XEP-0233    should=3, must=1, may=1, shall=1
> XEP-0249    shall=2
> XEP-0258    should=12, must=1, may=26, optional=1
> XEP-0260    shall=6
> XEP-0288    should=1, may=2
> XEP-0293    required=2, should=1
> XEP-0297    should=10, must=1, may=2
> XEP-0301    required=2, must=2, may=7, shall=1, recommended=3, optional=1
> XEP-0308    should=1, must=1, may=3
> XEP-0319    shall=1
> XEP-0368    should=4, may=1
> XEP-0387    should=1, must=3, may=1
>
> *** Proposed ***
>   MAY           32
>   MUST          77
>   OPTIONAL      7
>   RECOMMENDED   5
>   SHOULD        46
>   may           8
>   must          2
>   optional      1
>   required      6
>   shall         21
>   should        6
> XEP-0186    required=1, shall=5
> XEP-0234    required=1, shall=4, optional=1
> XEP-0280    required=2, should=1, must=1, may=3, shall=1
> XEP-0352    required=1, should=1, must=1, may=2
> XEP-0363    required=1, should=1, may=2, shall=1
> XEP-0381    should=3, may=1, shall=10
>
> *** Experimental ***
>   MAY           169
>   MUST          374
>   OPTIONAL      7
>   RECOMMENDED   12
>   REQUIRED      9
>   SHALL         6
>   SHOULD        128
>   may           80
>   must          27
>   optional      8
>   recommended   6
>   required      14
>   shall         3
>   should        59
> XEP-0283    should=1, may=2, shall=1
> XEP-0300    should=1, must=1, shall=1, recommended=1
> XEP-0313    required=3, should=10, must=4, may=16, optional=1
> XEP-0335    should=3, must=1
> XEP-0369    should=2, must=1, may=7, recommended=2, optional=4
> XEP-0373    required=3, should=10, must=2, may=8, optional=1
> XEP-0384    may=2
> XEP-0385    should=2, may=3, recommended=1
> XEP-0391    should=1, must=1
> XEP-0392    should=5, must=4, may=4
> XEP-0393    required=2, should=3, may=18
> XEP-0394    may=3
> XEP-0395    shall=1
> XEP-0396    must=1
> XEP-0397    required=2, should=2, must=5, may=1, optional=1
> XEP-0398    should=1
> XEP-0399    may=3
> XEP-0400    required=1, should=3
> XEP-0401    should=6, must=3, may=3
> XEP-0402    should=2
> XEP-0403    required=1, should=1, must=2, may=4
> XEP-0404    may=1
> XEP-0406    required=2, must=1, optional=1
> XEP-0407    should=2, may=2, recommended=2
> XEP-0408    may=1
> XEP-0409    should=1, must=1
> XEP-0410    should=3, may=2
>
> _______________________________________________
> Standards mailing list
> Info: https://mail.jabber.org/mailman/listinfo/standards
> Unsubscribe: Standards-unsubscribe at xmpp.org
> _______________________________________________
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.jabber.org/pipermail/standards/attachments/20181014/abe546f1/attachment-0001.html>


More information about the Standards mailing list