この記事は分散SNS Advent Calendar 2018 25日目の記事です。大遅刻して申し訳ないです。仕事明けまでに書くとか言っておきながら艦これJAZZ祭りを想定しておらず、完全にロスに襲われてオワっていました。艦これJAZZ祭り最高だったなあ。そんな尊さを表現した記事はこちらになっております。

24日目の担当はNagiくんのDistributed Service Catalog 2018 でした。色々あるけど花開いたものがとても少ないのが分散型らしさがありますね。

senookenさんの「中央集権」の考え方を受けて

中央集権をテーマにした記事を書こうかなあと思った発端は、senookenさんの記事 「#mmt18 Mastodon Meetup at Tokyo参加報告 | LTLこそがMastodonの本質なのか?」です。この記事で以下のような記述がありました。

それもこれも,Mastodonがユーザーが自分で拡張する機構を用意していないからだ。今時,WebブラウザーのChromiumやFirefox,はたまたテキストエディター (Vim, Emacs, VS Code, Atom etc.) にすら搭載されているプラグイン機構のことだ。これがないがために,本体への新機能は開発者Eugenの気分次第だ。Mastodonはオープンソースの分散SNSのソフトであるが,結局のところは本体の開発体制は中央集権型だ。

僕はこれを見て疑問に思いました。「開発を主導する人がいたらそれだけで中央集権になるのか?」と。

プラグイン機構を作れば確かにユーザーそれぞれがカスタマイズを施せるので分散化できているとはいえるとは思いますが、結局コアの部分についてはプロダクトのリードエンジニアが開発を進めるので、結局はsenookenさんの意見に則れば「中央集権を脱していない」事になると思います。コアの開発が進むにつれてプラグインが適応できなくなった場合、「中央集権の弊害だ!」ということになってしまうのでしょうか?引用についての「本体への新機能は開発者Eugenの気分次第だ」というのはこれにリンクしています。

中央集権を否定し続けると何もできなくなる

中央集権/分散の定義は結構曖昧であると思っております。特に「分散」についてはまだ概念の定着が薄いところがあり、分散トークをするときに人によって割と言っていることが違うように見受けられます。

僕としては、中央集権と分散については「割合」で見ていて、「このサービスは中央集権度oo%、分散度xx%かな~」と思っています。

例えば、俗に「中央集権SNS」とみられているTwitterやFacebookについては、僕は「中央集権度90%、分散度10%」と見ています。投稿されたデータの扱いについては「ALL IS MINE!!!」の精神がひしひしと感じ取れるわけですが、一方で各社はGitHubリポジトリを持ってオープンに開発していたり、APIを提供したりしているため、雀の涙ほどの分散が見られます。そもそもインターネットが分散を心がけているため、インターネット上のサービスという面でも幾分かの分散は見受けられます。

逆に「分散SNS」を謳うMastodonではどうでしょうか。自分としては、「中央集権度20%、分散度80%」といった感じで受け止めています。脱中央集権の概念に則り開発されているため、各機能についてはしっかり分散を担保しているとは思いますが、senookenさんの指摘や、Mastodon自体のソースプログラムの重量化に伴ってカスタマイズが一見して難しくなっている点、動かすサーバーについてそれなりに知識が必要かつメモリ2GBほどのリソースが必要になっているあたりは中央集権要素が含まれていると見ています。

中央集権度についてざっくりといえば、「属人性が強くなってくるにつれて中央集権度も高まってくる」認識です。では、属人性を排していくことを突き詰めいくとどうなって行くのでしょうか。…何もできなくなります。

先ほどの「開発体制」についてそれが「中央集権的である」と見た場合、分散的になるには「Forkして自分で開発する」となります。これはまだ可能です。ではそれを運営していくとすると、Webという土壌に乗せるため通信インフラに依存することになります。これは「プロバイダへの中央集権」が発生しています。これを否定して、プロバイダを我が物にしたとして話を進めたとして、インフラを運用するために「電気」が必要になります。これは、電気会社への中央集権が発生しています。では電機会社を買い占めて… となると、中央集権の依存関係を振り切るために最終的には宇宙船地球号を我が物にする必要が出てきます。つまり、中央集権を避け続けてると何もできなくなるわけです。

アナーキズムに染まりすぎない

中央集権というキーワード自体が政治的なニュアンスを含んでいると思っています。なので、脱中央集権を志すということは、ある程度のアナーキズム(無政府主義)を胸に秘めるということだと思います。ただ政府というか権力については人間が3人いたら発生するものであり、完全なアナーキズムを心がけると「一人で何でもできる」必要が出てきてしまいます。また人間は社会的な生き物であるため、たとえ一人で何でもできたとしても社会的な折衝が必要になります。それは自然界でも同じだと思います。明文化されたルールがなくても生物はそれぞれの縄張りで生きています。そういった 「自然界的な営み」こそが分散だと思っています。

中央集権は「ラク」である

視点を変えてみましょう。中央集権は「ラク」であるという話をします。

中央集権的サービスを使うのはとても簡単であるはずです。というか中央集権的サービスで準備に手間がかかる場合、利用者が離れがちになるのではないでしょうか。TwitterもFacebookも、データを提供する代わりに快適なSNSライフ(笑)を提供してくれるわけです。

中央集権的サービスでは、データの集約・利用がサービスの原動力となります。TwitterとMastodonで検索について比較してみると、Twitter検索の快適さに驚かされます。これはTwitterがデータを集約しているため検索の能力が上がっているのです。Googleについてもそうだと思います。

中央集権的サービスとしてはAmazonも挙がりますね。AWSは実に中央集権的なサービスです。利用者がどう運用するかといったことや問い合わせの対応からどんどんサービスが進化していきます。利用者にとっても事業者にとっても表層的にはWin-Win。もし分散を心がけてMy Server, My IP Address, …なんてことやったらえらくしんどくなるのはエンジニアの民でしたら思い当たることと思います。

中央集権的サービスには、強力なサービスには人が多く集まります。集まった人同士でヨコのつながりができるため、知識取得がラクになるという面もありますね。

中央集権的サービス、ひいては中央集権は、とにかく楽なのです。自分が考える必要があった点を、何らかの「財産」と引き換えに代行してくれます。

分散と中央集権のいいとこ取りを狙う(巨人の肩に乗っていく)

中央集権と分散、それぞれの概念は対立していながらも地続きなのですが、分散を100%にするのは中央集権を100%にするよりも非常に難しいです。というか分散を100%にしてしまったら逆に中央集権というか地球全土に絶対王政を敷いちゃうみたいなことになってしまいます。

分散については各自のパワーがどれほどかによって満足度が変わってきますが、至らない点については積極的に中央集権サービスに頼っていくのはオススメです。隙あらば楽していきましょう。ただし、巨人の肩に乗るために何を支払っているかについては常に気を配りましょう。

Mastodonの開発体制は中央集権とは言い難い

そもそもMastodonの開発体制は中央集権とは言い難いです。

現状では、確かに本家としてのリードエンジニアはGargron氏ですが、ソースプログラムはAGPLの上で公開されています。もし開発体制や方針に異を唱えたいのであれば、ライセンスのうえでMastodonリポジトリをForkなどをして、xMastodonを作ればよいだけのことです。(xMastodonは先日のMatz氏のxRubyについての言及が下敷きにあります)

Mastodon本体のソースプログラムが秘匿されていたら中央集権であるとは言えたかもしれませんが、Gitリポジトリの上でプロジェクトがPublicに動いており、AGPLの上で公開されている以上、中央集権ではないでしょう。忘れがちですが、Gitそれ自身も “Decentralized” です。

身近な中央集権に気づく

それでは、「中央集権的サービス」というものはいったい何なのでしょうか。僕は、「中央集権度が60%を超えるサービス」が中央集権的サービスであると考えています。

GAFAやTwitterが行っているサービスはデータの扱いにおいて明確に中央集権的サービスですが、もっと身近なものについて考えてみましょう。

Mastodonの文脈で言うと、「ホスティングサービス」は中央集権的サービスにあたるでしょう。分散SNSをホスティングサービスとすると中央集権になるというのは不思議なものです。なぜ中央集権になるかというと、「データが自分の手元にない」のと、「ホスティングサービス全体で見て管理者に不具合が起きると全体が死ぬ」といったことにあります。

前者についてはMastodonの文脈で言えばフォローインポート/エクスポートなどがあり幾分分散になりますが、データベースのバックアップを手元に持たせるなどをしていなければ、中央集権寄りになるでしょう。(この感覚、伝わりますかね??)

後者については中央集権的イメージが付きやすいでしょう。そう、中央管理者が不安定なほど中央集権的になる のです。わいせつ物がDBに放り込まれ、警察沙汰になったムトーの無料プランなんかが分かりやすい一例です。やべーやつが1人いただけで他人に影響が及んでしまうのは明らかに中央集権的でしょう。ホスティングサービスの管理者(1人であることを想定)が何かの間違いで入院してしまったらどうなるでしょうか。メンテナンスが継続されないと、下手したらそのまま継続不可になりオワってしまうわけです。

もしMastodonひいては分散SNSをより分散として運営したいのであれば、Infrastructure as a Serviceを掲げている企業から仮想サーバーを借りて運営するほうが安定性としては分散に近づくでしょう。さらに、設定ファイルやデータがちゃんと手元に残るように手配し、「お引越し」ができるような状態であればさらに分散度が上がります。

ホスティングサービスを例にとりましたが、実に巷にあふれている様々なサービスが中央集権的に運用され、また分散的に運用されています。ホスティングサービスひとつとっても、中央集権的~分散的に揺れることもご理解いただけたかと思います。目に触れているサービスが、どれほど中央集権的なのか分散的なのか?考えつつ日々を生きると、より「脱中央集権」の感覚が研ぎ澄まされていくでしょう。

自分の身は自分で守る

「サービスの中央集権とは、他人への属人性割合の大きさである」といった論調で進めてまいりました。これを裏返すと、「脱中央集権」とは、「自分の身は自分で守る」ことであります。

自分の身、というとガードマンか何かを呼ばなけりゃいけないイメージを思い浮かべそうですが、そうではありません。自分が広げていくものに対して、なるべくが自分の手の届く範囲に収まるように設計していくことです。

TwitterやTumblrといった中央集権的サービスたちは、全世界的にサービスを広げるために、安全寄りにかじ取りをすると思います。凍結・ロックの「被害拡大」や、R18・NSFW画像の全面撤廃などがそうです。しかし、自分が「何の問題もないことを確信しつつ行っているあれそれ」についてが、中央集権的サービスたちが検閲すべきものである可能性があるわけです。そういった場合は、「分散」して、意見の発信場を変えていくのが大事です。

あるいは、自分の発信しているデータ(マスクデータも含む。ある情報を発信した緯度経度がどこが、とか)が秘密裏に利用されていてそれが気味悪いと感じるときもあるでしょう。そういった場合も「分散」して、より自分の情報を秘匿できるようにしていきましょう。

人間はクソなので、なんでもできるわけではありません。色々な中央集権的サービスに乗っていきながらも、自分のものを自分の手中に収める「分散」、やっていきましょう。