Re: Review of draft-toomim-httpbis-versions-00

Michael Toomim <toomim@gmail.com> Mon, 22 July 2024 19:41 UTC

Received: by ietfa.amsl.com (Postfix) id A3122C169408; Mon, 22 Jul 2024 12:41:58 -0700 (PDT)
Delivered-To: ietfarch-httpbisa-archive-bis2juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A2559C151063 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 22 Jul 2024 12:41:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.856
X-Spam-Level:
X-Spam-Status: No, score=-2.856 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, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=w3.org header.b="HDh+oN38"; dkim=pass (2048-bit key) header.d=w3.org header.b="Kw6Y/8GN"; dkim=pass (2048-bit key) header.d=gmail.com header.b="j3ifAXp0"
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AwN3D7vo9BhY for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 22 Jul 2024 12:41:54 -0700 (PDT)
Received: from mab.w3.org (mab.w3.org [IPv6:2600:1f18:7d7a:2700:d091:4b25:8566:8113]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 61641C14F6A9 for <httpbisa-archive-bis2Juki@ietf.org>; Mon, 22 Jul 2024 12:41:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=Subject:In-Reply-To:References:To:From:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=dAyFIn4nqC/gGU5xPd8xGOD7pTC0/fUabFoskFDsEac=; b= HDh+oN38nAapqwYH0XLxMHgIBgQ8qUmmPWbJEPweAhM4cnZVoHKi0hRrY15+96jNgFx1PLxIEIYuz S/LN1vbVs3rIpYStnhVxwrQj8dk2EZ7Jmqe38lbVHZZSfgnK5FNF+duxDR1xxqrMNIyOJtUjSTeKu DKLZLmPWf3mU0iA0xDPwrxinKHjOwCr0Cp2z2LR4tYIa968QFOUPrtZiKSHUpQBMVi2vnTUmvwlwC Yu3c3YCbP6Ei8X2xE/wZ91SxOOuSgUfoa/F4Qr/AXHIVqIah86CwUW7alBqLtnXzhVvZ876YOMLw2 ZhL5UtRkXBA30gde2Dw7qqsRRavdpJG7rw==;
Received: from lists by mab.w3.org with local (Exim 4.96) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1sVyuH-00HFY0-0C for ietf-http-wg-dist@listhub.w3.org; Mon, 22 Jul 2024 19:41:13 +0000
Resent-Date: Mon, 22 Jul 2024 19:41:13 +0000
Resent-Message-Id: <E1sVyuH-00HFY0-0C@mab.w3.org>
Received: from ip-10-0-0-144.ec2.internal ([10.0.0.144] helo=pan.w3.org) by mab.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sVyuF-00HFX5-0B for ietf-http-wg@listhub.w3.internal; Mon, 22 Jul 2024 19:41:11 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=In-Reply-To:References:To:From:Subject:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=dAyFIn4nqC/gGU5xPd8xGOD7pTC0/fUabFoskFDsEac=; t=1721677271; x=1722541271; b=Kw6Y/8GNln36GTugHR4t5URXP3CU8LaLRjjHqyvZesOZ3TZ 6PIlndj/u/5fgWECyICoBF3TZkvgZbXgAjg1i3dmvmUTebQ93qmSmzrM7wfBzW7vNbIK5T2JM3m9J O0Lk5kk1nJcAh/G3UxGvPfpkjfcyOGyFWn+k+RJ5KtCwhZXjCP8HqVGjQweY0H8Ll7Yw9uHObkXBS ca8elXfwbu7Ee+UrNyxEjjFXeQPa2thUqbOaLfdthWYQYLf3bng5mGz0t2xz4RXhHkdt4oBXi4B+j CAQIRGvo0gk/4NWDX774pqEayVK+RKr5MC0KGJuvql9mIRb4jE+wl2WW5RAuSC4Q==;
Received-SPF: pass (pan.w3.org: domain of gmail.com designates 2607:f8b0:4864:20::535 as permitted sender) client-ip=2607:f8b0:4864:20::535; envelope-from=toomim@gmail.com; helo=mail-pg1-x535.google.com;
Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by pan.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sVyuE-00Bezw-0V for ietf-http-wg@w3.org; Mon, 22 Jul 2024 19:41:10 +0000
Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-7a0e8b76813so1312866a12.3 for <ietf-http-wg@w3.org>; Mon, 22 Jul 2024 12:41:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721677266; x=1722282066; darn=w3.org; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=dAyFIn4nqC/gGU5xPd8xGOD7pTC0/fUabFoskFDsEac=; b=j3ifAXp0Epo2eVzsuRg/2VGtrt1zmwUHC1WsXwn7uGlltXWmfz+GKisPyPm+wbQfXA cEZEzLU8DOATXcyfJ79bOc4xRgkDqrjfrJWxaba0Y4guEe2HQZKd4PJpdnIY/jHfflkJ p1g+4BI4ofefj+QGepRWZ8Kel63Ru6EfxZbyERWXAGopKRAYCPpOs58kWUEwVAP+JR29 zCUjn7V4OrN3SerJGGsaU6UJphEtE93iQ4KpZtzTvuOL4uhLAn6E0B0jOrS2+dBDcZqe 0Os0hMG9TSsmo6N+x254uYsWJ7vehK7Gc7yYASBm8DZKnU0q5oJdqhiAX4ayZCHSPBfy eRpA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721677266; x=1722282066; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=dAyFIn4nqC/gGU5xPd8xGOD7pTC0/fUabFoskFDsEac=; b=FBFQhV3B5UI7d/5VAdif89EEawn9w+4v82JW/ahncfdgPlnpApwZfowVfKnp9LsIjz bEjHsMViguoHkP0YdAiZi/o84CcaZTCkQGqab4V47dt/b2KHWCVjk6HTubabJwBVaV1R DsWkSfhxdKebW/XUGxMox7gQ4MPTwmJKJ2ESA+RxOaCVBnyfjRV63UTzP9IS1TR9FUW/ Gav3+K5ljwysoJJtaDmQjxGKv/JZgE7tn9MRY2Glv2fxjn1ARIsEu/iQ8tKMt6OiC4BM Sz8E75JKDfq4b2/D9jdDhvgfHifeTVxkIyqrMEmktVJr7URiuoE46iLfyRDwT9snN1Jw M3Zg==
X-Gm-Message-State: AOJu0YxH/T3GKx42/luQjTgc95wH8ARSPSziXvpdK7BtSkEUg0HVmmx+ SHF9KKcqHvhZTwlalxsT207F29DSByLgYGPkyYmBM5KPgk0oNOEo/qzSHYQrIBc=
X-Google-Smtp-Source: AGHT+IFcq81M2sBPvZZ3qxlh5cU30CVeFElRyXlebImWepHlq7+rj9L66//Q86yrKSAzUtqtD0r7Yg==
X-Received: by 2002:a05:6a20:12c9:b0:1c0:e997:7081 with SMTP id adf61e73a8af0-1c4285f0cfamr9861237637.29.1721677265461; Mon, 22 Jul 2024 12:41:05 -0700 (PDT)
Received: from ?IPV6:2001:67c:370:128:2ca2:840:5af6:a931? ([2001:67c:370:128:2ca2:840:5af6:a931]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fd6f454bb2sm58485495ad.237.2024.07.22.12.41.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Jul 2024 12:41:05 -0700 (PDT)
Content-Type: multipart/alternative; boundary="------------goiUssCxOfN48jnmBN07crhZ"
Message-ID: <0a25c83e-6941-464e-9252-8ca98960226a@gmail.com>
Date: Mon, 22 Jul 2024 12:41:04 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Michael Toomim <toomim@gmail.com>
To: HTTP Working Group <ietf-http-wg@w3.org>, Braid <braid-http@googlegroups.com>, Peter van Hardenberg <pvh@pvh.ca>
References: <172046173132.445281.15041630415895010148@dt-datatracker-5f88556585-j5r2h> <ff54cd4f-c30e-4447-8744-3297e53b74be@gmail.com> <16912382-c530-4508-b457-4397d06acd46@gmail.com>
Content-Language: en-US
In-Reply-To: <16912382-c530-4508-b457-4397d06acd46@gmail.com>
X-W3C-Hub-DKIM-Status: validation passed: (address=toomim@gmail.com domain=gmail.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-5.1
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, DMARC_PASS=-0.001, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, W3C_AA=-1, W3C_DB=-1, W3C_WL=-1
X-W3C-Scan-Sig: pan.w3.org 1sVyuE-00Bezw-0V d878779cedd3de1fb994f7e6b8522070
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Review of draft-toomim-httpbis-versions-00
Archived-At: <https://www.w3.org/mid/0a25c83e-6941-464e-9252-8ca98960226a@gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/52093
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <https://www.w3.org/email/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

Peter, thank you for your interest! I'm excited that you are bringing up 
performance for discussion! There's a lot to say on that, and I give an 
overview below:

*== Compression & Performance ==*

First, let me correct a big misinterpretation— this work absolutely 
prioritizes *high-performance*, *realtime* data synchronization. It 
should support thousands of mutations per second. Our implementations 
are higher-performance <https://josephg.com/blog/crdts-go-brrr/> than 
Automerge, for instance. I regularly work today with a doc composed of 
110,000 edits. It loads instantly, thanks to some great Version-Types 
we've designed.

The Version-Type (in the proposed Version-Type header) is the way you 
get performance increases. The key to performance is managing history 
growth. You manage that by finding a pattern in history, and then 
compressing or ignoring history. You can express those patterns as a 
Version-Type spec. (There's a robust theory behind this called Time 
Machines.)

I apologize that this wasn't clear in the draft -00. I thought this 
would be an advanced feature that people wouldn't comment on for a bit — 
but am pleasantly surprised to hear your interest in it! I will be 
adding more clarity to the spec on Version-Types, and already have begun 
doing so in github:

    https://github.com/braid-org/braid-spec/blob/master/draft-toomim-httpbis-versions-01.txt#L885

I'd also encourage you to check out this sketch of how to bake RLE into 
HTTP Header Compression:

    https://braid.org/meeting-69/header-compression
    https://braid.org/video/https://invisiblecollege.s3.us-west-1.amazonaws.com/braid-meeting-69.mp4#4166

In any case, keep in mind that at this stage, we need to know only 
whether there is /interest/ in this area of work — not whether this 
particular spec meets your needs. If we adopt this work into the HTTP 
WG, we will get a chance to change or rewrite any part of the spec. This 
spec is just a starting point to get discussion going. So think of this 
as a problem statement rather than a solution statement.

*== PUTs ==*

As for PUTs, I suspect you might be thinking about HTTP/1.0 where each 
PUT might require a new TCP connection with its own TLS handshake. But 
keep in mind that with HTTP/2 and 3, all HTTP semantics are expressed in 
binary, and a PUT is usually just a single packet! This is just as 
efficient as any hand-rolled protocol you have, and it has the advantage 
of being interoperable with all of HTTP.

*== History Retention ==
*

This versioning model supports Time Machines 
<https://braid.org/time-machines>— the beauty of which is that peers 
become free to independently choose how much history to store. An 
archival peer can store the full history. A light client can store just 
the latest version (see the amazing Simpleton 
<https://braid.org/simpleton> client, which needs zero history).

So each peer can choose how much history to store. If a peer doesn't 
have enough history to merge an edit, it can simply request that history 
from another peer. In this draft, you do so by requesting a GET with 
both Version and Parents headers specified.

*== Signatures & Validation ==
*

This is out of scope for this proposal on versions. However, (a) there 
are some Version-Types that double as signatures. When this happens, it 
can be specified by authoring a Version-Type spec to articulate the new 
constraint. And (b) this is a generally important area of work that I 
encourage.

Cheers!

Michael

On 7/22/24 11:44 AM, Michael Toomim wrote:
>
> We've got divergent discussion threads that I'm merging together.
>
> First, Peter Van Hardenberg (of Ink & Switch, Local-First, and 
> Automerge) wrote this initial review of the draft. He's cc'd, and we 
> can respond in this thread.
>
> ------------------------
> -- Peter Van Hardenberg: --
> ------------------------
>
> Hi Michael,
>
> I had a quick look at the spec and gave some thought to whether we'd 
> want to adopt it. I think right now it has quite a lot of per-version 
> overhead, and viewing this through a local-first lens, one can imagine 
> having to publish a large number of versions each as separate PUT 
> calls. You might want to consider supporting ranges for PUT in a 
> single message.
>
> Overall, our goals appear to differ from what you're proposing here so 
> this feedback may not be particularly important. My sense is that the 
> expected granularity of changes for Braid is relatively large and that 
> the frequency is relatively long -- on par with a changed HTML form 
> submission, perhaps. We spend quite a lot of our time thinking about 
> optimizing updates for potentially thousands of edits and trying to 
> minimize the number of round trips required to synchronize state in 
> both directions. You mention that the design intends to be optimizable 
> but I didn't see much in the text that clarified how.
>
> One other observation is that this spec does not appear to prioritize 
> retention of history:
> >      - If the Parents header is absent, the server SHOULD return a
> >      single response, containing the requested version of the resource
> >      in its body, with the Version response header set to the same
> >      version.
> This design may centralize the system, as clients default to receiving 
> "flattened" versions of resources and thus may not be able to merge 
> changes from other sources.
>
> Last, have you considered specifying some kind of signature / 
> validation feature? If clients are applying patches iteratively, it 
> might help for them to be able to validate that they're in the 
> expected state either before or after applying a patch.
>
> All the best,
> -p
>
> On 7/15/24 6:26 PM, Michael Toomim wrote:
>>
>> Hi everyone in HTTP!
>>
>> Last fall we solicited feedback on the Braid State Synchronization 
>> proposal [draft 
>> <https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-braid-http-04>, 
>> slides 
>> <https://datatracker.ietf.org/meeting/118/materials/slides-118-httpbis-braid-http-add-synchronization-to-http-00>], 
>> which I'd summarize as:
>>
>>     "We're enthusiastic about the general work, but the proposal is
>>     too high-level. Break the spec up into multiple independent
>>     specs, and work bottom-up. Focus on concrete 'bits-on-the-wire'."
>>
>> So I'm breaking the spec up, and have drafted up the first chunk for 
>> you. I would very much like your review on:
>>
>>     *Versioning of HTTP Resources*
>>     draft-toomim-httpbis-versions
>>     https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions-00
>>
>> Versioning is necessary for state synchronization—and occurs in a 
>> range of HTTP systems:
>>
>>   * Caching
>>   * Archiving
>>   * Version Control
>>   * Collaborative Editing
>>
>> Today, HTTP has resource versions in the Last-Modified and ETag 
>> headers, and sometimes embeds versions in URLs, like with WebDAV. 
>> Each of these options serves some needs, but also has specific 
>> limitations. An improved general approach is proposed, which provides 
>> new features, that could enable cool new applications, such as 
>> incrementally-updated RSS feeds, and could simplify existing 
>> specifications, such as resumeable uploads, and history compression 
>> in OT/CRDT algorithms.
>>
>> I would love to know if people find this work interesting. I think we 
>> could improve performance, interoperability, and be one step closer 
>> to having Google Docs power within HTTP URLs.
>>
>> Michael
>>
>> -------- Forwarded Message --------
>> Subject: 	New Version Notification for 
>> draft-toomim-httpbis-versions-00.txt
>> Date: 	Mon, 08 Jul 2024 11:02:11 -0700
>> From: 	internet-drafts@ietf.org
>> To: 	Michael Toomim <toomim@gmail.com>
>>
>>
>>
>> A new version of Internet-Draft draft-toomim-httpbis-versions-00.txt 
>> has been
>> successfully submitted by Michael Toomim and posted to the
>> IETF repository.
>>
>> Name: draft-toomim-httpbis-versions
>> Revision: 00
>> Title: HTTP Resource Versioning
>> Date: 2024-07-08
>> Group: Individual Submission
>> Pages: 19
>> URL: https://www.ietf.org/archive/id/draft-toomim-httpbis-versions-00.txt
>> Status: https://datatracker.ietf.org/doc/draft-toomim-httpbis-versions/
>> HTMLized: 
>> https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions
>>
>>
>> Abstract:
>>
>> HTTP resources change over time. Each change to a resource creates a
>> new "version" of its state. HTTP systems often need a way to
>> identify, read, write, navigate, and/or merge these versions, in
>> order to implement cache consistency, create history archives, settle
>> race conditions, request incremental updates to resources, interpret
>> incremental updates to versions, or implement distributed
>> collaborative editing algorithms.
>>
>> This document analyzes existing methods of versioning in HTTP,
>> highlights limitations, and sketches a more general versioning
>> approach that can enable new use-cases for HTTP.
>>
>>
>>
>> The IETF Secretariat
>>
>>