Re: QUIC Versions and Applications

"Roy T. Fielding" <> Wed, 28 April 2021 16:03 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id E688B3A122B for <>; Wed, 28 Apr 2021 09:03:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Status: No, score=-2.099 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Gqz2_jvNy0VW for <>; Wed, 28 Apr 2021 09:03:36 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 0365C3A122C for <>; Wed, 28 Apr 2021 09:03:01 -0700 (PDT)
X-Sender-Id: dreamhost|x-authsender|
Received: from (localhost []) by (Postfix) with ESMTP id 652F6781DB9; Wed, 28 Apr 2021 16:02:58 +0000 (UTC)
Received: from (100-96-16-49.trex.outbound.svc.cluster.local []) (Authenticated sender: dreamhost) by (Postfix) with ESMTPA id E349A78207A; Wed, 28 Apr 2021 16:02:57 +0000 (UTC)
X-Sender-Id: dreamhost|x-authsender|
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384) by (trex/6.2.1); Wed, 28 Apr 2021 16:02:58 +0000
X-MC-Relay: Neutral
X-MailChannels-SenderId: dreamhost|x-authsender|
X-MailChannels-Auth-Id: dreamhost
X-White-Blushing: 4e0820664aa92a78_1619625778192_1659254176
X-MC-Loop-Signature: 1619625778192:4090651189
X-MC-Ingress-Time: 1619625778191
Received: from (localhost []) by (Postfix) with ESMTP id 925048C4C2; Wed, 28 Apr 2021 09:02:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed;; h=from :message-id:content-type:mime-version:subject:date:in-reply-to :cc:to:references;; bh=5SvHib1kfXlZVjI8jzVhnI8fkP4=; b= SGX85rTcqAgMUircALwFTBKHuY2OHAkERFZ9ivP6cs9nxu+tWP1liVlAHHLkX8In rZRGtsOYD5GtmFrB2NzwzhtEvxNws8gnQvpJ40aUNOyjSTgsd2AQmDmobu5QeWDH 5Y+qL8/F68WtCjeA77MOdJF0AU5QPo92qYZonIXmxWU=
Received: from [] ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: by (Postfix) with ESMTPSA id 1F6418C4A4; Wed, 28 Apr 2021 09:02:54 -0700 (PDT)
X-DH-BACKEND: pdx1-sub0-mail-a40
From: "Roy T. Fielding" <>
Message-Id: <>
Content-Type: multipart/alternative; boundary="Apple-Mail=_98AFF779-E8CE-4C74-8F3B-0D383209C62B"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.\))
Subject: Re: QUIC Versions and Applications
Date: Wed, 28 Apr 2021 09:02:53 -0700
In-Reply-To: <>
To: Martin Duke <>
References: <>
X-Mailer: Apple Mail (2.3608.
Archived-At: <>
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 28 Apr 2021 16:03:41 -0000

It's almost as if application-layer protocols need two version numbers,
one to indicate wire syntax and another to implement semantic capability over
time within a compatible syntax. I wonder where I've heard that before?


> On Apr 28, 2021, at 8:54 AM, Martin Duke <> wrote:
> 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 <> (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.