理解了 atproto,我们就可以理解 Bluesky。
编译:Kurt Pan
我对 BlueSky 充满热情的原因之一就是它的工作方式。因此在这篇文章中,我将阐述其中的一些设计以及我所理解的这些设计背后的原则。我不是 BlueSky 团队的成员,所以这些只是我的看法。
我们开始。
以下是 BlueSky 网站目前的说法:
社交媒体太重要了,以至于不能由少数公司所控制。我们正在为社交互联网建立一个开放的基础,以便我们都能塑造它的未来。
这是一个大方向。
好吧这是个好主意,但这意味着什么?目前,BlueSky 是一个微型博客应用,类似于 Twitter 和 Mastodon。这要怎么融入大方向呢?嗯,虽然 BlueSky 确实是一个类微博应用,但这并不是故事的全部:BlueSky 是首个用于证明认证传输协议(简称为 AT、ATP 或「atproto」)可行性的应用。 BlueSky 是「建筑」,而 atproto 则是「社交互联网的开放基础」。
需要注意的重要一点是:BlueSky 也是一家公司。有些人会带着怀疑的态度看着一家公司说「嘿,我们正在建造一些太大从而无法被公司控制的东西!」。我认为这是一个健康的起点,但对我来说答案正是 atproto。
这两个东西之间的相互作用很重要,我们将先从探索 atproto 开始,然后来讨论 BlueSky 是如何构建在它之上的。
我们必须摆脱的第一件事是:如果你听到「噢,这是一个名为‘某协议’的分布式网络」,你可能会有「这是一种密码货币吗?」警钟在你的脑海中响起。
别担心,它不是密码货币。它确实使用了一些起源于密码货币领域的技术,但这不是区块链、DAO、NFT 或任何其他那种东西。只是一些密码学和默克尔树之类的东西。
AT 协议概述这么说到:
认证传输协议,又名 atproto,是用于大规模分布式社交应用的联邦协议。
我们分解一下:
联邦协议
atproto 是联邦式的。这意味着系统的各个部分可以由多个人运行,并且他们可以相互通信。
选择联邦式是 atproto 兑现「不能由一个组织控制」这一承诺的重要组成部分。还有其他部分,但这是解决这个问题的一个重要方面。
用于大规模
如果你想扩大规模,就必须在设计时考虑到规模化。 atproto 做出了一些有趣的选择,以便将运行系统的负载更多地分配给能够处理负载的参与者,而更少地分配给那些不能处理负载的参与者。这样,在 atproto 之上运行的应用就可以毫无问题地扩展到大型用户群。
至少,希望如此。本周早些时候,BlueSky 用户达到了 500 万,并且运行比 Twitter 早期稳定得多。这没有许多社交应用那么大,但也不是什么都不是了。实践中运行如何,我们拭目以待。
分布式社交应用
atproto 是为了与他人连接,所以它专注于社交应用。目前它也是 100% 公开的,没有私信或类似的消息。其原因是,在联邦系统中实现私有的东西非常棘手,他们宁愿先把它做好,也不愿发布带有严重警告问题的东西。目前最好只将它用于你想要公开的事情。
这些应用是「分布式」的,因为运行它们就是直接在网络上运行它们。并没有「BlueSky 服务器」,只有运行 atproto 的服务器在相互分发消息,包括 BlueSky 消息以及来自人们创建的其他应用的任何其他消息。
这是一个概览,但这具体意味着什么呢?
在 atproto 中,用户创建经过密码学签名的记录以证明作者身份。记录拥有称为词典(Lexicon)的图式。
记录存储在存储库中。存储库作为服务运行,暴露给 HTTP 和 WebSocket。然后它们可以互相交谈并联合化记录。这些通常称为 PDS,即「个人数据服务器」。用户要么运行自己的 PDS,要么使用其他人为其托管的 PDS。
可以通过查看网络中存储的各种记录并使用它们来构建应用。这些服务都称为应用视图,因为它们公开了网络中存储信息的特定视图。这个视图是通过词典系统创建的:构建应用意味着你定义一个词典,结构化要处理的数据,然后查看使用你的词典的记录,忽略其他的。
如果这就是全部的话,将会出现非常严重的扩展问题。例如,如果每次我在 BlueSky 上发布新更新时,我必须将我的帖子发送到我的每一个关注者的存储库,那将是非常低效的,并且使得运行一个流行的存储库的运行成本非常昂贵。为了解决这个问题,有一种额外的服务,称为中继,它聚合网络中的信息,并将其快速大量地传输给其他中继。因此在实践中,应用视图不会查看存储库,而是会查看中继。当我发帖时,我的存储库不会单独通知我的关注者的存储库。我的存储库将通知中继,我的关注者将使用应用视图来过滤中继的输出,以仅显示他们所关注的人的帖子。这确实意味着中继通常很大并且运行成本昂贵,但是你可以想象运行一个较小的中继,它也只传播来自较小用户子集的帖子。他们不必展示网络上的所有内容,当然规模更大的中继会这么做。
这是 ASCII 形式的图示:
这是理解 atproto 核心真正需要知道的一切:人们创建数据,数据在网络中共享,应用可以与数据交互。
但是,其他服务类型正在被引入,并且将来可能会推出更多。但在我们讨论那些之前,我们必须去解释一些意识形态承诺,以理解事物为何会形成现在的样子。
鉴于 atproto 是特意为了实现社交应用而创建的,因此它不仅需要考虑连接人们,还需要考虑断连人们。审核是任何社交应用的核心组成部分:「无审核」仍然是一种审核策略。 BlueSky 在处理此类问题时承认,不同的人对审核会有不同的偏好,以及大规模审核是困难的。
因此,该协议采用「言论与到达」的方式进行审核。到目前为止我们描述的内容属于「言论」层。它纯粹关心在网络上复制的你的内容,而不关心该内容的语义是什么。审核工具属于「到达」层:你接受所有言论,但要提供一种方法来限制你不喜欢自己看到的内容的到达。
有时,人们说 BlueSky「完全言论自由」或「不做审核」。这是不准确的。审核工具已被编码到协议本身中,以便它可以与网络上的所有内容一起使用,甚至是非 BlueSky 应用。此外,它使你能够选择自己的审核者,这样你就不会受到其他人选择审核或缺乏审核的影响。但我有点超前了:让我们来谈谈订阅流生成器和贴标机。
大多数社交应用都有内容「订阅流」的概念。这在 atproto 中被分解为自己的服务类型,称为订阅流生成器。订阅流的一个典型例子是「计算机,按时间倒序显示我关注的人的帖子」。最近,算法订阅流在社交网络中变得流行起来,以至于一些非技术用户将它们称为「算法」。
订阅流生成器获取由中继产生的大量数据,然后向你显示一个内容列表,会根据订阅流生成器所需的任何指标进行过滤和排序。然后你可以向其他用户共享这些订阅流。
作为一个实际的例子,我最喜欢的订阅源之一是 Quiet Posters。这个源显示不经常发帖的人的帖子。这使得跟上那些被我的主要订阅流淹没的人变得更加容易。有像 the ‘Gram 这样的源,只显示附有图片的帖子。或者 My Bangers,显示你最受欢迎的帖子。
对我来说,这是 BlueSky 相对于其他微博工具的杀手级功能之一:完全的用户选择。如果我想制作自己的算法,我可以去做。我可以轻松地与他人分享它们。如果你使用 BlueSky,则可以访问任何这些源并关注它们。
订阅流是 atproto 最近添加的内容,因此,虽然确实已经有了,但功能可能还不完善,并且将来可能会发生一些变化。我们拭目以待。从我的角度来看,它们工作得挺好了,但我还没有关注较低级别的技术细节。
贴标机是一种将标签应用于内容或帐户的服务。作为用户,你可以订阅特定的贴标机,然后根据帖子上的标签改变你的体验。
贴标机可以通过任何它喜欢的方法来做到这一点:通过在帖子上运行某种算法来自动进行,通过让一些人点赞或点踩来手动进行,运行标签服务的人想要的任意方法。
标签服务的一个例子是黑名单:在你不想看到其内容的人所撰写的帖子上添加标签。另一个例子是工作不宜过滤器,它可能会对帖子中的图片运行某种算法,并在认为它们包含工作不宜内容时对其进行标记。
标签已经有了,但我不相信你现在可以运行自己的贴标机。 BlueSky 运行了自己的,但据我所知还没有外部版本。但一旦他们这样做了,你可以想象社区运行自己的服务,添加他们想要的任何类型的标签。
将所有这些放在一起,我们就可以看到审核的工作原理:订阅源可以选择根据标签转换订阅流,或者应用视图可以根据询问贴标机来获取订阅流并应用转换。这些可以根据喜好混合和匹配。
这意味着你不仅可以在应用间选择审核体验,还可以在应用内部选择审核体验。想要工作适宜源,但又允许在另一个中包含工作不宜内容?你可以做到。想要制作一个人员黑名单并与全世界分享吗?你可以做到。
由于这些审核工具在网络级别而不是应用级别工作,因此它们实际上比其他系统走得更远。如果有人在 atproto 上构建一个 Instagram 克隆,那么也可以使用你的屏蔽列表贴标机,因为你的屏蔽列表贴标机是在协议级别工作的。在一个地方屏蔽某人,如果你愿意,就可以在每个地方屏蔽他们。也许你在不同的应用中订阅了不同的审核决策。这 100% 取决于你。
该模型与其他联邦系统显著不同,因为你在一个「实例」上实际上没有一个「帐户」,像 Mastodon 中那样。因此,很多人会问「当我的实例被去联邦化时会发生什么」之类的问题,这些问题并不完全像所说的那样有意义。你可以通过基于某些标准屏蔽一组用户来实现相同的目标,也许你不喜欢某个 PDS,并且想要忽略来自某个 PDS 的帖子,但这是你的选择,且只是你的选择,不是由你帐户所在的某个「服务器所有者」所决定的。
那么,如果你没有一台家庭服务器,身份要如何运作?
关于身份如何运作有太多细节,所以我将重点关注我认为重要的部分。我还将重点讨论有争议的部分,因为这很重要。
其核心是,用户拥有一个身份号码,称为「去中心化标识符」或 DID。我的 DID 如下所示: did:plc:3danwc67lo7obz2fmdg6jxcr 。欢迎关注!哈哈,当然这不是你大多数时候会看到的界面。身份还涉及一个句柄,即一个域名。不出所料,我的句柄是 steveklabnik.com 。你会看到我在 BlueSky 上的帖子来自 @steveklabnik.com 。该系统也适用于没有域名的人;如果你注册 BlueSky,你将能够选择一个名称,然后你的句柄是 @username.bsky.social 。我开始以 @steveklabnik.bsky.social 身份发帖,然后转到了 @steveklabnik.com 。但由于 DID 很稳定,所以我的关注者没有受到干扰。他们只是在用户界面中看到了句柄更新。
你可以使用域名作为句柄,方法是获取 PDS 为你生成的 DID,然后在你用于该域名的 DNS 中添加 TXT 记录。如果你不是那种使用甚至不知道 DNS 是什么的人,我很羡慕你,但你也可以使用 BlueSky 与 NameCheap 的合作伙伴关系来注册域名并将其配置为用作句柄,而无需任何技术知识。然后,你可以使用你的域名作为句柄登录应用,一切正常。
这也是 BlueSky 提供真正的「帐户可移植性」的方式,部分原因是,实际上并不存在帐户的概念。使用给定 DID 的人用密码学对他们创建的内容进行签名,然后该内容会在网络上复制。 「你的帐户」无法真正被封禁,因为这意味着有人强行阻止你使用他们甚至无法访问的密钥。如果你的 PDS 出现故障,而你想要迁移到新的 PDS,则有一种方法可以从网络本身回填 PDS 的内容,并通知网络你的 PDS 已移动。这是真正的、有意义的帐户可移植性,与当今运行的任何类似服务截然不同。
但是。
细节决定成败,我认为这是对 BlueSky 和 atproto 更有意义的批评之一。
你会看到,创建 DID 的「方法」有多种。 BlueSky 支持两种方法: did:web ,基于域名。这种方法有一些缺点,我个人还没有完全理解所以无法描述,我相信我将来会写一些关于 DID 的深入内容。
因此,由于那些弱点,BlueSky 实现了自己的 DID 方法,称为 did:plc 。 plc 代表「占位符」,因为即使他们计划无限期地支持它,它也有其弱点。这个弱点在于它需要询问 BlueSky 运行的服务才能解析正确的信息。例如,这是我的查询。这意味着 BlueSky 可以通过比用其他归功于网络设计不可能的更严重的方式去封禁你,有些人认为这是一个非常严重的问题。
那么,这个缺陷是致命的吗?我不这么认为。第一个原因是,如果你真的不想参与它,你可以使用 did:web 。是的,由于其他原因这并不很好;毕竟这就是创建 did:plc 的原因。但你确实可以解决这个问题。
另一点是,在我个人看来,BlueSky 团队已经表现出了足够的理解和对在这里的控制感到不适,并且它的设计方式是,如果其他更好的系统开发出来,你可以转向它们。他们还表示,未来将 did:plc 的治理转移到某种共识模型是可能的。是有选择的。此外,其他人也可以运行 did:plc 服务并使用该服务(如果他们愿意的话)。
我个人认为这是务实地管理事务的例证,其他人则认为这是一个邪恶的阴谋。你必须自己判断。
现在我们理解了 atproto,我们就可以理解 BlueSky 了。 BlueSky 是一个构建在 atproto 网络之上的应用。他们运行一个应用视图,以及一个使用该应用视图工作的 Web 应用。他们还为通过 Web 应用注册的用户运行一个 PDS,以及与这些 PDS 通信的中继。
他们发布了两个词典,一个为 com.atproto.* ,另一个为 app.bsky.* 。前者是网络上任何应用都需要的低级操作,而后者是 BlueSky 特有的操作。
但 BlueSky 的一个特别好的事情是,他们的产品目标是没有人应该知道这些书呆子的东西才能够使用 BlueSky。没有实例意味着不存在「我需要选择一个实例来创建帐户」这种流程,而可移植性意味着如果我的主机出现故障,我可以迁移走,而我的关注者对此却一无所知。
你可以通过创建一个词典来创建一个 atproto 应用。然后你需要运行一个应用视图来处理涉及你的词典的网络数据,你的应用将让人们可以将数据写入他们使用你的词典的 PDS。
我自己也在考虑这样去做。我们拭目以待。
好啦,技术方面,这就是 atproto 和 BlueSky 的工作原理的概述啦。我觉得这个设计非常巧妙。此外,我认为把 atproto 和 BlueSky 分开关注非常有意义,因为网络拥有「杀手级应用」正给出了使用它的理由。这也是一种测试形式,确保 atproto 足够好,以能够去构建真正的应用。
我相信我将来会对这一切有更多的话要说。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。