(上のロゴは、何故か スペイン語版の Wikipedia にだけあった。本当に公式のロゴ?)
はじめに
Mastodon 大人気ですね。
僕もとりあえず mstdn.jp と pawoo.net にアカウントを取ってお互いにフォローし、どれくらいの時間差でトゥートが伝達されるのか観察したり、GitHub に公開されているソースコードを少し読んだりしました。
「Mastodon は分散型だ」とか「GNU social と互換性がある」という話を聞いて、一体どんなプロトコルなんだろう……と気になって少し調べたのですが、GNU Social 自体がかなり古いものらしく、ドキュメントを探すのにも苦労しました。
そこで、自分で探した範囲で、原典に近いと思われるドキュメントのリンク集を作っておきます。新しい情報が見つかったら、随時更新します。
プロトコル同士の関係
以下のドキュメントに書かれている、OStatus に関連するプロトコルをまとめると、次のようになります。
- Atom と RSS フィードを、サーバ間の共通言語として使う
- Webfinger を使って、サブスクライブしたい相手の Link-based Resource Descriptor Discovery (LRDD) ドキュメントを探す
- Webfinger を使う前に、meta-data で Webfinger 用の URI を取得する。
- サーバ間でフィードのアップデートを購読し、プッシュ配信を受けるために PubSubHubbub を使う
- PubSubHubbub の機能不足を補うために、Atom の拡張(Activity Streams, Portable Contacts, Salmon)を使う
- フィードが表す social activity を表現するために、Activity Streams を使う(例えば、フォローのときは "follow" verb を使う)
- プロフィール情報を提供するために Portable Contacts を使う
- リプライを送るために Salmon を使う
GNU social
OStatus は、GNU social にマージされた StatusNet に端を発するプロトコルです。そこで、まずは GNU social のドキュメントを当たりました。
-
- 結論から言うと、GNU social そのものについては情報が失われていて、Wikipedia に載っている以上の情報はコードを読むしかないのかもしれない。
-
- 情報量はあまりない。
- What is GNU social? に、GNU social が2010年に PHP スクリプトの集合として始まったこと、その後 StatusNet とコードベースが共有されたこと、2013年に Free Social project とマージされたことなどが書かれている。
- FAQ にある "Why are you using PHP? Ruby/Python/Perl/A GUI in Visual Basic would be better!" の答えにちょっと笑った。
-
- 最新版は 1.2.x 系。リリースノートもタグもないため、詳細はよくわからず。
- 開発は継続されているが、Contributors のグラフ を見る限り、当初の開発者はほとんど手を引いている。
- doc-src ディレクトリ にドキュメントがあるが、ざっと見た限り、クライアント-サーバ間通信の情報しかない。サーバ間通信の情報は見当たらなかった。
-
- 上記の GitLab のミラー?
The Unofficial GNU Social documentation!
- 基本的に GNU social のインストール方法についてのマニュアル。
- Protocol Overview というページがあったので、これは!と思ってクリックしたら "GNU social runs primarily on voodoo magic. If anybody knows better please advise." としか書かれてなかった。
- ですよね。
OStatus
-
- OStatus の歴史と概要、OStatus を採用するソフトウェア一覧あり。
- このページでは関連するプロトコルとして Atom, Activity Streams, PubSubHubbub, Salmon, Webfinger の名前が挙げられている。
- "Standards Work" の節に、「pump.io で使われているプロトコルを元にした "ActivityPub" と呼ばれる新しい標準があり、これが OStatus の後継になりうるとされてきた」という記述がある。
-
- W3C のサイトにある Wiki。情報量は決して多くないが、OStatus に関連するプロトコルについての説明がある。
- (see spec) と書かれた部分がリンクになっており、そこに OStatus 1.0 Draft 2 の仕様がある。
OStatus Community Group - Workflow
- HTTPリクエスト/レスポンス例を伴った具体例。もしかしたら、これが OStatus のシーケンスに関する、最も詳しいドキュメントかもしれない。
- ただし、これは OStatus 1.0 Draft 1(リンク切れ)ベースらしいので、Draft 2 とは多少違う可能性がある。
-
- 2010年8月公開。
- 全体で7ページと、仕様書としては短い。詳細を他の仕様書に譲っているからだが、参照先のドキュメントが古いため、一部はすでに見つからなくなっている。
- 用語の定義があり、OStatus を調べる人には、それだけでも有用かもしれない。
- OStatus では、プライベートメッセージングやソーシャルグラフは対象外、と書かれている。
- "12. Usage scenario" に利用シナリオが書かれている。
meta-data (Web Host Metadata)
- RFC 6415 - Web Host Metadata
- ホストのメタデータを返すプロトコル。
- この RFC の "Appendix A. JRD Document Format" にて、この後の例で出てくる JSON Resource Descriptor (JRD) の形式も定義されている。
- なお、Extensible Resource Descriptor (XRD) は Extensible Resource Descriptor (XRD) Version 1.0 で定義されている。
これは mstdn.jp で簡単に試すことができます。例えば、https://mstdn.jp/.well-known/host-meta にアクセスすると、以下が返されます。
> curl "https://mstdn.jp/.well-known/host-meta" <?xml version="1.0"?> <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> <Link rel="lrdd" type="application/xrd+xml" template="https://mstdn.jp/.well-known/webfinger?resource={uri}"/> </XRD>
Link-based Resource Descriptor Discovery (LRDD)
- draft-hammer-discovery-06 - LRDD: Link-based Resource Descriptor Discovery
- LRDD に関する最後の Internet Draft。
- このプロトコルは、URI が示すリソースにアクセスするための「プロセス」を定義している。host-meta を使う方法は、そのプロセスの一つである。
- host-meta を使う方法は "5.1. host-meta Document" に記載されている。
Webfinger
-
- WebFinger に関するポータルサイト。
-
- WebFinger の RFC。
RFC 7565 - The 'acct' URI Scheme
- WebFinger が使用する acct スキーマのRFC。
これも mstdn.jp で簡単に試すことができます。
LRDD が示すように "application/xrd+xml" を指定して https://mstdn.jp/.well-known/webfinger?resource=acct%3Amuziyoshiz%40mstdn.jp にアクセスすると、XML 形式で返されました。ちなみに、Web ブラウザでアクセスすると、JSON(application/jrd+json)が返されます。
> curl -H "Accept: application/xrd+xml" "https://mstdn.jp/.well-known/webfinger?resource=acct%3Amuziyoshiz%40mstdn.jp" <?xml version="1.0"?> <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> <Subject>acct:muziyoshiz@mstdn.jp</Subject> <Alias>https://mstdn.jp/@muziyoshiz</Alias> <Alias>https://mstdn.jp/users/muziyoshiz</Alias> <Link rel="http://webfinger.net/rel/profile-page" type="text/html" href="https://mstdn.jp/@muziyoshiz"/> <Link rel="http://schemas.google.com/g/2010#updates-from" type="application/atom+xml" href="https://mstdn.jp/users/muziyoshiz.atom"/> <Link rel="salmon" href="https://mstdn.jp/api/salmon/14903"/> <Link rel="magic-public-key" href="data:application/magic-public-key,RSA.wOHgmclLfwfGDWfxN1pWfGIwr5GTXbFhJG49yuqrdI6T2WULDvlXUJx3vSIMCiwtkZn-DE9Rhpyse9_69xshlYerke0RvI6OfnvTv20RqFEz0Z65k9W4GTcYKAKu441OzMnY9C3144SiecDpW2noULukzFOMOEY22ON21yQk94QAzJXFt2Hh35ia31uK_JI5NDWGrcl-Rdl8mTHDjhkA4sZC504IInxEpMSxOMMhs75DS_HYYdYuWX-hkGtGEZy5qEfz7HSrSMU8x6e-hwq_ULZ-a5TmIWslJkqWoX_T94gR0hiLPEjpNQpf7R50jB57dltmeo_wKyeETkjxoWBRDw==.AQAB"/> <Link rel="http://ostatus.org/schema/1.0/subscribe" template="https://mstdn.jp/authorize_follow?acct={uri}"/> </XRD>
PubSubHubbub (PuSH)
PubSubHubbub Core 0.4 -- Working Draft
- PubSubHubbub に関する最後の Draft。2013年6月公開。
pubsubhubbub/PubSubHubbub: The PubSubHubbub protocol specification.
- PubSubHubbub の Draft 0.3〜0.4 の HTML がある。
-
- 2017年4月11日に公開された、PubSubHubbub の最新の仕様。
- Abstract に "WebSub was previously known as PubSubHubbub" とあるので、PubSubHubbub の後継ではなくて、PubSubHubbub そのものらしい。
twitter.com"WebSub was previously known as PubSubHubbub" Mastodonの不可解な急激な普及はWebSub公開のための陰謀だったんだな / “WebSub” https://t.co/QalWQhGwUR
— Aki (@nekoruri) 2017年4月21日
Activity Streams
Activity Streams - a format for syndicating social activities around the web
- Active Streams に関するポータルサイト。
- 他の仕様と比べて、比較的リンク切れが少ない。
Activity Streams Working Group: JSON Activity Streams 1.0
- Activity Stream 1.0 の仕様書。2011年5月公開。
activitystreams/activity-schema: Atom Activity Base Schema
- Activity Streams のスキーマの説明。
-
- W3C のサイト。
- Activity Streams 2.0 という仕様が検討されていたらしき形跡があるが、リンク切れしている。
w3c/activitystreams: Activity Streams 2.0 Editor Drafts
- Activity Streams 2.0 の Draft が管理されている GitHub リポジトリ。
- 最新のリリースは 2016-12-15 で、現在も更新されているらしい。
Portable Contacts
Portable Contacts は、Google Contacts などでも使われている仕様らしいが、正式な仕様書らしきものが見つからなかった。
-
- "Portable Contacts is used by services such as Google Contacts,[1] Windows Live Messenger Connect,[2] as well as other specification such as OStatus." との記載がある。
- ここからリンクされているページは、ほとんど dead link になっている。
-
- Portable Contacts に関する、最後の Internet Draft。2008年12月公開。
Portable Contacts 1.0 Draft C — identity 1.0 documentation
- 昔どこかで公開されていた資料のコピー? いきなりAppendixから始まっている。
Salmon (Salmon Protocol)
The Good Stuff によると、「鮭が上流に泳いでいくように」元のブログサーバにコメントを送り返すためのプロトコルなので、Salmon という名前にしたそうです。OStatus では、これをリプライを返すための仕組みとして使っています。
-
- Salmon Protocol に関するポータルサイト。
- トップページに置かれたスライドを読むと、Salmon のおおまかな動作が理解できる。
- このサイトから張られている仕様書へのリンクは、リンク切れしている。
The Salmon Protocol (Internet Archive)
- Salmon の仕様。2011年1月公開。これは、Internet Archive に残されていた 2016-03-20 時点のページである。
- 元の URL: http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html
Magic Signatures (Internet Archive)
- Salmon が使っている署名の仕様。2010年2月公開。これは、Internet Archive に残されていた 2016-03-19 時点のページである。
- 元の URL: http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-magicsig-00.html
OStatus が使っている、その他の Atom 拡張
- RFC 4685 - Atom Threading Extensions
- Atom で、スレッド化された議論を表現するための拡張。
- OStatus の場合、どこで使っているのかは未確認。
番外:ActivityPub
OStatus の範囲外ですが、ActivityPub についても取り上げておきます。
-
- W3C の仕様ページ。
ActivityPub support · Issue #1557 · tootsuite/mastodon
- Mastodon の Issue でも ActivityPub の採用について議論されている。
まとめ
実際にドキュメントを追ってみて、噂に聞く通り、OStatus は非常に雑多な(一部はすでに廃れた)プロトコルの組み合わせで作られていることがわかりました。それぞれのプロトコルが、Mastodon 上でどう実装されているかは、他の人の調査に任せたいと思います。
実際、OStatus について先行して調べていた岡本さんによると、GNU social などの既存実装は、これらのドキュメント通りに実装しても動かないそうです。
twitter.com実はそれ読んでもちゃんと既存実装と互換性のあるもの作るには情報足りないんすよね…w
— Yuta Okamoto (@okapies) 2017年4月24日
OStatus について、5月12日に出る(早い!)マストドン本で岡本さんが解説してくれるらしいので、とりあえず僕はこの本を待とうと思います。
これがマストドンだ! 使い方からインスタンスの作り方まで (NextPublishing)
- 作者: マストドン研究会
- 出版社/メーカー: インプレスR&D
- 発売日: 2017/05/12
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログ (3件) を見る