The Willow Protocol
When I came across the willow protocol, I was astonished by its simplicity and how it approaches one of the modern, distributed computing problem.
And, did I mention their website is probably the best example for how to write protocol specifications. Pardon me RFCs!
What is the need of this protocol. Following lines definitely caught my eyes:
We made Willow to be a credible solution to digital networking in an uncertain era. It must be resilient in the times we’re forced to scale down, whether that’s due to a temporary loss of signal, natural disaster, or war.
As a person who deals with natural disaster related events – I got keen to understand how it works and possibly how to utilize this in our projects.
I headed to their page that compares itself with other protocols such as IPFS, Velid, Content-Addressed Storage and several many.
Willow is a family of specifications.
- Data Model – a system for giving structured names to bytestrings.
- Meadowcap – A capability system for controlling access to willow data.
func StripString(s: String) => String {
}
Willow Data Model
So you define a meaningful, hierarchial names to arbitraty sequence of bytes. And such meaninful names live in subspaces. Willow allows various ways of managing who gets to write to which subspace, from simple per-user access control to sophisticated capability of streams.
Willow model essentially a three-dimensional data model.
- The path – which we referred as names in earlier paragraph.
- The timestamps – the time the paths were added
- The subspaces – the path lives here
So imagine a three dimensional array on which the sequence of bytestrings live.
Now to further isolate, Willow also has namespaces. Imagine that you want to share a bunch of photos with your nears and dears but some to only your family members. The namespaces provide a very interesting isolation to the subspaces.
Let’s understand some more definitions:
Definitions
One thing I like about Willow is that it does not make any assumptions. Rather it leaves entirely upto you. For example – what if I want to keep the namespaces hidden, meaning, I don’t want it to have any human readable value to it. Rather a bunch of garbish text. It is possible as Willow does not assume anything.
This is way Willow could be called as higher order protocol