--- title: 'On "local-first": beyond the CRDT silver bullet' date: 2020-11-14 layout: slides lang: en ref: 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/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. 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. these slides: [{{ site.tld }}/slides.html]({% link slides.md %}) 2. [prose version of this presentation]({% link _articles/2020-11-14-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