今天著名密码托管软件1Password正式推出了<em>Linux</em>版本的支持。其发布公告中指出该版本的后端是完全用Rust重写的。看来时下用Rust重构系统是一个趋势,我们一起来学习下1Password开发团队是如何做的?概述 1Passwo
2021-05-19 14:30:06
今天著名密碼託管軟體1Password正式推出了Linux版本的支援。其釋出公告中指出該版本的後端是完全用Rust重寫的。看來時下用Rust重構系統是一個趨勢,我們一起來學習下1Password開發團隊是如何做的?
概述
1Password是由agilebits 推出跨平臺密碼管理應用,適用於Mac,iOS,Windows,Android,Linux和Chrome作業系統的應用,支援各種瀏覽器擴展支援:Safari,Chrome,Firefox,Edge、Brave。
1Password for Linux版本的開發是以一個種全新探索的方式開展的,從團隊組織,程式語言和工具包,設計語言和流程,一直到新的部署,打包和測試過程。他們從嘗試Rust,到完全用實現是一個很值得學習的過程。
1Password Linux是一個混合應用程式。後端是用Rust編寫。Rust是一種真正的系統程式語言,以其安全性和效能而著稱。Rust直接編譯為本機程式碼,並避免了與運行時或垃圾回收相關的開銷。其前端Web介面是用TypeScript和React開發的,這也是一個很主流前端方案。其架構如下圖:
手動整合
在建立混合應用程式的新方法問世之前,所有平臺上使用完全不同的後端編寫所有應用程式。當其連線到相同的1Password服務時,各自需要手寫程式碼進行了連線。每個平臺都需要負責同步,衝突解決,資料儲存,為UI創建檢視模型以及可以想象的所有其他事情。
每個團隊在編寫本文時都使用了每個平臺上可用的最佳語言和庫。
可以想象,每個平臺上的功能奇偶校驗(和錯誤奇偶校驗!)保持一致,但是使用如此多的程式碼庫很難做到。
愛上Rust
1Password Windows團隊是從2017年率先使用Rust的。他們就喜歡了Rust,並在2018年5月釋出了Windows 7.0.558版本該版本中大量使用Rust進行了繁重的工作。
Windows上的崩潰和錯誤報告數量迅速下降。儘管如此出色,但其他團隊卻花了更長的時間才能看到使用Rust好處。當時很多團隊都在使用Golang創建一個供1Password使用的共享後端。
除了GopherJS可以編譯為JavaScript之外,還對Golang所需的一切提供了支援。
當開始嘗試WASM時,發現Rust可以很好地編譯到WASM並具有可靠的工具鏈,於是1Password其他團隊中開始嘗試Rust。
他們開始了一項實驗,將核心從Golang移植到Rust。
很快,從對Rust一無所知變成了在瀏覽器中的填充原型,這標誌著1Password整個開發的巨大轉折點。真在此時他們才明白了, Windows團隊說的都是真的,不是吹牛:Rust是真正的棒。它快速,安全,並且能夠編譯到包括WASM在內的每個平臺。
從小步驟到完整的Linux應用
為了確保Rust的熱情,能變成真正的線上應用。1Password團隊製作了一個小型庫來匯出基於時間的一次性密碼(TOTP),並將其運送到所有桌上型電腦和移動應用程式中,還在瀏覽器擴展中交付了新的WASM引擎。
結果非常順利。除了推出的順利程度外,沒有其他驚喜。
至此,Rust已經證明了自己,剩下就是用Rust創建完整的1Password核心。1Password Linux版本做了一個試用場成了Rust的用武之地。
僅僅幾個月,1Password 的Linux早期原型開始演示。
接著,事情變得越來越好,團隊對Rust也更加滿意,也不斷招人,團隊不斷壯大。到2020年8月,已經啟動了第一個開發預覽版本。在2020年10月,啟動了beta測試版本。
在1Password Linux版本釋出的同時,也提供了一個可以跨平臺通用的1Password核心,核心可在將來在每個平臺上使用。
核心之美
Linux版本的主要目標之一是創建一個可用於與1Password線上服務互動的通用核心,並在一個地方執行儘可能多的繁重任務。
經過一番迭代後,1Password團隊決定核心基本上應該是沒有UI的完整客戶端應用程式。核心將擁有自己的運行時迴圈,該迴圈將處理成為1Password客戶端的含義的各個方面,併為每個要使用的UI提供安全且難於濫用的API。
首先,核心是完全獨立的,並具有供客戶端應用程式使用的明確定義的API。
op-app和 op-ui板條箱將所有其他板條箱拼接在一起,以提供每個應用所需的一切。大多數狀態完全保留在內部,以確保正確處理金鑰和其他機密,並使每個客戶端UI專注於自身的優勢,而不是業務邏輯。
每個平臺也都有各自的優勢,因此foundation板條箱使核心可以接觸特定於平臺的服務,例如核心金鑰環和生物識別。
最有優勢的構建驗證測試,BVT也是用Rust編寫的,並且可以直接使用API和檢視模型來自動化測試。所有測試可以用GitLab CI有在合併請求期間自動運行這些測試的工作,這極大地減輕了質量檢查團隊的負擔。
而且由於可以根據需要啟動儘可能多的無頭客戶端,因此能夠測試併發方案或其他難以手動設定的情況。
未來的目標是使整個運行時可以在WASM中運行,以便可以替換TypeScript實現。
總體而言,這種新的1Password核心方法非常成功。下一代1Password應用中將全部使用它。
總結
恭喜1Password釋出Linux版本,同時也完成了完整架構轉型和開發團隊昇華,而這一切的魔力是因為使用Rust語言。關於轉型這些年非常流行,什麼機遇中介軟體,基於訊息系統、基於什麼中臺,基於微服務等等,往往都是忽悠的多幹貨少。那麼我應該如何轉型呢,對Rust我們還需要觀望麼?也許1Password團隊給我們些許的啟示。
相關文章
今天著名密码托管软件1Password正式推出了<em>Linux</em>版本的支持。其发布公告中指出该版本的后端是完全用Rust重写的。看来时下用Rust重构系统是一个趋势,我们一起来学习下1Password开发团队是如何做的?概述 1Passwo
2021-05-19 14:30:06
买二手<em>iPhone</em>,我们就是为了性价比。在功能正常的情况下,买二手<em>iPhone</em>肯定是越便宜越好。但今天这种情况,再便宜也不要买。那就是改过数据的<em>iPhone</em>。一旦<em>iPhone</em>改了数据,它会误导你,导
2021-05-19 14:00:29
之前在入手<em>iPhone</em> Xs的时候,因为对于存储空间使用程度上的“误判”(其实是预算不够),所以我只入手了64GB的版本,尽管我一再的减少拍摄视频、照片以及安装APP,我的<em>iPhone</em> Xs存储空间还是出现了不够用的问
2021-05-19 14:00:11
更为良心的是,这款入门级盒子上也使用了瑞芯微芯片<em>CPU</em>,这个品牌主打高端市场,优势在视频解码能力和系统流畅度方面表现极佳,在系统及视频测试方面表现一流,也正是因为良好的配置,让泰捷新品WE60C升级版的评
2021-05-19 13:31:27
2021年全球半导体市场弥漫着涨价、缺货的阴影,由于产能紧张及原材料上涨,最近<em>CPU</em>处理器也不免受到影响。说到升级,游戏玩家该买什么处理器,多少<em>CPU</em>核心的,这个问题又会引起DIY玩家的热议,每个人的看法可
2021-05-19 13:31:22
还记得一加的主题曲《不将就》吗?这也是一加品牌在追求高品质工艺的理念,这也是每一款一加手机在国外畅销,及品牌口碑所在!【手机配置】【一加9pro——<em>CPU</em>】手机配置方面,作为当前的安卓顶级旗舰机型,一加9 Pro的
2021-05-19 13:31:08