者: 查爾斯·都希格
出版社: 中信出版社
原作名: Smarter Faster Better: The Secrets of Being Productive in Life and Business
譯者: 宋瑞琴 / 劉迎
全書共分為了八個章節,激發動力與團隊合作,保持專注,設定目標,掌控力,做決定創新。獲取并應用數據。在書中分析了八個提高效率的秘訣,也讓我們看到了。如何設定目標的正確方式既要有遠大的志向,也要有小目標
書中不僅以真實的案例,還有許多科學的實驗進行講解,為我們提供好的幫助。那些不起眼的任務組合成在一起,變成更有意義的項目與目標和價值。我們會感受到小任務給我們帶來的巨大情感回報,它意味著我們做出了有意義的選擇,以及我們真正的掌控了自己的人生,而動力的真正來源是屬于主動選擇的
團隊協作
當團隊成員帶來歸屬感,并處于鼓勵他們抓住機會,也會擁有心理安全。信安全是一種團隊成員共有的信念,也可以在這個團隊里大膽的冒險。這是一種人與人之間的相互信任,相互尊重為特征的團隊氛圍。大家在團隊中互相保持尊重,同時也保留他自我
保持專注
在這里我們看到了書中介紹了心智模型能夠幫助我們用來許多信息搭設的腳手架,當確定了關注對象,也能主動做出決定。更好的掌控自己的主意,把真正重要的事情把它放在真正重要的事情上。了解應該關注什么,忽略什么
也要養成給自己講故事的習慣。主動尋求聽眾向別人講述不能把思考工作完全交給計算機。是我們主動做決定。決定應該注意的多思考,堅持思考作為成功一半
設定目標
我們需要延展目標和smart目標。重要是有一個大的目標,把這個目標轉化成具體可行計劃的系統
掌控力
任何人都能夠學會如何做更好的決定,在日常生活中對一些事做出預測,沒有人能夠每次預測正確,但是通過練習能夠學會如何提高預測的準確性
我們可以進行自己做決定。而且在團隊中如果都朝著同一個方向努力,也會變得更聰明,更高效的工作。掌控力能夠激發動力。賦予決定權也可以讓任何人成為專才做決定
創新
創新是解決問題的過程。只要我們能夠這樣想創新就不再神秘,創新可以更關注問題本身和問題曾經的解決方法。最具創造性的人幾乎都知道感到恐懼是一件好事,我們要做的就是學會如何充分的相信自己,釋放自己的創造性
獲取并應用數據
讓我們對信息進行處理,做筆記,解釋剛剛需要東西或者能夠驗證觀點與想法制作成圖表。將這些數據進行加以運用
經編輯:張錦河,宋欣悅
當地時間7月10日,特斯拉CEO及腦機接口公司Neuralink創始人埃隆·馬斯克(Elon Musk)和Neuralink的高管們進行了一次視頻直播。在這次直播中,馬斯克分享了腦機接口的最新進展和未來發展方向。
1.馬斯克表示,腦機接口的最終目標不僅是修復殘障人士喪失的頭腦功能,還要賦予人類超能力。
2.馬斯克透露,Neuralink計劃在“下周左右”通過手術將其實驗性大腦芯片植入第二名人類患者體內,盡管他們的第一位患者遇到了硬件問題,該設備在手術后幾周內部分與大腦分離,并表示他希望到今年年底,測試該設備的參與者數量達到“高個位數”。
3.馬斯克稱,未來用戶還可以利用Neuralink的設備,用意念控制特斯拉的人形機器人Optimus。
4.馬斯克表示,Neuralink還在采取措施降低植入物從大腦中縮回的風險,并且他們還在開發一種改進的設備,其“帶寬”可能是當前型號的兩倍。
5.馬斯克表示,Neuralink的終極目標是通過在人類智能和數字智能之間建立一種更緊密的共生關系,來降低AI的文明風險。
6.馬斯克透露,Neuralink的第二個產品有點像Fitbit或帶有微小電線或電極的Apple Watch。
圖片來源:截圖于X
在Neuralink的最新直播中,馬斯克分享了該公司腦機接口技術的宏偉藍圖。Neuralink計劃推出兩款革命性產品。第一種產品是“心靈感應”(Telepathy),旨在幫助神經元受損的人恢復身體功能。馬斯克描述這項技術時說:“它使你能夠通過思考來控制電腦或手機。”第二種產品是一種大腦護理設備,類似于帶有微小電極的智能手表,這些電極植入大腦后能夠重寫電信號,幫助人們更高效地使用大腦。
圖片來源:Neuralink官網
馬斯克在直播中表示,該設備不會傷害大腦。美國食品和藥物管理局在幾年前最初考慮該設備時曾提出安全問題,但最終于去年批準該公司開始人體試驗。”
馬斯克透露,Neuralink計劃在“下周左右”通過手術將其實驗性大腦芯片植入第二名人類患者體內。他強調:“我們希望在接下來的一周左右植入下一個人類。”并且表示希望到今年年底,測試該設備的參與者數量達到“高個位數”。盡管首位植入者諾蘭·阿博(Noland Arbaugh)遇到了一些硬件問題,但馬斯克強調,第二例腦機接口手術將根據第一例出現的問題進行改進。
圖片來源:Neuralink官網
馬斯克表示,腦機接口的最終目標是超越修復殘障人士喪失的頭腦功能,賦予人類超能力。他指出:“我認為這應該給世界上很多人帶來希望,未來將會是令人興奮和鼓舞人心的,技術將賦予他們超能力。”
此外,他還展望了未來用戶可以利用Neuralink的設備,用意念控制特斯拉的人形機器人Optimus,他說:“即使有人失去了語言能力,他們仍然可以與Optimus交流。他們可以通過藍牙與Optimus進行心靈感應,他們仍然可以控制Optimus、電腦或手機。”
為了降低植入物從大腦中脫落的風險,Neuralink正在采取新的手術策略,包括更精細地雕刻頭骨表面以最小化植入物下方的間隙。馬斯克還透露,公司正在開發一種改進的設備,該設備有望在不需要重大更改的前提下,通過精確放置植入線路,將數據傳輸帶寬翻倍。
圖片來源:Neuralink官網
馬斯克詳細解答了關于設備的多個細節問題。他提到設備的植入將非常精細,以至于“如果你把手放在頭骨的頂部,你就不會感覺到任何設備。”
關于充電問題,他表示:“一旦你使用了16小時,那么你基本上就有了24小時的使用時間,因為它可以在你睡覺時充電。”續航時間方面,目前的版本需要45分鐘充電,能夠支持4到5個小時的使用,而未來的版本將顯著提升電池容量和使用時間。
此外,他還討論了設備的升級換代問題,強調了隨著技術進步,設備升級將變得像更換智能手機一樣簡單:“你不想讓iPhone 1永遠留在你的大腦里,你可能想要iPhone 15。”
馬斯克:
歡迎來到Neuralink直播。我們將告訴你第一個植入者的進展,然后談談我們為第二個植入者做了什么改進。我們希望在接下來的一周左右對第二名人類患者展開體內植入手術。這是我們的第一個產品,它叫做“心靈感應”(Telepathy),它可以讓你通過思考來控制電腦或手機,我們將在演示中開始。
我們的第一個產品叫做Telepathy,它使植入Neurolink的人能夠通過思考來控制他們的手機或電腦。一旦你可以控制你的手機和電腦,你基本上可以僅僅通過思考來控制任何東西。沒有眼動追蹤或任何東西,純粹是用你的想法。
所以,這是一個意義非常深遠的設備,可以幫助很多失去大腦和身體之間聯系的人。想象一下像史蒂文·霍金這樣的人,如果他能以與仍然與他們的大腦身體有聯系的人相同的速度進行交流。所以Neurolink真的可以幫助全世界數百萬人。
這是我們總體目標的重要組成部分,旨在實現您的大腦與世界其他部分以及您的計算機之間達到高度地連接與融合。終極目標是通過在人類智能和數字智能之間建立一種更緊密的共生關系,來降低AI的文明風險。但這需要很多年的時間,我們將幫助解決許多腦損傷或脊柱損傷問題。
馬斯克:
對于我們的第一個產品Telepathy,它真的意義非常深刻。如果有受損或幾個神經元能夠跨越大腦運動皮層到脊柱之間的間隙,以使某人能夠使用身體,那么也有可能長期彌合間隙。我認為那將非常令人興奮。你知道從長遠來看,這是可能的。
我們的第二個產品有點像Fitbit或帶有微小電線或電極的Apple Watch。它是完全無線的,就像我現在可以擁有一個神經鏈接,它會感應充電。所以你基本上可以有一個電磁裝置,你用它來給設備充電。所以,它就像一只Apple Watch。
我們心靈感應技術的初步目標,主要是為那些因身體原因行動不便的人群解鎖數字世界的獨立性,使他們僅憑意念就能操控計算機,無需依賴身體動作。我們的愿景是為他們提供與正常人相同甚至更高水平的計算機控制能力、功能體驗及操作可靠性,確保他們的數字生活同樣自由、高效且便捷。
沒有眼動追蹤,只是在思考。那很有趣,對吧?
應用主管:
是的,我們的首位植入者已經在平臺上分享了大量視頻,非常值得一看。雖然,我自己沒有玩過《文明》這款游戲,但我認為他玩的不是一個容易的游戲模式,他顯然選擇了一個極具挑戰性的困難模式。在直播這樣高壓的環境下,他依然能夠邊移動邊操作,完成如此艱巨的任務,這確實令人印象深刻。
我們設備的另一個很酷的東西是,我們可以隨時隨地使用它。我們的設備還可以解鎖以前參與者無法解鎖的東西。例如,我們能夠將他連接到游戲機,并與朋友和家人一起玩馬里奧卡丁車,很高興看到他們在多年后一起玩。
他喜歡使用該設備玩耍,并每天獨立使用瀏覽器觀看視頻和閱讀、玩游戲。我們最為關注的關鍵指標是,確保我們的設備在實際應用中真正發揮其價值,這主要體現在用戶每天及每周使用設備的小時數上。手術后,我們會每周跟蹤一次數據。在他不太忙、也不旅行的幾周,他甚至可以在一周內完成70個小時的設備融合,這太神奇了。他當然非常希望更頻繁地使用這項技術,但現實是,他有時需要休息睡眠,而且設備也偶爾需要充電。我們期望隨著技術的不斷進步,能夠逐步改善這些方面,讓使用體驗更加無縫和便捷。
馬斯克:
這實際上是第一版設備,只有一小部分電極在工作,但即使只是開始也比世界紀錄好兩倍。
這一點確實值得特別強調。媒體往往習慣于關注那些看似不足的部分,比如杯子空出的10%,卻忽略了它其實已經盛滿了90%的水。對于Neuralink而言,我們取得的成就遠非微不足道。從第一個病人的成功植入,到首款設備的問世,我們已經實現了計算機帶寬領域的一項世界紀錄,其性能更是傳統技術的兩倍之多。這是一個令人震驚、難以置信的偉大成果,而我相信,這只是我們輝煌旅程的開始,未來只會更加美好。
它的潛力是最終達到兆位級別。這可能是改善腦機接口帶寬的長期目標。如果你考慮一下人類和建議之間的帶寬通常有多低,那么平均帶寬是極低的,但我說的是在一天的時間內每秒不到一個比特。如果一天有86400秒,那么在非常罕見的情況下,您向任何給定設備輸出的比特數都少于這個數字。所以這對AI來說非常重要,對人類來說,共生AI就是能夠快速交流。
應用主管:
是的,這些表現在非常高的水平上,它的通道大約有15%的線程有效,所以我們想減少導致這種情況的問題。
馬斯克:
我們想關注的另一個考慮因素是,對于我們即將到來的參與者來說,大腦有非常復雜的折疊褶皺。它是一層層的神經元工作表,遍布大腦表面,折疊成這個奇怪的形狀。大腦的褶皺深入大腦,隨之而來的是神經元。如果我們在其中一個褶皺附近插入,那里可能有非常有用的信息編碼在神經元中,我們可能最終會與我們最感興趣的一些神經元層平行,完全避開它們。為了避免這種可能性,我們將在未來的參與者中更靠近折疊的中間插入,確保我們跨越感興趣的層,即第5層皮層。
應用主管:
我們未來正在考慮的另一個風險緩解措施。植入物有一定的尺寸,植入物底部的深度,它實際上比普通人類頭骨薄。所以我們想要做的是控制植入物下方間隙的大小,讓從植入物進入大腦的線程盡可能松弛。我們在第一個參與者中沒有這樣做,因為我們不想操縱他們的任何組織,也認為沒有這種必要。
在即將到來的植入手術中,我們的計劃是非常有意地雕刻頭骨表面,以最小化植入物下方的間隙,使植入物的底部與頭骨內側的正常輪廓完全齊平。這將使植入物更靠近大腦,消除空隙上的一些張力,我們認為這將減少螺紋收縮的趨勢。
馬斯克:
事實上,我們建立了一個工具,這是一個非常重要的細節,確保內部輪廓與頭骨完美貼合。大腦不應因植入物而產生任何不適或壓迫感,就像我們努力最小化氣囊與顱骨內部輪廓之間的沖突一樣。這是我們非常重要的兩個改進。
賽歐(DJ Seo,Neuralink聯合創始人兼工程副總裁):
這樣做的額外好處是,你會看到一些痕跡,我們稱之為“切口”,你的頭部會有輕微的不適,但這實際上進一步消除了它的存在感。
馬斯克:
是的,我們的目標是,如果你把手放在頭骨的頂部,你就不會感覺到任何設備。即使有人禿頂,你也不會真正注意到它。從顱骨的內部輪廓來看,從物理角度來看,大腦并沒有真正注意到顱骨中有一個凹陷,因為沒有凹陷。
你甚至不會注意到有人擁有這個設備。所以就像我說的,恢復控制你的電腦和手機的能力,這就是我們的目標。然后下一個設備能夠讓人們看到以前看不到的東西,紅外線,紫外線,無線電......我認為換一種說法就是,我們想給人類超能力。我們不僅恢復了患者之前的大腦功能,而且患者實際上擁有比正常人更大的功能,那是一件超級偉大的事情。
賽歐:
為什么腦機接口必須真正意義上地進入大腦內部?簡單來說,這是因為如果僅僅將設備放置在大腦表面或外部,其效果將大打折扣。為了實現我們期望的高水平控制,傳感器必須盡可能地靠近大腦中的神經元源,即那些負責產生信號的關鍵區域。只有這樣,傳感器才能更準確地捕捉并解析這些信號,從而實現更為精準和高效的腦機交互。
馬斯克:
是的,打個比方,如果你想知道工廠里發生了什么,你需要走進工廠。你不能只是把聽診器放在墻上,試圖弄清楚到底發生了什么。從大腦外部讀取事物就像一個人把聽診器放在工廠的墻上,試圖理解工廠里正在發生的事情,這是沒有效果的。你必須在里面,所以線程必須在里面。但我想再次強調,我們的目標是賦予人們超能力,而不僅僅是恢復先前的功能。我認為這應該給世界上很多人帶來希望,未來將會是令人興奮和鼓舞人心的,技術將賦予他們超能力。那太神奇了。
馬修(Matthew Mcdoul,Neuralink神經外科醫生):
是的,這個故事非常令人興奮的部分之一是我們能夠用15%的線程做很多事情,同時你有更多的渠道。在大腦的運動皮層中,每個神經元都承載著獨特的信息,它們各自代表著不同的動作意圖或感知。當你試圖理解一個手指的動作時,僅僅依賴電子文本是遠遠不夠的。隨著我們能夠接入的大腦通道數量增加,你對于手上各個手指的精細控制以及這些動作的解碼能力也將顯著提升。
因此,對于那些因各種原因完全無法說話或行動受限的人來說,快速輸出文本的能力變得尤為重要。想象一下,他們可能正迫切地想要向家人表達愛意,說出“我愛你”,或是簡單地請求一杯水。在這種情況下,能夠更快速地打字,無疑成為了他們與外界溝通的關鍵橋梁。而我們的技術,通過增加可接觸和控制的手指數量,使得這種高效的文本輸出成為可能。我對我們所能達到的技術高度充滿期待,相信它將為無數人的生活帶來翻天覆地的變化。
馬斯克:
我們目前大約是10bits/秒,但最終我們希望達到兆位,多年后我認為千兆級是可能的,這是相當驚人的。
現在,這仍然是設備的初始版本,正如我們提到的,它是第一代,只有15%的線程工作。當前設備有64個線程,每個線程上有16個電極。我們的下一個設備有128個線程,每個線程有8個電極。因為當我們對如何、在哪里放置電極、線程越來越有信心時,每根線程需要更少的電極。所以我們基本上可以,在沒有實質性變化的情況下,如果我們準確地放置線程,潛在地帶寬將翻倍。然后下一代設備可能會有更多的線程,目標是3000個電極。所以這將變得越來越好,我認為以10倍的幅度上升。不會太久,一個有Neuralink設備的人可以比一個有完全功能的身體的人更快地交流,比最快速度的打字員或拍賣師更快。
Neuralink高管:
這可能是其中非常有趣的一部分。基本上,我們目前將標準輸入連接到計算機和鍵盤。很快我們就會有一個更高帶寬的接口,我們需要考慮新的方法來實際構建接口。
馬斯克:
這是個很好的觀點。因為目前的導入設備以手為中心,我們有這些移動設備,比如鼠標和鍵盤,以及Xbox控制器。但你實際上不再需要這些傳統的控制機制。如果你不想用手,你就不需要這些控制器,所以最終我認為你將能夠通過神經鏈接傳達整個未壓縮的概念給其他人。
Neuralink高管:
即便在當下,我們也面臨著一些挑戰。比如,當用戶通過腦機接口控制鼠標時,如果他們無法感受到鼠標在虛擬空間中的點擊動作,就難以確切地知道點擊操作是否真的執行了。雖然他們可以在屏幕上看到結果,但缺乏那種直觀的觸感反饋,使得整個體驗變得不那么完整。此外,沒有類似于傳統鍵盤或觸控板上的物理按鍵來提供直接的反饋,也增加了用戶理解和適應這一新技術的難度。因此,我們需要不斷探索和創新,以找到更好的方式來解決這些用戶體驗上的挑戰,讓用戶能夠更直觀地了解他們的解碼器正在做什么,以及如何在早期發現并糾正可能出現的錯誤。
馬修:
是的,它只是一個藍牙連接,就像你的普通蘋果鼠標或蘋果魔法鍵盤連接到你的電腦一樣。事實上,如果我們愿意,我們基本上可以將其設置為隱藏界面。Hid只是協議的一個名稱,用于將鼠標的發作發送到計算機,我基本上可以輸入任何東西。
賽歐:
是的,基本上任何設備都具有藍牙功能。我們的長期目標是擁有我們自己的協議,會更加安全可靠。
馬修:
所以問題是,Neuralink能否長期治療癱瘓?我們現在不能這么做。但我們已經做了初步的工作,在脊髓中植入了第二個神經鏈接,我們可以在動物模型中恢復自然的外觀和腿部運動。但這還需要一段時間。我們有很多工作要做。
馬斯克:
基本上,完全解決癱瘓問題沒有物理障礙。這也許是一種說法,你的運動皮層發出信號,如果它們被轉移到神經受損的地方,基本上就是一個通信橋梁。因此,您可以將運動皮層的通信橋接到頸部或脊柱的受損點,從物理學的角度來看,恢復全身功能是可能的。這是一個非常困難的技術問題,但從物理學的角度來看,這是有可能的。
在下一個階段的推廣方面,我們真的想確保我們在每個神經鏈接之間,每個病人之間取得盡可能多的進展。所以我們現在才轉移到我們的第二個患者。但我們希望,如果一切順利,今年能有“高個位數”的植入者,在幾年內希望有成千上萬的植入者。
賽歐:
我認為需要強調的一件事是,我們并不是只制造了一個設備和一臺手術。我們做了一系列手術。我們制造了成千上萬的設備。這樣做的目的不僅是為了驗證技術的可行性,更重要的是,通過大量的實踐來挖掘并消除任何潛在的低頻故障模式,從而確保技術的穩定性和安全性。為此,我們在基礎設施上進行了大量的投資,以便在設備制造和手術實施方面都能夠實現快速擴展。我們的目標是盡快將這項技術推向更廣泛的應用領域,幫助盡可能多的人改善生活質量。
馬斯克:
設備植入真的需要變得完全自動化,就像眼科手術一樣,沒有眼科醫生手拿激光切割機,那太瘋狂論文。但是Alpha模型只是監督基本機器并確保設置正確,然后機器會做所有的事情并恢復你的視力。有很多人通過手術恢復了視力,這真的很了不起。
如果輪椅能夠像智能手機那樣擁有一個應用程序,那么理論上它也就只需要一個界面來操作。進一步設想,如果輪椅配備了專門的“輪椅接口”,用戶就可以通過藍牙等無線技術輕松連接到輪椅,實現便捷的操作與控制。這確實是我們在不遠的將來應該努力實現的目標。
當然,在推廣這項技術時,我們需要謹慎行事,特別是在控制速度方面。初期階段,我們可能會設置一些速度限制,以確保用戶的安全,避免發生意外。同時,我們也將致力于優化用戶體驗,讓神經設備能夠順暢地適配任何具備藍牙接口的設備,從而實現更加廣泛和靈活的應用。
我們也可以和Optimus交談,你可以直接發送給它,或者如果有人失去了語言能力,他們仍然可以與Optimus交流。他們可以通過藍牙與Optimus進行心靈感應,即使有人的說話能力完全喪失,他們仍然可以控制Optimus或他們的計算機或手機。
類似的事情,比如吃飯,如果你需要有人喂你,那么你將很難和朋友一起吃飯,失去這種正常的社交體驗。但是如果你能自己喂自己吃飯,拿起叉子,自己吃披薩、雞肉,這將是一個巨大的飛躍。它可以有效減少對看護人員以及其他人的依賴,從而節省時間和精力。
我認為從長遠來看,一個令人興奮的可能性是,未來用戶還可以利用Neuralink的設備,用意念控制特斯拉的人形機器人Optimus。假設有人失去了手臂或腿。我們實際上可以連接一個Optimus手臂,Optimus腿并進行神經鏈接植入,這樣,來自您大腦的運動命令將轉到您的生物手臂,現在轉到您的機器人手臂或機器人腿。這樣一來,你基本上擁有了控制論的超能力。
確實,正如未來賽博朋克游戲中的設想那樣,隨著技術的不斷進步,我們有望獲得超越生物極限的賽博升級。當我們能夠大規模地為客戶提供神經鏈接服務時,對大腦的理解也將迎來質的飛躍。目前,盡管我們已經對大腦有了一定的認識,但這種理解仍然是相對粗淺的,很大程度上是因為我們缺乏足夠精細的傳感器來捕捉大腦內部的復雜活動。
馬修:
是的,我認為這被低估為一種研究工具,可以推動整個努力,真正了解人類思想的物理實質是什么。我們還沒有達到所需的理解程度。所以Neuralink實際上是一個非常強大的研究工具。
馬斯克:
我認為我們最終可以理解和修復相當嚴重的精神疾病,例如精神分裂癥。
我只是想明確一點,目前只有一個人的大腦中有一個Neuralink芯片。并非如某些人所擔憂的那樣,已經在廣泛的人群中實施了這一技術。
有些人患有嚴重的精神分裂癥,他們的大腦在某種程度上出現了故障,這實際上是由于物理電路問題。你可以認為大腦是一個生物計算機。如果一些電路被交叉,它會崩潰,或者會出現其它問題。
有了神經設備,我們可以解決這些問題,幫助那些患有腦部疾病或精神病的人過上正常的生活。我認為這是未來可能發生的事情之一。你完全可以想象,比如一些人有老年性癡呆癥,他們的記憶力不如以前好,有時候他們會忘記自己是誰,孫子孫女是誰或者出生日期是什么,這是Neuralink可以幫助解決的問題。
這只是生物計算機中的一個小故障,可以修復,但本質上是短路。
Neuralink高管:
關于設備如何充電,充電持續多久?目前的版本充電大約需要45分鐘,充滿電可以堅持4到5個小時。我們從諾蘭(第一名植入者)那里了解到的是,這實際上是他更多使用它的主要限制之一。實際上,每周使用產品超過70小時是相當困難的。
馬斯克:
但值得強調的是,我們的第一個植入者諾蘭在一周內使用了設備70個小時。
Neuralink高管:
你可能不會喜歡我公開分享他的電腦使用情況,但我確定只用于有成效的事情。我們學到的一件事是,在設備的下一個版本中,我們需要加倍或增加電池容量。充電時間可將電池壽命延長一倍,意味著你應該可以使用大約8小時。
賽歐:
充電設備目標是實際使用他們使用的所有東西,所以你可以在袖子里充電,或者在睡覺時充電。
馬斯克:
正是,一旦你使用了16小時,那么你基本上就有了24小時的使用時間,因為它可以在你睡覺時充電。
Neuralink高管:
還有一件非常關鍵且值得強調的事情是,對于那些身體癱瘓的人來說,他們可能無法自行將充電器放置在頭部設備上進行充電。因此,在設計神經接口設備時,我們必須充分考慮到用戶的獨立性和便利性。這不僅僅意味著要提升設備的使用時長和性能,更重要的是要確保用戶能夠自主、安全地完成充電過程,無需依賴他人的幫助。
馬斯克:
我們直播快要結束了,如果還有最后幾個問題,升級方面,我們確實認為能夠升級設備是很重要的。你不想讓iPhone 1永遠留在你的大腦里,你可能想要iPhone15。所以我們將取出神經鏈接設備并放入一個新的設備。
每日經濟新聞
oogle Docs 和 Trello 等云應用之所以受歡迎,是因為它們支持與同事進行實時協作,并且讓我們能夠輕松地從所有設備訪問工作內容。然而,通過將數據存儲集中到服務器上,云應用也剝奪了用戶的所有權和代理權。如果服務關閉,軟件將停止運行,使用該軟件創建的數據也會丟失。
在本文中,我們提出了“本地優先軟件”:一套讓用戶能夠協作和擁有所有權的軟件原則。本地優先的理念包括離線工作和跨多臺設備協作的能力,同時還能提高數據的安全性、隱私性、長期保存和用戶控制能力。
我們調查了現有的數據存儲和共享方法,包括電子郵件附件、Web 應用和 Firebase 支持的移動應用,并研究了每種方法的利弊。我們研究了無沖突復制數據類型 (CRDT):從頭開始就是多用戶的數據結構,同時也是本地和私有的。CRDT 有可能成為實現本地優先軟件的基礎技術。
我們分享了Ink & Switch多年來開發本地優先軟件原型的一些發現。這些實驗測試了 CRDT 在實踐中的可行性,并探索了這種新數據模型的用戶界面挑戰。最后,我們提出了一些邁向本地優先軟件的后續步驟:針對研究人員、針對應用程序開發人員,以及針對企業家的創業機會。
本文還以 PDF 格式發表于Onward! 2019 會議論文集。請引用:
Martin Kleppmann、Adam Wiggins、Peter van Hardenberg 和 Mark McGranaghan。本地優先軟件:盡管有云,您仍擁有自己的數據。2019 年 ACM SIGPLAN 國際編程和軟件新理念、新范式和反思研討會(前進!),2019 年 10 月,第 154-178 頁。doi :10.1145/3359591.3359737
歡迎您提供反饋:@inkandswitch或hello@inkandswitch.com。
如今,我們在網上協作的便捷程度令人驚嘆。我們使用 Google Docs 協作處理文檔、電子表格和演示文稿;在 Figma 中,我們共同設計用戶界面;我們使用 Slack 與同事溝通;我們在 Trello 中跟蹤任務;等等。我們依賴這些以及許多其他在線服務,例如用于記筆記、規劃項目或活動、記住聯系人以及一系列商業用途。
我們將這些服務稱為“云應用程序”,但您也可以稱它們為“ SaaS ”或“基于 Web 的應用程序”。它們的共同點是,我們通常通過 Web 瀏覽器或移動應用程序訪問它們,并且它們將數據存儲在服務器上。
與前幾代軟件相比,如今的云應用具有巨大的優勢:無縫協作,能夠從任何設備訪問數據。隨著我們越來越多地通過這些云應用來管理生活和工作,它們對我們來說變得越來越重要。我們在使用這些應用上投入的時間越多,其中的數據對我們來說就越有價值。
然而,在我們的研究中,我們與許多創意專業人士進行了交談,在此過程中,我們也了解到云應用程序的缺點。
當你投入大量創造性精力和努力去創造某樣東西時,你往往會對它產生深厚的情感依戀。如果你從事創造性工作,這可能聽起來很熟悉。(當我們說“創造性工作”時,我們指的不僅僅是視覺藝術、音樂或詩歌——許多其他活動,如解釋技術主題、實現復雜的算法、設計用戶界面或弄清楚如何帶領團隊實現某個目標,也是創造性的努力。)
我們在文章《Capstone:一款用于思考的平板電腦》和《iPad:一款快速、精確的創造力工具》中進一步討論了對支持創造過程的軟件的研究。
在進行創造性工作的過程中,您通常會生成文件和數據:文檔、演示文稿、電子表格、代碼、筆記、繪圖等。您會希望保留這些數據:以供將來參考和啟發,將其包含在作品集中,或者僅僅因為您為之感到自豪而存檔。擁有這些數據的所有權很重要,因為創造性表達是非常個人化的事情。
不幸的是,云應用在這方面存在問題。雖然它們允許您在任何地方訪問數據,但所有數據訪問都必須通過服務器進行,?并且您只能執行服務器允許您執行的操作。從某種意義上說,您并不完全擁有這些數據——云提供商擁有這些數據。用保險杠貼紙上的話來說: “沒有云,它只是別人的電腦。”
我們使用“所有權”一詞并非指知識產權法和版權,而是指創作者與其數據之間的感知關系。我們將在后面的部分討論這一概念。
當數據存儲在“其他人的計算機”上時,第三方會對這些數據進行一定程度的控制。云應用以服務形式提供;如果服務不可用,您將無法使用該軟件,也無法再訪問使用該軟件創建的數據。如果服務關閉,即使您可以導出數據,但如果沒有服務器,您通常無法繼續運行該軟件的副本。因此,您只能聽任服務提供商的擺布。
在 Web 應用出現之前,我們擁有所謂的“老式”應用:在本地計算機上運行的程序,在本地磁盤上讀取和寫入文件。如今,我們仍在使用許多此類應用:文本編輯器和 IDE、Git 和其他版本控制系統,以及許多專業軟件包(例如圖形應用程序或 CAD 軟件)都屬于此類。
本文中我們討論的軟件是用于創建文檔或文件(例如文本、圖形、電子表格、CAD 圖紙或音樂)或個人數據存儲庫(例如筆記、日歷、待辦事項列表或密碼管理器)的應用程序。我們談論的不是實現銀行服務、電子商務、社交網絡、拼車或類似服務,這些服務由集中式系統提供良好的服務。
在老式應用程序中,數據保存在本地磁盤的文件中,因此您對這些數據擁有完全的自主權和所有權:您可以做任何您想做的事情,包括長期存檔、備份、使用其他程序操作文件或刪除不再需要的文件。您無需任何人的許可即可訪問您的文件,因為它們屬于您自己。您不必依賴其他公司運營的服務器。
總結一下:云讓我們有了協作,而老式的應用程序讓我們有了所有權。難道我們不能兩全其美嗎?
我們既希望擁有云應用提供的跨設備訪問和實時協作的便利,也希望擁有“老式”軟件所體現的對自己數據的個人所有權。
我們認為數據所有權和實時協作并不矛盾。可以創建具有云應用程序所有優勢的軟件,同時還允許您保留對您創建的數據、文檔和文件的完全所有權。
我們將這種類型的軟件稱為本地優先軟件,因為它優先使用本地存儲(計算機內置的磁盤)和本地網絡(例如家庭 WiFi),而不是遠程數據中心的服務器。
在云應用中,服務器上的數據被視為數據的主要、權威副本;如果客戶端擁有數據的副本,它僅僅是從屬于服務器的緩存。任何數據修改都必須發送到服務器,否則“不會發生”。在本地優先應用中,我們交換這些角色:我們將本地設備(筆記本電腦、平板電腦或手機)上的數據副本視為主要副本。服務器仍然存在,但它們保存數據的次要副本,以協助從多個設備進行訪問。正如我們將看到的,這種觀點的轉變具有深遠的影響。
以下是我們希望在本地優先軟件中努力實現的七個理想。
當今許多軟件的運行速度都比前幾代軟件慢。盡管 CPU 的速度越來越快,但某些用戶輸入(例如單擊按鈕或按下按鍵)與顯示屏上顯示的相應結果之間通常存在明顯的延遲。在之前的工作中,我們測量了現代軟件的性能并分析了這些延遲發生的原因。
全球各地 AWS 數據中心之間的服務器到服務器往返時間。數據來源:Peter Bailis、Aaron Davidson、Alan Fekete 等人:“高可用性事務:優點和局限性”,VLDB 2014。
對于云應用,由于數據的主要副本位于服務器上,因此所有數據修改和許多數據查找都需要往返服務器。根據您居住的位置,服務器很可能位于另一個大陸,因此光速限制了軟件的速度。
用戶界面可能會嘗試通過將操作顯示為已完成來隱藏延遲,即使請求仍在進行中(這種模式稱為樂觀 UI)——但在請求完成之前,始終存在失敗的可能性(例如,由于不穩定的 Internet 連接)。因此,樂觀 UI 有時仍會在發生錯誤時暴露網絡往返的延遲。
本地優先軟件則有所不同:由于它將數據的主要副本保存在本地設備上,因此用戶無需等待對服務器的請求完成。所有操作都可以通過讀取和寫入本地磁盤上的文件來處理,并且與其他設備的數據同步在后臺悄悄進行。
雖然這本身并不能保證軟件會很快,但我們預計本地優先軟件能夠幾乎立即響應用戶輸入,而無需在您等待時顯示旋轉器,并允許您隨時操作數據。
如今,用戶依靠多種計算設備來完成工作,現代應用程序必須支持此類工作流程。例如,用戶可以使用智能手機隨時隨地捕捉想法,在平板電腦上整理和思考這些想法,然后在筆記本電腦上將結果作為文檔輸入。
這意味著,雖然本地優先應用將數據保存在每臺設備的本地存儲中,但也需要在用戶工作的所有設備上同步這些數據。存在各種數據同步技術,我們將在后面的部分詳細討論它們。
大多數跨設備同步服務還會將數據的副本存儲在服務器上,從而為數據提供方便的異地備份。只要每個文件一次只由一個人編輯,這些解決方案就非常有效。如果幾個人同時編輯同一個文件,可能會發生沖突,我們將在協作部分討論這個問題。
個人移動設備會經過網絡可用性各異的區域:不穩定的咖啡店 WiFi、飛機或火車穿越隧道時、電梯或停車場。在發展中國家或農村地區,互聯網接入基礎設施有時并不完善。在國際旅行時,許多移動用戶會因為漫游費用而禁用蜂窩數據。總體而言,離線應用的需求很大,例如研究人員或記者需要在實地寫作。
“老式”應用程序在沒有互聯網連接的情況下也能正常工作,但云應用程序通常無法在離線時工作。多年來,“離線優先”運動一直在鼓勵網絡和移動應用程序的開發人員改進離線支持,但在實踐中,很難將離線支持改造為云應用程序,因為為以服務器為中心的模型設計的工具和庫不易適應用戶在離線時進行編輯的情況。
盡管可以使Web 應用程序離線工作,但用戶很難知道是否已下載應用程序所需的所有必要代碼和數據。
由于本地優先應用程序將其數據的主要副本存儲在每個設備的本地文件系統中,因此用戶可以隨時讀取和寫入這些數據,即使在離線時也是如此。然后,當網絡連接可用時,它會在稍后與其他設備同步。數據同步不一定需要通過互聯網進行:本地優先應用程序也可以使用藍牙或本地 WiFi 將數據同步到附近的設備。
此外,為了獲得良好的離線支持,最好讓軟件作為本地安裝的可執行文件運行在您的設備上,而不是在網絡瀏覽器中運行。對于移動應用程序來說,在使用之前下載并安裝整個應用程序已經是標準做法。
協作通常需要幾個人為一個文檔或文件貢獻材料。然而,在老式軟件中,幾個人同時處理同一個文件是有問題的:結果往往是沖突。在源代碼等文本文件中,解決沖突是繁瑣而煩人的,對于電子表格或圖形文檔等復雜文件格式,這項任務很快就會變得非常困難或不可能。因此,合作者可能必須事先商定誰將編輯文件,并且一次只能有一個人可以進行更改。
Dropbox 上的“沖突副本”。用戶必須手動合并更改。
在 Evernote 中,如果一條筆記被同時更改,它將被移動到“沖突更改”筆記本中,并且沒有任何功能可以幫助用戶解決這種情況 — — 甚至沒有比較一條筆記的不同版本的功能。
在 Git 和其他版本控制系統中,幾個人可能會在不同的提交中修改同一個文件。合并這些更改通常會導致合并沖突,可以使用專門的工具(例如此處顯示的DiffMerge)來解決。這些工具主要針對面向行的文本文件(例如源代碼)而設計;對于其他文件格式,工具支持要弱得多。
另一方面,Google Docs 等云應用允許多個用戶同時編輯文檔,大大簡化了協作,無需通過電子郵件來回發送文件,也不用擔心沖突。用戶已經開始期待各種應用中的這種無縫實時協作。
在本地優先應用中,我們的理想是支持與當今最好的云應用相當甚至更好的實時協作。實現這一目標是實現本地優先軟件的最大挑戰之一,但我們相信這是可能的:在后面的部分中,我們將討論在本地優先環境中實現實時協作的技術。
此外,我們希望本地優先應用程序能夠支持各種協作工作流程。除了讓幾個人實時編輯同一篇文檔外,一個人暫時提出一些可供其他人審查和選擇性應用的更改有時也很有用。Google Docs 通過其建議模式支持此工作流程,而GitHub 中的拉取請求可滿足此目的。
在 Google Docs 中,合作者可以直接編輯文檔,也可以建議更改,然后文檔所有者可以接受或拒絕。
GitHub 上的協作工作流程基于拉取請求。用戶可以在多次提交中更改多個源文件,并將其作為擬議更改提交給項目。其他用戶可以在最終合并或拒絕拉取請求之前對其進行審核和修改。
數據所有權的一個重要方面是,您可以在未來很長一段時間內繼續訪問數據。當您使用本地優先軟件進行某些工作時,即使生產該軟件的公司已經消失,您的工作也應該可以無限期地繼續訪問。
泥板上的楔形文字,約公元前 3000 年。圖片來自Wikimedia Commons
只要您有數據副本和某種運行軟件的方式,“老式”應用程序就可以永遠繼續工作。即使軟件作者破產,您也可以繼續運行該軟件的最新版本。即使操作系統和運行它的計算機已經過時,您仍然可以在虛擬機或模擬器中運行該軟件。隨著存儲介質在過去幾十年的發展,您可以將文件復制到新的存儲介質并繼續訪問它們。
互聯網檔案館收藏了一系列可以使用現代網絡瀏覽器中的模擬器運行的歷史軟件; English Amiga Board 的愛好者分享了運行歷史軟件的技巧。
另一方面,云應用依賴于服務持續可用:如果服務不可用,您就無法使用該軟件,也無法再訪問使用該軟件創建的數據。這意味著您打賭軟件的創建者會繼續長期支持它——至少只要您關心數據。
我們的奇妙旅程是一個博客,記錄了被收購后關閉的初創產品。
盡管谷歌近期關閉 Google Docs 的可能性不大,但熱門產品有時確實會被關閉或丟失數據,因此我們知道要小心。即使是長期存在的軟件,也存在定價或功能以您不喜歡的方式發生變化的風險,而對于云應用程序,繼續使用舊版本不是一種選擇——無論您是否喜歡,您都會升級。
本地優先軟件可以延長數據的壽命,因為您的數據以及讀取和修改數據所需的軟件都存儲在您的本地計算機上。我們認為這不僅對您自己很重要,而且對想要閱讀我們今天創建的文檔的未來歷史學家也很重要。如果我們的數據沒有壽命,我們就有可能創造Vint Cerf 所說的“數字黑暗時代”。
我們之前曾寫過關于網頁長期存檔的文章。有關長期數據保存的有趣討論,請參閱Long Tien Nguyen 和 Alan Kay 在Onward! 2015上發表的論文“2015 年的楔形文字板”。
某些文件格式(例如純文本、JPEG 和 PDF)非常普遍,以至于在未來幾個世紀內它們可能仍可讀。美國國會圖書館還建議使用 XML、JSON 或 SQLite作為數據集的存檔格式。但是,為了讀取不太常見的文件格式并保持交互性,您需要能夠運行原始軟件(如果需要,可以在虛擬機或模擬器中運行)。本地優先軟件可以實現這一點。
云應用架構的一個問題是,它們將所有用戶的所有數據存儲在一個集中數據庫中。如此龐大的數據集合對攻擊者來說是一個有吸引力的目標:一個不法 員工或一個獲得公司服務器訪問權限的黑客可以讀取和篡改您的所有數據。這種安全漏洞非常普遍,而使用云應用時,我們很不幸地只能聽天由命。
雖然谷歌擁有世界一流的安全團隊,但可悲的現實是大多數公司都沒有。盡管谷歌擅長保護您的數據免受外部攻擊者的攻擊,但公司內部可以自由地以各種方式使用您的數據,例如將您的數據輸入其機器學習系統。
引用Google Drive 服務條款:“我們的自動化系統會分析您的內容,為您提供個人相關的產品功能,例如定制的搜索結果以及垃圾郵件和惡意軟件檢測。”
也許您覺得自己的數據不會被攻擊者所關注。然而,對于許多職業來說,處理敏感數據是其工作的重要組成部分。例如,醫療專業人員處理敏感的患者數據,調查記者處理來自消息來源的機密信息,政府和外交代表進行敏感談判,等等。由于監管合規性和保密義務,許多專業人士無法使用云應用程序。
另一方面,本地優先型應用在核心中內置了更好的隱私和安全性。您的本地設備僅存儲您自己的數據,避免集中式云數據庫保存所有人的數據。本地優先型應用可以使用端到端加密,這樣存儲文件副本的任何服務器都只保存他們無法讀取的加密數據。
iMessage、WhatsApp和Signal等現代消息應用程序已經使用端到端加密,Keybase提供加密文件共享和消息傳遞,而Tarsnap也采用這種方法進行備份。我們希望看到這種趨勢也擴展到其他類型的軟件。
對于云應用,服務提供商有權限制用戶訪問:例如,2017 年 10 月,一些 Google Docs 用戶無法訪問他們的文檔,因為自動化系統錯誤地將這些文檔標記為濫用。在本地優先應用中,數據的所有權歸屬于用戶。
在此上下文中,為了消除“所有權”的歧義,我們并不是指法律意義上的知識產權。例如,文字處理器不應該考慮誰擁有正在編輯的文本的版權。相反,我們指的是用戶代理、自主權和對數據的控制權。你應該能夠以任何方式復制和修改數據,寫下任何想法,任何公司都不應該限制你被允許做的事情。
根據《歐洲人權公約》 ,你的思想和意見自由是無條件的——國家永遠不會干涉,因為這只屬于你——而表達自由(包括言論自由)則可能受到某些限制,因為它會影響到其他人。社交網絡等通信服務可以傳達表達,但創意人士的原始筆記和未發表的作品是發展思想和意見的一種方式,因此需要無條件保護。
在云應用中,訪問和修改數據的方式受到服務提供商的 API、用戶界面和服務條款的限制。使用本地優先軟件,構成數據的所有字節都存儲在您自己的設備上,因此您可以自由地以任意方式處理這些數據。
擁有數據所有權意味著要承擔責任:維護備份或其他預防措施以防止數據丟失、防范勒索軟件以及對文件檔案進行一般組織和管理。對于許多專業和創意用戶來說,正如介紹中所述,我們認為用更多責任換取更多所有權是可取的。考慮一下重要的個人創作,例如博士論文或電影的原始鏡頭。對于這些,您可能愿意承擔存儲和備份的責任,以確保您的數據安全并完全在您的控制之下。
我們認為,保持對數據的控制和所有權并不意味著軟件必須是開源的。盡管修改軟件的自由增強了用戶代理權,但商業和閉源軟件也有可能滿足本地優先的理念,只要它不會人為地限制用戶對其文件的操作。此類人為限制的例子包括禁用打印等操作的 PDF 文件、干擾復制粘貼的電子書閱讀器以及媒體文件上的 DRM。
我們相信,專業和創意用戶應該擁有能夠實現本地優先目標的軟件,幫助他們無縫協作,同時讓他們保留對工作的完全所有權。如果我們能夠在用戶用來完成最重要工作的軟件中賦予他們這些品質,我們就可以幫助他們更好地完成工作,并有可能對許多人的職業生涯產生重大影響。
然而,雖然本地優先軟件的理想可能會引起你的共鳴,但你可能仍然想知道它們在實踐中有多大可能實現。它們只是烏托邦式的想法嗎?
在本文的其余部分,我們將討論在實踐中實現本地優先軟件的意義。我們研究了各種現有技術,并分析了它們在多大程度上滿足了本地優先的理想。在下表中,?表示該技術符合理想條件,—表示部分符合理想條件,?表示不符合理想條件。
我們將會看到,許多技術都滿足了部分目標,但沒有一種能夠滿足所有目標。最后,我們將研究一種來自計算機科學研究前沿的技術,該技術可能是未來實現本地優先軟件的基礎。
讓我們首先從最終用戶的角度來檢查軟件,并分析不同的軟件架構如何滿足本地優先軟件的七個目標。在下一節中,我們將比較軟件工程師用于構建應用程序的存儲技術和 API。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
文件 + 電子郵件附件 | ? | — | ? | ? | ? | — | ? |
從我們的七個目標來看,傳統文件具有許多理想的特性:它們可以離線查看和編輯,它們賦予用戶完全控制權,并且可以輕松備份和長期保存。依賴本地文件的軟件也有可能非常快。
但是,從多個設備訪問文件比較困難。可以使用各種技術跨設備傳輸文件:
其中,電子郵件附件可能是最常見的共享機制,尤其是對于非技術專家的用戶。附件易于理解且值得信賴。一旦您擁有一份文檔的副本,它就不會自發改變:如果您在六個月后查看電子郵件,附件仍以原始形式存在。與 Web 應用程序不同,無需任何額外的登錄過程即可打開附件。
電子郵件附件最薄弱的一點是協作。通常,一次只有一個人可以更改文件,否則需要進行困難的手動合并。文件版本控制很快就會變得混亂:帶有附件的來回電子郵件線程通常會導致文件名為Budget draft 2 (Jane's version) final final 3.xls.
然而,對于想要融入本地優先理念的應用程序來說,一個好的起點是提供一個導出功能,生成廣泛支持的文件格式(例如純文本、PDF、PNG 或 JPEG)并允許它通過電子郵件附件、Slack 或 WhatsApp 等方式共享。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
谷歌文檔 | — | ? | — | ? | — | ? | — |
Trello | — | ? | — | ? | — | ? | ? |
? | ? | ? | ? | ? | ? | ? |
與之相反的是純 Web 應用,其中用戶的本地軟件(Web 瀏覽器或移動應用)是瘦客戶端,數據存儲在服務器上。服務器通常使用大型數據庫,其中數百萬用戶的數據都混合在一個巨大的集合中。
Web 應用為實時協作設定了標準。作為用戶,您可以相信,當您在任何設備上打開文檔時,您看到的是最新版。這對于團隊合作非常有用,因此這些應用程序已成為主流。即使是傳統上僅在本地使用的軟件(如 Microsoft Office)也在向云服務過渡,自 2017 年以來,Office 365 已超越本地安裝的 Office。
隨著遠程工作和分布式團隊的興起,實時協作生產力工具變得越來越重要。團隊視頻通話中的十個用戶可以調出同一個 Trello 板,每個人都可以在自己的計算機上進行編輯,同時查看其他用戶正在做什么。
而另一方面,您將完全失去所有權和控制權:服務器上的數據才是最重要的,而客戶端設備上的任何數據都不重要——它們只是緩存。大多數網絡應用幾乎不支持離線工作:如果您的網絡出現哪怕是片刻故障,您都會無法繼續工作。
如果 Google Docs 檢測到它處于離線狀態,它會阻止對該文檔的編輯。
一些最好的網絡應用程序使用 JavaScript隱藏了服務器通信的延遲,并嘗試提供有限的離線支持(例如,Google Docs 離線插件)。然而,這些努力似乎被改造為以與服務器同步交互為核心的應用程序架構。用戶在嘗試離線工作時報告的結果好壞參半。
用戶對 Google Docs 離線擴展程序的負面評價。
一些 Web 應用(例如 Milanote 和 Figma)提供可安裝的桌面客戶端,這些客戶端本質上是重新打包的 Web 瀏覽器。如果您在網絡不穩定、供應商服務器出現故障或供應商被收購并關閉后嘗試使用這些客戶端訪問您的工作,那么您的工作顯然從未真正屬于您。
Figma桌面客戶端正在運行。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
Dropbox | ? | — | — | ? | ? | — | ? |
基于云的文件同步產品(例如Dropbox、Google Drive、Box或OneDrive)可讓文件在多臺設備上使用。在桌面操作系統(Windows、Linux、Mac OS)上,這些工具通過監視本地文件系統上的指定文件夾來工作。您計算機上的任何軟件都可以讀取和寫入此文件夾中的文件,并且每當一臺計算機上的文件發生更改時,該文件都會自動復制到您所有其他計算機上。
由于這些工具使用本地文件系統,因此它們具有許多吸引人的特性:訪問本地文件速度快,離線工作沒有問題(離線編輯的文件將在下次連接互聯網時同步)。如果同步服務關閉,您的文件仍會完好無損地保留在本地磁盤上,并且可以輕松切換到其他同步服務。如果您的計算機硬盤驅動器出現故障,您只需安裝應用程序并等待其同步即可恢復您的工作。這提供了良好的數據持久性和控制力。
然而,在移動平臺(iOS 和 Android)上,Dropbox 及其同類產品采用完全不同的模式。移動應用程序不會同步整個文件夾 — 相反,它們是瘦客戶端,每次從服務器獲取一個文件的數據,默認情況下它們無法離線工作。有一個“使離線可用”選項,但您需要記住在離線之前調用它,它很笨拙,并且僅在應用程序打開時才有效。Dropbox API也非常以服務器為中心。
Dropbox 移動應用的用戶花費大量時間查看旋轉器,這與 Dropbox 桌面產品的觸手可及的感覺形成了鮮明的對比。
文件同步產品最薄弱的一點是缺乏實時協作:如果在兩個不同的設備上編輯同一個文件,則會產生沖突,需要手動合并,如前所述。這些工具可以同步任何格式的文件,這既是優點(與任何應用程序兼容),也是缺點(無法執行特定于格式的合并)。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
Git+GitHub | ? | — | ? | — | ? | — | ? |
Git和GitHub主要由軟件工程師用于協作處理源代碼。它們可能是我們最接近真正的本地優先軟件包的東西:與Subversion等以服務器為中心的版本控制系統相比,Git 完全離線工作,速度快,將完全控制權交給用戶,適合長期保存數據。這是因為本地文件系統上的 Git 存儲庫是數據的主要副本,不從屬于任何服務器。
我們在此重點介紹 Git/GitHub 作為最成功的例子,但這些經驗教訓也適用于其他分布式版本控制工具,如Mercurial或Darcs,以及其他存儲庫托管服務,如GitLab或Bitbucket。原則上,可以在沒有存儲庫服務的情況下進行協作,例如通過電子郵件發送補丁文件,但大多數 Git 用戶依賴 GitHub。
像 GitHub 這樣的存儲庫托管服務支持圍繞 Git 存儲庫進行協作,從多個設備訪問數據,并提供備份和存檔位置。盡管Working Copy是一款很有前途的 iOS Git 客戶端,但目前對移動設備的支持較弱。GitHub 以未加密的方式存儲存儲庫;如果需要更強的隱私保護,您可以運行自己的存儲庫服務器。
我們認為 Git 模型為本地優先軟件的未來指明了方向。然而,就目前而言,Git 有兩個主要弱點:
有趣的是,大多數軟件工程師不愿意在編輯器、IDE、運行時環境和構建工具中使用云軟件。理論上,我們可能希望這群老練的用戶比其他類型的用戶更早地接受新技術。但如果你問工程師為什么不使用像Cloud9或Repl.it這樣的基于云的編輯器,或者像Colaboratory這樣的運行時環境,他們的答案通常會包括“它太慢了”或“我不信任它”或“我希望我的代碼在本地系統上”。這些情緒似乎反映了與本地優先軟件相同的一些動機。如果我們作為開發人員希望自己和我們的工作擁有這些東西,也許我們可以想象其他類型的創意專業人士也希望自己的工作具有同樣的品質。
現在我們已經通過本地優先理念研究了一系列應用程序的用戶體驗,讓我們將思維模式轉換為應用程序開發人員的思維模式。如果您正在創建應用程序并希望為用戶提供部分或全部本地優先體驗,那么您在數據存儲和同步基礎設施方面有哪些選擇?
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
Web 應用程序 | ? | ? | ? | ? | ? | ? | ? |
最純粹的 Web 應用通常是在服務器上運行的 Rails、Django、PHP 或 Node.js 程序,將數據存儲在 SQL 或 NoSQL 數據庫中,并通過 HTTPS 提供網頁。所有數據都在服務器上,用戶的 Web 瀏覽器只是一個瘦客戶端。
這種架構有很多好處:無需安裝(只需訪問 URL),用戶無需管理任何內容,因為所有數據都由部署應用程序的工程和 DevOps 專業人員存儲和管理在一個地方。用戶可以從所有設備訪問該應用程序,同事可以通過登錄同一應用程序輕松協作。
Meteor和ShareDB等 JavaScript 框架以及Pusher和Ably等服務使得在WebSocket等低級協議之上向 Web 應用程序添加實時協作功能變得更加容易。
另一方面,對于每個用戶操作,需要向服務器發出請求的 Web 應用會很慢。在某些情況下,可以使用客戶端 JavaScript隱藏往返時間,但如果用戶的互聯網連接不穩定,這些方法很快就會失效。
盡管人們付出了很多努力來讓 Web 瀏覽器更加支持離線(清單、本地存儲、服務工作者和漸進式 Web 應用等),但 Web 應用的架構仍然以服務器為中心。大多數 Web 應用都事后才考慮離線支持,因此結果很脆弱。在許多 Web 瀏覽器中,如果用戶清除其 Cookie,本地存儲中的所有數據也會被刪除;雖然這對緩存來說不是問題,但它會使瀏覽器的本地存儲不適合存儲任何長期重要的數據。
新聞網站《衛報》記錄了他們如何利用服務人員為用戶打造離線體驗。
依賴第三方 Web 應用在壽命、隱私和用戶控制方面得分也很低。如果 Web 應用是開源的,并且用戶愿意自行托管自己的服務器實例,則可以改善這些屬性。但是,我們認為對于絕大多數不想成為系統管理員的用戶來說,自行托管不是一個可行的選擇;此外,大多數 Web 應用都是閉源的,完全排除了這種選擇。
總而言之,我們推測,由于平臺的基本瘦客戶端特性,網絡應用永遠無法提供我們正在尋找的所有本地優先屬性。通過選擇構建網絡應用,您就是在選擇屬于您和您的公司(而不是您的用戶)的數據路徑。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
胖客戶端 | ? | — | ? | ? | — | ? | ? |
iOS 和 Android 應用是本地安裝的軟件,在運行應用之前會下載并安裝整個應用二進制文件。然而,許多應用都是瘦客戶端,類似于需要服務器才能運行的 Web 應用(例如 Twitter、Yelp 或 Facebook)。如果沒有可靠的互聯網連接,這些應用會顯示旋轉器、錯誤消息和意外行為。
然而,還有另一類移動應用更符合本地優先理念。這些應用首先使用SQLite、Core Data等持久層或純文件將數據存儲在本地設備上。其中一些應用(例如Clue或Things)最初是作為沒有任何服務器的單用戶應用,后來添加了云后端,以便在設備之間同步或與其他用戶共享數據。
這些胖客戶端應用具有速度快、離線工作等優勢,因為服務器同步在后臺進行。如果服務器關閉,它們通常會繼續工作。它們提供隱私和用戶對數據的控制程度取決于相關應用。
如果數據可能在多個設備上或由多個協作用戶修改,事情就會變得更加困難。移動應用程序的開發人員通常是終端用戶應用程序開發的專家,而不是分布式系統的專家。我們已經看到多個應用程序開發團隊編寫自己的臨時差異、合并和沖突解決算法,而由此產生的數據同步解決方案通常不可靠且脆弱。下一節將討論更專業的存儲后端,可以提供幫助。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
Firebase、CloudKit、Realm | — | ? | ? | — | ? | ? | ? |
Firebase是最成功的移動后端即服務選項。它本質上是一個本地設備數據庫,結合了云數據庫服務以及兩者之間的數據同步。Firebase 允許跨多個設備共享數據,并且支持離線使用。但是,作為專有托管服務,我們給它的隱私和持久性打了低分。
另一個流行的后端即服務是Parse,但它于 2017 年被 Facebook 收購并關閉。依賴它的應用程序被迫轉移到其他后端服務,凸顯了長壽的重要性。
Firebase 為開發者提供了絕佳的體驗:您可以在 Firebase 控制臺中以自由格式查看、編輯和刪除數據。但用戶無法以類似的方式訪問、操作和管理其數據,因此用戶幾乎沒有所有權和控制權。
Firebase 控制臺:非常適合開發人員,但不適合最終用戶。
對于愿意將自己限制在 iOS 和 Mac 平臺上的應用,Apple 的 CloudKit提供了類似 Firebase 的體驗。它是一個具有同步功能的鍵值存儲,具有良好的離線功能,并且具有內置于平臺的額外優勢(從而避免了用戶必須創建帳戶并登錄的麻煩)。它是獨立 iOS 開發者的絕佳選擇,并且被Ulysses、Bear、Overcast等工具很好地利用。
由于使用了 CloudKit,只需一個復選框,Ulysses 就可以在用戶的??所有連接設備上同步工作。
另一個類似的項目是Realm。與 Core Data 相比,這個 iOS 持久性庫因其更簡潔的 API 而廣受歡迎。用于本地持久性的客戶端庫稱為Realm Database,而相關的類似 Firebase 的后端服務稱為Realm Object Server。值得注意的是,對象服務器是開源且可自托管的,這降低了被鎖定在可能有一天會消失的服務中的風險。
將設備上的數據視為主要副本(或至少不僅僅是一次性緩存)并使用 Firebase 或 iCloud 等同步服務的移動應用程序,讓我們在本地優先軟件的道路上取得了很大進展。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
CouchDB | — | — | ? | ? | — | — | — |
CouchDB是一種以開創多主復制方法而聞名的數據庫:多臺機器各自擁有數據庫的完整副本,每個副本都可以獨立更改數據,并且任何一對副本都可以相互同步以交換最新更改。CouchDB 專為在服務器上使用而設計;Cloudant提供托管版本;PouchDB和Hoodie是使用相同同步協議但設計為在最終用戶設備上運行的姊妹項目。
從哲學上講,CouchDB 與本地優先原則緊密結合, CouchDB一書尤其證明了這一點,該書對??分布式一致性、復制、更改通知和多版本并發控制等相關主題提供了出色的介紹。
雖然 CouchDB/PouchDB 允許多臺設備同時更改數據庫,但這些更改會導致沖突,需要通過應用程序代碼明確解決。這種沖突解決代碼很難正確編寫,因此對于協作非常細粒度的應用程序(例如 Google Docs)來說,CouchDB 并不實用,因為在 Google Docs 中,每次擊鍵都可能是一個單獨的更改。
實際上,CouchDB 模型尚未得到廣泛采用。對此的原因有多種多樣:當需要每個用戶使用單獨的數據庫時,存在可擴展性問題;難以將 JavaScript 客戶端嵌入 iOS 和 Android 上的本機應用程序中;沖突解決問題;執行查詢時不熟悉的 MapReduce 模型;等等。總而言之,雖然我們同意 CouchDB 背后的大部分理念,但我們認為該實現在實踐中未能實現本地優先的愿景。
正如我們所展示的,現有的應用程序開發數據層均未完全滿足本地優先理念。因此,三年前,我們的實驗室開始尋找一種能夠給出七個綠色標記的解決方案。
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
??? | ? | ? | ? | ? | ? | ? | ? |
我們發現了一些看似有望為本地優先理念奠定基礎的技術。其中最引人注目的是被稱為無沖突復制數據類型(CRDT) 的分布式系統算法系列。
CRDT 誕生于2011 年的學術計算機科學研究中。它們是通用數據結構,如哈希圖和列表,但它們的特殊之處在于它們從一開始就是多用戶的。
每個應用程序都需要一些數據結構來存儲其文檔狀態。例如,如果您的應用程序是文本編輯器,則核心數據結構是組成文檔的字符數組。如果您的應用程序是電子表格,則數據結構是包含文本、數字或引用其他單元格的公式的單元格矩陣。如果它是矢量圖形應用程序,則數據結構是圖形對象(例如文本對象、矩形、線條和其他形狀)的樹。
如果您正在構建單用戶應用程序,則可以使用模型對象、哈希映射、列表、記錄/結構等在內存中維護這些數據結構。如果您正在構建協作式多用戶應用程序,則可以將這些數據結構替換為 CRDT。
兩個設備最初具有相同的待辦事項列表。在設備 1 上,使用將新項目附加到.push()列表末尾的方法將新項目添加到列表中。同時,在設備 2 上將第一項標記為已完成。兩個設備通信后,CRDT 會自動合并狀態,以便兩個更改均生效。
上圖顯示了一個由具有JSON 數據模型的 CRDT 支持的待辦事項列表應用程序的示例。用戶可以在本地設備上查看和修改應用程序狀態,即使在離線時也是如此。CRDT 會跟蹤所做的任何更改,并在網絡連接可用時在后臺將更改與其他設備同步。
如果在不同設備上同時修改了狀態,CRDT 會合并這些更改。例如,如果用戶在不同設備上同時將新項目添加到待辦事項列表中,則合并狀態將以一致的順序包含所有添加的項目。對不同對象的并發更改也可以輕松合并。CRDT 無法自動解決的唯一更改類型是多個用戶同時更新同一對象的同一屬性;在這種情況下,CRDT 會跟蹤沖突的值,并將其留給應用程序或用戶解決。
因此,CRDT 與 Git 等版本控制系統有些相似,只是它們操作的數據類型比文本文件更豐富。CRDT 可以通過任何通信渠道同步其狀態(例如通過服務器、通過點對點連接、通過本地設備之間的藍牙,甚至通過 USB 記憶棒)。CRDT 跟蹤的更改可以小到一次擊鍵,從而實現 Google Docs 風格的實時協作。但您也可以收集更大的更改集并將它們作為批處理發送給協作者,更像是 Git 中的拉取請求。由于數據結構是通用的,我們可以開發用于存儲、通信和管理 CRDT 的通用工具,從而無需在每個應用程序中重新實現這些功能。
有關 CRDT 的更多技術介紹,我們建議:
Ink & Switch 開發了一個名為Automerge的開源 JavaScript CRDT 實現。它基于我們之前對JSON CRDT的研究。然后,我們將 Automerge 與Dat 網絡堆棧結合起來,形成了Hypermerge。我們并不聲稱這些庫完全實現了本地優先的理念——還需要做更多的工作。
然而,根據我們的經驗,我們認為 CRDT 有潛力成為新一代軟件的基礎。正如分組交換是互聯網和網絡的一項支持技術,或者電容式觸摸屏是智能手機的一項支持技術一樣,我們認為 CRDT 可能是協作軟件的基礎,讓用戶完全擁有自己的數據。
雖然學術研究在設計 CRDT 算法和驗證其理論正確性方面取得了很大進展,但迄今為止,這些技術的工業應用相對較少。此外,大多數工業 CRDT 用途都是在以服務器為中心的計算中,但我們相信這項技術在客戶端應用程序中具有巨大的創意潛力。
使用 CRDT 的以服務器為中心的系統包括Azure Cosmos DB、Redis、Riak、Weave Mesh、SoundCloud 的 Roshi和Facebook 的 OpenR。然而,我們最感興趣的是 CRDT 在最終用戶設備上的使用。
這是我們實驗室著手開發一系列實驗原型的動機,這些原型基于 CRDT 構建了協作式、本地優先的應用程序。每個原型都提供了以現有的創意工作應用程序(如 Trello、Figma 或 Milanote)為模型的最終用戶體驗。
這些實驗探討了三個領域的問題:
我們用Electron、 JavaScript 和React構建了三個原型。這讓我們擁有了快速開發 Web 技術的能力,同時也為用戶提供了可以下載和安裝的軟件,我們發現這是本地優先所有權感的重要組成部分。
Trellis是一個以流行的Trello項目管理軟件為模型的看板。
Trellis 提供類似 Trello 的體驗,采用本地優先軟件。右側的更改歷史記錄反映了文檔中所有活躍用戶所做的更改。
在這個項目中,我們嘗試使用WebRTC作為網絡通信層。
在用戶體驗方面,我們設計了一個基本的“變更歷史”,靈感來自 Git 和 Google Docs 的“查看新變更”,讓用戶可以查看看板上的操作。這包括回溯以查看文檔的早期狀態。
通過演示視頻觀看 Trellis 的實際操作或下載版本并親自嘗試。
PixelPusher是一款協作繪圖程序,為Javier Valencia的Pixel Art to CSS帶來類似 Figma 的實時體驗。
實時一起繪圖。頂部的 URL 提供了一種與其他用戶共享此文檔的快捷方式。右側的“版本”面板顯示當前文檔的所有分支。箭頭按鈕提供分支之間的即時合并。
在這個項目中,我們嘗試通過Dat 項目的點對點庫進行網絡通信。
用戶體驗實驗包括文檔共享的 URL、受 Git 啟發的可視化分支/合并功能、以紅色突出顯示沖突像素的沖突解決機制以及通過用戶繪制的頭像實現的基本用戶身份。
閱讀完整的項目報告或下載版本來親自嘗試。
PushPin是一個類似于Miro或Milanote 的混合媒體畫布工作區。作為我們在 Automerge 上構建的第三個項目,它是這三個項目中功能最全面的。我們團隊和外部測試用戶的實際使用對底層數據層施加了更大的壓力。
PushPin 的畫布混合了文本、圖片、討論主題和網絡鏈接。用戶可以通過工具欄中的在線頭像互相查看,并使用 URL 欄在各自的文檔之間導航。
PushPin 探索了嵌套和連接的共享文檔、CRDT 文檔的多種渲染器、包含用于共享的“發件箱”模型的更高級的身份系統,以及對共享選擇突出顯示等短暫數據的支持。
觀看PushPin 演示視頻或下載版本并親自嘗試。
我們開發 Trellis、PixelPusher 和 PushPin 三個原型的目的是評估本地優先軟件和 CRDT 的技術可行性、用戶體驗和開發人員體驗。我們通過在開發團隊(由五名成員組成)內定期使用原型、批判性地反思我們開發軟件的經驗以及與大約十名外部用戶進行單獨的可用性測試來測試原型。外部用戶包括專業設計師、產品經理和軟件工程師。我們沒有遵循正式的評估方法,而是采取了探索性的方法來發現原型的優點和缺點。
在本節中,我們概述了從構建和使用這些原型中學到的經驗教訓。雖然這些發現有些主觀,但我們相信它們仍然包含有價值的見解,因為我們在基于 CRDT 的生產就緒本地優先應用程序的道路上比其他項目走得更遠。
CRDT 技術有效。
從一開始,我們就對 Automerge 的可靠性感到驚喜。我們團隊中的應用開發人員能夠相對輕松地集成該庫,并且數據的自動合并幾乎總是簡單而無縫的。
離線工作的用戶體驗非常棒。
離線、繼續工作,然后重新連接以與同事合并更改的過程運行良好。雖然系統上的其他應用程序會拋出錯誤(“離線!警告!”)并阻止用戶工作,但本地優先原型無論網絡狀態如何都能正常運行。與基于瀏覽器的系統不同,用戶永遠不必擔心應用程序是否會運行或數據是否會在用戶需要時出現。這讓用戶對他們的工具和工作有一種主人翁的感覺,正如我們所希望的那樣。
當與功能反應式編程(FRP)相結合時,開發人員經驗是可行的。
React 的 FRP 模型與 CRDT 非常契合。基于 CRDT 的數據層意味著用戶的文檔會同時從本地用戶(例如,當他們在文本文檔中鍵入內容時)以及從網絡(當其他用戶和其他設備對文檔進行更改時)獲取更新。
由于 FRP 模型能夠可靠地將應用程序的可見狀態與共享文檔的底層狀態同步,因此開發人員無需再進行繁瑣的工作,無需跟蹤來自其他用戶的更改并將其與當前視圖進行協調。此外,通過確保對底層狀態的所有更改都通過單個函數(“reducer”)進行,可以輕松確保將所有相關的本地更改發送給其他用戶。
該模型的結果是,我們的所有原型都實現了實時協作和完全離線功能,而應用程序開發人員幾乎無需付出任何努力。這是一個顯著的好處,因為它允許應用程序開發人員專注于他們的應用程序,而不是數據分發的挑戰。
沖突并不像我們擔心的那么嚴重。
我們經常被問及自動合并的有效性,許多人認為需要特定于應用程序的沖突解決機制。然而,我們發現用戶在與他人協作時很少遇到工作沖突,通用解決機制效果很好。原因如下:
當不同的用戶同時修改文檔狀態的不同部分時,Automerge 會毫不費力地將這些更改干凈地合并。例如,使用 Kanban 應用程序,一個用戶可以在卡片上發表評論,另一個用戶可以將其移動到另一列,合并的結果將反映這兩個更改。只有當用戶同時修改同一對象的同一屬性時才會發生沖突:例如,如果兩個用戶同時更改畫布上同一圖像對象的位置。在這種情況下,解決沖突的方式通常是任意的,無論哪種方式都會令人滿意。
Automerge 的數據結構帶有一小組默認的并發更改解析策略。原則上,人們可能認為不同的應用程序需要不同的合并語義。然而,在我們開發的所有原型中,我們發現默認的合并語義已經足夠,到目前為止,我們還沒有發現任何需要定制語義的情況。我們假設這種情況普遍存在,我們希望未來的研究能夠進一步檢驗這一假設。
可視化文檔歷史非常重要。
在分布式協作系統中,其他用戶可以隨時向您提供任意數量的更改。與服務器調解更改的集中式系統不同,本地優先應用程序需要自己找到這些問題的解決方案。如果沒有合適的工具,很難理解文檔是如何變成現在這個樣子的,文檔有哪些版本,或者貢獻來自哪里。
在 Trellis 項目中,我們嘗試了“時間旅行”界面,允許用戶回到過去查看合并文檔的早期狀態,并在收到其他用戶的更改時自動突出顯示最近更改的元素。以線性方式遍歷可能復雜的合并文檔歷史記錄的能力有助于提供背景信息,并可能成為理解協作的通用工具。
URL 是一種很好的共享機制。
我們試驗了多種與其他用戶共享文檔的機制,發現受網絡啟發的 URL 模型對用戶和開發人員最有意義。URL 可以復制和粘貼,并通過電子郵件或聊天等通信渠道共享。除了秘密 URL 之外,文檔的訪問權限仍然是一個懸而未決的研究問題。
點對點系統從來都不是完全“在線”或“離線”,而且很難推斷數據在其中如何移動。
傳統的集中式系統通常處于“運行”或“停機”狀態,每個客戶端根據其與服務器保持穩定網絡連接的能力來定義狀態。服務器決定給定數據的真實性。
在去中心化系統中,我們的數據可能千變萬化。每個用戶對于他們擁有、選擇共享或接受的數據可能有不同的看法。例如,一個用戶對文檔的編輯可能保存在飛機上的筆記本電腦上;當飛機降落并且計算機重新連接時,這些更改會分發給其他用戶。其他用戶可能會選擇接受對其文檔版本的所有、部分或不接受任何更改。
文檔的不同版本可能會造成混亂。與 Git 存儲庫一樣,特定用戶在“主”分支中看到的內容是他們上次與其他用戶通信時的功能。新到的更改可能會意外地修改您正在處理的文檔的某些部分,但手動合并每個用戶的每項更改非常繁瑣。分散式文檔使用戶能夠控制自己的數據,但需要進一步研究才能了解這在實際用戶界面方面意味著什么。
CRDT 積累了大量變更歷史,從而造成了性能問題。
我們的團隊使用 PushPin 來處理“真實”文檔,例如沖刺規劃。性能和內存/磁盤使用率很快就成了問題,因為 CRDT 存儲了所有歷史記錄,包括逐個字符的文本編輯。這些記錄會堆積起來,但無法輕易截斷,因為不可能知道什么時候有人會在六個月后重新連接到您的共享文檔,并需要從那時開始合并更改。
我們將繼續優化 Automerge,但這是正在進行的工作的一個主要領域。
網絡通信仍然是一個尚未解決的問題。
CRDT 算法僅提供數據合并,但沒有說明不同用戶的編輯如何到達同一臺物理計算機。
在這些實驗中,我們嘗試了通過WebRTC進行網絡通信;使用 Dropbox 和 USB 密鑰復制文件的“sneakernet”實現;可能使用IPFS 協議;并最終采用了Dat的Hypercore點對點庫。
CRDT 不需要對等網絡層;使用服務器進行通信對 CRDT 來說沒問題。但是,為了完全實現本地優先軟件的長壽目標,我們希望應用程序的壽命比其供應商管理的任何后端服務都要長,因此去中心化解決方案是合乎邏輯的最終目標。
在我們的原型中使用 P2P 技術產生了好壞參半的結果。一方面,這些技術還遠未達到生產就緒狀態:特別是NAT 遍歷,根據用戶當前連接的特定路由器或網絡拓撲,它并不可靠。但 P2P 協議和去中心化網絡社區所暗示的前景是巨大的。在一個已經依賴于中心化 API 的世界里,沒有互聯網接入的計算機之間的實時協作感覺就像魔術一樣。
云服務器仍然有其在發現、備份和突發計算方面的作用。
PushPin 等實時協作原型可讓用戶與其他用戶共享文檔,而無需中介服務器。這對于保護隱私和所有權非常有利,但可能會導致用戶共享文檔,然后在其他用戶連接之前關閉筆記本電腦的情況。如果用戶不同時在線,他們就無法相互連接。
因此,服務器在本地優先的世界中扮演著重要角色——不是作為中央機構,而是作為“云對等體”,支持客戶端應用程序,但不在關鍵路徑上。例如,云對等體存儲文檔副本,并在其他對等體上線時將其轉發給它們,可以解決上述關閉筆記本電腦的問題。
Hashbase是Dat和Beaker Browser的云對等點和橋梁的一個示例。
類似地,云對等體可以是:
傳統系統和本地優先系統之間的關鍵區別不在于缺少服務器,而在于其職責的變化:它們扮演支持角色,而不是真相的來源。
這些實驗表明,本地優先軟件是可行的。協作和所有權并不矛盾——我們可以兩全其美,用戶也可以受益。
然而,底層技術仍在開發中。它們對于開發原型非常有用,我們希望它們在未來幾年內能夠不斷發展和穩定,但現實地說,目前在生產環境中用 Automerge 這樣的實驗項目取代 Firebase 這樣的成熟產品還不明智。
如果你和我們一樣相信本地優先的未來,你(以及我們所有技術領域的人)能做些什么來推動我們朝著這個方向前進?以下是一些建議。
本地優先軟件從最近對分布式系統(包括 CRDT 和對等技術)的研究中受益匪淺。當前的研究界在提高 CRDT 的性能和功能方面取得了長足的進步,我們熱切期待這項工作取得進一步的成果。不過,仍有一些有趣的機會可以進一步開展工作。
大多數 CRDT 研究都采用一種模型,即所有協作者都會立即將其編輯應用于文檔的單個版本。但是,實際的本地優先應用程序需要更大的靈活性:用戶必須有自由拒絕其他協作者所做的編輯,或對未與他人共享的文檔版本進行私人更改。用戶可能希望推測性地應用更改或重新格式化其更改歷史記錄。這些概念在分布式源代碼控制世界中被很好地理解為“分支”、“分叉”、“變基”等。迄今為止,在理解多個文檔版本和分支并存的情況下進行協作的算法和編程模型方面所做的工作很少。
我們看到有關類型、架構遷移和兼容性的更多有趣問題。不同的協作者可能使用應用程序的不同版本,可能具有不同的功能。由于沒有中央數據庫服務器,因此沒有權威的數據“當前”架構。我們如何編寫軟件,以便即使數據格式不斷發展,不同的應用程序版本也可以安全地進行互操作?這個問題在基于云的 API 設計中有類似之處,但本地優先的設置帶來了額外的挑戰。
對于集中式系統,目前該領域有大量應用程序表明其與服務器的“同步”狀態的示例。分散式系統擁有大量有趣的新機會來探索用戶界面挑戰。
我們希望研究人員能夠考慮如何傳達在線和離線狀態,或者對于任何其他用戶可能持有不同數據副本的系統,如何傳達可用和不可用狀態。當每個人都是同儕時,我們應該如何看待連通性?當我們可以直接與其他節點協作而無需訪問更廣泛的互聯網時,“在線”意味著什么?
GitX中使用“鐵路軌道”模型來可視化 Git 存儲庫中的源代碼歷史結構。
當每份文檔都可以通過日常操作形成復雜的版本歷史時,一個尖銳的問題就出現了:我們如何將這個版本歷史傳達給用戶?在沒有中心事實來源的情況下,用戶應該如何考慮版本控制、共享和接受變更,以及如何理解他們的文檔是如何變成某種樣子的?如今,變更管理有兩種主流模型:差異和補丁的源代碼模型,以及建議和評論的 Google Docs 模型。這些是我們能做的最好的嗎?我們如何將這些想法推廣到非文本的數據格式?我們渴望看到可以發現什么。
雖然集中式系統嚴重依賴訪問控制和權限,但同樣的概念并不直接適用于本地優先的環境。例如,任何擁有某些數據副本的用戶都無法被阻止在本地修改它;但是,其他用戶可以選擇是否訂閱這些更改。用戶應該如何考慮共享、權限和反饋?如果我們無法從其他人的計算機上刪除文檔,那么“停止與某人共享”意味著什么?
我們認為,中心化假設已深深植根于當今的用戶體驗中,而我們才剛剛開始發現改變這一假設的后果。我們希望這些未解決的問題能夠激勵研究人員探索我們認為尚未開發的領域。
如果您是軟件工程師、設計師、產品經理或獨立應用開發者,目前正在開發可用于生產的軟件,您能提供什么幫助?我們建議您逐步邁向本地優先的未來。首先對您的應用進行評分:
1. 快速 | 2. 多設備 | 3. 離線 | 4. 合作 | 5. 長壽 | 6. 隱私 | 7. 用戶控制 | |
您的應用 |
然后是一些改善每個領域的策略:
如果您是一位有興趣構建開發人員基礎設施的企業家,那么以上所有內容都表明一個有趣的市場機會:“用于 CRDT 的 Firebase”。
這樣的初創公司需要提供出色的開發者體驗和本地持久性庫(例如 SQLite 或 Realm)。它需要適用于移動平臺(iOS、Android)、本機桌面(Windows、Mac、Linux)和 Web 技術(Electron、漸進式 Web 應用)。
用戶控制、隱私、多設備支持和協作都將被納入其中。應用程序開發人員可以專注于構建他們的應用程序,因為他們知道最簡單的實施路徑也會讓他們在本地優先記分卡上獲得最高分。作為檢驗您是否成功的試金石,我們建議:即使所有服務器都關閉,您所有客戶的應用程序是否都能永久運行?
我們相信,隨著 CRDT 的成熟,“Firebase for CRDT” 機會將非常巨大。如果您正在致力于此,我們很樂意聽取您的意見。
計算機是人類有史以來最重要的創造性工具之一。軟件已成為我們完成工作的渠道和工作成果的儲存庫。
為了追求更好的工具,我們將許多應用程序遷移到了云端。云軟件在許多方面都優于“老式”軟件:它提供協作、始終最新的應用程序,可從世界任何地方訪問。我們不再擔心運行的軟件版本或文件存儲在哪臺機器上。
然而,在云端,數據的所有權屬于服務器,而不是用戶,因此我們成為了自己數據的借用者。當這些服務的創建者停止維護時,在云應用中創建的文檔注定會消失。云服務無法長期保存。沒有 Wayback Machine 可以恢復已停用的 Web 應用程序。互聯網檔案館無法保留您的 Google 文檔。
在本文中,我們探索了未來軟件的新發展方向。我們已經證明,用戶可以保留對數據的所有權和控制權,同時還可以從我們與云相關的功能中受益:無縫協作和從任何地方訪問。可以兩全其美。
但要在實踐中實現本地優先方法,還需要做更多的工作。應用程序開發人員可以采取漸進式措施,例如改進離線支持和更好地利用設備上的存儲。研究人員可以繼續改進本地優先軟件的算法、編程模型和用戶界面。企業家可以將 CRDT 和點對點網絡等基礎技術開發成能夠為下一代應用程序提供支持的成熟產品。
如今,創建一個服務器擁有所有數據的 Web 應用程序很容易。但構建尊重用戶所有權和代理權的協作軟件卻非常困難。為了改變這種平衡,我們需要改進開發本地優先軟件的工具。我們希望您能加入我們。
我們歡迎您的想法、問題或批評:@inkandswitch或hello@inkandswitch.com。
Martin Kleppmann 獲得了波音公司的資助。感謝 Ink & Switch 的合作者,他們參與了上述原型的制作:Julia Roggatz、Orion Henry、Roshan Choxi、Jeff Peterson、Jim Pick 和 Ignatius Gilfedder。還要感謝 Heidi Howard、Roly Perera 以及來自Onward!的匿名審閱者對本文草稿的反饋。
作者:inkandswitch
出處:https://www.inkandswitch.com/local-first/