时间:2021-05-21 来源:u小马 访问:次
大小:8.54 MB类别:国产软件
更新:2020-07-14下载:4592
知名密码管理器1Password已经在去年推出Linux 测试版,当时的测试版可以简单使用但整体功能相对来说较少。经过小范围测试后目前该密码管理器已经推出Linux 公测版 , 公测版相对早前的测试版提供更加完善的功能支持。例如可以管理、存储、共享密码或信用卡卡号,浏览器内自动填充、自动深色模式、指纹解锁以及快捷键支持等。
这些功能在Windows版和Mac版上已经提供 , 对Linux用户来说现在也可以下载使用功能更加完善的1Password。
其发布公告中指出该版本的后端是完全用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创建视图模型以及可以想象的所有其他事情。
每个团队在编写本文时都使用了每个平台上可用的最佳语言和库。
可以想象,每个平台上的功能奇偶校验(和错误奇偶校验!)保持一致,但是使用如此多的代码库很难做到。
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在内的每个平台。
为了确保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应用中将全部使用它。