Comments (3)
What we want to encourage is multiple implementations of IPFS in multiple languages targeting specific use-cases.
Having a modular, composable stack allows developers to pick and choose the components they want which enables new and interesting implementations like Elastic IPFS (built on JS). Kubo targets different use cases and is not flexible like this so it's not a great fit.
It's also important to note that WASM is not a magic bullet, compiling go code to WASM typically results in a large binary which isn't great for browser users and for JS developers in general it's a completely black box which harms their ability to debug problems and otherwise be productive. There's also no guarantee of performance since you'll be copying lots of data in and out of the runtime.
There are also about 7x the number of JS vs Go developers in the world - it's important to meet them where they are. Saying "just use the go version" effectively excludes them from contributing to the IPFS projects and fails to leverage their massive amount of collective experience in deploying browser and Node.js apps at scale.
from helia.
What about the overhead of maintaining the same implementation in multiple languages? Doesn't experience tell us this will result in some sort of "synchronization hell" between code bases? At a minimum, would it make sense to "generate" the multiple language implementations in a way similar to protocol buffers? Maybe look at something like Haxe? Developer's could then "learn" what's going on in the language of their choice? From here they could make the jump to the Haxe implementation? Which then generates all the other implementations? Apologies for being a "stick in the mud", but feels like I've seen this argument play out multiple times before, never seems to end well? Lots of pain?
Or maybe we should pick a language, like javascript, and say this will be the core implementation? And then use something like grpc stubs to wrap that implementation? And make it usable from other languages?
from helia.
We're not attempting to maintain feature parity between the different implementations at the API level. For example there are lots of Kubo APIs we don't want to carry forward, like the object API and specialised APIs like bootstrap, most of the config ones, etc.
Implementations should be compatible on the wire though, that's incredibly important, but each implementation should have the freedom to innovate at the API level as they see fit.
from helia.
Related Issues (20)
- React-native support? HOT 3
- helia-101/201-storage.js hangs then crashes HOT 5
- fix: `blocks:get:providers:get` should be `blocks:get:blockstore:get`
- 15 broken links on https://helia.io
- How to upload to IPFS with Helia using an Infura node? HOT 2
- feat: support filters for resolvers HOT 1
- DoH queries with numeric `type` fail HOT 5
- How to use helia with infura/quicknode? HOT 4
- bug: ipns doesn't purge cache based on TTL
- Parcel cannot resolve Helia and any @helia/x packages HOT 2
- How to pin to a remote kubo node?
- Possible memory leak?
- feat: `ipfs refs` command not supported?
- bug: endless session routing HOT 10
- fix: unnecessary new URL instance HOT 3
- Helia UnixFs `addFile` does not respect `wrapWithDirectory` HOT 3
- Share your feedback in the Helia feedback survey
- High Memory Usage with Persistent IPFS Node in Browser via Helia HOT 1
- Using Helia in Service Workers and Compatibility with Kubo
- Issue with Peer-discovery When Initializing with Custom Service (pure browser environment)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from helia.