Bitsocial 与 ActivityPub
ActivityPub 是支撑 Fediverse 的 W3C 标准。用户选择一台服务器(称为实例)来托管自己的账号,服务器之间相互交换帖子。Mastodon 是其中最知名的微博客软件;Lemmy 是由主题社区组成的 Reddit 式链接聚合器和论坛,这使它成为 Fediverse 中与 Seedit 等 Bitsocial 应用最接近的对应物。
ActivityPub 的工作原理
- 收件箱与发件箱。 每个账号都有一个收件箱和一个发件箱。服务器把活动投递到其他服务器上的收件箱中,每台接收服务器都会为自己用户关注的内容保存一份副本。
- 归服务器所有的身份。 账号和帖子的 ID 是源服务器域名下的 HTTPS 地址。Mastodon 用户名形如
@user@domain,通过 WebFinger 解析,服务器代表用户为联邦消息签名。 - 客户端。 应用和浏览器只与用户自己的服务器通信,使用的是该服务器的 API。
- Lemmy 社区。 社区是托管在某一个实例上的群组 actor。用户把帖子发给社区,社区再转播给关注者;根据共享的论坛标准(FEP-1b12),社区可以先校验帖子,最严格时可由版主人工批准。
- 审核。 审核在每台服务器本地进行。管理员可以暂停账号、屏蔽整个服务器,或只与白名单中的服务器联邦;Lemmy 还为每个社区设有版主。
- 垃圾信息控制。 ActivityPub 没有定义任何反垃圾机制。Mastodon 和 Lemmy 用审批、邀请、申请问题、验证码和邮箱验证来把守注册,然后依靠速率限制、举报和审核。
两者的区别
身份属于域名
Fediverse 账号属于其服务器的域名。Mastodon 可以把关注者重定向到新账号,但帖子不会迁移,迁移必须从旧服务器发起,而且有 30 天的冷却期。在 Bitsocial 中,个人资料和社区都是密钥对,因此更换托管方或应用不会改变身份。参见身份和社区所有权。
社区存在于何处
Lemmy 社区在结构上与 Bitsocial 社区很接近:帖子发往社区,社区可以在转播之前检查它们。区别在于社区存在于何处。Lemmy 社区只能在创建者的主实例上创建,实例管理员对它拥有完全控制权,而且没有文档说明如何把它迁移到其他实例。Bitsocial 社区本身就是一个密钥对:所有者可以在任何地方运行它的节点,它之上也没有任何服务器管理员。
垃圾信息控制
Fediverse 服务器主要在注册环节拦截垃圾信息,之后再进行审核。Bitsocial 社区在接受每条帖子之前都会运行一次挑战,并且每个社区自行选择挑战:验证码、白名单、付费或任何其他代码。参见自定义反垃圾邮件挑战。
运行基础设施
运行一个实例意味着要有一台全天候在线、配有域名、TLS 和邮件的服务器。Mastodon 还需要 PostgreSQL、Redis 和后台任务进程;Lemmy 更轻量,按其自己的数据约需 150 MB 内存。每个实例都会保存其用户所关注的远程内容的副本。Bitsocial 社区节点不需要域名或证书,可以通过桌面应用或 bitsocial-cli 运行。
服务器换来的东西
Fediverse 服务器保存完整的历史并能可靠地提供,Mastodon 也拥有多年积累的成熟审核工具。Bitsocial 不保证旧内容永久留存,它的审核工具则存在于各个应用之中。
对比
| 问题 | ActivityPub(Mastodon、Lemmy) | Bitsocial |
|---|---|---|
| 类别 | 联邦式服务器 | 点对点社区网络 |
| 身份 | 服务器域名下的账号,由服务器签名 | 用户和社区各自使用 Ed25519 密钥对 |
| 帖子存放在哪里 | 源服务器,以及每台关注它的服务器上的副本 | 社区所有者的节点,以及读取并为其做种的对等点 |
| 谁让它保持在线 | 实例管理员 | 社区所有者的节点,加上协助做种的节点 |
| 社区 | 托管在单一实例上的 Lemmy 社区 | 一等对象,由其节点接受或拒绝帖子 |
| 垃圾信息控制 | 注册门槛、速率限制、举报和审核 | 帖子被接受之前须通过所在社区的挑战 |
| 审核 | 服务器管理员和社区版主,各服务器本地执行 | 社区所有者审核自己的社区;应用自行决定显示什么 |
| 名称 | @user@domain 和 !community@domain 用户名 | 解析到密钥的 .bso 和 .eth 名称 |
| 浏览器 | 用户自己服务器的客户端 | 普通浏览器标签页中的点对点节点 |
| 主要取舍 | 历史可靠、审核成熟,但身份和社区归属于服务器 | 不需要服务器或域名,但旧内容不保证永久留存 |