Bitsocial と Secure Scuttlebutt
Secure Scuttlebutt (SSB) は、2014 年に Dominic Tarr が作ったピアツーピアのソーシャルプロトコルです。Manyverse はその最もよく知られたアプリで、Android、iOS、デスクトップ向けに提供されています。Patchwork はアーカイブされるまで主要なデスクトップクライアントでした。このドキュメントで比較しているシステムの中で、SSB は考え方の面で Bitsocial に最も近い存在です。データの経路にサーバーがなく、ブロックチェーンもグローバルな順序付けもなく、アイデンティティには Ed25519 鍵を使います。両者は、各ピアが何を保存するか、そしてスパムをどこで止めるかについて、正反対の選択をしました。
Scuttlebutt の仕組み
- フィード。 各アイデンティティは Ed25519 鍵ペアで、
@<public key>.ed25519と表記されます。利用者が公開するものはすべて自分のフィードに入ります。フィードは追記専用のログで、署名された各メッセージがシーケンス番号と直前のメッセージのハッシュを持ちます。プロトコルガイド によれば、一度投稿したメッセージは変更できません。 - 複製。 ピアは個々の投稿ではなくフィード全体をコピーし、ピアがどのフィードを保持するかはフォローグラフで決まります。たとえば Patchwork は、2 ホップ先までのフィードを表示し、3 ホップ先までのフィードを複製していました。epidemic broadcast trees (EBT) では、ピアは各フィードについて手元にある最新のシーケンス番号を比べ、足りない分だけを送ります。
- 接続。 ピアは secret handshake で認証し、box stream で通信を暗号化します。このハンドシェイクはネットワーク識別子を鍵として使うため、別の識別子を使う独立した SSB ネットワークのピアはメインネットワークに接続できません。
- ピアの発見。 ピアはローカルネットワーク上で UDP ブロードキャストによって自身を告知し、LAN 経由で同期します。Manyverse は Bluetooth 経由でも同期します。インターネット越しでは、利用者は pub と room に頼ります。pub は常時オンラインのピアで、招待コードを使うとあなたをフォローし返し、その後はあなたのフィードを保存して配信します。room はフィードを保存せず、メンバー間の接続をトンネルで中継します。
- Blob とプライベートメッセージ。 画像などのファイルは、ピアから取得されるコンテンツアドレス型の blob で、現在の実装ではデフォルトのサイズ上限が 5 MB です。プライベートメッセージは最大 7 人の受信者向けに暗号化され、暗号文として投稿者のフィードに公開されます。
どこが違うのか
ピアが何を保存するか
SSB のピアは、複製範囲にあるすべてのフィードの完全なコピーを各フィードの最初のメッセージから保持し、それらのフィードをほかのピアに配信します。これによって SSB はオフラインでも動作しますが、範囲内のメッセージが増えるたびにストレージも増え、新しくインストールした環境では、まともに何かを表示する前にそれらのフィードをダウンロードしなければなりません。Bitsocial のクライアントは、開いたコミュニティの最新の状態を、コミュニティのノードと、そのコミュニティをシードするピアから取得し、ネットワークが保持するのはその最新の状態だけです。ピアツーピアプロトコル を参照してください。
削除とデバイス
フィードはハッシュチェーンなので、SSB にはネットワーク全体での削除がありません。ピアは自分のデータベースからメッセージを捨てられますが、ほかのピアが持つコピーから取り消すことはできません。同じ鍵で 2 台のデバイスから、あるいは復元したバックアップから投稿するとフィードがフォークしてしまうため、1 デバイスにつき 1 アイデンティティにするのが一般的な対処法です。Manyverse チームによる後継プロトコルの PZP は、SSB からの主な変更点として、削除、1 アカウントでの複数デバイス、フォークに耐えるフィードを挙げています (公開時の記事)。Bitsocial のコミュニティノードは更新のたびにコミュニティの状態の新しいバージョンを公開するため、モデレーターが削除したコンテンツは最新の状態から消えます。
誰の声が届くか
SSB の複製範囲は、そのままスパムフィルターの役割も果たします。見知らぬ人のフィードがあなたに届くのは、あなたのホップ圏内の誰かがその人をフォローしている場合だけで、フィードをブロックすると、あなたのノードはそのフィードの複製をやめます。スパムは締め出されますが、誰かにフォローされるまでは新規参加者も同じく締め出されます。Bitsocial では誰でもコミュニティに投稿でき、投稿を受理するかどうかはコミュニティのノードがチャレンジを通じて判断します。カスタムのスパム対策チャレンジ を参照してください。
コミュニティ
SSB にはコミュニティオブジェクトがありません。チャンネルやハッシュタグは個々の投稿に付けるラベルにすぎず、スレッドへの返信はそれぞれの書き手のフィードに置かれ、スレッドがどこまで見えるかは、それらのフィードのうちどれをあなたのノードが持っているかで決まります。room にはモデレーターやメンバーリストを置けますが、それが制御するのは誰が room を通じて接続できるかであり、何が公開されるかではありません。Bitsocial のコミュニティは、独自の鍵ペア、ルール、モデレーター、チャレンジを持つ第一級のオブジェクトです。
インフラ
どちらもデータの経路からサーバーを排除しており、どちらも補助役に頼っています。SSB でホスト型サービスに最も近いのは pub で、pub は自分がフォローしているすべての人のフィードを保存して配信します。room は Bitsocial の HTTP ルーターに近く、どちらもコンテンツを保存しません。ただし room はメンバー間の接続を中継するのに対し、ルーターはプロバイダーのアドレスを返すだけで、転送には一切関わりません。SSB のピアと同じく、Bitsocial のコミュニティノードは一般向けのハードウェアで動き、新しい投稿を受理するにはオンラインである必要があります。
オフラインとローカルネットワーク
ここは SSB のほうが優れています。同じ Wi-Fi ネットワーク上にある 2 つの SSB ピアは、あるいは Manyverse なら Bluetooth 経由でも、インターネット接続なしで同期でき、すでに複製したものはすべてオフラインでも読めます。Manyverse が掲げる第一の目標は、ソーシャルネットワーキングをインターネット接続に依存しないものにすることです。Bitsocial は、ピアを見つけるためにも投稿を公開するためにもインターネット接続を必要とします。
ブラウザ
主要な SSB アプリは完全な SSB ノードを同梱しており、Manyverse もモバイル版とデスクトップ版のアプリにノードを組み込んでいます。ssb-browser-demo は部分的な複製と room 経由の接続によってブラウザ内で SSB を動かしていましたが、2022 年にアーカイブされました。Bitsocial のアプリは通常のブラウザタブの中でピアツーピアノードを動かします。ブラウザ ピアツーピア を参照してください。
プライベートメッセージ
SSB には暗号化されたプライベートメッセージが組み込まれています。Bitsocial は公開コミュニティに焦点を当てており、ネイティブのダイレクトメッセージはまだありません。
プロジェクトの現状
Manyverse を作った André Staltz は、2024 年 4 月に SSB、Manyverse、そしてその後継として計画されていたプロジェクトから離れました (最後の近況報告)。2024 年 7 月には Jacob Karlsson がその後継を PZP として公開し、Manyverse にはこれ以上取り組まないこと、そしてほかに取り組む予定の人も知らないことを書きました。2026 年 10 月の時点で、Codeberg 上の PZP のリポジトリには 2024 年 12 月以降の更新がありませんでした。Patchwork のリポジトリは v3.18.1 を最後のリリースとしてアーカイブされており、iOS 向け SSB アプリ Planetary の開発チームは 2023 年に Nos アプリとともに Nostr へ移りました。SSB ネットワークは人々がオンラインに保っているピアや pub の上で今も動いていますが、主要なアプリはもう開発されていません。
比較
| 論点 | Secure Scuttlebutt | Bitsocial |
|---|---|---|
| 分類 | ピアツーピアのゴシッププロトコル | ピアツーピアのコミュニティネットワーク |
| アイデンティティ | デバイスごとに 1 つの Ed25519 鍵ペア | 利用者とコミュニティの Ed25519 鍵ペア |
| 投稿の保存場所 | 投稿者の追記専用フィード。それを複製するすべてのピアがコピーする | コミュニティ所有者のノードと、そのコミュニティを読んでシードするピア |
| ピアが保持するもの | フォロー範囲にあるすべてのフィードの全履歴 | 読んでいる、またはシードしているコミュニティの最新の状態 |
| コミュニティ | コミュニティオブジェクトはなく、チャンネルやハッシュタグが投稿にラベルを付ける | 自身のノードが投稿を受理または拒否する第一級のオブジェクト |
| スパム対策 | フォローグラフに基づく複製範囲とブロック | 投稿が受理される前に課される、各コミュニティのチャレンジ |
| モデレーション | 各利用者のフォローとブロック | コミュニティ所有者が自分のコミュニティをモデレートし、何を表示するかはアプリが選ぶ |
| 補助サーバー | pub はフィードを保存して配信し、room は接続をトンネルで中継する | HTTP ルーターはプロバイダーピアを返し、コンテンツは保存しない |
| オフライン | インターネットなしで LAN と Bluetooth で同期 | インターネット接続が必要 |
| ブラウザ | アプリが完全な SSB ノードを同梱 | 通常のブラウザタブ内で動くピアツーピアノード |
| ネットワーク | 稼働中だが、主要なアプリはもう開発されていない | 5chan や Seedit などのアプリが動く稼働中のネットワーク |
| 主なトレードオフ | オフラインで動きホスティングも不要だが、フィードは際限なく増え、見知らぬ人は見えないまま | オープンな投稿とブラウザ対応があるが、インターネットが必要で、保持するのは最新の状態だけ |