libp2p Requirements Doc - Roadmap to 1.0.0#39
Conversation
True. You have to get creative with emojis, see for example: |
ROADMAP-TO-FEATURE-COMPLETION.md
Outdated
| | Transports | Go | JS - Node.js | JS - Browser | Rust | | ||
| | -------------------------------------------- | :-----------: | :-----------: | :-----------: | :-----------: | | ||
| | **`TCP`** | :green_apple: | :green_apple: | :chestnut: | :green_apple: | | ||
| | **`WebRTC`** | :tomato: | :green_apple: | :green_apple: | :tomato: | |
There was a problem hiding this comment.
@mgoelzer here is an example of a table you can use for this section. You can use this to finalize the section and give you that table view you were looking for.
|
@mgoelzer any ETA to get this doc finished? I mean, the first pass with the table and all the content items that belong to libp2p so that we can iterate over it. |
|
@diasdavid What do you think about merging in the current state so we can iterate? I fixed up all the fruits and table structure. The initial description section lists some known deficiencies in the current doc. Alternative is to keep iterating in this PR. Either works for me. Also, these items are intentionally missing:
They seem like IPFS milestones, and I'm trying to segregate IPFS stuff from pure libp2p stuff. I left those in the IPFS requirements doc. |
REQUIREMENTS.md
Outdated
|
|
||
| ### libp2p Modules Implementations | ||
|
|
||
| The libp2p protocols are the protocol stack for the modular libp2p protocols library. These form a p2p-first network stack, with no assumptions, self description, and modular interfaces. More at https://github.com/ipfs/specs/tree/master/libp2p |
There was a problem hiding this comment.
Link broken. New one: https://github.com/libp2p/specs/
|
@mgoelzer @diasdavid a few thoughts:
|
It is actually the other way. Host is a legacy term, the correct term is libp2p Node.
Agreed. Same that I was going with #39 (comment) |
@diasdavid Yes, I had the same reaction as you. That said, if the terms have no meaning to you, then they probably aren't of significance to anyone else. I'm fine with taking them out. |
I suppose nothing is ever truly "done" in software, but I think of it as meaning we have an implementation that is suitable for downstreams to use in production software. If these modules were independently SemVer2 versioned, we could use that to imply an additional statement about our commitment not to break backwards compat, but the libp2p project is not at that stage of maturity yet. There's a lot of fundamental innovation that still needs to happen.
I totally agree with the principle of what you're saying, and I'm very tempted to make the change to
Yes, they are the same. This is a long standing problem, and unfortunately it's not the only place where you'll find language implementation divergence as you dig in deeper. Juan has been suggesting for a while that we adopt a standardized interface (e.g., see here), specified in a golang-like DSL, but it's harder than it sounds because different languages have fundamentally different paradigms and idioms. An example would be channels in Go vs callbacks in JS vs Sync/Send traits and std::thread in Rust, all of which achieve a similar goal (concurrency, or the appearance of it in single-threaded runtimes) but are more than just syntactically different; there's an actual conceptual difference. So, this turns out to be a somewhat hard coordination problem. |
|
I pushed a new commit to remove "interface", "impl" and "implementation" per #39 (comment). Did not change "Node" to "Host" per #39 (comment) Did not change "Done" to "Available" based on consistency-with-IPFS argument in #39 (comment) (I'm open to changing this later though) I'd like to merge this, merge ipfs/ipfs#334, and then we can iterate on this one and let IPFS iterate on its analogous list. In subsequent PRs, I'd like to (1) verify the accuracy of the fruits, (2) fill in |
|
@diasdavid Forgot to respond to this:
I have another branch that adds on to this PR where I have included those. My next PR will be based off of that, with some additional stuff mentioned above. |

Moved the libp2p items out of https://github.com/mgoelzer/ipfs/blob/master/ROADMAP-TO-1.0.0.md and into this file that will live in libp2p/libp2p
(Note: after doing a bit of research, there really isn't any good way to do a table with checkboxes inside the cells in Github flavored markdown. This is a known issue in Github. The best workaround puts extra vertical whitespace in every cell. So, instead of using the three column approach, I just triplicated each item for Go, JS and Rust.)
@jbenet @diasdavid
(Note: once this PR is merged, ipfs/ipfs#334 should be merged to remove the content from the ipfs/ipfs/ROADMAP-TO-1.0.0.md document.)