Local-First: 即時協作 + 所有權,下一個世代的軟體開發典範

林宏信
·
·
IPFS
·
在過去的十幾年,軟體行業經歷了一次典範轉移,將軟體從桌面搬上雲端。雲端帶來協作,卻讓我們失去了所有權。桌面軟體給我們所有權,卻無法適應多裝置時代。我們該如何結合兩個世界的優點,打造 local-first 的新軟體開發典範。
墨爾本的街道。自攝

我在網路上看到獨立實驗室 Ink & Switch 2019 年刊登的文章《Local-first software: You own your data, in spite of the cloud》。看完大受感動與啟發,在這裡做簡單的摘要與分享。

放眼現代軟體生態,會發現跟十年以前已經完全不同。取代安裝在電腦上的應用程式,越來越多的軟體改成以網頁服務的方式提供。大部分用電腦的時間,幾乎都待在瀏覽器中。

在過去的十幾年,軟體行業經歷了一次典範轉移。從傳統的桌面軟體,轉變成網頁服務。這帶來了更好的跨平台支援,免安裝直接使用,以及流暢的跨裝置體驗,最重要的,它使得多人即時協作可行。

指標性的案例,例如 Microsoft Word、PowerPoint、Adobe Illustrator,逐漸被 Google Docs、Canvas、Figma 所取代。這些服務支援多人即時協作,省下了 email 往返的心力,更重要的,讓多個人能同時修改而不會出現衝突。

然而,從桌面軟體變成網頁服務也帶來了以下問題:

  1. 速度:所有的操作都需要跟遠端的資料中心互動,就算只是勾一個選項,也需要等待網路延遲

  2. 依賴網路運作:不論是你的資料還是操作它的軟體,唯一的「正本」都是存放在遠端資料中心,不論是當你失去網路連線,或是伺服器故障,你都沒有辦法繼續使用

  3. 失去所有權:你不再擁有你的檔案,你只是有著一組能存取它們的帳密,而服務提供者隨時能收回

截取文章中的精闢總結:

The cloud gives us collaboration, but old-fashioned apps give us ownership. Can’t we have the best of both worlds?

雲端帶來協作,而桌面軟體給我們所有權。我們有沒有辦法結合兩個世界的優點?

這樣的軟體,就是這篇文章所提出的 local-first software

Local-First 的七項指標

文中將 local-first 定義為:優先使用本機儲存空間與內部網路,讓使用者有完整所有權,然而仍然能享受雲端服務的使用者體驗。

其中提出了七項具體指標

  1. 速度:你的資料就在你的裝置上,所有操作都是即時完成,在背景中與其他裝置同步

  2. 跨裝置:你的資料要能夠在多個裝置上操作

  3. 離線使用:在網路不能使用時,還是要能完整使用單機功能

  4. 即時協作:能夠與他人同時操作,並能避免或解決衝突

  5. 可持續性:在這間公司倒閉後,使用者還能不能開他的資料?過了 100 年後,這些資料還有沒有辦法被讀取?

  6. 安全與隱私:使用者資料預設只存在使用者自己的裝置,避免資料集中在中心化伺服器,帶來的監控、駭客攻擊與資料遭不當利用的問題

  7. 所有權:你能不能完整擁有你的資料。如果帳號被公司或法院停權,你還能不能使用?

以下節錄文中以這七項指標對現有軟體、服務、技術所做的評量

✓符合 — 部份符合 ✗ 不符合

現有技術的 local-first 評分。翻譯與節錄自原文表格
  • 檔案 + email / 雲端同步:其實已經很好用了。你有完整檔案的所有權,在自己的電腦上流暢的操作。就只是當要與他人協作時,需要往復的寄送檔案,還必須不斷修改命名(報告_1.docs 報告_2.docx 報告_final_4.docx)。
    雲端同步稍微解決了寄送檔案的困擾,但當兩地同時修改了一個檔案,發生衝突時,就會非常難解決。

  • Google Docs / 一般網頁程式:可以跨裝置使用與多人協作,然而沒網路就什麼也做不了。你也需要擔心是否會因為帳號被停權等原因而失去你的作品。

  • 多數手機應用:雖然是下載在手機裡的程式,但大多數功能卻都要依賴伺服器的功能。沒有網路,連自己發的影片都打不開。

  • Git+GitHub:Git 是軟體業界用來管理程式碼版本和多人協作的首選工具。它幾乎完美符合了軟體開發的需求,然而主要是設計給純文字檔案(程式碼),同時學習門檻過高,不適合讓一般人日常使用。

    但它的設計,尤其是其中每一個端點都有完整資料,以及透過編輯歷史來做衝突比較與復原的功能,非常值得借鑑。

究竟什麼樣的技術能夠符合這七項條件的每一項呢?在文中,實驗室團隊發現一種很有潛力作為基礎的技術:無衝突複製資料類型(Conflict-free Replicated Data Types, CRDTs)。以下就簡稱為 CRDTs。

理解 CRDTs

CRDTs 於 2011 年在一個電腦科學期刊中提出,是一種能讓多台電腦協作,又能自動解衝突的資料結構。CRDTs 不只保存資料的最終狀態,也保存了完整的變更歷史,並且只要重播(replay)歷史,就能得到一樣的最終狀態。

以文字編輯為例,假如原始字串如下:

1234567890

A 在 3 後面插入了一個 0

1230456789

B(從原始字串)移除了 8

12345679

當電腦要合併這兩項操作時,會發現 123 後面的字一個也對不起來。傳統上我們會使用更高級的字串比對演算法來解決,但如果我們知道修改的歷史,我們就只要將它們各自應用,就能得到解決衝突後的結果:

123456789   -> 原始字串
1230456789  -> 在 3 後面插入了一個 0
123045679   -> 移除了 8

如果是真的不能自動解決的衝突,CRDTs 也能夠提供更準確和小範圍的比較訊息,讓應用程式或使用者來解決。

在這個簡單的案例中可能還看不出價值,但使用過雲端檔案同步功能的人都知道,當遇到兩台電腦修改了同一個檔案,那是多麼麻煩和棘手的情況。僅基於結果的比對是困難的,這也就是為什麼不能夠以簡單的檔案/狀態同步來實現 local-first。

因此,以 CRDTs 作為基礎,我們就能夠解決跨裝置的資料衝突問題,開發出既能離線運作,又能與他人進行協作的系統。

案例研究:Heptabase

Heptabase 產品介紹圖。取自官網

Heptabase 是一個由台灣人創辦的訂閱制筆記與知識庫軟體,致力於讓任何人都能有效的對任何事建立深度理解。我已經使用了一年半,非常喜愛。它深深的改變了我學習的方式,也幫助我建立更有持續性與深刻的知識系統。

我在使用 Heptabase 時,最享受的是它流暢的使用者體驗,每個裝置都能獨立運作,跨裝置同步也不會有衝突,今年更加入了即時多人協作。

我以前使用 Notion,最受不了每次開啟都要等待好久的載入速度。後來回歸了純文字 markdown 的懷抱,用 Nextcloud 同步 markdown 檔案,然而電腦檔案的樹狀架構並不適合建立複雜知識系統。直到我發現 Heptabase,才找到真正適合自己的工具。

我也是以 Heptabase 的架構為原型,在研究如何開發這樣的系統時,才發現了 local-first 這個概念。我不確定這是不是當初他們的設計理念之一,但在我的使用體驗上,它滿足了其中非常多項指標。

以下我使用 local-first 的七項指標來評估 Heptabase

✓符合 — 部份符合 ✗ 不符合

  1. 速度:單機擁有完整資料,打開立即開啟(不到 2 秒)

  2. 跨裝置:電腦、手機、平板、網頁都能跨裝置使用

  3. 離線使用:離線仍然能完整存取並修改所有資料,包含撰寫卡片,編輯白板等

  4. 即時協作:支援跟他人同時編輯同一個白板

  5. 可持續性:Heptabase 是專有的訂閱制軟體,不付費就不能使用。但資料以 markdown 與 JSON 格式每日備份於自己裝置,仍然可以使用其他軟體解析。

  6. 安全與隱私:Heptabase 會在伺服器端保存一份你的資料,以利於同步功能,目前沒有端到端加密保護。使用者也可以選擇不啟用同步,但就無法享受跨裝置功能。

  7. 所有權:使用者有 markdown 和 JSON 的所有資料,但少了 Heptabase 這套軟體,沒有那麼容易使用,但是技術上能夠自己解析的。

總合來說,Heptabase 展現了 local-first 架構如何被實現在一個擁有良好使用者體驗的產品上,並使它成為產品核心賣點之一。

下個時代的來臨

網際網路從一開始 web1 的單向傳遞,到使用者生產內容的 web2,直到現在將所有權歸還使用者的 web3 運動。然而應用開發卻還是以伺服器中心的 Web Apps 作為主流。

Local-first 與 CRDTs 的架構,能夠在保有使用者主權的情況下,加入多人協作與跨裝置的功能。不論是家庭相簿、筆記、記帳、健身記錄,都能用更隱私而安全的方式與他人協作。這樣的應用程式,就如同是 app3,將會是在未來世代的應用開發典範。

最早發表於 wancat.cc

CC BY-NC-ND 4.0 授权
已推荐到频道:时事・趋势

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!