Skip to content
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

libp2p - Update Implementations Chapter #49

Merged
merged 2 commits into from
Dec 12, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 53 additions & 36 deletions libp2p/8-implementations.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,57 @@
8 Implementations
=================

This is a list of known libp2p module implementations. They are components that respect the interfaces and expectations defined in the "Interfaces" chapter, and can be composed to make a working libp2p library.
An libp2p implementation should(recommended) follow a certain level of granulatiry when implementing different modules and functionalities, so that common interfaces are easy to expose, test and check for interoperability with other implementations.

This is the list of current modules available for libp2p:

- libp2p (entry point)
Copy link
Member

Choose a reason for hiding this comment

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

It would be nice if each of these parts had a list of implementations in the different languages attached to it, like this:

- abstract-transport [spec](link/to/spec) [go](link/to/go) [JS](link/to/js)

Copy link
Member

Choose a reason for hiding this comment

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

if we're going to use the "abstract-X" modules for more than just javascript, can we:

  • rename the convention to something like "X-interface" or "interface-X" or "libp2p-X" or "X-protocol" or "X-proto"
  • use a programming language with types to define the interfaces (Go or Haskell ok for me)

  • bikeshed discussion: "interface" is a well-understood concept across programming languages. the use of "abstract-X" in node/js makes up for javascript's lack of a type system, but will not be understood as readily by people in other languages. the right word for this in PL vocabulary is "protocol" or "interface". "protocol" is too general of a word and has so many meanings-- "interface" tends to be preferred these days.
  • bikeshed link: https://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)
  • bikeshed trivia: "concepts" and "abstract base class" are two holdovers from C++ and friends (probably in typical disregard of "the type people")

Copy link
Member

Choose a reason for hiding this comment

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

👍 for defining types in Haskell from my side


bikeshed: 👍 for interface, 👎 for protocol (too generic, too much overlap with network protocols)

Copy link
Member Author

Choose a reason for hiding this comment

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

I remember having this conversation and agreeing with you, should have added it as a TODO right away.

I like interface-X.

👍 for Haskell too, however, we will have a mapping for each language as implementations appear :)

Copy link
Member

Choose a reason for hiding this comment

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

👍 Haskell :)

- **Swarm**
- libp2p-swarm
- libp2p-identify
- libp2p-ping
- Transports
- [interface-transport](https://github.com/diasdavid/interface-transport)
- [interface-connection](https://github.com/diasdavid/interface-connection)
- libp2p-tcp
- libp2p-udp
- libp2p-udt
- libp2p-utp
- libp2p-webrtc
- libp2p-cjdns
- Stream Muxing
- [interface-stream-muxer](https://github.com/diasdavid/interface-stream-muxer)
- libp2p-spdy
- libp2p-multiplex
- Crypto Channel
- libp2p-tls
- libp2p-secio
- **Peer Routing**
- libp2p-kad-routing
- libp2p-mDNS-routing
- **Discovery**
- libp2p-mdns-discovery
- libp2p-random-walk
- libp2p-railing
- **Distributed Record Store**
- libp2p-record
- [interface-record-store](https://github.com/diasdavid/interface-record-store)
- libp2p-distributed-record-store
- libp2p-kad-record-store
- **Generic**
- PeerInfo
- PeerId
Copy link
Member

Choose a reason for hiding this comment

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

maybe these could be part of a libp2p-peer package?

Copy link
Member Author

Choose a reason for hiding this comment

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

What is Peer for you, I believe PeerInfo === Peer

- multihash
- multiaddr
- multistream
- multicodec
- ipld
- repo
Copy link
Member

Choose a reason for hiding this comment

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

❤️ love this list


Current know implementations (or WIP) are:

- JavaScript - https://github.com/diasdavid/js-libp2p
- Go - https://github.com/ipfs/go-ipfs
- Python - https://github.com/candeira/py-ipfs/blob/readme-roadmap/README.md
- Rust - https://github.com/diasdavid/rust-libp2p

## 8.1 libp2p

- https://github.com/diasdavid/node-libp2p
- https://github.com/diasdavid/node-ipfs-logger

## 8.2 Peer Discovery

- https://github.com/diasdavid/node-ipfs-mdns
- https://github.com/diasdavid/node-ipfs-railing
- https://github.com/diasdavid/node-ipfs-random-walk

## 8.3 Peer Routing

- https://github.com/diasdavid/node-ipfs-kad-router

## 8.4 Swarm

- https://github.com/diasdavid/node-ipfs-swarm
- https://github.com/diasdavid/node-ipfs-ping
- https://github.com/diasdavid/node-spdy-stream-muxer
- https://github.com/diasdavid/abstract-stream-muxer

## 8.5 Record Store

- https://github.com/diasdavid/node-ipfs-record
- https://github.com/diasdavid/node-ipfs-record-store

## 8.6 Data Structures

- https://github.com/diasdavid/node-ipfs-peer-id
- https://github.com/diasdavid/node-ipfs-peer

## 8.7 Implementations of Specs libp2p depends on

- https://github.com/diasdavid/node-multistream