Grimwire.js: A RESTful Browser OS that does Peer-to-peer over WebRTC(blog.grimwire.com) |
Grimwire.js: A RESTful Browser OS that does Peer-to-peer over WebRTC(blog.grimwire.com) |
Imagine a simple Twitter-like system built on top of this, for example. Each web client would function as a store-and-forward. Every time you connect with a friend, both parties would reconcile the latest posts from all friends that they share in common. In this way, information on social networks could be disseminated rapidly and efficiently with no centralisation whatsoever.
Seems to me like just two other bits of technology would be needed for this: ubiquitous dual-key authentication, and a good UID system. I don't think either of those would be a problem, and I really hope somebody does this, since centralised social networks bother me more than a little bit.
It's not done yet, but what ever is? ;)
It works by building a system of distributed identity and messages around GPG signed JSON, and can be distributed over any medium. Right now, It's web-based and HTTPS calls, but I'm actively looking for a good webrtc solution I can use without leaking users IPs and other data.
There's some information about it at Tavern.com
If anyone's interested, I'd love to work with you to figure out how to make it better ;)
As for UID, if you just want some kind of unique identifier, you can just use a public RSA key. If you want an unique but readable name (like a nickname), you need something more sofisticated. A possible approach is Namecoin's, which tries to guarantee unique but decentralized domains.
Because of the custom program model, Grimwire's concerns include program lifecycle, resource management, permissioning, peer connectivity, and UI toolset, so that's why we call it an OS.
Got any work for someone who has experience with large distributed systems but is basically allergic to frontend web technologies?
The kind of gains we're looking for are the kind that you get out of unix's small programs and pipes. URLs are a fairly powerful primitive-- they can represent remote endpoints, local endpoints, and pieces of data (with data-uris). So, for instance, with some artful configuration/linking, you could have the same webapp write to local storage, remote storage, or the filesystem-- and make it easy for the user to choose, not with a premade choice, but with the ability to load software.
Program-sharing can also continue the gains made by Ajax, where you can deliver programs to the client which understand a remote service's API. For instance, if my profile links to "send-pfraze-a-message.js", you pull that down and load the interface next to your files interface, drag in the file, then hit send. Then you load "send-pfraze-a-message.js" next to your strategy game interface, drag in a battle plan, and hit send. In both cases, your existing programs didn't have to understand whatever service I use to receive messages-- they just had to bundle data for click-and-drag.