Radle-Link:用对等网络发现扩展Git

2020-09-06 03:12:03

Radle Link通过对等网络发现扩展了Git。受社交网络的点对点协议Secure scuttlebutt的启发,数据通过一个称为八卦的过程传播。也就是说,网络中的参与者通过在本地保存冗余副本并与同行共享三角洲来共享和传播他们感兴趣的数据。使用Radle,我们根据贡献者和维护者的“社交图”跨连接的存储库复制数据,使源代码和变更集能够根据使用和价值进行传播:对某个项目感兴趣的同行越多,该项目对网络的可用性就越高。

存储库是自由基中复制的基本单位。要将存储库发布到网络,必须首先将其初始化为项目。项目将源代码、问题和提议的更改组合在一个保护伞下,并带有唯一的、可共享的对等标识符。整个项目数据和元数据(包括诸如评论等社交构件)都存储在存储库中。要创建项目,存储库的所有者需要定义项目标识。在后台,按照rad/id约定,在存储库的预定不相交分支中创建project.json文件。该文件包含重要的元数据,如项目名称、维护人员列表以及任何相关链接。

因此,存储库的所有者成为项目的创建者,并用他们的私钥签署项目元数据文件(project.json)的初始版本。初始版本的摘要成为项目ID。

除了存储库,基本项目还包括其所有维护者的身份:对项目身份拥有指定权限的同行。最初,唯一的维护者是创始人。通过将其他维护人员添加到项目元数据中,可以在项目周围引入额外的信任层。对项目元数据的任何更新都必须由法定数量的维护人员签名,从而提供了一种加密安全的方式来管理项目状态和元数据,例如在所有权转移的情况下。元数据文件的历史记录由底层DVCS备份,并在复制时进行验证,以确保其未被篡改。

为了确保对等网络中数据的完整性和真实性,我们采用了一种类似于更新框架(TUF)中的根文件更新过程的算法。在此过程中,对等方可以在复制最新的变更集和修订之前获取并验证项目元数据。这一点很重要,因为它有效地允许任何对等点以安全的方式提供数据。从中提取项目数据的物理位置对用户来说变得无关紧要。

当项目发布到网络时,该树的维护人员可以识别特定的存储库或源树。这允许存储库通过可共享URL寻址,然后将其解析到网络上的物理位置,以便进行复制。此URL的格式如下:

同行通过跟踪项目来决定要复制哪些数据。跟踪一个项目标志着兴趣,这意味着要隐蔽它的维护人员,从而在他们的社交图中复制数据。在项目上下文中,存储库的维护人员可以选择跟踪其他所有者的存储库(这在Git术语中称为远程:对远程存储库的命名引用)。如果发现远程储存库跟踪其他遥控器,则跟踪储存库还应暂时性地跟踪这些遥控器,最大可配置为N度。

为了提高数据可用性,网络中的参与者可以选择充当种子。这在概念上类似于Secure scuttlebutt中的酒吧:种子是始终在线的节点,可以自动跟踪发现的项目,从而提高这些项目在网络上的可用性。由于种子可能会跟踪给定项目的大量存储库,因此从种子复制项目将极大地提高跟踪图的连通性。跟踪种子还将增加通向原始上游的路径数量,从而确保贡献可以回流到项目维护人员,即使他们来自不在维护人员的跟踪存储库集合中的参与者。

随着托管平台的引入,出现了新的“增强”工作流,如拉请求、问题跟踪和代码审查。这些工作流是独一无二的,因为它们不是Git原生的,但仍然通过丰富的用户界面和功能与源代码捆绑在一起。因此,通过使协作不仅仅是代码,他们进一步定义了共同的开发人员体验-在问题、代码审查和讨论中捕获的社交交互与源代码本身一样重要。然而,他们也将开发人员锁定在托管这些工作流和工件的平台上。如果您无法访问您的GitHub帐户,您将可以访问您的源代码,但不能访问您的任何问题、审查或请求。更糟糕的是,接触到有价值的对话可能会完全失去。

使用Radle,不需要中央服务器来确保变更集和社交构件的可发现性和可用性。此外,通过返回到完全分布式模型,它可以实现更完整的离线体验。不仅源代码可以离线使用,其他所有东西都可以离线使用。Radle旨在提供便捷的协作体验,无需中间商或供应商锁定。

将Git作为复制的纽带是建立在其优势和去中心化性质的基础上的。在本地有问题、拉请求、评论和审查为开发人员提供了工具来管理和设计他们认为合适的工作流。通过以开放源码协议而不是平台的形式存在,Radle让开发人员可以自由协作,而不依赖于第三方。

您可以在我们的Radle.Community论坛的#开发类别中关注Radle Link的发展,或者注册我们的邮件列表。