Yesterday there was an interesting conversation on Slack, about whether h3
needed a new ALPN for QUICv2, that made me realize I had a very lazy mental
model where applications needn't worry about QUIC versions and QUIC
versions could be oblivious to what the app is doing. This isn't true at
all.

The basic dilemma here is that either

(1) applications need explicit updates when new QUIC versions roll out, if
for no other reason than to say that they are fully compatible. This would
make it hard to get rid of old QUIC versions, and slow deployment of new
ones, as some apps never change. Or

(2) Each QUIC version has to enumerate which applications work with it and
which don't, which seems... not scalable. Or

(3) There is a compatibility matrix with quic versions as rows and
applications and columns, and any time a spec adds a row or column it
should fill that row or column out completely. Or

(4) There are strict limits on future versions so that they don't take away
existing functionality (e.g. there MUST be an ability to get reliable
streams). or

(5) Applications MUST have application-layer fallbacks if some QUIC
features aren't available (the way MASQUE can use QUIC STREAM frames if
DATAGRAM isn't supported) - or maybe it can throw an application error

Maybe there's an alternative I can't see. The applicability draft
<https://www.ietf.org/archive/id/draft-ietf-quic-applicability-11.html#name-port-selection-and-applicat>
(currently in WGLC) says that each ALPN unambiguously defines the QUIC
version, which I guess is option (1).

There are second-order questions like: is this mediated through ALPN or
something else? But the first-order question is which layer has to manage
all this.

Reply via email to