Bazil stands on the shoulders of some giants, and was inspired by shoulders of other giants. Or something like that.
FUSE is a protocol between the kernel and a userspace process, letting the userspace serve file system requests coming from the kernel.
OSXFUSE is the FUSE kernel side ported to Apple’s OS X.
Bazil uses the CAS a lot more aggressively, pushing content to it as soon as reasonable, instead of as part of a nightly dump.
Bazil has multiple peers independently accessing the CAS data, instead of having a singular service maintaining the state of the filesystem.
Bazil will (at some point) perform garbage collection, instead of relying on any “640kB should be enough for everyone” mentality.
Tra is a project by Russ Cox that was mostly
active 2002-2004. You can think of it as a stateful two-way
with version vectors to quickly decide which subdirectories and files
need to be synchronized.
In the interests of software archeology, we have a Git mirror of the original CVS repository at https://github.com/bazil/tra
Blake2 is a fast, cryptographically secure, and flexible hash. It can be personalized, keyed, and has no fixed output length.
Every single use of Blake2 in Bazil is personalized; you can’t build a “rainbow table” of generic Blake2 results and attack Bazil with that, the table would have to be specific to Bazil.
Where it makes sense, the hash is keyed with a nonce-equivalent, for example some unique bytes that are going to be always known at the time the hash is computed. This makes even the above Bazil-specific rainbow table worthless.
The output lengths are generally chosen to be overly large, for extra margin of safety and robustness in future – yet the lengths are just a matter of tuning. For example, the size of the CAS key is a single constant, allowing easy experimentation on whether there is a performance difference (there doesn’t seem to be).
And after all this, Blake2 is fast.
Bolt is a key/value store, with an emphasis at very fast reads. Its API is a pleasure to use.