---
title: 'On "local-first": beyond the CRDT silver bullet'
date: 2020-10-26
layout: slides
lang: en
ref: on-local-first-beyond-the-crdt-silver-bullet
published: false
---
# On local-first
Beyond the CRDT silver bullet
---
# Part 1
Exposition
---
## "cloud apps" vs "old-fashined apps"
---
## Target
- documents
- files
- personal data repositories
Not: banking services, e-commerce, social networking, ride-sharing, *etc*.
---
## 7 Ideals for local-first software
---
### 1 - No Spinners: Your Work at Your Fingertips
---
### 2 - Your Work Is Not Trapped on One Device
---
### 3 - The Network Is Optional
---
### 4 - Seamless Collaboration with Your Colleagues
---
### 5 - The Long Now
---
### 6 - Security and Privacy by Default
---
### 7 - You Retain Ultimate Ownership and Control
---
## Towards a Better Future
CRDTs (Conflict-free Replicated Data Types) as a Foundational Technology
---
### Use case
```
# in node A and node B
s = "Hello, World"
# in node A
s = "Hello, Alice"
# in node B
s = "Hello, Bob"
```
How to reconcile those?
- `Hello, ABloibce`
- `Hello, AliceBob`
- `Hello, BobAlice`
- `Hello, Alice`
- `Hello, Bob`
---
Existing CRDTs differ:
- performance
- storage
- compression
- metadata overhead
---
Hint towards the "automerge" CRDT
---
*show comparison table, page 9*
---
# Part 2
Critique
---
### Software license
> In our opinion, maintaining control and ownership of data does not mean that
> the software must necessarily be open source.
---
#### Example 1 - intentional restriction
```bash
#!/bin/sh
TODAY=$(date +%s)
LICENSE_EXPIRATION=$(date -d 2020-10-27 +%s)
if [ $TODAY -ge $LICENSE_EXPIRATION ]; then
echo 'License expired!'
exit 1
fi
echo $((2 + 2))
```
```bash
# today
$ ./useful-adder.sh
4
# tomorrow
$ ./useful-adder.sh
License expired!
```
---
#### Example 2 - unintentional restriction
```bash
# today
$ useful-program
# ...useful output...
# tomorrow, with more data
$ useful-program
ERROR: Panic! Stack overflow!
```
---
### local-first **requires** free/libre software
Otherwise "The Long Now" (ideal nº5) is lost
---
### Denial of existing solutions
> In principle it is possible to collaborate without a repository service,
> e.g. by sending patch files by email, but the majority of Git users rely
> on GitHub.
Solution: either GitHub+CRDTs or `git` **`send-email`**
---
### Plain text formats
> Git is highly optimized for code and similar line-based text file
It even pulls software to the plain text direction, e.g.:
- delivery-templates
- `common-core.protocols.config`
Why not exploit that more?
---
### Ditching of web applications
> The architecture of web apps remains fundamentally server-centric
Disagree. Constrast [PouchDB][pouchdb] with Android [Instant Apps][instant-apps]
[pouchdb]: https://pouchdb.com/
[instant-apps]: https://developer.android.com/topic/google-play-instant
???
Talk on dynamic content
---
### Costs are underrated
- storage
- backups
- maintanence
Example: blog vs vlog
---
### Real-time collaboration a bit overrated
It is only possible on the presence of reliable, medium-quality network
connection
> X also works when inside an elevator, subway or plane!
<!-- 🤦 -->
---
### On CRDTs and developer experience
> For an app developer, how does the use of a CRDT-based data layer compare to
> existing storage layers like a SQL database, a filesystem, or CoreData? Is a
> distributed system harder to write software for?
Yes.
See "[A Note on Distributed Computing][note-dist-comp]"
[note-dist-comp]: https://web.archive.org/web/20130116163535/http://labs.oracle.com/techrep/1994/smli_tr-94-29.pdf
---
## Conclusion
Why this is a "paper I love": it took offline-first and ran with it.
But a pinch of CRDT won't make the world local-first.
The tricky part is the end of the sentence: "**in spite of the Cloud**".
---
## Thank you!
References:
1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %})
2. [prose version of this presentation]({% link _articles/2020-10-26-local-first-software-you-own-your-data-in-spite-of-the-cloud-article-review.md %})
3. "[Local-First Software: You Own Your Data, in spite of the Cloud](https://martin.kleppmann.com/papers/local-first.pdf)",
by M. Kleppmann, A. Wiggins, P. Van Hardenberg and M. F. McGranaghan
4. [The Morning Paper](https://blog.acolyer.org/2019/11/20/local-first-software/)
article
5. "[A Note on Distributed Computing][note-dist-comp]", by J. Waldo, G. Wyant, A. Wollrath and S Kendall
[note-dist-comp]: https://web.archive.org/web/20130116163535/http://labs.oracle.com/techrep/1994/smli_tr-94-29.pdf