What is this?
A minimal set of things that enables interop of independently created IPFS implementations with PL-maintained ones: Kubo and Helia.
What do we need to do?
There is an overlap with non-HTTP specifications listed in Specifications for end-to-end HTTP retrieval and deserialization of popular content-addressed data, namely Multihash, CID and UnixFS specs. Read that first.
In addition to that, to ensure other implementations can do P2P interop, we need:
- Clear (RFC 2119 style MUST vs SHOULD vs MAY) list of supported hash functions and codecs.
- IPFS DHT (provider records, ipns) and peer records (libp2p specs one is not enough, IPFS may have more strict list of hash functions or key types).
- Ongoing refactor of go-libp2p-kad-dht refactor creates great oportunity to write things down and document the current state of the system, allowing us to switch DHT work to be specs-first, like we did for HTTP Gateways last year.
- Bitswap
- it should be clear that sessions are userland, but provide implementers with useful notes about them
- IPNS
- V2-only records (without deprecated V1 signatures)
- secret lifecycle, import/export standards: seed phrases and key import/export serialization format
Interop goes both ways, which means we need to have specification path for interop with Iroh:
- Blake3 (how does Multihash deal with variable-length fuctions? how do we signal it in CIDs? tests)
- A way for retrieving Large Blocks over libp2p (instead of HTTP)
Why this is a good idea?
- Removes IPFS Stewards as innovation choke point when someone wants to implement alternative p2p client.
- As a byproduct, makes it clear whatβs possible in userland.
- Creates convergence point for content-addressed data onboarded with Iroh
Instances where this would have been helpful
- Iroh: If we had this, Iroh communicating divergence would not create waves in the ecosystem.
- Nabu is a minimal implementation of IPFS, incl. DHT.
- Kubo: removing the need for JS-specific interop tests (we would like to supersede them with generic conformance ones, like we did for gateway component)