= On "local-first": beyond the CRDT silver bullet

# On local-first

Beyond the CRDT silver bullet

---

# Part 1

Exposition

---

## "cloud apps" vs "old-fashioned 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 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.  Contrast [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
- maintenance

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. "[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
1. [The Morning Paper](https://blog.acolyer.org/2019/11/20/local-first-software/) article
1. "[A Note on Distributed Computing](https://web.archive.org/web/20130116163535/http://labs.oracle.com/techrep/1994/smli_tr-94-29.pdf)", by J. Waldo, G. Wyant, A. Wollrath and S Kendall
