Peer-to-Peer Databases for the Decentralized Web
orbitdb.org
orbitdb.org
If this were a drop-in C/C++ library, I'd use it immediately in my native apps and adopt it as a widespread platform technology. I want to be able to do this, and if it were truly a working technology, I'd put it in every single app I use.
But as a Node/JS library, it is off limits.
Please, decentralization guys, consider native languages first, and toy languages next. These technologies are never going to be embraced unless they treat native platforms as first-class systems for their manifestation.
Can't we just have nice, normal libraries like we used to? Tools that require me to install a huge new build system, package management (cough golang cough) just to run quickly lose their appeal.
I (thankfully) haven’t written C++ in over 20 years, but if I had to drop back down to a low level language, it’d be C or a compile-to-C language. C is the language these things should target, in my opinion.
A toy language is one which you do not allow to escape the play-room/sandbox, you play with it (because hey, you can, so why not..), but you would not actually use it.
The reason this is important for decentralization efforts, is that the OS should be doing this.
Sure, paint the pretty UI, but expose the entire thing to common OS-level abstractions, please, and then host the scripts, kthxbai ..
(A non-toy language is one you are very comfortable shipping. Javascript is that for a lot of people. Not for systems programmers = it is an application execution environment, not a place for things which must operate, as part of the system, without much user hassle ..)
A language that doesn't require as much hair-pulling to learn, so you can't feel as smug for knowing it.
I would imagine most non-compiled, scripting languages. They are ok when building the business logic of an application on top of faster building blocks but not ok for application building blocks such as a database.
Performance is oft cited as why systems software is written in C (or C++ with C bindings), but I think a much stronger reason is the universality. C runs on everything from big iron to the smallest microcontroller.
As they are now, neither the IPFS ecosystem or sandstorm are really decentralized -- or maybe I should be more precise: not decentralized in a resilient way. Yet, I think both are great technologies that enable some interesting things.
I'm not as interested in the blockchain notion of decentralized though. I'm looking for resiliency to severe netsplits. As a thought experiment, if Earth crosses a coronal mass ejection event and our power and communication grids go down, would we be able stitch things back together again when our grid fractures?
https://github.com/jimpick/sandstorm-earthstar-foyer
Sandstorm is very interesting for privacy-focused peer-to-peer because it has the tools in place to sandbox networking. The networking security model is designed to prevent things from talking to each other without user approvals - so it's extra tricky to do peer-to-peer things with it.
I'm excited to try to stick some of my old IPFS/IPLD/libp2p/Dat/CRDT things into Sandstorm - there's a tonne of interesting things that could be done with it.
Are you using the grain model for each individual files to be shared?
(I looked up your email and I would like to continue chatting about this).
I made a quick demo recording and updated the README with a link.
Video is here: https://bafybeih6kkv4rgmfada4kfc5thmtzheiurq7ck5uz4rchqkrxw7...
And I was also thinking about integrating ipfs into my homeserver stack. But instead of plain ipfs I was thinking about sia coin. They offer cloud storage. So I was thinking about to rent 4tb of space. And whatever money I make with it I use it to buy backup from sia.
So in a sense I provide backups to others and in return I get free backup.
Sadly work is being to intensive on last month so I haven't found much inspiration in completing stuff above.
I really like the sandstorm.io platform, though it is not currently supported on an rpi. It has the potential as a platform that “grandma” can use.
There is a project called HomelabOS. It reminds me a bit of Homebrew.
The eventual aim is to be able to provision a set of servers from a thumb drive without Internet (if that's even possible), but I haven't had much time to get far.
The sandstorm community is still going. The app developers are interested, but the platform itself has not received much love. For my own goals, (1) getting ARM support (which includes customizing seccomp for the ARM; patching the sandstorm app package format; and getting a good developer story), and (2) enabling IPFS.
A kind of practical user-facing goal for integrating IPFS would be to decentralize the sandstorm app store.
What I am finding is that the design goals for sandstorm looks like it was originally intended to be deployed in the cloud, whereas I'd like to see individuals and communities empowered to run sandstorm for their local community.
That being said, I'd be super excited at the possible expansion of the community ARM support would bring.
By the way, regarding seccomp and the platform receiving love, there's actually a new experimental seccomp filter which operates as a whitelist instead of a blacklist: https://github.com/sandstorm-io/sandstorm/pull/3502
I have a lot more confidence when it comes to tooling, packaging, testing, developer environments, CI/CD systems etc. since that is the kind of thing I do at work.
Within that old Github thread:
- A suggestion that there is a metadata field that can be purposed for architecture
- There was a suggestion for using QEMU with the vagrant tool
I'm a bit weirded out by a packaging tool that tries to automatically look for all the files related to it -- though I think there might be a good reason for it. You do lose the ability to have reproducible builds and any kind of continuous integration or delivery. I kinda wonder if just switching to something like Nix would work better.
Reproducible builds would make it easier for the app ecosystem to be rebuilt on a different arch. ARM and RPI is great, but I expect RISC-V to be gaining traction over the next couple years. As far as my personal goal of helping develop resilient infrastructure, being able to quickly adopt new architectures would help a lot.
I have not floated this in the sandstorm-dev mailing list yet, but I'll get some conversation started over there.
spk and vagrant-spk definitely take the "grab what the app needs" approach, but Ian is in agreement with you in wanting something more reproducible and well-defined. (vagrant-spk is mostly reproducible because VMs made with it should be roughly the same, spk is not remotely reproducible).
docker-spk is a tool he wrote that creates Sandstorm app packages from specially-crafted Docker images (you still have to be writing a Sandstorm package here, it won't convert a traditional Dockerfile to work on Sandstorm, for instance). He has also repeatedly expressed interest in building a nix-spk tool that uses Nix packages. ;)
If I put something online, and people think it's interesting and pin it. Even if I go down, the pinned content remains up.
Decentralized doesn't magically solve hosting availability. It just removes responsibility from a single party.
I like IPFS, I want it to succeed, but HN has these romantic ideas about IPFS that don't quite match reality, and you get downvoted for being honest sometimes. Not acknowledging the limits of IPFS are part of what holds it back...
https://github.com/ipfs/ipfs-cluster/issues/1226
Ideally, I could provide instructions for app users to follow my cluster, set the amount of content they want to share, track the size of content they've pinned and for how long, and provide rewards/incentives through the app for doing so.. similar to how private trackers work.
You can imagine that if YouTube hosted its videos on IPFS then popular channels would be widely pinned so that even if YouTube shut down and the channel author left most of the videos would still be accessible. And much unlike current HTTP mirrors you would be able to find out who is pinning it without having to check multiple archive sites. (Of course you need to know the hash, but remembering hashes is much lest costly than mirroring whole sites yourself so I think we would see lots of these)
I think that in most cases it is simplest to think of IPFS as torrents. I think the biggest improvement that IPFS made was a single namespace for content instead of each torrent basically being its own swarm. This means that you can find content no matter how it is packaged and you can share blocks between "torrents".
If IPFS provided the ability to track pins from users of a site like private trackers, and provide rewards or some incentive then I think IPFS would gain much wider adoption.
Does IPFS support something similar? e.g. pin this content until I have a 5:1 upload to download ratio
---
I 100% agree on the ability to track pins. I want to see organizations be able to easily peer/pin content from other orgs they endorse; and for end users to be able to follow and help peer for organizations they support.
I want something like Youtube where I choose who appears as in the related videos on my channel and can be a peer to hosting them; and where my users can help to peer my videos (and I can help peer others).
As an end user, my client (or local server/cache) would prefetch the content I follow both to be a peer and to have it ready for me to access.
This would also help with locality of data; if 4 people in my household watch the same video or channel they would be able to get the content locally. If I'm an organization with a physical location, users connected to my network can fetch the content on a local link.
> Information flow in Freenet is different from networks like eMule or BitTorrent; in Freenet:
> 1. A user wishing to share a file or update a freesite "inserts" the file "to the network" > 2. After "insertion" is finished, the publishing node is free to shut down, because the file is stored in the network. It will remain available for other users whether or not the original publishing node is online. No single node is responsible for the content; instead, it is replicated to many different nodes.
The reason this works is it costs some amount to initially print the data to the network, limiting that kind of abuse.
Once the monetary reasons drop then so does the data.
And surely you're not saying centralized hosting being a strict requirement was what people had in mind for P2P?
At this point the major challenges are with UX, especially for users who are not accustomed to self-hosting. I think we have the technologies and ideas to overcome the rest.
You should take a look at SkyDB to get an idea what's possible with true decentralization: https://blog.sia.tech/skydb-a-mutable-database-for-the-decen...
The fact that you require nodes to ultimate do the hosting of data does not make IPFS centralized.
There has been no activity in over a year,and the sponsoring company has no presence in several years.
Source: I'm one of the core maintainers
Can Webassembly read IndexedDB yet?
Although this might be using JavaScript interop instead of using WebAssembly directly.
Edit: check this out: https://www.ditto.live/
It’s a multi language CRDT implementation that seems to use WebAssembly to be available in multiple languages.
A couple examples:
Web crawler -- seeded through a curated or personal bookmark list.
Knowledge base -- the permaculture community have amassed a knowledge base on growing plants: USDA hardiness zones, heat zones, humidity, soil requirements, companion planting relationships, etc. That's something I can see people adding on to, particularly with non-standardized homegrown cultivars and how well they do in their local area.
Edit: having just double checked it looks like Gnutella predates limewire; that's just the avenue through which I came across it.
What does a SE index look like? Any designs in the open?