Skip to content

libp2p Requirements Doc - Roadmap to 1.0.0#39

Merged
5 commits merged intomasterfrom
unknown repository
Sep 10, 2018
Merged

libp2p Requirements Doc - Roadmap to 1.0.0#39
5 commits merged intomasterfrom
unknown repository

Conversation

@ghost
Copy link
Copy Markdown

@ghost ghost commented Jul 2, 2018

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.)

@ghost ghost self-assigned this Jul 2, 2018
@ghost ghost added the in progress label Jul 2, 2018
@ghost ghost requested review from daviddias and jbenet July 2, 2018 22:40
@daviddias
Copy link
Copy Markdown
Member

there really isn't any good way to do a table with checkboxes inside the cells in Github flavored markdown.

True. You have to get creative with emojis, see for example:

@daviddias daviddias changed the title Created checklist for use case roadmap libp2p Requirements Doc - Roadmap to 1.0.0 Jul 3, 2018
@ghost ghost assigned daviddias Jul 3, 2018
| Transports | Go | JS - Node.js | JS - Browser | Rust |
| -------------------------------------------- | :-----------: | :-----------: | :-----------: | :-----------: |
| **`TCP`** | :green_apple: | :green_apple: | :chestnut: | :green_apple: |
| **`WebRTC`** | :tomato: | :green_apple: | :green_apple: | :tomato: |
Copy link
Copy Markdown
Member

@daviddias daviddias Jul 3, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@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.

@daviddias
Copy link
Copy Markdown
Member

@ghost ghost mentioned this pull request Jul 17, 2018
@daviddias
Copy link
Copy Markdown
Member

daviddias commented Aug 12, 2018

@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.

@ghost
Copy link
Copy Markdown
Author

ghost commented Aug 18, 2018

@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.

@daviddias
Copy link
Copy Markdown
Member

image

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
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link broken. New one: https://github.com/libp2p/specs/

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks - good catch

@raulk
Copy link
Copy Markdown
Member

raulk commented Aug 22, 2018

@mgoelzer @diasdavid a few thoughts:

  1. By Node, do we mean Host in libp2p terminology?
  2. Personally I consider the enumerated technologies/protocols listed as concrete implementations rather than interfaces.
  3. Do we have criteria or a definition for done for each module? If not, I wonder if the term available would be more appropriate, as it conveys that an implementation exists, but does not set any expectations on feature completeness. To me, done also implies some kind of closure, which may be applicable in the context of specific feature sets we aim for with 1.0 for each module.

@daviddias
Copy link
Copy Markdown
Member

By Node, do we mean Host in libp2p terminology?

It is actually the other way. Host is a legacy term, the correct term is libp2p Node.

Personally I consider the enumerated technologies/protocols listed as concrete implementations rather than interfaces.

Agreed. Same that I was going with #39 (comment)

@ghost
Copy link
Copy Markdown
Author

ghost commented Aug 22, 2018

[screenshot]

@diasdavid Yes, I had the same reaction as you. impl(emented) is already implied for every row in the table, unless otherwise stated, and the word interfaces doesn't make much sense in the section headings. I (intentionally) left those alone because I wanted a verbatim copy of the original text in https://github.com/mgoelzer/ipfs/blob/master/ROADMAP-TO-1.0.0.md, thus making this PR a pure move-and-reformat with no change in semantics, which tend to be non-controversial.

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.

@ghost
Copy link
Copy Markdown
Author

ghost commented Aug 22, 2018

@raulk

Do we have criteria or a definition for done

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.

wonder if the term available would be more appropriate

I totally agree with the principle of what you're saying, and I'm very tempted to make the change to Available, but the Done/InProgress/Missing/NotPlanned emoji convention is being used elsewhere in PL projects. I'm somewhat reluctant to redefine one term here. I don't have super strong feelings though.

By Node, do we mean Host in libp2p terminology?

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.

@ghost
Copy link
Copy Markdown
Author

ghost commented Aug 25, 2018

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 Performance Milestones TODO item with 10^6 and 10^9 node goals, and (2) add some docs requirements line items.

@ghost
Copy link
Copy Markdown
Author

ghost commented Aug 25, 2018

@diasdavid Forgot to respond to this:

@mgoelzer you missed porting:
https://github.com/ipfs/ipfs/blob/master/ROADMAP-TO-1.0.0.md#ipfs-dht
https://github.com/ipfs/ipfs/blob/master/ROADMAP-TO-1.0.0.md#ipfs-pubsub

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.

@ghost ghost merged commit 9976ddd into libp2p:master Sep 10, 2018
@ghost ghost removed the in progress label Sep 10, 2018
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants