-
Notifications
You must be signed in to change notification settings - Fork 989
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Roadmap.md: Discuss the near term future of rust-libp2p #2997
Conversation
Here is my (@mxinden) proposal for a roadmap for the next 6 months for the rust-libp2p maintainers (@elenaf9, @thomaseizinger, @jxs and @mxinden) working on the rust-libp2p project. (rust-)libp2p is an open source and open community project. Thus: - I want to make sure we listen to the community and align our work accordingly. I invite **everyone** to leave feedback here. - The below is only planning work for the maintainers, not the community. Folks from the community may suggest and pick up work not prioritized (e.g. [Kademlia efficient querying](#kademlia-efficient-querying)) nor mentioned on this roadmap and we (maintainers) should be supporting them as best as we can. I consider this more of a short-lived document, enabling everyone working and using rust-libp2p to discuss and eventually align on a common mission, making prioritization explicit. Once done, it will likely be outdated quickly and thus I suggest never actualy merge it. In my eyes, continued project management is better done via GitHub issues and thus all the information here should eventually make it into the corresponding GitHub issues if not already the case. Also see: - [libp2p roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md) - [go-libp2p roadmap](libp2p/go-libp2p#1784) The items in this roadmap are ordered by importance where I define importance as: - Enable others to build with rust-libp2p before building components ourself. - e.g.[cross behaviour communication](#cross-behaviour-communication) over[Kademlia client mode](#kademlia-client-mode) where the former enables the latter - Invest into tools that enable us to work more efficiently - e.g.[Testground](#testground-abstraction) and [release process](#release-process) - Better do one thing well than many things close to right. - e.g. deprioritize [BitSwap implementation](#bitswap-implementation) and continue on [QUIC](#quic-support) even once first ieration is merged. That does not imply that we won't support community members implementing it. - Improve existing components before introducing new ones. - e.g.[Kademlia client mode](#kademlia-client-mode) before [WebTransport](#webtransport) I am curious what folks think and again encourage everyone to share their thoughts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is awesome, I just gave some drive by comments.
ROADMAP.md
Outdated
- [Testground abstraction](#testground-abstraction) | ||
- [TLS support](#tls-support) | ||
- [QUIC support](#quic-support) | ||
- [WebRTC support (browser-to-server)](#webrtc-support-browser-to-server) | ||
- [Release process](#release-process) | ||
- [Refactor event handling in `Swarm`](#refactor-event-handling-in-swarm) | ||
- [Cross Behaviour communication](#cross-behaviour-communication) | ||
- [swarm/handler: Decouple ConnectionHandler from {In,Out}boundUpgrade #2863](#swarmhandler-decouple-connectionhandler-from-inoutboundupgrade-2863) | ||
- [Generic connection management](#generic-connection-management) | ||
- [Kademlia efficient querying](#kademlia-efficient-querying) | ||
- [Kademlia client mode](#kademlia-client-mode) | ||
- [Hole punching](#hole-punching) | ||
- [Streaming response protocol aka. the ultimate escape hatch](#streaming-response-protocol-aka-the-ultimate-escape-hatch) | ||
- [Improved WASM support](#improved-wasm-support) | ||
- [Muxer handshake optimization](#muxer-handshake-optimization) | ||
- [Bitswap implementation](#bitswap-implementation) | ||
- [WebTransport](#webtransport) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of these are exciting!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I consider this more of a short-lived document, enabling everyone working and using rust-libp2p to discuss and eventually align on a common mission, making prioritization explicit. Once done, it will likely be outdated quickly and thus I suggest never actualy merge it.
Happy with that!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for putting this together @mxinden . I know @p-shahi will engage more here, but wanted to give a couple of comments.
I consider this more of a short-lived document, enabling everyone working and using rust-libp2p to discuss and eventually align on a common mission, making prioritization explicit. Once done, it will likely be outdated quickly and thus I suggest never actualy merge it.
It's ok if this document specifically is short-lived, but I think we need a document/table somewhere that communicates to stakeholders the major initiatives of the project and when we estimate completing them as described in https://docs.google.com/document/d/1XJiFG9tTCDi4RsKEAivHgcXueIqqwhkJDE-OKvy8yec/edit# . This "stakeholder roamdap" will be higher-level than the week-to-week plans that the engineering team is using to drive their execution. We see this with projects like FVM where they have https://fvm.filecoin.io/#roadmap-4 but then also fine grained detailed planning to hit those milestones.
The hat I would wear is: imagine you're someone like Juan or Molly who has been told they have to share tomorrow about what rust-libp2p is up to and what users can expect in the next 6 months or if they are trying to summarize the efforts across multiple EngRes teams. You'd want the higher-level items that really matter to collaborators and users.
If this document is the best we have currently (which is totally fine), I do think we should get it checked in but:
- We can communicate the document's status (actively being reviewed/updated in October)
- We make it clear how someone leaves comments or tracks the status of additional updates. I presume we have a tracking "2023 roadmap issue" that we link to from this document.
In my eyes, continued project management is better done via GitHub issues and thus all the information here should eventually make it into the corresponding GitHub issues if not already the case.
I agree, but have a few comments:
- Agreed GitHub issues are far superior for linking between other issues/prs, checklists, labeling, commenting etc. I think each milestone item below having a tracking makes sens.e. I see you have that in some cases. (That said, I would make sure to link to rust-libp2p items which can then link out to spec issues).
- We shouldn't require someone to go spelunking through github issues to get a sense of the high-level roadmap. I do think it's possible to have a world where you have all the upcoming epics on a clean board for someone to get the stakeholder view, but that will take setup. Until that happens, I think going with a document like you have now is probably the easiest way to go. Given the "stakeholder" roadmap is only a handful of milestones, I don't think it's a lot of duplicated work to have that be it's own document/presentation which is separate for where all the engineering work is happening day-to-day in GitHub issues.
In summary, until we have something alternative/better that communicates the direction of the project, I do think we should be driving to get this merged in.
I'd love to see benchmarking show up here because:
|
This is tracked on the [libp2p test-plans](libp2p/test-plans#44) see also libp2p/test-plans#53.
This is not interesting in itself for stakeholders. Instead it will be tracked with the cross behaviour communication. See also libp2p#2832.
This is not directly relevant for stakeholders. Will be tracked on the project board. https://github.com/orgs/libp2p/projects/4
Thanks for the input everyone.
|
@dignifiedquire, @melekes, @kpp, @AgeManning, @divagant-martian, @ackintosh, @ everyone: Want to give this a review? Anything you think is missing? Anything you would like to see prioritized? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is a good roadmap!
My suggestion would be to present it slightly differently. For some features (TLS, QUIC and WebRTC) it is pretty clear to outside users and stakeholders, what the outcome is.
For some of the other items, that intention is missing. I would suggest to introduce the following high-level items:
- Performance optimisations
- Developer ergonomics
I think those are goals that are easier to relate to. It is also easier to say: "In Q4, rust-libp2p will focus on TLS, QUIC, WebRTC and developer ergonomics".
On issue with this approach is that "developer ergonomics" is never complete but I don't think it needs to be. It can be on the roadmap for every quarter and just the concrete goals underneath get completed.
I think this also ties in well with @MarcoPolo's comment about benchmarks. Those can go under "Performance optimisations" as an initial starting point.
Last but not least, what is missing for me here is a concrete call-out to spec-compliance. It is easy to say that this should be implicit (i.e. all implementations always being compliant). However, if we don't give it any attention, it is easy to overlook. I'd love to have an epic for spec-compliance where we can f.e. group all the testground work in but also things like libp2p/specs#466.
ROADMAP.md
Outdated
## Cross Behaviour communication | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|--------|-------------------|---------------------------------------------------|---------------------------------------------------|-----------------------------------------------| | ||
| todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2680 | https://github.com/libp2p/rust-libp2p/issues/2832 | [Kademlia client mode](#kademlia-client-mode) | | ||
|
||
Today `NetworkBehaviour` implementations like Kademlia, GossipSub or Circuit Relay v2 can not | ||
communicate with each other, i.e. can not make use of information known by another | ||
`NetworkBehaviour` implementation. First step would be to exchange standard information about remote | ||
peers (e.g. supported protocols). | ||
|
||
Long term we might consider a generic approach for `NetworkBehaviours` to exchange data. Though that | ||
would deserve its own roadmap item. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is an important item that we should work on because it will be a nice ergonomic improvement for our users. At the same time though, it is only just that: An ergonomic improvement. A user can integrate identify and kademlia today, they just need to write a bit of code for it.
With that in mind, I think we should remove this item from this roadmap.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would like to keep the paragraph here to stress that generic cross-behaviour-communication is not on the roadmap. Otherwise folks might confuse the scope of this roadmap item.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am talking about the entire roadmap item, not just the generic approach :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should prioritize it. In my eyes having this feature significantly reduces the amount of complexity forced onto new users.
ROADMAP.md
Outdated
## Kademlia efficient querying | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|-------------|-------------------|-------------------------------------------------|--------------|------------| | ||
| in progress | 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 | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|--------|-------------------|---------------------------------------------------|-----------------------------------------------------------------|------------| | ||
| 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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these could go under a heading "Improving runtime efficiency".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am confused. Why is Kademlia a runtime or part of a runtime? Or as in "at run time"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The latter. A better term is probably "Performance improvements".
ROADMAP.md
Outdated
## Generic connection management | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|--------|-------------------|---------------------------------------------------|--------------|------------| | ||
| todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | | | ||
|
||
See https://github.com/libp2p/rust-libp2p/issues/2824 for motivation. Given that this will enable | ||
downstream users to easier integrate with rust-libp2p, I think this counts as a "improving existing | ||
components" over "introducing a new component". | ||
|
||
First draft is in https://github.com/libp2p/rust-libp2p/pull/2828 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My thoughts on this one are similar to cross-behaviour communication but it is a little less clear because you need to work around the fact that connections get established first and a behaviour would have to instantly kill it again. This might get the job done but is a bit hacky.
I am inclined to say that this should either also be removed or grouped under a "Developer ergonomics" heading.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This might get the job done but is a bit hacky.
As an aside, that is how https://github.com/sigp/lighthouse and https://github.com/paritytech/substrate do it today.
I am inclined to say that this should either also be removed or grouped under a "Developer ergonomics" heading.
In my eyes, this goes beyond ergonomics. I.e. it enables users to implement a clean eclipse defense.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps it should go under a "Security" heading then?
ROADMAP.md
Outdated
## Streaming response protocol aka. the ultimate escape hatch | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|--------|-------------------|---------------------------------------------------|--------------|------------| | ||
| 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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My way of looking at this is that we should make it easier for users to write NetworkBehaviour
s instead of giving them an escape hatch, hence I think we should remove this.
What we could do is add an item to the "Developer Ergonomics" heading (if you end up introducing it) that briefly mentions "Implementations of custom protocols".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My way of looking at this is that we should make it easier for users to write
NetworkBehaviour
s instead of giving them an escape hatch, hence I think we should remove this.
I am still undecided here. I think we need to do both. I fear that we will never be able to make NetworkBehaviour
(a) easy enough for a newcomer to implement a proof-of-concept, while (b) still supporting advanced protocols like Kademlia, Gossipsub and BitSwap.
I suggest we continue experimenting with both. I don't have an opinion on which one to prioritize.
ROADMAP.md
Outdated
## Handshake optimizations | ||
|
||
| Status | Target Completion | Tracking | Dependencies | Dependents | | ||
|--------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|------------| | ||
| 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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be grouped into "performance optimisations" as well.
Thanks for the input @thomaseizinger! On the matter of grouping items, I decided against it, but instead introduced categories for each item. Reason for not grouping items is that thus the prioritization across groups gets lost. E.g. while WebRTC and WebTransport are in the Connectivity category, one is high priority, the other is low priority, with many items from other groups in between. Let me know if that works for you.
I don't have a strong opinion. We removed the Testground item from this roadmap as it is not user facing. In the same spirit I suggest not tracking specification compliance here either. How about tracking it on https://github.com/orgs/libp2p/projects/4 instead? That is not to say that specification compliance is not a high priority.
As above, I suggest not tracking benchmarking on this roadmap given that it is (arguably) not user facing. On this matter, I would prioritize it below the testing effort along the lines of: "make it work, make it correct, make it fast". |
@mxinden There's a few typos in this sentence. Is this saying QUIC will continue to have higher priority than the BitSwap implementation once QUIC is merged?
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While this looks fairly ambitious to me, it's really great! Looking forward to it
Yeah the priority is a bit tricky. I think categories work. I guess it depends on what you think is more important to present to stake-holders:
I don't mind either way. Without asking some of the non-technical stakeholders, we are unlikely to know what they'd prefer.
I mostly mentioned it because it may be worth giving visibility to this to other stakeholders. I am certain that we will be giving it an appropriate amount of attention :)
👍 |
Yes @efrisch. In my eyes we should prioritize fixing and improving existing functionality (QUIC once merged) before new functionality (BitSwap). |
Thanks for all the input here. Looking forward to tackling these with all of you. Exciting times ahead. I am merging here. Feel free to post additional comments here or create pull requests against the file. This is a living document owned by all of us. |
Semver check failure is discussed in #2647, Testground failure is tracked in libp2p/test-plans#59. |
@mxinden : arg! I see that I never submitted a review I did on Tuesday. Arg - my bad. I'm submitting it now. |
Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to | ||
low). | ||
|
||
For a more detailed view see https://github.com/orgs/libp2p/projects/4/views/1. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A couple of things:
- That project board is private
- Maybe rename it to "rust-libp2p Detailed Roadmap"
- Add a readme https://github.com/orgs/libp2p/projects/4/settings ? It can have a note pointing back to this document.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mxinden : I took care of 2 and 3. I can't do 3 (I think because I don't have sufficient permissions.)
@@ -0,0 +1,189 @@ | |||
# rust-libp2p Roadmap | |||
|
|||
Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional things to potentially cover:
- Link to the specs vision roadmap (which should ideally cover core tenets of the project like security, stability, performance, and specs first). I suggested to @p-shahi in roadmap: reorder priority, reorganize sections go-libp2p#1831 (comment) to factor some of the tenets there so we can link to them from the various libp2p implementation roadmaps.
- How does someone leave feedback or comments. go-libp2p and testground went with a pinned tracking issue with a comment at the top: https://github.com/libp2p/go-libp2p/blob/master/ROADMAP.md#go-libp2p-roadmap-q422q123
- I think we need to add notes about how interoperability and performance testing are critical initiatives for the project and in many cases take higher priority than other initiatives listed here. go-libp2p has some notes on this here: roadmap: reorder priority, reorganize sections go-libp2p#1831
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mxinden : I'd like to get a callout about us focusing on interoperability testing right now. go-libp2p has this here: https://github.com/libp2p/go-libp2p/blob/master/ROADMAP.md#benchmarking-and-testing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can do the work here: #3091
| Developer ergonomics | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2680 | https://github.com/libp2p/rust-libp2p/issues/2832 | [Kademlia client mode](#kademlia-client-mode) | | ||
|
||
Today `NetworkBehaviour` implementations like Kademlia, GossipSub or Circuit Relay v2 can not | ||
communicate with each other, i.e. can not make use of information known by another |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
communicate with each other, i.e. can not make use of information known by another | |
communicate with each other, i.e. cannot make use of information known by another |
Here is my (@mxinden) proposal for a roadmap for the next 6 months for the rust-libp2p maintainers (@elenaf9, @thomaseizinger, @jxs and @mxinden) working on the rust-libp2p project.
(rust-)libp2p is an open source and open community project. Thus:
I consider this more of a short-lived document, enabling everyone working and using rust-libp2p to discuss and eventually align on a common mission, making prioritization explicit. Once done, it will likely be outdated quickly and thus I suggest never actualy merge it. In my eyes, continued project management is better done via GitHub issues and thus all the information here should eventually make it into the corresponding GitHub issues if not already the case.
Also see:
The items in this roadmap are ordered by importance where I define importance as:
I am curious what folks think and again encourage everyone to share their thoughts.