
Libp2p – A modular network stack - espeed
https://libp2p.io/
======
TheAceOfHearts
What are some concrete examples for which this would be useful?

Near the end it says it's being developed by people in the IPFS community.
Does anyone know for what they plan on using it?

~~~
daviddias
Hi, libp2p dev here!

Yes, we use it today! libp2p is the P2P Networking Stack of IPFS that we
refactored into its own project so that others could take advantage and be
part of its ecosystem as well.

It is what gives IPFS and other projects the P2P connectivity, support for
multiple platforms (including Browsers) and more! There are 3 implementations
interoperable today at different stages of completion (Go, JS for Node.js &
Browser and Rust). Full overview here
[https://www.youtube.com/watch?v=CRe_oDtfRLw](https://www.youtube.com/watch?v=CRe_oDtfRLw)

Also, Chris Pacia recently delivered an amazing talk at QCON about libp2p
[https://www.infoq.com/presentations/blockchain-
libp2p](https://www.infoq.com/presentations/blockchain-libp2p), I totally
recommend checking it out.

You can find more talks of examples and use cases at
[https://libp2p.io/media](https://libp2p.io/media).

Give it a spin and post feedback on github.com/libp2p. We are also on #libp2p
on freenode, come say hi!

~~~
mechnesium
The only thing I'm missing is a C++ implementation of libp2p.

Ethereum is the only example I've found that comes close, but it's poorly
commented and only implements a small set of details of libp2p.

------
hardwaresofton
If you find this cool you might also like Ouroboros[0]

[0]:
[https://ouroboros.ilabt.imec.be/index.html](https://ouroboros.ilabt.imec.be/index.html)

------
ohnoesjmr
Last time I looked at this, the code in general and code you needed to use it
was overly complicated for what it does.

~~~
carc1n0gen
So what about this time?

------
chrissnell
I went to look at their Go implementation but the libraries are each split
into separate Github repos (super annoying) and some of those appear to be
non-public/404\. Very strange.

~~~
unmole
> (super annoying)

Why would anyone store different laguage implementations in the same Git repo?

~~~
sytelus
Repo should be organized around project, not language/frameworks. It’s
perfectly normal to have library +Python client + Go client in same repo.

~~~
TheAceOfHearts
I can't think of any library for which this is the case, could you give some
examples?

~~~
orbifold
LLVM has python, go, ocaml and c bindings all in the same repository
[https://github.com/llvm-
mirror/llvm/tree/master/bindings](https://github.com/llvm-
mirror/llvm/tree/master/bindings) (the c bindings live somewhere else)

------
LiweiZ
Any idea why this is upvoted to make the front page this time?

~~~
linsomniac
I'm glad it was. I hadn't heard of it before, and now I'm watching the
introduction video to learn more. I'm not really familiar with IPFS, but what
I do know is that it has had some consistent buzz for a while now.

------
TACIXAT
I've tried to use the Go version of this a few times and the custom package
manager always mucks it up.

------
marknadal
Just heads up, people should know libp2p (unless something has changed?) still
has flooding problems.

There are other P2P transport alternatives, check out SSB's (it is really
good!) or ours (gun.eco/docs/DAM) which prevents flooding. WebRTC and
websocket implementations exist.

~~~
whyrusleeping
Hey Mark, pretty sure you're talking about floodsub, which is a naive
implementation of pubsub of top of libp2p, not actually 'libp2p'. Libp2p is
quite a bit more than a simple p2p pubsub library.

In any case, floodsub is just one option you can use for pubsub on top of
libp2p (one with a notably high level of reliability and minimal cross network
latency for infrequent messaging). We also have a tree pruning gossiping
implementation called gossipsub. Take a look at the spec:
[https://github.com/libp2p/specs/blob/master/pubsub/gossipsub...](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md)

~~~
tribler
That is very interesting spec, but also alarming. It contains:

> The meshsub router offers a baseline construction with good amplification
> control properties, which we augment with gossip about message flow.

This is notoriously hard to get right. How to prevent spam, posioning or
Sybils in your gossip network? Scientific work on p2p overlays and gossip is
hard to publish now at venues like Usenix or NSDI. After Newscast from 2003 it
seems you need strong identity to make these systems attack resilient. An
unsolved problem.

Thank you for this insight! We will put a university student team on exploring
this likely vulnerability in IPFS/libp2p.

------
mempko
no C or C++? Looks promising but would love a C++ version

~~~
codr4
Same here, except I prefer C since that makes it more accessible.

That would also allow others to write clients for their favorite languages.

~~~
TheAceOfHearts
I'd also prefer a C version, but I think it's possible to call a Go function
from C [0]. I don't know how well that would work though, since Go requires a
runtime.

[0] [https://github.com/golang/go/wiki/cgo#calling-go-
functions-f...](https://github.com/golang/go/wiki/cgo#calling-go-functions-
from-c)

~~~
hobofan
There is also a Rust implementation of libp2p[0]. Exposing C functions from
that library is probably the most "proper" way currently feasible to use
libp2p from C.

[0][https://github.com/libp2p/rust-libp2p](https://github.com/libp2p/rust-
libp2p)

------
kristianov
...which networking library is non-modular?

