Breaking changes vs namespace versioning
Matthew Wild <[email protected]> Thu, 26 Mar 2026 14:14:20 +0000
| Newsgroups | gmane.network.jabber.standards-jig |
|---|---|
| Message-ID | <CAJt9-x65JS1620ahC3hJ2w7hgFZWOP_NREXeJG2h7JsjKJGKMA@mail.gmail.com> |
Hi Florian, Since we're taking a tangent into namespace versioning, I've changed the subject to not distract from the XEP-0377 feedback thread. On Thu, 26 Mar 2026 at 13:53, Florian Schmaus <[email protected]> wrote: > > Hi Matthew, > > On 26/03/2026 14.19, Matthew Wild wrote: > > On Thu, 26 Mar 2026 at 13:02, Stephen Paul Weber > > <[email protected]> wrote: > >>> Generally, adding previously undefined elements is considered to be a > >>> breaking change that requires a new namespace, especially in a > >>> protocol that is already deployed. > >> > >> Adding new elements seems like the least breaking change? Unless they're > >> marked as manadatory, any implementation needs to be able to handle unknown > >> child elements in any position they don't expect anyway. > > > > Handling unknown child elements in unknown namespaces is certainly a > > requirement for XMPP implementations. But for a specific implemented > > namespace defined in a XEP, it is absolutely valid for implementations > > to reject elements which were not defined in the namespace's schema. > > We even have error conditions explicitly defined for use in such > > cases. > > > > I am personally not one of the people who feel most strongly about > > this, and there have been times in the past where I personally would > > have preferred to sneak in some elements to established namespaces (if > > the disruption would be lower than that caused by a namespace change). > > However it is a position that we have taken as a community since the > > namespace versioning was introduced, that generally schemas do not > > change after publication (I can imagine exceptions for very young > > unimplemented experimental XEPs). This is because some applications do > > choose the strict validation option (sometimes this is for technical > > reasons, because it ensures they can accurately translate XML to > > custom data structures). > > > > That many implementations will happily ignore extra elements just adds > > to the problems around this particular change, given the nature of > > these elements being user opt-ins (if any clients are sending them > > today, they are 100% being ignored). It's actually a perfect example > > of why namespace versioning was introduced. > > I am sorry, but this is not how I perceive the situation. > > I think we both agree that implementations are supposed to ignore > unknown elements. However, if I understood you correctly, you limit this > to unknown elements in an different namespace from the parent element. > I, on the other hand, believe this is also true for unknown elements in > the same namespace. > > In general, we want it to be fine for recipients to ignore unknown > elements (and probably attributes). This allows us to evolve a protocol > as long as possible without namespace bumps. This is news to me. Is this documented anywhere? My understanding of community consensus is that introduction of new elements and attributes constitutes a breaking change. Maybe I read the consensus wrong, or attitudes have shifted (was this ever documented beyond the text I quoted in XEP-0053 which doesn't exactly define "breaking change"?). If I implement strict schema validation in my implementation, and then the schema for the namespace changes, this is a "breaking change" for me. Unless we document somewhere that XMPP implementations should be forgiving of unknown elements/attributes (even in namespaces they believe they understand)? > Obviously, this only works if the new element (or attribute) can be > safely ignored by the recipient without breaking functionality. For > example, hints that the recipient could process, but doesn't have to. Noted. Though in the case of XEP-0377 which sparked this discussion, it clearly does not fall into this category - the XEP introduced various requirements determined by the presence or absence of the added elements, which existing implementations of the XEP would automatically violate. > I am not sure why we should artificially limit ourselves here and create > an extra burden due to additional namespace bumps if we don't have to? If everyone agrees that it's fine, I'm fine with that! As I noted in my previous mail, I don't feel strongly about this and none of my implementations generally reject unknown elements. > And that's me saying this. The person who also argues for strict > verification because it eventually increases the robustness of the > overall ecosystem. For example, rejecting "foo" as an the value of an > attribute declared to be xs:int, as it is clearly a violation of the > specification. I don't really understand how you can be in favour of strict and relaxed processing at the same time. But I don't necessarily need to understand :) It seems maybe we just have different ideas of what "strict verification" is. I think validating xs:int contents is just normal expected behaviour, I wouldn't call that "strict". Regards, Matthew _______________________________________________ Standards mailing list -- [email protected] To unsubscribe send an email to [email protected]