Blocktree: A Platform for Self-Hosting Services

I’m sure I’m not the only one here who’s dissatisfied with the current state of technology. People seem to waking up to the fact that the technology they use, especially the online services they rely on, don’t have their needs as their first objectives. Rather, they capture their attention and provide them with just enough utility to keep them coming back, so they can continue to monetize them relentlessly. We should ask ourselves if this needs to be the case.

At the end of the day someone has to pay to run the computers on which a user’s data is stored and served. But the thing is, users’ already have their own computers, that’s how their consuming these services in the first place! In fact users tend to have several computers, a phone, a laptop, a router, and maybe even a desktop. Of these, the phone and the router are always on and always connected to the internet. What if it were possible to use these devices to provide services for the user?

One obvious objection to this is that these devices are very low-powered, they couldn’t possibly stand up to the load. But rather than talking in absolute terms about computing power, think about their capabilities relative to what they need to do. How much data do you need to store and serve to provide a text and picture only twitter clone for a single user? I don’t believe the data storage requirements are insurmountable. Dealing with the traffic is a more difficult problem, but only in the case where a user goes viral or has a large number of followers. I believe this can be solved using peer-to-peer distribution of data, as shown by BitTorrent. But in order for that to work the authenticity of distributed data needs to be independently verifiable.

I believe I’ve come up with some of the solutions to these problems and I’ve put them together in a system I’m calling Blocktree. The central idea of the system is to create an actor framework (think Erlang or Akka) which is tightly integrated with a global distributed filesystem (like NFS but everywhere). A single global filesystem is possible because it’s divided into disjoint domains according to the public/private keypair used to control the domain. The authenticity of a file is verified by checking that a signature on the file was made with a key that has a chain of trust that leads back to the domain owner.

If these ideas interest you please checkout the project website: blocktree.systems. It’s still early days, but a working network filesystem has been implemented. The project is written entirely in Rust, and mostly async Rust, and is licensed under the GNU Affero General Public License v2. If you have more academic interests, the system is specified in detail in a paper on the website: blocktree.systems/BlocktreeDce.pdf.

As technologists we should recognize that we have a role to play in solving society’s technical problems. This system isn’t a silver bullet, but I hope it will help people to take back some control over their digital lives.

1 Like