  Today's storage systems expose abstractions which are either too low-level
(e.g., key-value store, raw-block store) that they require developers to
re-invent the wheels, or too high-level (e.g., relational databases, Git) that
they lack generality to support many classes of applications. In this work, we
propose and implement a general distributed data storage system, called UStore,
which has rich semantics. UStore delivers three key properties, namely
immutability, sharing and security, which unify and add values to many classes
of today's applications, and which also open the door for new applications. By
keeping the core properties within the storage, UStore helps reduce application
development efforts while offering high performance at hand. The storage
embraces current hardware trends as key enablers. It is built around a
data-structure similar to that of Git, a popular source code versioning system,
but it also synthesizes many designs from distributed systems and databases.
Our current implementation of UStore has better performance than general
in-memory key-value storage systems, especially for version scan operations. We
port and evaluate four applications on top of UStore: a Git-like application, a
collaborative data science application, a transaction management application,
and a blockchain application. We demonstrate that UStore enables faster
development and the UStore-backed applications can have better performance than
the existing implementations.
