From e45bdcee6ea0cb647fa33e26fe36d12b98833435 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 09:36:15 +0100 Subject: [PATCH 1/6] docs(roadmap): Remove TOC, GitHub has one built-in --- ROADMAP.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0e4028e06c2..45625644c73 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,4 +1,4 @@ -# rust-libp2p Roadmap +# rust-libp2p Roadmap Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to low). @@ -8,20 +8,6 @@ This is a living document. Input is always welcome e.g. via GitHub issues or pul This is the roadmap of the Rust implementation of libp2p. See also the [general libp2p project roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md). -## Table of Contents - - [QUIC support](#quic-support) - - [WebRTC support (browser-to-server)](#webrtc-support-browser-to-server) - - [Cross Behaviour communication](#cross-behaviour-communication) - - [Generic connection management](#generic-connection-management) - - [Kademlia efficient querying](#kademlia-efficient-querying) - - [Kademlia client mode](#kademlia-client-mode) - - [Optimize Hole punching](#optimize-hole-punching) - - [Streaming response protocol aka. the ultimate escape hatch](#streaming-response-protocol-aka-the-ultimate-escape-hatch) - - [WebRTC support (browser-to-browser)](#webrtc-support-browser-to-browser) - - [Improved Wasm support](#improved-wasm-support) - - [Handshake optimizations](#handshake-optimizations) - - [Bitswap implementation](#bitswap-implementation) - - [WebTransport](#webtransport) ### Alpha QUIC support From 8cbe881b464348992ded4783d71d44be75dc3027 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 09:37:35 +0100 Subject: [PATCH 2/6] docs(roadmap): Introduce done section --- ROADMAP.md | 68 +++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 45625644c73..7e9088e9959 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -9,30 +9,8 @@ This is the roadmap of the Rust implementation of libp2p. See also the [general roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md). -### Alpha QUIC support - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|--------------|--------|-------------------|---------------------------------------------------|------------------------------------------------|------------| -| Connectivity | Done | Q4/2022 | https://github.com/libp2p/rust-libp2p/issues/2883 | https://github.com/libp2p/test-plans/issues/53 | | - -QUIC has been on the roadmap for a long time. It enables various performance improvements as well as -higher hole punching success rates. We are close to finishing a first version with -https://github.com/libp2p/rust-libp2p/pull/2289. - -## WebRTC support (browser-to-server) - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|--------------|--------|-------------------|------------------------------------------|------------------------------------------------|-------------------------------------------------------------------| -| Connectivity | Done | Q4/2022 | https://github.com/libp2p/specs/pull/412 | https://github.com/libp2p/test-plans/pull/100 | [WebRTC (browser-to-browser)](#webrtc-support-browser-to-browser) | -We are currently implementing WebRTC for **browser-to-server** connectivity in -https://github.com/libp2p/rust-libp2p/pull/2622. More specifically the server side. This will enable -browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS -certificates. See https://github.com/libp2p/specs/pull/412 for in-depth motivation. - -Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC -stack. Though that should only happen after improved Wasm support, see below. ## Cross Behaviour communication @@ -71,15 +49,6 @@ First draft is in https://github.com/libp2p/rust-libp2p/pull/2828 We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate using `quinn` directly, replacing the wrapper. -## Kademlia efficient querying - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|--------------|-------------|-------------------|-------------------------------------------------|--------------|------------| -| Optimization | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/pull/2712 | | | - -Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency -usage of `libp2p-kad`. The rust-libp2p maintainers can pick this up unless iroh folks finish the -work before that. ## Kademlia client mode @@ -161,3 +130,40 @@ A WebTransport implementation in rust-libp2p will enable browsers to connect to where the latter only have a self-signed TLS certificate. Compared to WebRTC, this would likely be more performant. It is dependent on QUIC support in rust-libp2p. Given that we will support WebRTC (browser-to-server) this is not a high priority. + +## Done + +### Alpha QUIC support + +| Category | Status | Target Completion | Tracking | Dependencies | Dependents | +|--------------|--------|-------------------|---------------------------------------------------|------------------------------------------------|------------| +| Connectivity | Done | Q4/2022 | https://github.com/libp2p/rust-libp2p/issues/2883 | https://github.com/libp2p/test-plans/issues/53 | | + +QUIC has been on the roadmap for a long time. It enables various performance improvements as well as +higher hole punching success rates. We are close to finishing a first version with +https://github.com/libp2p/rust-libp2p/pull/2289. + +### WebRTC support (browser-to-server) + +| Category | Status | Target Completion | Tracking | Dependencies | Dependents | +|--------------|--------|-------------------|------------------------------------------|------------------------------------------------|-------------------------------------------------------------------| +| Connectivity | Done | Q4/2022 | https://github.com/libp2p/specs/pull/412 | https://github.com/libp2p/test-plans/pull/100 | [WebRTC (browser-to-browser)](#webrtc-support-browser-to-browser) | + + +We are currently implementing WebRTC for **browser-to-server** connectivity in +https://github.com/libp2p/rust-libp2p/pull/2622. More specifically the server side. This will enable +browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS +certificates. See https://github.com/libp2p/specs/pull/412 for in-depth motivation. + +Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC +stack. Though that should only happen after improved Wasm support, see below. + +### Kademlia efficient querying + +| Category | Status | Target Completion | Tracking | Dependencies | Dependents | +|--------------|-------------|-------------------|-------------------------------------------------|--------------|------------| +| Optimization | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/pull/2712 | | | + +Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency +usage of `libp2p-kad`. The rust-libp2p maintainers can pick this up unless iroh folks finish the +work before that. From b5fd22022e66f37cc64e4d69d69a23a8fcc8e60e Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 09:38:35 +0100 Subject: [PATCH 3/6] docs(roadmap): Move generic conn management up as it is in progress --- ROADMAP.md | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 7e9088e9959..bde6d5ed113 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -8,9 +8,17 @@ This is a living document. Input is always welcome e.g. via GitHub issues or pul This is the roadmap of the Rust implementation of libp2p. See also the [general libp2p project roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md). +## Generic connection management +| Category | Status | Target Completion | Tracking | Dependencies | Dependents | +|----------------------|-------------|-------------------|---------------------------------------------------|--------------|------------| +| Developer Ergonomics | in progress | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | | +Today connection management functionality in rust-libp2p is limited. Building abstractions on top is +cumbersome and inefficient. See https://github.com/libp2p/rust-libp2p/issues/2824. Making connection +management generic allows users to build advanced and efficient abstractions on top of rust-libp2p +First draft is in https://github.com/libp2p/rust-libp2p/pull/2828 ## Cross Behaviour communication @@ -29,17 +37,14 @@ protocols) between `NetworkBehaviour` implementations. Long term we might consider a generic approach for `NetworkBehaviours` to exchange data. Though that would deserve its own roadmap item. -## Generic connection management - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|----------------------|--------|-------------------|---------------------------------------------------|--------------|------------| -| Developer Ergonomics | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | | +## Kademlia client mode -Today connection management functionality in rust-libp2p is limited. Building abstractions on top is -cumbersome and inefficient. See https://github.com/libp2p/rust-libp2p/issues/2824. Making connection -management generic allows users to build advanced and efficient abstractions on top of rust-libp2p +| Category | Status | Target Completion | Tracking | Dependencies | Dependents | +|--------------|--------|-------------------|---------------------------------------------------|-----------------------------------------------------------------|------------| +| Optimization | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2032 | [Cross behaviour communication](#cross-behaviour-communication) | | -First draft is in https://github.com/libp2p/rust-libp2p/pull/2828 +Kademlia client mode will enhance routing table health and thus have a positive impact on all +Kademlia operations. ## QUIC - evaluate and move to quinn @@ -49,16 +54,6 @@ First draft is in https://github.com/libp2p/rust-libp2p/pull/2828 We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate using `quinn` directly, replacing the wrapper. - -## Kademlia client mode - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|--------------|--------|-------------------|---------------------------------------------------|-----------------------------------------------------------------|------------| -| Optimization | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2032 | [Cross behaviour communication](#cross-behaviour-communication) | | - -Kademlia client mode will enhance routing table health and thus have a positive impact on all -Kademlia operations. - ## Optimize Hole punching | Category | Status | Target Completion | Tracking | Dependencies | Dependents | From 90fd6d4e1d30d7b4953a9b144057f677907a9b30 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 09:39:04 +0100 Subject: [PATCH 4/6] docs(roadmap): Remove handshake optimizations on TCP See also https://github.com/libp2p/go-libp2p/pull/1959 --- ROADMAP.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index bde6d5ed113..b8f4e5507a0 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -102,19 +102,6 @@ argue that that demand follows this roadmap item and not the other way round.) Once WebRTC for browser-to-server is complete, we can begin work on **browser-to-browser** and complete the WebRTC connectivity story. We need to improve rust-libp2p's WASM story first. -## Handshake optimizations - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|--------------|--------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|------------| -| Optimization | todo | Q2/2023 | Security protocol in multiaddr https://github.com/libp2p/specs/pull/353 and early muxer negotiation https://github.com/libp2p/rust-libp2p/issues/2994 | | | - -Short term, investing into rust-libp2p's QUIC support will likely give us a larger performance win, -thus neither of the two optimizations is planned for 2022. While great to have, it has not been -requested from any rust-libp2p users. - -Long term, given that this will give us a great performance gain, we should definitely tackle it. It -also allows us to catch up and thus be consistent with go-libp2p. - ## WebTransport | Category | Status | Target Completion | Tracking | Dependencies | Dependents | From f257a74cbcf8713d3f8b2d01c790cf8651cd12b6 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 09:39:33 +0100 Subject: [PATCH 5/6] docs(roadmap): Remove streaming response In light of the HTTP work, it needs more thought whether it is worth doing. --- ROADMAP.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index b8f4e5507a0..8e7e6e20e1a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -69,17 +69,6 @@ action](https://discuss.libp2p.io/t/decentralized-nat-hole-punching-measurement- case you want to help. Based on this data we will likely find many optimizations we can do to our hole punching stack. -## Streaming response protocol aka. the ultimate escape hatch - -| Category | Status | Target Completion | Tracking | Dependencies | Dependents | -|----------------------|--------|-------------------|---------------------------------------------------|--------------|------------| -| Developer ergonomics | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2657 | | | - -rust-libp2p is very opinionated on how to write peer-to-peer protocols. There are many good reasons -for this, and I think we should not change directions here. That said, the ultimate escape hatch - -allowing users to create a stream and do whatever they want with it - will make it easier for -newcomers to get started. - ## Improved Wasm support | Category | Status | Target Completion | Tracking | Dependencies | Dependents | From 24827aa43430d68782f9897a1b2fde541a6271aa Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 15 Feb 2023 10:19:02 +0100 Subject: [PATCH 6/6] docs(roadmap): Update item target completions --- ROADMAP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 8e7e6e20e1a..bbcdf4a746f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -50,7 +50,7 @@ Kademlia operations. | Category | Status | Target Completion | Tracking | Dependencies | Dependents | |--------------|--------|-------------------|---------------------------------------------------|--------------|------------| -| Connectivity | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | | +| Connectivity | todo | Q2/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | | We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate using `quinn` directly, replacing the wrapper. @@ -58,7 +58,7 @@ We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate usin | Category | Status | Target Completion | Tracking | Dependencies | Dependents | |--------------|--------|-------------------|----------|--------------|------------| -| Optimization | todo | Q1/2023 | | | | +| Optimization | todo | Q2/2023 | | | | We released hole punching support with [rust-libp2p `v0.43.0`](https://github.com/libp2p/rust-libp2p/releases/tag/v0.43.0), see also @@ -73,7 +73,7 @@ hole punching stack. | Category | Status | Target Completion | Tracking | Dependencies | Dependents | |----------------------|--------|-------------------|---------------------------------------------------|--------------|----------------------------------------------| -| Developer ergonomics | todo | Q2/2023 | https://github.com/libp2p/rust-libp2p/issues/2617 | | [WebRTC](#webrtc-support-browser-to-browser) | +| Developer ergonomics | todo | Q3/2023 | https://github.com/libp2p/rust-libp2p/issues/2617 | | [WebRTC](#webrtc-support-browser-to-browser) | The project supports Wasm already today, though the developer experience is cumbersome at best. Properly supporting Wasm opens rust-libp2p to a whole new set of use-cases. I would love for this to @@ -85,7 +85,7 @@ argue that that demand follows this roadmap item and not the other way round.) | Category | Status | Target Completion | Tracking | Dependencies | Dependents | |--------------|--------|-------------------|--------------------------------------------|-------------------------------------------------------------------------------------------|------------| -| Connectivity | todo | Q2/2023 | https://github.com/libp2p/specs/issues/475 | [Improved WASM support](#improved-wasm-support), https://github.com/libp2p/specs/pull/497 | | +| Connectivity | todo | Q3/2023 | https://github.com/libp2p/specs/issues/475 | [Improved WASM support](#improved-wasm-support), https://github.com/libp2p/specs/pull/497 | | Once WebRTC for browser-to-server is complete, we can begin work on **browser-to-browser** and complete the WebRTC connectivity story.