Skip to content

Commit

Permalink
Update README.md with more recent information
Browse files Browse the repository at this point in the history
cf #50
  • Loading branch information
ntninja authored Feb 21, 2019
1 parent c4910f6 commit be0f35e
Showing 1 changed file with 33 additions and 53 deletions.
86 changes: 33 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@

> python implementation of ipfs
Python implementation of IPFS, the InterPlanetary File System. Not even
remotely done yet - check out [# fs1](https://github.com/ipfs/py-ipfs/issues/1) to join the project.
Python implementation of IPFS, the InterPlanetary File System. **Not even
remotely done yet.**

For the current status, and where you can help, please see [issue 49](https://github.com/ipfs/py-ipfs/issues/49).

## Table of Contents

Expand Down Expand Up @@ -66,15 +68,7 @@ $ make -C docs/ <your favorite docs format> # html, pdf etc.

## Roadmap

Note: this has been lifted wholesale from [js-ipfs](https://github.com/ipfs/js-ipfs) and only lightly edited. As such, it may still contain inconsistencies until further editing.

TODO:

- Create stubs and checklist items for relevant Python modules.
- Create and link discussion issues at least for each top level.
- Remove JS discussion issues when no longer needed.

This is the roadmap according to the JS implementation. It has `Peer Routing` inside the `Network` hierarchy. The above organization has both at the same level. It also has the `Distributed Record Store` inside `Network`, while our organization diagram also has it at first level. TODO: harmonise?
Note: This is based on the roadmap from [js-ipfs](https://github.com/ipfs/js-ipfs) . As such, it may still contain inconsistencies until further editing.

- Block
- MerkleDAG
Expand All @@ -84,63 +78,49 @@ This is the roadmap according to the JS implementation. It has `Peer Routing` in
- [JS Impl](https://github.com/diasdavid/js-merkledag-store).
- Network
- [ ] The `libp2p-website` [is the spec](https://github.com/diasdavid/libp2p-website), but for now the place to go is the [roadmap readme](https://github.com/diasdavid/go-libp2p/blob/docs/roadmap/README.md) in the `go-libp2p` docs.
- [ ] py-libp2p _(the entry point)_.
- Peer Routing
- [ ] mDNS-routing
- [ ] py-libp2p-kad-routing [JS Impl](https://github.com/diasdavid/js-libp2p-kad-routing). [JS discussion issue](https://github.com/ipfs/js-ipfs/issues/18).
- Discovery: listed separately because they have separate discussion issues in the JS repo, which might be relevant.
- [ ] py-libp2p-mdns-discovery [JS Impl](https://github.com/diasdavid/js-libp2p-mdns-discovery) _mDNS-discovery_. [JS discussion issue](https://github.com/ipfs/js-ipfs/issues/19).
- [ ] py-libp2p-random-walk [JS Impl](https://github.com/diasdavid/js-libp2p-random-walk). [JS discussion issue](https://github.com/ipfs/js-ipfs/issues/20).
- [ ] py-libp2p-railing [JS Impl](https://github.com/diasdavid/js-libp2p-railing) _Bootstrap-list_. [JS discussion issue](https://github.com/ipfs/js-ipfs/issues/21).
- [ ] Swarm.
- Entry point, for now let's call it py-libp2p-swarm. [JS Impl](https://github.com/diasdavid/js-libp2p-swarm). [JS discussion issue](https://github.com/ipfs/js-ipfs/issues/22).
- [ ] libp2p-identify [JS implementation](https://github.com/diasdavid/js-libp2p-swarm/tree/master/src/identify).
- [ ] libp2p-ping [JS Impl](https://github.com/diasdavid/js-ipfs-ping).
- Transports: Links to JS impementations probably not needed if we go with Curio, but there's always time to delete.
- [ ] libp2p-tcp [JS Impl](https://github.com/diasdavid/js-libp2p-tcp)
- [ ] libp2p-udp [JS Impl](https://github.com/diasdavid/js-libp2p-udp)
- [ ] libp2p-udt [JS Impl](https://github.com/diasdavid/js-libp2p-udt)
- [ ] libp2p-utp [JS Impl](https://github.com/diasdavid/js-libp2p-utp)
- [ ] libp2p-webrtc
- [ ] libp2p-cjdns
- Upgrades/Crypto channel
- [ ] libp2p-tls
- [ ] libp2p-secio
- Stream Muxing
- [ ] py-spdy-stream-muxer [JS Impl](https://github.com/diasdavid/js-spdy-stream-muxer) _stream muxer_. [JS Discussion issue](https://github.com/ipfs/js-ipfs/issues/23).
- [ ] libp2p-spdy [JS Impl](https://github.com/diasdavid/js-libp2p-spdy/blob/master/src/index.js) _stream muxer upgrade_
- [ ] Distributed Record Store. [JS Discussion issue](https://github.com/ipfs/js-ipfs/issues/25).
- [ ] py-libp2p-record [JS Impl](https://github.com/diasdavid/js-libp2p-record) _record (needs MerkleDAG node)_.
- [ ] py-libp2p-distributed-record-store [JS Impl](https://github.com/diasdavid/js-libp2p-distributed-record-store).
- [ ] py-libp2p-kad-record-store [JS Impl](https://github.com/diasdavid/js-libp2p-kad-record-store) _implements abstract record store_.
- [ ] [py-libp2p](https://github.com/libp2p/py-libp2p)
- Please see the [py-libp2p repository](https://github.com/libp2p/py-libp2p#feature-breakdown)
for the most up-to-date status of different components.
- [ ] Swarm
- The following modules are required, as a minimum, for basic connectivity:
- [ ] libp2p-identify [JS implementation](https://github.com/diasdavid/js-libp2p-swarm/tree/master/src/identify).
- Transports (just the baseline requirements, every module helps)
- [X] TCP [JS Impl](https://github.com/diasdavid/js-libp2p-tcp)
- Stream Multiplexer
- [X] mplex
- Upgrades/Crypto channel
- [ ] libp2p-secio
- Peer Discovery (just the baseline requirements, every module helps)
- [X] bootstrap list
- [ ] Kademlia DHT
- [ ] mDNS
- Content Discovery (just the baseline requirements, every module helps)
- [ ] Kademlia DHT
- NAT Traversal (just the baseline requirements, every module helps)
- [ ] UPnP
- [ ] NAT-PmP
- Exchange
- [ ] py-bitswap [JS Impl](https://github.com/diasdavid/js-bitswap). [JS Discussion issue](https://github.com/ipfs/js-ipfs/issues/17).
- Supporting modules
- multihash/multihashing: (see discussion about the [multihash/multihashing distinction](https://github.com/ipfs/py-ipfs/issues/23#issuecomment-158345821))
- [ ] [py-multihashing](https://github.com/JulienPalard/multihash) (note: started as multihash, should be multihashing) [JS Impl](https://github.com/jbenet/js-multihashing)
- [ ] [py-multihash] [Spec](https://github.com/jbenet/multihash). [Discussion Issue](https://github.com/ipfs/py-ipfs/issues/13). [Go Impl](https://github.com/jbenet/go-multihash). [JS Impl](https://github.com/jbenet/js-multihash)
- [ ] [python-multiaddr](https://github.com/amstocker/python-multiaddr) [Spec](https://github.com/jbenet/multiaddr) [Go Impl](https://github.com/jbenet/go-multiaddr). [JS Impl](https://github.com/jbenet/js-multiaddr).
- [ ] py-multistream [Spec](https://github.com/jbenet/multistream). [JS Impl](https://github.com/diasdavid/js-multistream) _protocol muxer_. [JS Discussion issue](https://github.com/ipfs/js-ipfs/issues/24).
- [ ] [py-multicodec](https://github.com/fredthomsen/py-multicodec). [Spec](https://github.com/jbenet/multicodec). [Go Impl](https://github.com/jbenet/go-multicodec)
- [ ] PeerID - [JS Impl](https://github.com/diasdavid/js-peer-id)
- [ ] PeerInfo - [JS Impl](https://github.com/diasdavid/js-peer-info)
- [ ] repo
- [ ] [py-ipld](https://github.com/bigchaindb/py-ipld). [Spec](https://github.com/ipfs/specs/pull/37). [Discussion](https://github.com/ipfs/go-ipld/issues/8). [Go Impl.](https://github.com/ipfs/go-ipld). [JS Impl.](https://github.com/diasdavid/js-ipld)
- [specs/19](https://github.com/ipfs/specs/pull/19).
- [X] [py-cid](https://github.com/ipld/py-cid)
- [X] [py-multiaddr](https://github.com/multiformats/py-multiaddr) [Spec](https://github.com/jbenet/multiaddr) [Go Impl](https://github.com/jbenet/go-multiaddr). [JS Impl](https://github.com/jbenet/js-multiaddr).
- [ ] [py-multistream-select](https://github.com/dheatovwil/py-multistream-select) [Spec](https://github.com/jbenet/multistream). [JS Impl](https://github.com/diasdavid/js-multistream) _protocol muxer_. [JS Discussion issue](https://github.com/ipfs/js-ipfs/issues/24).
- [X] [py-multicodec](https://github.com/multiformats/py-multicodec). [Spec](https://github.com/jbenet/multicodec). [Go Impl](https://github.com/jbenet/go-multicodec)
- [ ] [py-ipld](https://github.com/ipld/py-ipld-dag). [Spec](https://github.com/ipfs/specs/pull/37). [Discussion](https://github.com/ipfs/go-ipld/issues/8). [Go Impl.](https://github.com/ipfs/go-ipld). [JS Impl.](https://github.com/diasdavid/js-ipld)


## Contribute

IPFS implementation in Python is a work in progress. As such, there's a few things you can do right now to help out:

* Go through the modules above and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrasture behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically. However, don't let this discourage you! Feel free to ask questions about where to get that knowledge in this repo, or jump into IRC and ask questions there. We're here to help.
* Check out [issue 49](https://github.com/ipfs/py-ipfs/issues/49) for an up-to-date list (maintained by @alexander255) of tasks that could use your help. Feel free to ask questions on that and we'll try to help. Be sure to drop a note if there is anything you'd like to work on and we'll update the issue to let others know.
* **Perform code reviews**. More eyes will help a) speed the project along b) ensure quality and c) reduce possible future bugs.
* Take a look at both [go-ipfs](https://github.com/ipfs/go-ipfs) and [js-ipfs](https://github.com/ipfs/js-ipfs) (which we intend to follow to a point), and also at some of the planning repositories or issues: for instance, the libp2p spec [here](https://github.com/libp2p/specs). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.
* **Add tests**. There can never be enough tests.
* **Contribute to the [FAQ repository](https://github.com/ipfs/faq/issues)** with any questions you have about IPFS or any of the relevant technology. A good example would be asking, "What is a merkledag tree?". If you don't know a term, odds are someone else doesn't either. Eventually, we should have a good understanding of where we need to improve communications and teaching together to make IPFS and IPN better.
* TODO: write our own `CONTRIBUTE.md` similar to [IPFS's](https://github.com/ipfs/ipfs/blob/master/CONTRIBUTE.md) and once we know what we're doing and who's doing it.

Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
Please be aware that all interactions related to IPFS, libp2p and Multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).

## License

Expand Down

0 comments on commit be0f35e

Please sign in to comment.