gnusocial や mastodon の哲学

Mastodon が急に話題になってきた。 しかし、その哲学についてはあまり理解されていないように感じる。

Mastodon や GNU Social は、単なる「ポスト twitter 」ではない。 この記事では、 twitter の根本的な問題や、それに対する Mastodon 等の思想を解説する。

キーワードだけ先に書いておこう。

  • federation (連合)
  • decentralization (脱中央集権)
  • オープン (オープンソース、オープンな仕様)

長い文章を読みたくない人のためのまとめ

でも、できれば本文も読んでほしいです。

  • Mastodon や GNU Social などでは、どこか信頼できる運営者のインスタンス(サーバ)にひとつアカウントを作って、そこから他のインスタンスのアカウントをフォローすることができます。 (インスタンスはグループのような意味を持つものではなく、単に自分の情報がどこで管理されるかを決めるものにすぎません。) 無理して複数のインスタンスにアカウントを取る必要はありません。
    • 自分用のインスタンス(サーバ)を立ててそこに自分のアカウントを作るのが、一番安心かも。 これならインスタンス管理者による情報の悪用等を心配する必要もありません。
    • 個人の(自分の)インスタンスで他人の登録を受け付ける必要はありません。 自分のアカウントだけ置いて使うことができます。
  • Mastodon や GNU Social では、自分のサーバ (VPS 、自宅サーバ、 etc...) にサービスを立てることができます。
  • Mastodon や GNU Social などが重視しているのは、ユーザの自由です。 これが twitter 等との大きな違いです。
  • IRC に似ていますが、大きな違いとしては notice がすべてサーバに保存されることです。 IRC はクライアント(や proxy) にしかログが残りませんが、 GNU Social や Mastodon はマイクロブログサービスなので、サーバ側にデータを保存する仕組みになっています。
  • その他の疑問についてはよく見る質問を参照してください。

twitter の問題

twitter には、以下のような問題がある。

  • twitter が落ちるとみんな死ぬ
    • 仕組みからして仕方ないけど、そうは言っても致命的
  • ツイートのデータが(基本的に) twitter 社のサーバにしか残らない
    • 外部サービスでの保存や自分のツイートのダウンロードはできるが、「昔TLに流れてきたはずのあのツイートが見付からない」という事例には無力
  • 悪意ある第三者により、アカウントの凍結やツイートの削除の強制などの制限や弾圧を受けることがある
    • えっちな絵を書く人たちが「ツイレディ」と呼ばれる過激派にスパム報告されまくって凍結される事例とか
    • 違法ではないはずの画像の投稿でも規約違反扱いされたり
    • 運営者による検閲や規制があったら、避ける手段は存在しない
  • 仕様が twitter 社の一存で決まる
    • ユーザの意見は(おそらく、普通は)取り入れられない
    • 開発者は黙って追従するしかない
    • なんならサードパーティのクライアント開発者を締め出したりもする
  • 仕様のみならず、実装(ソースコード)も公開されない
    • 会社なので仕方ないところもあるが、そうはいってもプロプライエタリ
    • たとえば公式の twitter に問題があったとき、ユーザが修正する手段はない
    • 無論改造もできない

これらの問題は、つまるところマイクロブロギングサービスがtwitter という単一のサービスに依存しているところに原因がある。 プラットフォームを単一の運営者が管理していて(中央集権)、逆らえないため、自由が制限されているのである。 そういった自由を SNS のユーザが取り戻すための思想が、 federated social web だ。

Federated social web はどう問題を解決するか

federation とは「連合」である。 federated social web [0] とは、 SNS のサーバを各々が持ったり複数用意することで不要な制約を受けないようにし、それでいてサーバ間で連携することで巨大なひとつの SNS として利用できるようにするという思想であり、またその思想が目指すネットワークサービスのことである。

この思想は、先に挙げた twitter の問題を以下のように解決する。

問題 解決
twitter が落ちると皆死ぬ サーバはコミュニティや個人で別々になっており、道連れで死んだり断絶が発生することはない
ツイートが twitter のサーバにしか残らない

notice (ツイート相当の情報)は、受信者のアカウントのあるサーバ全てで複製して保存される。 発信者のサーバが死んでも、受信者のサーバには情報が残るので、リンクが切れて参照が潰れることは避けられる。

自分の notice だけでなく、自分の TL に流れてきたすべての notice が、受信者のサーバに保存される。

悪意ある第三者により、アカウントの凍結やツイートの削除の強制などの制限や弾圧を受けることがある

サーバの運営者のポリシーによる。 たとえば政治的な主張を発信するなら、政治的な主張を弾圧しないようなインスタンス(サーバ)でアカウントを用意すればいい。 えっちな画像を投稿したければ、そういった画像に対して理解があり過剰に反応しない運営者のサーバにアカウントを用意すればいい。

他人を完全に信用しなくとも、自分でインスタンスを運営し、自分でそこにアカウントを作ることもできる。 これなら、検閲や BAN もない。 自分のアカウント専用のインスタンスにしてしまえば、他人が法的にヤバい書き込みをして云々という問題も避けやすくなるし、問題がある投稿を自分でサーバから消すこともできる。

仕様が twitter 社の一存で決まる 国際的な組織 (W3C 等)に管理されたオープンな(公開されていて閲覧に制限のない)仕様が定められている。 議論も行われる。
仕様のみならず、実装(ソースコード)も公開されない

オープンソースである。 実装の詳細も公開されるし、もし不満があれば改造して使ったりすることもできる。

プラグイン等の機能もある場合があり、 twitter 連携などいろいろな機能の追加もできる。

GNU Social とは、 Mastodon とは何か

GNU SocialMastodon は、 OStatus や ActivityPub などのプロトコル(通信やデータの規格)を実装した、 federated social web のための web サービス、またそのためのアプリケーションである。

OStatus や ActivityPub はオープンな(公開された)仕様であり、 twitter のように運営者の一存で仕様が変化したりはせず、また隠された仕様なども存在しない。 よって、これらのプロトコルを実装したアプリケーションは誰でも開発することができる。

Mastodon は A GNU Social-compatible microblogging server と説明されている[1]が、つまりこれは OStatus を実装しているということである。 ただそれだけであるが、つまり公開された仕様によっているということなので、全く別で開発された互換サービスと連携できる。

連合を作る

GNU Social 互換サービスを運用しているインスタンス(サーバ)には、たとえば有名な(というか私が知っている)ところでは、以下のようなものがある。

  • freezepeach.xyz (言論の自由を大切にしてるのかな? 児ポの投稿禁止が唯一のルールやでと書いてある)
  • gs.smuglo.li (えっちな絵とかよく流れてるので注意。たぶん運営者がえっちなイラストに理解がある。とはいえ法律は守りましょう)
  • social.pzn.lgbt (LGBTPZN について議論してたりする人たちの集まっているインスタンス。ぶっちゃけ私もよく知らない。詳細は LGBTPZNポータル を参照)
  • quitter.se (twitter から逃げてきた人たちが集まったインスタンスらしい)
  • mstdn.jp
  • mstdn.io
  • mastodon.cloud

複数のインスタンスがあるが、問題ない。 フォローしたいアカウントのページを開き、「リモートフォロー」などのボタンを押せば、自分の居るのとは別のインスタンスのアカウントもフォローできる。 実際、私は自分のサーバに立てたインスタンスの gnusocial.cardina1.red[2]にアカウントを持っているが、そこから他のインスタンス(上に挙げたようなもの)のアカウントもフォローしている。

このように、よく知らない誰かでなく、信頼できる人や組織(自分でもいい)の運用するインスタンスに居ることで、中央集権された自由のないサービスから解放されようというのが、 GNU Social や Mastodon が twitter と本質的に違うところである。

巷の記事、紹介

誤解や不理解

最近急に話題になった Mastodon だが、 ASCII.jp の記事「ASCII.jp:Twitterのライバル? 実は、新しい「マストドン」(Mastodon)とは!|遠藤諭のプログラミング+日記」はどうにも Mastodon の思想がよく理解されないまま書かれているように感じる。

たとえば、以下のような記述があった。

Twitterは、どこまでもだだっ広くて、なんの垣根もない草原のような感じだった。 それに対して、Mastodonは、土地に根差して活動しやすくなっている。 ちょうど、なんの制約もなく空を飛んでつぶやいているTweet(さえずる)と、集団をつくってはToot(吠える)の違いだろうか?

Mastodon は、それぞれが自身や同志のためのインスタンスを立てやすい [3] というのは事実だが、「土地に根差して活動しやすく〜」っというのは見方が偏っている。 似た人々が集まるのは、自分たちに理解のある運営者のインスタンスに集まることが自分たちの自由のために重要だからであって、フォロー関係がインスタンスを跨げる以上、同じ趣味の人々が同じインスタンスに集まることはあまり意味がない。

たとえば、 Twitter にあてはめたらトランプ陣営と非トランプ陣営で真っ二つのインスタンスの連邦ができそうである。

中央集権的なサービスの問題は、「トランプ陣営」だとか「非トランプ陣営」などといった政治的主張や思想などが(スパブロ攻撃等で)弾圧され、言論の自由が奪われかねないことにある。 Federated social web 流の考えかたであれば、政治的主張が弾圧されず積極的に議論ができるような、つまり「政治的な主張や議論を積極的に交わせるインスタンス」が立つだろう。 (無論、陣営ごとにインスタンスが立つこともあるかもしれないが、内々に篭って外と隔絶するようなやりかたは、 federation を真っ向から否定するものであるし、 GNU Social や Mastodon の目指すところの反対である。)

そもそもこの記事では decentralization (脱中央集権)の考え方に触れておらず、あまりに表面的な紹介である。 繰り返し言うが、 Mastodon は単なる twitter クローンやちょっと良くなった代替などではない。

ITmedia の記事は良い

ITmedia NEWSの記事「ポストTwitter? 急速に流行中「マストドン」とは - ITmedia NEWS」は良い記事であるといえるだろう。

Twitterとの大きな違いは、サイトが1つではなく複数に分散していることだ。
Rochkoさんは「Mastodonは分散化したプラットフォームであり、コミュニケーションが単一の企業に独占されるリスクを避けられる」と説明。 Twitterの弱点をカバーする“ポストTwitter”を意識して制作したようだ。

その通りである。 Mastodon (や互換サービス)の目指すところは、脱中央集権と federation (連合)による分散プラットフォームである。

ねとらぼの記事も良い感じ

ねとらぼも記事を書いている: 「ポストTwitter有力候補? 500文字まで書き込めるオープンソースSNS「マストドン」が脚光浴びる - ねとらぼ」。

「分散型」をうたうマストドンでは、誰でもサーバ(インスタンス)を立ち上げることができ、どこか1つにトラブルがあっても、他のインスタンスが生きていればサービスを継続することが可能となっています。 また、運営会社の倒産により突然のサービス終了……といった事態も避けられます。
ちなみに最初にどのインスタンスで始めても、ちゃんと世界中のユーザーとつながることができるのでご安心を。

その他の実装など

GNU Social と互換

要するに OStatus を実装しているもの。 Mastodon は "GNU Social-compatible" であるが、このような実装はいくつか存在する。

GNU Social

GNU が開発している本家。 プラグインでの拡張(たとえば twitter 連携など)ができる。 リポジトリは git.gnu.io

Mastodon

最近話題になっている実装。 TweetDeck 風の UI が特徴? 新しい実装なので、内部も結構洗練されてるのではないかと思う。 リポジトリは GitHub

Diaspora

名前しか知らない。 リポジトリは GitHub

GNU Social と非互換

OStatus (や ActivityPub) とは違うプロトコルで実装されているが、やはり federated social web を目指して作られたサービスやソフトウェアもある。

matrix

こちらはプロトコルが新規に設計されており、 OStatus より洗練されている。 (とはいえ、それをライトユーザが実感するかは別の話だが。) json ベースの通信や、ビデオチャット等との統合、人間のユーザ以外の IoT デバイスからの利用等も見据えた拡張性の高くシンプルな仕様など、純粋なマイクロブログサービスとは多少目標が異なっている。

リポジトリは GitHub 。 (個人的には、リファレンス実装 (synapse) が Python2 なのがちょっと悲しい。)

おまけ: 言葉の違い

同じプロトコル (OStatus) を使っているのに、何故かサービス毎に使っている用語が違ったりするので、比較表を載せておきます。

twitter GNU Social GNU Social (Qvitter plugin) Mastodon
tweet (ツイート) notice (ノーティス) quip (クイップ) toot (トゥート)
retweet (リツイート) repeat (リピート) requip (リクイップ) boost (ブースト)
follow (フォロー) subscribe (サブスクライブ) follow (フォロー) follow (フォロー)

なんだかなぁ。

Qvitterの何が嫌かって、例えば投稿された物を元々"notice"だった奴を"quip"というような、インフラに乗っかっておいてその文化を分断しに行く姿勢が嫌い

@obsoletestandard@js4.in/alttw, , https://js4.in/alttw/notice/5192

おまけ: 自前のサーバにインスタンスを立てるなら

  • 楽したい人には Mastodon の方がおすすめ。
  • ユーザの登録機能は無効化した方が良い。 個人で見ず知らずの他人の投稿に責任を持ち管理するのは流石に面倒すぎる。

GNU Social のインストールはちょっと難しい

GNU Social は、公式では以下のようなインストール手段が用意されている。

公式の docker ファイル等は用意されていないため、手動でメンテナンスするか、自前で書くことになる。 プラグインでの拡張も、アーカイブを展開するか git を使うことで管理する。

ちなみに私の場合、 Dockerfiledocker-compose.yaml とシェルスクリプトを書いて、コンテナ化と自動更新を行うようにしている。

そこそこ面倒で、最低でもサーバに環境を構築しシェルスクリプトを書いたりコマンドを叩くくらいの知識は必要である。

Mastodon のインストールは簡単そう

Mastodon では、公式に docker や docker-compose を使う方法が用意されている ので、 GNU Social に比べればかなり楽そうである。

今からインストールをすることをおすすめするなら、 Mastodon の方だろう。

参考になりそうなリンク

よく見る質問

twitter やはてブ等でときどき見掛けた疑問や意見に答えます。 間違い等あれば @lo48576@mastodon.cardina1.red までおしらせください。

投稿がフォロワーのインスタンスに配信・複製されてしまうということは、投稿が一度放流されたら消せないの?

消せないと思ってください。 これは悪いことばかりではありません。

  • 発信者や運営者が意図的に投稿を「削除」した場合
    • 自分のインスタンスからは、消せます。
    • 他のインスタンスからは、実装によります。 基本的に消えないものと思ってください。
  • 発信者がアカウントを消したり、インスタンスが死んだりした場合
    • 他のインスタンスからは消えずに残るはずです。

まず、発信者のインスタンスから消せるというのは当然なので良いでしょう。

他のインスタンスについてですが、まず発信者が投稿を削除すると、「投稿が削除された」というメッセージが(通常の投稿と同様に)フォロワーのインスタンスに配信されます。 それを受け取ったフォロワーのインスタンスがその後どうするかは、インスタンス次第です。 私が複数のインスタンスで試してみたところ、 GNU Social でも Mastodon でも、他のインスタンスでの削除が反映されない場合がありました[5]

イメージとしては tumblr のリブログのようなものでしょう。 あなたが投稿を放流した時点で、その投稿はあなただけのものではなく、それを読みたがった受信者たちのものでもあると捉えてください。 この仕様は、あるユーザのいたインスタンスが止まったり永久になくなってしまった場合であっても、自分が過去に受け取った投稿が意図せず消えることはないということを意味します。

これを「情報を削除したくてもできない」と否定的に捉えることもできますし、「かつて私が受け取ったメッセージは、他者の手によって勝手に消されることはない」というユーザ(フォロワー)の自由を尊重した仕様であると肯定的に捉えることもできます。 いずれにせよ、そういう仕様であるということは知っておくべきです。

悪いことを考えている人の Mastodon インスタンスに登録してしまうと、メールアドレスやパスワードを悪用されかねない。 危険では?

Mastodon に限らない問題です。 Mastodon の件で注意喚起されて初めて「確かに」と思った人は、セキュリティ意識がちょっと低いと思うので注意してください。

  • そもそも、信用できないサーバに情報を渡してはいけません
    • たとえば twitter アカウントを持っている人は、 twitter に登録するときメールアドレスや電話番号を登録したと思います。 それは、 twitter 社が情報を悪用しないとあなたが信用したからですよね?
    • Mastodon インスタンスも同じことです。 あなたが「この運営者なら信用してもいい」と思った場合だけ登録してください。
    • 「どのインスタンスの運営者もよく知りません。これでは登録できません!」→それなら仕方がありません。 どうにかして探すか、甘んじて大手を信用する(そしてある程度のリスクを許容する)か、諦めてください。 (ヒント: たとえば pixiv がインスタンスを立てたようです。 あなたは pixiv を信用しますか?)
    • 「最近聞いたサーバに登録したけど、メールアドレスとパスワードが悪用されるかも! 怖い!」って、
      「最近見た人に部屋の鍵渡したけど、鍵を悪用されるかも! 怖い!」と何が違うんですか。

      @lo48576@gnusocial.cardina1.red, , https://gnusocial.cardina1.red/notice/10784
  • パスワードを使い回すのは論外です。 そのようなことをすれば、 Mastodon 以外のどのようなサービスであっても危険性が格段に高まります。
  • パスワードを使い回していなければ、メールアドレスを知られるだけで済みます。 知られたくないメールアドレスであれば、そもそも登録に使ってはいけません。

インスタンス運営者の方針によっては、無法地帯になりかねないのでは?

一般登録を受け付けているインスタンスについていえば、その通りです。 だからこそ、信用できる運営者のインスタンスを使ってください

そもそも、もしインスタンスに法的に問題のある情報が投稿されれば、それを削除する責任はインスタンス管理者にあります。 (もちろん、だからといって投稿者が悪くないというわけではありません。) よって、インスタンス管理者は、問題のある投稿を知らされたら適切な対応をとるか、信用できないユーザが登録しないよう制限をかけるべきです。

個人用(自分用)のインスタンスであれば、そのような問題は基本的に(そうそうは)生じません。 そのインスタンスに保存されるデータは、自分の投稿か、自分がフォローしたユーザの投稿だけだからです。 (つまり、当然ではありますが、迂闊に良くないユーザをフォローしない方が良いです。) もしインスタンスに法的に問題のある投稿が流れてきても、インスタンスの管理コマンド等でデータを削除することはできるはずです。

個人ユーザがポコポコ新しいインスタンスを立てて、流行が廃れてそれらの多くが死んでしまったら、断絶や分断が発生するのでは?

これは誤解を含んでいると思われます。

  • あるインスタンスが消えたり接続できなくなったときの影響は、そのインスタンスからの投稿が届かなくなるだけで、他との繋がりには一切影響はありません
  • GNU Social や Mastodon のインスタンス同士は、直接互いに通信しあっています。 よって、当事者インスタンス間にある第三の中継インスタンスのようなものは存在しないため、断絶や分断はそもそも発生しえません

たとえばあなたのインスタンスを X とし、 X のアカウントからインスタンス A 、 B 、 C のアカウントをフォローしているとしましょう。 ここでインスタンス A が消えてしまっても、 X は依然として B 、 C からの投稿を受け取ることができます。 B や C が消えた場合でも同様に、消えたインスタンス以外との通信に影響が及ぶことはありません。

よって、個人ユーザがポコポコ新しいインスタンスを立てると、消えるインスタンスがユーザ単位になります。 (インスタンスが生き残ってユーザが活動しなくなっても、結局何も得られなくなることに変わりはないので、それならインスタンスが消えても同じことです。) インスタンスと共に死ぬユーザが少なくなるのは、むしろ好ましいことです。

インスタンスが乱立することで、むしろ衰退の影響範囲が小さくなり、これはユーザにとっては良いことです。 個人や組織単位で、もっと気軽にポンポンインスタンスを立てましょう!

公式アカウントのような機能がないけど、アカウントが自分の思っている人のものであるとどう確認すればいいの?

短い答: 個人用インスタンスであれば、そのドメインの所有者を確認しましょう。 そうでなければ、ブログや公式 web ページなど別の信頼できる情報源で聞いたり、そこからリンクされているか確認しましょう。 (当然ですが、アカウントの説明に公式 web ページ等へのリンクが書いてあったとしても、偽装の可能性があるので信頼してはいけません。)

これは分散プラットフォームの特徴によるものです。 twitter における公式アカウントは、「 twitter という絶対の管理者が身分確認を行うことで、当人であると証明する」という仕組みです。 GNU Social や Mastodon では、この仕組みは合いません。 何故なら「絶対の管理者」など存在せず、単にそれぞれのインスタンスの運営を行う人が各所に居るだけだからです。 分散プラットフォームに、絶対の権威はいません

マイクロブログで自分が読んだ情報が消えないメディアなら、 tumblr があるじゃん。それじゃ駄目なの?

たしかに、ブログの「トラックバック」は OStatus (や Mastodon) の設計によく似ていますし、 tumblr のリブログは情報を発信者だけでなく読者が保持することを可能にします。

しかし勘違いしないでください。 tumblr は、れっきとした中央集権サービスです。 分散なんてしていません。 そもそも twitter や Mastodon ほどチャットに近い SNS ではありません。

  • tumblr では、運営会社がその権限をもって、投稿やアカウントを消すことができてしまいます。
    • 分散していれば、自分用のサーバを立ててそこで同じようなサービスを利用可能です。 しかし tumblr は単一の会社が提供するサービスであり、「自分のサーバに tumblr を立てる」ことはできません。
    • tumblr を真似た OSS は存在するようなので、それらを使うことはできるでしょうが、それは「tumblr」ではありません。
  • tumblr のサービスがなくなったり tumblr の会社が消えたりすると、 tumblr 上の全てのサイトが駄目になります。
    • 分散していれば、落ちたサーバ以外にある情報はすべて無事のままです。 (たとえば mstdn.jp が落ちても mstdn.io は何事もなく動いていたように。)
  • twitter や Mastodon のように、チャットに近い用途で設計されていません。
    • tumblr はそもそもチャットに使ってる人いませんよね? (いるかもしれませんが、使い勝手は Mastodon と比べるまでもなさそうです)
    • tumblr は記事を配信するブログをベースにして作られていますが、 Mastodon は「マイクロブログ」という呼称で勘違いされがちですが、 IRC や チャットに近いものです。
  • 仕様や API がいつまでも公開されているとは限らない
    • 仕様や API は会社が定めて管理しているものであり、国際規格ではありません。 よって、会社の都合などで勝手に変更される可能性があります。 (一応 forum はありますが、それを言ったら twitter にも開発者フォーラムがあるのにあの様です。)

このようなわけで、 tumblr はその仕組みからして中央集権であり、 twitter と同様のものです。 tumblr は分散プラットフォームではありません。 「分散プラットフォームなら Mastodon じゃなくても tumblr がある」という意見は、分散プラットフォームというものを勘違いしています。 (tumblr で満足できるなら、そもそも twitter を離れずとも twilog やクライアントの機能等でログをとるので十分です。)