On Thu, Nov 16, 2023, at 10:14 AM, Ludovic Courtès wrote:
My take is that the daemon rewrite in Guix will aim for 100%
compatibility at the protocol level (in fact part of what’s needed is
already available as (guix …) modules), probably with just the same
feature set.  Christopher Baines may have clearer ideas.

Excellent!

I am glad that Florian already emailed about this, I had similar thoughts.

I have long been a proponent of ensuring interoperability in the "store layer" between Nix, Guix, Tvix, and anyone else that wants to have an implementation. (To me, the daemon is just one possible implementation, an RPC bridge to another implementation.) There are some good developments on the Nix side in this space I've been meaning to email this mailing list about. Glad the recent guix-daemon work and ensuing discussion are finally getting me to do so! Here they are:
Furthermore, I hope that beyond merely ensuring some interop with what we have already, we work to further keep things in sync and hopefully converging (where was have diverging new features like Blake hashing in Guix and content-addressed derivations in Nix) going forward. To that end, I would love to set up an implementation-agnostic standard, maybe even an IETF standard (!).

I think while we all have different ideas (and should continue to have different ideas!) on what the user-facing package language looks like, we do essential agree on what this store interface looks like. It is a "narrow waist" which can be implemented numerous different ways, and used in numerous different high level packaging paradigms. It is this quality that makes it so worthy of standardization.

I’m interested in hearing how you view content-addressing and its use.
In Guix there’s one proposal based on ERIS:

  https://issues.guix.gnu.org/52555#8

Previously there was an experiment to implement what you described at
“partial substitution”:

  https://lists.gnu.org/archive/html/guix-devel/2021-01/msg00080.html

I have been talking a lot to Florian about these things too. Long ago I emailed Ludo and some others about the IPFS & Nix work. Since then RFC 133 was accepted, https://github.com/NixOS/rfcs/blob/master/rfcs/0133-git-hashing.md, which prepares the way for a lot of that, and more recently https://github.com/NixOS/nix/pull/9294 (merged) has begun the implementation.

It sounds like this ERIS plan and Tvix's content addressing are fairly similar --- use improved content addressing "underneath the hood". The thing I have been working on is trying to expose content-addressing all the way into the store path for end-to-end trustlessless.

I think for build artifacts, either way is fine. But for source code the end-to-end trustlessness is nice for treating things like Software Heritage as a substituter of last resort. (I made https://docs.softwareheritage.org/devel/swh-web/uri-scheme-api.html#get--api-1-raw-(swhid)- forto spit out raw git objects for https://blog.obsidian.systems/software-heritage-bridge/, but the pipelining latency issues mean something like SWH's "Vault API" is probably better.)

----------

That's a big wall of text, but glad it's all out there. Stuff is really cooking in all our ecosystems these days, and I'm very excited for where things are going!

John