Skip to content
This repository has been archived by the owner on Apr 29, 2020. It is now read-only.

Why multiple implementations in different languages? #97

Closed
knocte opened this issue Mar 3, 2016 · 5 comments
Closed

Why multiple implementations in different languages? #97

knocte opened this issue Mar 3, 2016 · 5 comments
Labels

Comments

@knocte
Copy link

knocte commented Mar 3, 2016

I see there are multiple implementations for IPFS: Go, JS, and Python.

I can understand why you would want to have a JS implementation, so that it runs inside the browser (no need to install) and benefits from WebRTC's P2P capabilities.

However, what's the point of having a Python implementation? It seems also that the reference implementation in Go will always be more complete than the alternatives. Isn't it too much overhead? Also, maybe using GopherJS (https://github.com/gopherjs/gopherjs) for the in-browser version of IPFS helps the team finish it earlier, and allows not having to maintain many implementations at once.

Thanks

@RichardLitt
Copy link
Contributor

This is a good question.

Multiple implementations of a spec ensure redundancy. They also help to isolate and discover bugs, which may have otherwise not have been noticed due to the lack of a reference point.

@diasdavid can talk more about the uses of js-ipfs. As far as I know, the Python implementation hasn't yet advanced very far.

@daviddias
Copy link

Our current focus is the go and js implementations, however it is important to understand that IPFS is a protocol, not a library, and so, like any other protocol, it will eventually see an implementation in every other language where there is a will to use it.

We could in fact expose an API, which we do, and create clients in other languages, which we have done in js, swift, java, python and go, that developers can use to interact with IPFS directly, however, having a complete implementation brings several benefits when it comes to hackability and portability. Plus it enables us to do fancy things some environments supports, such as you described, WebRTC in the browser.

It seems also that the reference implementation in Go will always be more complete than the alternatives

That situation will be eventually be stabilised :)

Hope that this answer was helpful

@knocte
Copy link
Author

knocte commented Mar 11, 2016

Ok makes sense.

However, let me give my 2 cents: I think IPFS is still in the adoption phase. And to help its adoption, it has to support the best features as soon as possible. I consider WebRTC a fundamental use case that would improve adoption of IPFS by orders of magnitude. So, I think the JS implementation should use GopherJS (maybe only temporarily?) to get there as soon as possible.

@erm3nda
Copy link

erm3nda commented Apr 2, 2016

One thing related, is that if you publish implementations in many languages, you could hit some good developers that are good just in one language.

@madavieb
Copy link

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants