Versioned Nodes Byte Trees
Byte trees are a general purpose format for storing byte-oriented data in versioned nodes.
A computer storage paradigm enabling distributed collaboration with unreliable connectivity.
Most data storage and exchange methods inexticably tie that data to a particular location, either on a particular disk or computer, or in the hands of a particular service provider. The methods that do not tend to be specialized for particular use cases, are often read-only, or cannot cope with multiple computers writing to them at the same time. This overarching paradigm of identifying data by location has had vastly negative downstream effects:
It structurally favors centralized services and surveilance. When your computer needs to talk to my computer to load this website I get both the ability to log everyone accessing my website and the chore of keeping that computer going and connected. If I don’t want to do the latter, I end up renting someone else’s computer and they do the former.
The favor for centralization goes deeper though. When you’re working with files in folders embedding one file inside another, say an image inside a document, without duplication, is liable to break if you send that file to someone else. So instead software is written to copy the whole image in. And simply keeping track of changes (and recommended changes) to a file that you’re collaborating on is a chore. Backups are a pain. Programmers, who do that sort of work constantly, have their own tools for these problems, but even those have many flaws.
Vernodes is an attempt to change all that.
On the surface, a node is pretty much the same as a file. You’ll be able to open it with some program, edit it, and save it. The most visible difference will come when you share it.
You’ll be able to share a node read-only or read-write. When you share it read-only, the person you share it with will get any updates you make to it, assuming connectivity. When you share it read-write, that person will additionally be able to make their own updates, which you will automatically receive. It will end up acting a lot like a shared document from a cloud provider, except you don’t need to constant connectivity.
As the original creator of the node, you’ll be able to reset access to be read-write for you and read-only (or not receive updates at all) for others. However, just like with files, you won’t be able to take back read access to the current versions of a node once you’ve given it to someone.
If you and another person (or yourself on another computer) make changes to the same node without an update making it through, the program you use to make changes will notice once the update does come through. In some cases the changes will be reconciled automatically, in other cases you’ll be presented with both sets of changes and asked to make a new version taking them both into account.
Your nodes will be able to be stored on multiple devices when you connect them together as yours, a friend shares storage on one of their devices with you, or perhaps you subscribe to a storage service. Which and how many devices is only loosely connected to the organization of the nodes. You’ll be able to mark storage requests like “three copies of the full history of everything in this collection” and “one copy of the latest version of this on the network attached storage” and a variety of things in between.
Almost all nodes are kept in encrypted form, and those that are not will not be stored on others’ devices without an explicit request.
One of the great failed visions of 90s personal computing was ability to embed anything into anything else. This was mostly dropped because it shifts the balance of power from large software companies to small component makers, but also because embedding arbitrary files into other files is fragile. The location independent nature of vernodes addresses most of that fragility, and another aspect, that each node identifies what type of data it holds addresses the rest.
Will enough small component makers adopt it and build ecosystems that fulfills that vision? Remains to be seen.
Byte trees are a general purpose format for storing byte-oriented data in versioned nodes.
There are a variety of similar systems and designs to versioned nodes. However, they all are designed for narrower applications, and do not quite implement the paradigm.
Converge is the prototype exchange format for versioned node. It provides fully featured blobs and versions, including braid migration, in encrypted and unencrypted flavors. The encoding with atlv is compact and simple to parse and build. And the cryptography is arranged for compact and efficient implementations.
Vernodes is a computer storage paradigm enabling distributed collaboration, either in real time or with disconnected operation.