Making QUIC less constraining for innovation

"Martin Thomson" <mt@lowentropy.net> Thu, 24 October 2019 03:27 UTC

Return-Path: <mt@lowentropy.net>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id EDD0312010D for <quic@ietfa.amsl.com>; Wed, 23 Oct 2019 20:27:16 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.701
X-Spam-Level:
X-Spam-Status: No, score=-2.701 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=lowentropy.net header.b=Uuv+Tg9j; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=sM7i2X7R
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j894Yh5_vaPk for <quic@ietfa.amsl.com>; Wed, 23 Oct 2019 20:27:14 -0700 (PDT)
Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B54F41200F6 for <quic@ietf.org>; Wed, 23 Oct 2019 20:27:14 -0700 (PDT)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id 404554A3 for <quic@ietf.org>; Wed, 23 Oct 2019 23:27:13 -0400 (EDT)
Received: from imap2 ([10.202.2.52]) by compute1.internal (MEProxy); Wed, 23 Oct 2019 23:27:13 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lowentropy.net; h=mime-version:message-id:date:from:to:subject:content-type; s= fm3; bh=9d1lFnk1NK6sQdbM9Uh7sWE0rsVQ8GvW+zoU4ES+TgM=; b=Uuv+Tg9j 29xzQI3R57CBSV8+uQv1ZohC+CdsHsWhcxQWzEnGf7xEUoP9k56+Tep//20iE3ME vJF29fHzAnw4SOlJm/pd2/IhM9FeBlrrSmxHozUI0Vgc/jY7h3WF9Ddr0+PRdNXo RSIUWLrb6w0kY/tkDPWqq9vdjQ0vC8e7zOM8OYFBydmmnJcwsaRYslJhUuX5360t vGmRHC9Z49V/HMZFTG05bB7Rg7ZL4QMu72hZEKizwkHpCPokuIKScDc7dHpe/MrL MGpnFYv5XBQPDv3Mo0xKp7aPe4vrV5dgOFwAoAFYFgjEj4bYigJ/wDuqqeiCtVig qfirxyQpyCpFww==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=9d1lFnk1NK6sQdbM9Uh7sWE0rsVQ8 GvW+zoU4ES+TgM=; b=sM7i2X7RJAfZbUevTpws0Ts/BThyCpdeTOqCAv9rj5J0z hwrN56+I/8FkPANRudkbazVZ7z2LslTKwU+W/pSvmuuRJ4QsnXnVM4/mNQbi3Yms CyLwrFa2SHSeZ5fRYBb3Y4ivl5CIPRI2YgQrR/n5i4wUzwRaMD4jP3Wg+bP2ZGBw gF5RYihMxx3wsHGMczuPxmdofwulXYKCPSJY92cHnQYqnz0MBPSqnbnHvFwyfmLB 6qvz/dR+DsN8+u05hHDfnCH3+YcuKnNfL+YAfXQufvFci0lXBaZOik6CUJetfIc0 3xY1IhXzLXEW6Cvw0PH5RWcQK9MkCQ6WZ7pn0dT5w==
X-ME-Sender: <xms:EBqxXQOlIitDsK6_VpmoIdysd4LsmyJDYzR2SXjMRop0fHjlXuVUWw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedufedrledtgdeilecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhepofgfggfkfffhvffutgesthdtredtre ertdenucfhrhhomhepfdforghrthhinhcuvfhhohhmshhonhdfuceomhhtsehlohifvghn thhrohhphidrnhgvtheqnecuffhomhgrihhnpehgihhthhhusgdrtghomhenucfrrghrrg hmpehmrghilhhfrhhomhepmhhtsehlohifvghnthhrohhphidrnhgvthenucevlhhushht vghrufhiiigvpedt
X-ME-Proxy: <xmx:EBqxXXv9N3ix67XKCcZqIpYPzq3muDmzqc3yIVJ_rebgxInufPiyFw> <xmx:EBqxXQKfvAK_RF6uULKE1hgjE61Yt7a1-PuScMjHmHykGqVc6tE4WQ> <xmx:EBqxXQkWojig_8eGw1pn-BRk_Yg9zfUgdDqjht-LAXKuI30zK9ai3Q> <xmx:EBqxXZKwp4lXCRtukS7UKSvqIdvu6ZtjpTfiHPwOp0kYc9TdsRYRfg>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 69083E00A5; Wed, 23 Oct 2019 23:27:12 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.7-470-gedfae93-fmstable-20191021v4
Mime-Version: 1.0
Message-Id: <b8d5fe60-455e-44d4-8970-64fba07b49db@www.fastmail.com>
Date: Thu, 24 Oct 2019 14:26:52 +1100
From: Martin Thomson <mt@lowentropy.net>
To: quic@ietf.org
Subject: Making QUIC less constraining for innovation
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/k1KEZ08gqZoAptSaNvNq3Xe0SOU>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 24 Oct 2019 03:27:17 -0000

Issue 3020 (https://github.com/quicwg/base-drafts/issues/3020) raises the question of IANA registration policies in the core drafts.  The thesis is that the constraints on registrations pushes people into a small space of available numbers (in that specific case the space is 256 values) or has registration requirements that are too onerous.

We aim to address this in most places in QUIC and h3 with varints, which all have a similar registration scheme.  I think that David's intent with #3020 was to push more of our code to use varints.  But we're nothing if not consistent when it comes to these things and after lengthy discussion in Cupertino the group decided not to use varints for transport parameters.

Instead, we want to revise the registration policies to better allow implementations to experiment with new features (which is what I think David intended by the use of the word "innovation").  For varints, we divide the space into three partitions:

  0-63 = Standards Action
  64-16383 = Specification Required
  16384+ = Private Use

David's PR #3109 (https://github.com/quicwg/base-drafts/pull/3109) proposes the same split for transport parameters.  That greatly increases the size of the Private Use space.  The Private Use section is still a lot smaller than with varints, but the cut points are the same and the belief is that ~2^16 values is plenty of room to play with.

The main problem with all of these policies is described in RFC 6648, namely that a codepoint from Private Use space can get wide adoption.  RFC 6648 basically concludes that these can be impossible to move to a registered portion of the codepoint space.  Furthermore, RFC 8126 says that IANA doesn't register these codepoints and so no mechanism exists to prevent collisions.  That's a shame, because that's what registries are for.

---
I propose that we instead remove Private Use space from specifications and instead adopt a Specification Required policy for all codepoints except the first 64 values of a varint value (we can keep that as Standards Action).

To allow for experimentation and proprietary extensions, add the ability to provisionally register any codepoint.  Provisional registrations are registrations can omit values that would be required for a permanent registration, include an expiry date, and operate on First-Come, First-Served basis.  

This is intentionally lightweight so that anyone can initiate registration, even without complete information.  A Designated Expert will be assigned to ensure that the registries don't end up crammed with junk and to discourage use of codepoints with small encodings, large blocks of codepoints, or codepoints that are likely to be used by future standardization (those that are adjacent the first contiguous block of allocated values, which we might want to use later).  I emphasize discourage intentionally, because this can't be a hard rule - this is why we use a human for this job and not a machine.

To recognize that people will inevitably use values before they even provisionally register them, we should encourage people to select from the space at random.  Random selection from a larger space greatly reduces the chances of collision.  For varints, people will be encouraged to choose values that have the longest encoding tolerable for their use case.  In particular, extensions that are fully proprietary will be encouraged to use values that encode to 4 or 8 bytes.  I recognize that this might not avoid people having inflated notions of the value of their extension.  And maybe it's not worth protecting the 2 byte space on the basis that we might never run out of the 16320 values available.  Either way, I think that it's worth providing some text to help the expert in case this protocol gets unexpectedly busy.

Registrants are specify the codepoint they want when registering, rather than have IANA make an allocation on request.  For standards that want to use codepoints that are adjacent the first set of values, we might still use TBD in specifications to avoid having the same value specified in multiple specifications.  The TLS working group had the same codepoint in three different drafts last year, which wasn't great.

Provisional registrations can be removed or refreshed after a year (period negotiable) after consultation with the expert, who is encouraged to consult with the broader community. Experts would be advised to refresh registrations unless there is evidence that the value is no longer in use and there is a need to free up space for new registrations.

The motivation behind this proposal is to recognize that the overriding goal of a protocol registry is to avoid the interoperability failures that arise from codepoint collisions.  In particular, registries are not an access control mechanism.