2017-04-20

ここらでもう一度マストドンについて語っておくか

オレが間違っていたぞ、清水亮。

なんで「オレが間違っていた」と最初に書けないのか。つまんねープライドもってんなー

-- 清水亮

https://mstdn.onosendai.jp/users/shi3z/updates/1002

前回、前々回と、マストドンについての批判を書いた。結論を先に書くと、私の技術上の懸念以外の懸念はすべてあたらなかった。

本の虫: そろそろマストドンについて語っておくか

本の虫: マストドンが直面している問題はすでにP2P技術が15年前に遭遇した問題だ

そうこうしていると、ドワンゴがマストドンのインスタンスを立ち上げた。

https://friends.nico/

これはなかなか興味深い。というのも、私はドワンゴに雇用されているので、ドワンゴが悪意を持っているかどうかについては内部の情報があるため判断しやすい。マストドンはインスタンスの管理者が悪意を持っているかどうかが極めて重要だ。内部の情報をもって判断した結果、今は信用できそうだ。

そこでものは試しとアカウントを作ってみた。

EzoeRyou

そして、感動した。これだ。久しく忘れていたインターネットがここにある。何ということだ。

そこにあったのは、黎明期の怪しげな雰囲気を持つインターネットだった。今から20年ほど前の2chやIRCの雰囲気だ。インターネットよ、私は帰ってきた。

ともすればインターネット老人会とも揶揄される環境がそこにあった。我々はぬるぽにガッされ、ゴノレゴが吉野家のにわか客に文句を言い、ペリーに開国を迫りミキコにピアノを教えるあの空気が再現されていた。

そうだ。当時もこうして、夜遅くまで寝不足になりながらインターネットを閲覧したものだ。そうこうしているうちに、誰かがセンシティブなコンテンツのフラグが立てられた画像が投下される。みてみるとうまそうな飯テロ画像であった。「これはけしからん、無修正じゃないか」と文句を言うと、こんどはモザイクをかけた飯テロ画像が投下される。

開始当初のマストドンのドワンゴインスタンスには優れた点が二つある。まずエロが投下されないことと、誰も煽り合わないことだ。放っておいても人はエロを探すし、勝手に煽りあう。そういうものだ。

インターネットからきらめきと魔術的な美がついに奪い取られてしまった。2chや、IRCや、アングラサイトがユーザー達と共に中二病を誇り合い、徹夜でチャットにあけくれ、不毛なネット議論を繰り広げる。そんなことはもう、なくなった。

これからのインターネットユーザーは、安全で静かで、物憂いスマフォを握って、画面を受動的にタップ操作のみする。一方何千というコンテンツ達が、アルゴリズム一つで機械の力によってフィルターされ、検閲される。これから先のインターネットは、安全と引き換えにその娯楽性を完全に殺すだろう。

やがてそれぞれのプラットフォームには、大規模で、限界のない、一度発動されたら制御不可能となるような検閲のためのシステムを生み出すことになる。

人類ははじめて自分たちが手に入れた自由な情報流通手段を、みすみす自ら手放すことになる。これこそが人類の栄光と苦労のすべてが最後に到達した運命である。

結局、Twitterなどの大手のSNSはあまりにも有名になりすぎ、あまりにも大衆化しすぎたために、つまらなくなってしまったのだろう。大衆受けを目指すと、きらめきと魔術的な美が失われてしまうのだ。

この歴史は連続している。パソ通が、あめぞうが、2chが、ニコニコ動画が、開始当初はこの黎明期特有の怪しいきらめきを有していたが、大衆化に伴って消失してしまったのだ。これはどうしようもないことだ。大衆化の過程で、より多くの、より幅広い人間に受け入れやすくなり、その結果利益を出すことができ、その利益をプラットフォームの維持と拡張に使うことができる。大衆化をしない場合、利益が出ずにプラットフォームが継続できないとしたら、結局大衆化するしかない。

もちろん、これはドワンゴのマストドンインスタンスとて例外ではない。いずれはユーザーが集まりすぎて大衆化して万人受けにはなるが陳腐化するか、ユーザーが集まらず過疎化してひっそりと消失するかのどちらかになるだろう。どちらにしても、現在のこの魔術的な美は速やかに失われるだろう。

せめて今は、この雰囲気を楽しむとしよう。

さて、ポエムを書くのはここまでにして、技術的な話をしよう。

マストドンと元になったGNU Socialは、OStatusというプロトコルを使っている。このプロトコルの詳細な内容を筆者は知らない。

というのも、OStatusプロトコルの網羅的なドキュメントが存在しないからだ。5年前は存在していたのかもしれないが、散逸してしまっている。本来ドキュメントをホストしていたはずのURLのドメインの所有者が変わって全く関係ない内容になったりしている。

それでも散らばっているドキュメントを読んでキーワードを拾っていくと、ユーザーの発見にWebFinger、購読にPubSubHubbub、メッセージのやり取りにSalmonを使っていることなどがわかった。あるいは、OStatusプロトコルという単一のものはなくて、細分化されたプロトコルの寄せ集めでできているのかもしれない。

さて、プロトコルの技術的な詳細は後で調べるとして、筆者の理解する限りでは、OStatusプロトコルはスケーラビリティの問題を抱えている。おそらく現在の設計では、規模が拡大したときに、負荷がとても増えていくはずだ。なので、Twitterを代替するほどの規模で成立できるかどうか疑問だ。

また、ユーザーの認証がサーバーに結びついているのも問題だ。ユーザーの発見と認証のプロトコルであるWebFingerを調べたところ、どうやらユーザーには絶対に変わらない永続URLが必要なようだ。これではサーバーレスな実装は困難だ。

したがって、規模の小さい今はこのままOStatusプロトコルを使うのはいいとしても、早急に別のより優れたスケールするプロトコルを設計すべきだろう。

ただし、この技術的にスケールしないという問題は、実は問題にならないかもしれない。というのも、1インスタンスに数万人もユーザーが殺到するような状況を作り出さなければいいのだ。したらばやRedditのように、ユーザーが自分の管理するインスタンスを立ち上げるようなサービスにして、1インスタンスあたりのユーザーを抑える文化を作り出せば、スケールは問題ではなくなる。たかだか1万に満たない程度のユーザーを処理するならば、どんなに富豪的な設計でも耐えられる。ユーザーがジャンルごとにインスタンスを作り、自治を行う。楽しい世界だ。

例えば支持政党ごとにインスタンスがあり、自民党支持者は自民党インスタンスに、民進党支持者は民進党インスタンスに登録する。そしてインスタンス間の戦争が起き、連結が遮断される。「我々自民党インスタンスは民進党インスタンスとの連結を解除した。これは民進党が我々の党議に賛同しないからである」などといった具合だ。

さて、最後に自由の話をしよう。

マストドン、GNU Socialにとって、自由は極めて重要だ。なぜならばその開発目的が、SNSプラットフォームの独占の打倒にあるからだ。

マストドンとGNU Socialでは、サーバー実装が自由なライセンスであるAGPLで公開されているので、誰でも必要なインフラさえあれば、マストドンでは「インスタンス」と呼んでいるサーバーを建てることができる。あるインスタンスの管理が気に食わないのであれば、別のインスタンスを使えばよい。気に入るインスタンスがないのであれば、自分で立ち上げればよい。これによりTwitterやFacebookのような一企業に独占され、一企業の一存で好きなように検閲される問題を解決できる。

すでに解説したように、大抵のユーザーは自前のインスタンスを立ち上げるのではなく、有名なインスタンスに集中する。大勢のユーザーの負荷に耐えられるインフラを運営するには、企業でしか支えられないほどの資金と労働者が必要だ。すると特定のインスタンスが独占的な地位を得て、ユーザーを囲い込み、外部との連結を無効化するという邪悪に走るだろう。そう考えていた。

たしかにその懸念はあるのだが、現実は違った。そのような鎖国を嫌う文化が生まれていれば、利用者の期限を損ねないように、そのような邪悪を行わないインセンティブが生まれる。

ああ、先見性というのは難しいものだ。すっかり見誤った。

結果として、マストドンは流行るだろう。もうTwitterに独占される必要はないのだ。

2017-04-16

マストドンが直面している問題はすでにP2P技術が15年前に遭遇した問題だ

Media content caching strategy · Issue #1847 · tootsuite/mastodon

日本勢がマストドンに目をつけ始め、Pixivがマストドンのインスタンスを立ち上げてからというもの、マストドンは2つの問題に直面している。

  1. 日本国内で合法である現実に基づかない純粋な思想の表現である絵が海外基準では児童ポルノであり違法なデータである
  2. 画像投稿を主目的とするPixivの利用形態により大量のトラフィックとストレージがキャッシュとして消費されるため貧弱なインフラでは耐えられない

これにより、Pixivによるマストドンのインスタンスは海外で主流のマストドンのインスタンスから遮断された。

現在、マストドンのコミュニティではこの問題に対する議論が行われているが、この問題には見覚えがある。15年前のP2P技術が流行した時代と同じ問題だ。我々は歴史に学ぶべきである。

今をさかのぼることおよそ15年前、P2P技術があらゆる問題を解決する夢の技術として期待されていた。当時、P2P通信により、インターネット上に分散メッシュネットワークを構築し、その分散メッシュネットワーク上に、ファイル共有、掲示板、チャット、ブログ、Webページ、その他あらゆるネットワーク通信を実装していた。純粋な分散メッシュネットワークでは、すべての参加者が、計算機、ストレージ、トラフィックなどの資源の大小を別にすれば、平等である。

その実装方法は様々で、例えば特定の機能に特化した実装、例えば、ファイル共有や掲示板のWinny、ファイル共有のBitTorrent、チャットのSkypeのような実装もあれば、Webページのようなより汎用的な機能を提供するfreenetのような実装、あるいは分散メッシュネットワークを構築した上でローカルsocksプロクシーサーバーとして動作して通過的にTCP/IPをアプリケーション層に提供するような実装もあったはずだ。

その具体的な実装方法については様々な方法が乱立して試されたが、どれも同じ問題を抱えていた。現在のマストドンが抱える問題と同じだ。

  1. 著作権侵害、児童ポルノ、その他の違法なデータ(ドイツにおけるナチ党のシンボルなど)がネットワーク上に蔓延する
  2. ネットワークに参加するノードがキャッシュとしてデータを溜め込むためにネットワークに参加するための計算機、ストレージ、帯域などの資源が莫大になり、個人が参加しづらくなり、結果としてゲートウェイ経由での参加が増える

その結果どうなったか。まず、ソースコードを公開せず、プロトコルの仕様も公開しないような閉鎖的な実装であるWinnyは滅びた。純粋な分散メッシュネットワークにこだわったfreenetのような実装は問題2.によってスケールせずに非効率性によって実質的に廃れた。

当時を生き延びて今も使われている実装もある。例えばSkypeとBitTorrentだ。

Skypeは当初P2Pな分散メッシュネットワーク(完全に平等ではなく、特にトラフィックに余裕のあるノードがスーパーノードとして局所的な管理サーバーの役割を果たし、NAT超えのために通信を仲介するリレーノードも存在した)によるチャットの実装であったが、今ではMicrosoftの管理するところとなり、その実装はサーバークライアント型の中央集権的で効率的な実装に切り替わった。もはや、今のSkypeはP2Pではなくなってしまった。とはいえ、表向きの末端のユーザーに対する利便性には違いがないので、よく使われている。

BitTorrentプロトコルは当初、純粋な分散メッシュネットワークではなかった、サーバーでファイルのメタデータやファイルを保有しているシードと呼ばれるノード、ファイルをダウンロード中のピアと呼ばれるノードを管理する。ファイルをダウンロードするには、すでに完全なファイルを保有しているシードの他に、現在部分的にファイルを保有しているピアからも分散してダウンロードを行う。後にファイルのメタデータに対するハッシュ値だけで、ファイルのメタデータとピア/シードの取得も分散メッシュネットワークを介して行う実装も追加されたが、依然として最初のハッシュ値を分散メッシュネットワーク単体で検索したりする機能は提供されないので、やはり何らかの中央管理的なサーバーは必要だ。

P2P技術を利用したファイル共有には著作権侵害などの負のイメージがつきまとうが、BitTorrentプロトコルは数あるファイル共有プロトコルの中でも、特にサーバー側で多大なトラフィックが必要ないという点から、今でも自由なOSのISOイメージの配布とか、ソフトウェアのアップデートを全コンピューターに行き渡らせるためなどの目的で活用されている。

当時のP2P技術を考え、現在の実用化された例を参考にすると、問題の解決方法が見えてくる。

問題1.を解決するには、結局有人の検閲を設置するしかない。問題2.は解決できない。純粋な分散メッシュネットワークによりすべての参加者が平等であることを目指すのであれば、すべての参加者が平等に全ネットワークのコストを負担するので、ネットワークの規模が拡大するほど参加者の負担が増えてしまう。

さて、話をマストドンに戻そう。マストドンはOStatusプロトコルの実装で、もともとは当初StatusNetと名乗り、今はGNU Socialと名乗っているソフトウェアの互換実装だ。その目的は、単一の企業からのSNS支配の解放だ。

その思想と設計はこうだ。TwitterやFacebookのような一企業がSNSの実装とインフラを独占しているから不平等な権利格差が発生するのだ。SNSの自由な実装を提供し、誰もがSNSのインスタンス(サーバー)を立ち上げることができればこの権利格差は解消する。インスタンス同士がデータを相互にやり取りできるように互換性のあるOStatusプロトコルで通信できるようにしておけば、どのインスタンスを選ぶかという問題は、どのインスタンスが便利で信頼に値するかという問題になる。既存のインスタンスのどれもガキに食わないのであれば、自分でインスタンスを立ち上げればよい。

考えようによっては、サーバー同士がゆるくわずかにP2P風に繋がっていると考えることもできる。もちろん、分散メッシュネットワークほどの強い結びつきではない。RSSをすこし強力にしたようなデータ共有用のOStatusプロトコルでお互いにデータを共有できるという程度の薄いつながりだ。

さて、問題1.に対処するには、有人の検閲を設置するしかない。有人の検閲を設置するには、結局企業としての資本や雇用が必要だ。企業による支配から脱却することを目指しているマストドンとしては皮肉なことに、企業が必要になる。自分のインスタンス内のデータの適法性については十分な資本と労力さえかければ検閲できるが、よそのインスタンスのデータはどうしようもない。すると、外から内へのリモートフォローは無効化せざるを得ない。

問題2.に対処するには、強力なインフラが必要だ。大規模なデータセンター、ストレージ、トラフィックを提供する必要がある。これにも、企業による資本が必要だ。ネットワークの規模が大きくなっていくと、これまた皮肉なことに個人ではその規模のインフラを提供できず、企業には勝てない。そして、規模が大きくなっていくと、すべてを無制限にスクレイピングできるAPIを外部に提供することがパフォーマンス上難しくなっていくだろう。そこで、内から外へのリモートフォローも無効化せざるを得ない。

こうして、マストドンのインスタンスをまともに運営できるのは十分な資本と、最低でも数百人規模の労働者を雇用している潤沢なインフラを提供できる企業だけになるだろう。個人がマストドンのインスタンスを立ててももはやマストドン全体のデータを格納できるだけのトラフィックとストレージを用意することすら難しくなる。現在のマストドンは、個人でもインスタンスが建てられるような小規模な実装になっている。ユーザーが増えていくと、企業はマストドンを大規模なインフラ上でスケールさせるために実装を改善していくだろう。そのような大規模にスケールする実装は、個人でインスタンスを立てるのが難しくなってしまうだろう。

そして、自らが管理するインスタンスだけで何十万、何百万ものユーザーを獲得した企業は、もはや外のインスタンスと連携する必要すらない。自らのユーザーだけで自己完結できるのだから、検閲上、パフォーマンス上の理由も合わせて、外部との連携を断つ。これは企業として適切な判断ではあるが、結果としてユーザーは分断される。

その結果実現される未来は、現在のTwitterの実装が公に公開される程度の未来だ。誰でもTwitterと同じサービスを提供するサーバーを立てることは技術的に可能だ。ソフトウェア実装はすべて公開されている。ただしインフラの規模は個人で実現できる範囲を大幅に超えている。

結局、マストドンは思想的にも設計的にも、当初の目的である単一の企業からのSNS支配の解放を達成することはできないだろう。仮にマストドンがTwitterを置き換えたとしても、マストドンのインスタンス運営のためには十分な資本、労働者、インフラ、政治ロビー活動ができる企業が必要になり、現在のTwitterと同じ問題が発生する。ユーザーはマストドンが極めて抑圧的であると不満を持ち、やがて、「既存のマストドンの代替する分散型のSNS実装を公開する。これは単一のマストドンコミュニティにより我々のコミュニケーションが独占されるリスクを防ぐ!」などという運動が持ち上がることだろう。歴史は繰り返す。

唯一の救いは、マストドンのライセンスはAGPLであるので、その実装が公に公開されるということだろう。

追記:Winnyの金子勇が自著でプロトコルを公開したのは、金子勇が刑事裁判に巻き込まれてからであり、もはやWinnyは廃れて、競合の同等機能を提供する他のP2Pファイル共有ソフトウェアの方に人は移行していた。

2017-04-15

そろそろマストドンについて語っておくか

世間ではマストドンが流行っている。結論から言うとマストドンは思想的にも設計的にも失敗しているのでお祭りのように一時の話題になった後、急速に忘れ去られる運命にある。

マストドンを語るには、まずマストドンが実装しているプロトコルであるOStatusについて説明する必要がある。これはもともと、StatusNetというソフトウェアが提唱したプロトコルで、Twitterようなマイクロブログの更新通知のためのプロトコルだ。StatusNetは今は名前を変えてGNU Socialとして自由ソフトウェア財団の傘下になっている。

マストドンはいうなればGNU Socialの互換実装だ。その基本的な思想や設計はGNU Socialと同じだ。どちらも現在の大手ソーシャルネットワークサービスに共通の問題に対処しようとしている。

問題とは何か。権力の一極集中である。TwitterにしろFacebookにしろGoogle+にしろ、そして現在ブログの文章を主にホストしているBloggerやGitHubも、筆者より強い権限を持っている。もしこの文章の内容が、彼らの気に食わないものである場合、彼らの一存のよりこのブログは削除、改変、監視といった検閲を受ける。これはTwitterやGoogleが技術的にサーバーを管理しているために生じる問題だ。

この問題に対処するにはどうすればいいのか。我々全員がサーバーを運営できるようになればいい。インターネットの当初の目的は、全員がサーバーを運営できるようになることだった。残念ながら、ハードウェア資源の制約、IPv4アドレスの枯渇、NAT、不思議な日本国内の法律(プロクシーサーバーを運営する出稼ぎ中国人を日本国政府が都合よく別件逮捕するのに使われている通信事業者法)により、我々は自由にサーバーを運営できるようにはなっていない。しかし、少なくともサーバーの実装であるソフトウェアを提供し、サーバーの設置をかんたんにしてはどうか。

GNU Socialやマストドンはこのような思想で設計された。Twitter社の方針が気に入らないのであれば、別のサーバーに移住すればよい。どのサーバーも気に入らないのであれば、自分でサーバーを立ち上げればよい。

思想としては悪くはないのだが、技術的にはあまりよろしくない。GNU Socialの前身StatusNetは2010年から開発が始まっているが、一向に主流とならない。主流となっていないソフトウェアには主流になれない問題があるのだから、その互換実装を作っても主流となるわけがない。では一体何が問題なのか。

サーバーの設置は自由なソフトウェア実装が存在するだけではだめで、十分な性能を持ったコンピューターと十分なネットワーク帯域が必要になる。GNU SocialはPHPで実装されているし、マストドンはRuby on Railsで実装されている。実行には普通にWebサーバーを運営するのと同じだけの煩わしさがある。

これだけサーバーの実行が面倒だと、結局、既存のサーバーを利用するものが大半だろう。その結果、どこかの学生が1個人が運営している怪しげなサーバーに人が集中する。これはとても問題だ。

信用の話をしよう。Twitter社と一個の人間、どちらが信用できるだろうか。これは圧倒的にTwitter社である。何故かというと、邪悪に至るまでの障害の多さによる。

一個の人間が運営するサーバーで邪悪を為すのは簡単だ。一個の人間が邪悪になるだけでよい。一方、Twitter社は法人格として登録をしており、税金の支払いのために収支を国家に報告する必要がある。Twitter社には現在3000人以上の被雇用者がいる。Twitter社が邪悪をなして、それが露見しないようにするのはとても難しい。Twitter社内の一個の人間がなした邪悪は、速やかに発覚する。Twitter社が社をあげて邪悪をなそうとした場合、3000人以上いる社員のうちの少なくとも数十人から数百人はその邪悪が為されていることを知るだろう。そのうち、一人でも正義感あふれる人間がいて公に邪悪を暴露した場合、邪悪が露見する。

したがって、一個の人間によって管理されたサーバーより、何百人何千人もの人間が関わる法人の方が邪悪に至るまでの障害が多いという点で、信用できるのだ。

事実、マストドンの初期の主流サーバーでは検閲が行われている。どのような検閲かと言うと、ドイツやフランスの法律の法律に違反しないように、ナチ党のシンボルであるハーケンクロイツ、ホロコーストの否定といった内容が検閲されていた。マストドンはむしろ検閲をやりやすくするプラットフォームであると言える。権力を一個の人間に委ねると、その人間の裁量で検閲が行われるわけだ。もちろん、これは効率のいいハラスメント対策にもなるという主張もあるだろうが、それはつまり独裁政権は一人の独裁者の判断だけで政治が進むので効率的というのと同じだ。たしかに効率的だが、失敗に至る道も効率的にたどることができる。かの毛沢東も国力を増そうと大躍進政策を行い、かのポル・ポトも子供によりよい教育を施そうと子供を家庭から取り上げて国家が管理する完璧な教育を施そうとした。かのルーズベルトとトルーマンは日本に降伏させて日本の民間人を守るために日本を無差別爆撃し核爆弾を二回投下し、日本の民間人の虐殺に貢献した。地獄への道は善意で舗装されているというわけだ。

一個の人間がサーバーを管理する場合に憂うべきことは単に恣意的な検閲や改変だけではない。大半の人間はパスワードを再利用するという問題だ。

xkcd: Password Reuse

なんか適当に便利な利用に登録が必要なWebサービス作ったらユーザーIDとパスの組み合わせが大量に手に入るじゃん。やったね。さあ邪悪を行おうぜ。でもなにする?

そして、日本のマストドンのサーバーで注目を集めてユーザーの急激な増加を得た管理者が、某クラウドベンダーからホスティングを促されたり、別の某クラウドメンバーでホスティングしようと動いているなどという話をみるにつけ、もはや悪いとこ取りの様相を呈している。一個の人間が管理する上に、インフラは自分で所有していない。

マストドンとGNU Socialは残念ながら設計的に間違っている。結局、やっていることはTwitter風サーバーのソフトウェア実装を提供したというだけで、解決しようとした問題は何一つとして解決していないばかりか、大半のコンピューターリテラシーの低い者にとっては悪い結果になるだろう。

では、本当に技術的に正しい設計とは何か。まずすべての参加者はサーバーでもありクライアントでもある、完全にP2Pメッシュネットワークを構築し、その上にマイクロブログサービスを実装すべきである。自分のデータは全てローカルに保持する。

問題は、これは15年前、P2P技術が夢の技術のように叫ばれていた時代に試みられたことだ。あの当時は様々なP2Pメッシュネットワーク上に構築されたチャット、掲示板、ブログ、Webページ、ファイル共有などの実装が乱立していた。その実装はどれもすべての参加者はコンピューターの性能やネットワーク帯域を別にすれば平等であり、全員がローカルで同じソフトウェアを実行する作りであった。

そのような状況ですら、当時も今と同じ問題を抱えていた。ローカルでそのようなソフトウェアを実装するのは大変にコストがかかるので、大半のものは他人が実行しているサーバーにアクセスして、そのサーバー経由で参加していた。残念ながら当時のP2Pメッシュネットワークによる全員が平等なネットワークの構築は失敗した。当時の実装の殆どは秘密で不自由なプロトコルやソフトウェア実装で非効率なため打ち捨てられ、残ったのは、BitTorrentプロトコルのような詳細が公開されていて当時のソフトウェア実装も自由で使いやすかったものだ。BitTorrentプロトコルは大容量データの配信に都合がいいもので、これは今も自由なOSのISOイメージの配布とか、ゲームやサーバーのアップデートパッチの全コンピューターへの効率的な配布といった健全でまともな用途にも使われている。その他の当時の有象無象のP2Pプロトコルは、筆者の知る限り絶滅した。

筆者が思うに、真に自由な通信手段のためには、物理層からのP2Pメッシュネットワークの構築が必須だ。例えばコンピューターが無線通信装置を搭載して近隣のコンピューターと通信したり、ストレージをスニーカーを履いた足で運んだりして、物理層からのP2Pメッシュネットワークを構築し、その上にNamecoinのようなP2Pかつ計算資源の多いものが正しいという名前解決の仕組みを導入し、公開鍵署名によって特定の秘密鍵にアクセスできるものによって発信されたデータだと証明できる通信でチャットや掲示板やWebページやメールの仕組みを実装し、すべてのネットワーク参加者は平等である仕組みがほしいが、これとて最終的には計算資源とネットワーク帯域と電力の強いものが正しい弱肉強食の世界になることが予想されるので、世の中は難しい。

とりあえずの対策として、筆者はこのブログの内容をgitで管理している。そのgitレポジトリはGitHubでもホストしていて、GitHub Pagesでも閲覧できる。こうすることによって、BloggerとGitHubが同時に検閲された場合でもローカルに全て残っているので、私はデータを失わない。外部のホスティングサービスがすべて検閲され、かつ、私の所有するストレージが全て強奪、破壊されたときのために、今、誰でも簡単に"git clone git@github.com:EzoeRyou/blog.git"というコマンド一発で複製できるようにしておくのも重要だ。gitレポジトリの複製が存在する限り、私は最新のコミットの40文字のハッシュ値を覚えておけば改変されていないことが保証できる。

2017-04-06

もしスマートフォンが自由だったら今頃実現していた社会

CanonicalがUbuntuをスマートフォンに対応させることを諦めた。これで、スマートフォンにまともなOSを移植するという大きな資本が入っているプロジェクトは、ほとんど全部潰れたことになる。これは当然の話だ。現在のスマートフォンのハードウェアは極めて不自由なので、まともなOSを移植することは不可能なのだ。このため、筆者はスマートフォンの所有を拒否している。

スマートフォンの害悪について詳しくは以下を参照。

本の虫: インターネット端末のシェアでスマートフォンがPCを上回ったというディストピア

しかしもし、スマートフォンが自由だったら、今頃どうなっていただろうか。以下はスマートフォンのハードウェアが完全に自由なコンピューターの将来実現したであろう未来である。

江添亮は13時に目が覚めた。今日は比較的早起きをした方である。江添は眠たい目をこすりながら枕元のスマートフォンを操作する。そう、なんと江添亮はスマートフォンを所有しているのだ。

このスマートフォンは、ファームウェアを含めてあらゆるソフトウェアが自由なコンピューターである。江添亮は自由なファームウェアを使い、その上に自由なブートローダーを使い、自由なカーネルを起動し、完璧に自由なユーザースペースソフトウェアを実行している。もちろんベースバンドプロセッサーの仕様とファームウェアとOSも自由だ。当然だ。不自由で不便で修正されない既知の脆弱性、アメリカ政府が保有している未公開の便利な脆弱性とバックドアが満載のAndroidやiPhoneなどは、とっくの昔に自由競争に破れて滅んでしまったのだから。

今日は休日だが外出する用事があるので、江添は家を出る。歩きながら、公衆無線ネットワークに参加する。今や、無線周波数帯のほとんどは、国民の自由な通信のために開放されている。なぜならば、表現の自由を脅かされない分散型の強い障害耐性を持つ通信ネットワークは、今や電気や水道と並んで重要なインフラであり、基本的人権の一部だからだ。テレビやラジオのような一方的に情報を垂れ流すだけの情報格差の発生する用途に周波数帯が専有、浪費されることはもうない。十分に広い道路を確保すると物流を改善し経済を回す。ネットワークと道路は同じだ。すべての周波数帯は国民の通信ネットワークに再優先で割り当てるべきなのだ。不必要に強い電波を発射する悪意ある電波発信者さえ取り締まればよい。

かつて、日本がまだ不自由だった時代、スマートフォンの通信は中央集権的な仕組みで行われていたと聞く。個々のスマートフォンの発信する電波は微弱で、今のように近隣のスマートフォンと通信して分散型ネットワークを構築するのではなく、強力な基地局を中心とするツリー型のネットワークを構築していたそうだ。これは基地局の管理者に、ネットワークの監視、検閲といった不平等な強権を発生させる極めて危険なネットワークである。

移動中の江添は、もっぱら情報の消費のみをする。これは手のひらサイズのタッチスクリーンで操作するコンピューターだ。このような制限された非効率的な入力装置では、まともなコードや文章を書くことは不可能だ。

さて、江添は目的地についた。しかし待ち合わせの時間にはまだ早い。珍しいことだ。いつもの江添は待ち合わせの時間になった頃に家を出るというのに。どこかで時間を潰す必要がある。そこで江添は、近くにあったターミナルカフェに入る。

「粉末ティーライクひとつとダイミョクラスの入力装置」
「ハイ、ヨロコンデー!」

ターミナルカフェとはドリンクを頼めばコンピューターを快適に操作するための端末と個室も一緒にレンタルできる実際安い作業場だ。江添は端末としてスマートフォンを持っているので、入力装置だけをレンタルすることにした。大画面高解像度のディスプレイ、Cherry MSの青軸を採用したキーボード、そして高精度なマウスをレンタルした。所有しているスマートフォンとは極めて信頼性の高い低遅延広帯域の無線接続が行われる。

作業をしていたが処理能力が足りない。やはり128コアしかない上にメモリが1TBしかない貧弱なスマートフォンでは、基本的人権が保証されない。江添は自宅に設置してあるコンピューターにssh接続をした。これでいい。これでこそ人権があるというものだ。この時代における人権とは、計算力がモノをいう。計算力の強いものは正しい。

計算力、懐かしい言葉だ。そうだ、もう計算力の時代ではなかった。トゥーメニーコアが主流となった今では、もはや計算力は問題ではなくなった。実際、江添が自宅に設置しているコンピューターのコア数は3メガ個ほどある。いや、4メガ個だっただろうか。コア数が1メガを超えた辺りから、もうそのへんはどうでも良くなってしまった。昔、まだ江添が若かった頃、ひとつのコアの計算時間を複数の処理でシェアしていたものだ。今は違う。CPUコアは実質無料である。本当の計算コストは、電力だ。たしかに、江添が自宅に設置しているコンピューターをフル稼働させれば、理論上は、大昔のRSA-4096程度は一時間もあれば任意の秘密鍵に対する公開鍵が計算可能である。ただし、その計算にかかる電力で江添の家計はカーオンファイヤー(ブッダになれなかった死者を乗せる地獄行きの車、転じて家計が苦しい時に使う)になってしまう。

そうこうしているうちに、待ち合わ汗の時間になった。それにしても、今はいい時代になったものだ。後は物理肉体を物理場所まで運ぶという技術的制約を解決できればいいのだが。

Wandboxのスポンサーになるべく、めるぽんに肉をおごってきた

WandboxというWebサイトがある。これはコードを与えるとコンパイルメッセージと実行結果を返してくれるサービスを提供している。コードとコンパイルメッセージと実行結果を保存してURLで共有する機能もある。

ここまではよくあるサービスだが、Wandboxが他のサービスと差別化を図っているのは、コンパイラーの種類だ。様々な言語のコンパイラーをサポートしているのみならず、同じコンパイラーでも複数のバージョンを提供している。これにより、あるコードの挙動がコンパイラーのバージョンで異なる場合の特定ができる。

なぜそんなサービスが必要なのか。コードぐらい自分のローカル環境で実行すればいいではないか。リモート環境にしたって、今日びVPSなど月数百円から使うことができる。ブラウザーから入力する程度の短いコードをコンパイルして実行するぐらい低スペックの格安VPSでも足りるではないか。

問題は、バージョンの異なるコンパイラーの混在と切り替えはだるいということだ。

例えばGCCを3-stage bootstrapでビルドするには1,2時間はかかる。しかも、数GBものストレージを消費する。ということは、GCCの過去のバージョンを10種類用意しようと思ったら、数十時間と数十GBが必要になるということだ。

C++コンパイラーはGCCだけではない。Clangもある。Clangの過去のバージョンを10種類用意しようと思ったら、また別に数十時間の数十GBが必要になる。

プログラミング言語はC++だけではない。Javaは? PHPは? Pythonは? Rubyは? これらの言語にはそれぞれ複数の実装があり、実装ごとに複数のバージョンがある。全部ビルドするには何百時間、何百GBも必要になる。

ほんの数行のコード辺のバージョン間の挙動を、たまに確かめたい時に、ローカルにそんな環境を用意するのはやりたくない。Wandboxの価値はここにある。

さて、そんな便利なWandboxだが、最近スポンサーを募集している。ドワンゴもスポンサーになっている。

Wandboxにはとてもお世話になっているので、ぜひともスポンサーになりたいところだ。しかし、私はクレジットカードという匿名性のない上に不必要な第三者に記録される送金手段を使いたいとは思わない。思えば、Wandboxのめるぽんとは久しく会っていない。めるぽんは無頼の肉好きであるので、めるぽんに直接、肉をおごることでスポンサーになることにした。

さて、めるぽんはグルメでいらっしゃるので、粗悪な肉でもてなすことは大変失礼に当たる。銀座にあるような高級ステーキ店ならば、めるぽんの舌も満足することであろう。しかし、店を探すのは難航した。というのも、店がまともな食事を提供するには、終日全面禁煙であることがまず必要となるからだ。ニコチン中毒の客にまともな味がわかるはずがないから、そのような店は味で客を得る努力をしていないはずで、味による市場の淘汰を経ていない。

さて、結論から言うと、筆者による店探しは完全に失敗した。これは私が携帯電話を持っていないために店の予約ができなかったためである。しかたなくめるぽんの行きつけの店に行くことにした。はじめからこうすればよかったのだ。めるぽんは肉が主食であり、普段から肉を食べ慣れているので、どこにでも行きつけのステーキ店の一つや二つはあるはずだ。

目的の店に向かう道すがら、我々はコンパイラーのブートストラップ問題の話をした。

ブートストラップ問題とは、あるプログラミング言語のコンパイラーが同じプログラミング言語で書かれている場合に起こる問題である。あるプログラミング言語で書かれたソフトウェアをコンパイルするにはコンパイラーがいる。コンパイラーもプログラミング言語で書かれたソフトウェアである。コンパイラーをコンパイルするにはどうすればいいのか。

答えとしては、まずコンパイラーを別の言語で実装するかハンドアセンブルするなどして作成する。そのコンパイラーを使ってコンパイラーをコンパイルする。後は、コンパイラーが前のバージョンのコンパイラーでも正しくコンパイルできることを保証すればよい。

GCCは歴史が長く、かつ多くの環境で標準のCコンパイラーでもあることから、ブートストラップへの対応は極めて優秀だ。かなり昔のバージョンのGCCでも最新のGCCがコンパイルできる。GCCの標準的なコンパイルは、3ステージブートストラップと呼ばれている。まず、システムのC++コンパイラーを使ってGCCをコンパイルするための最小限のC++コンパイラーと周辺ツールをコンパイルする。出来上がったC++コンパイラーで1ステージGCCをコンパイルする。1ステージGCCで2ステージGCCをコンパイルする。2ステージGCCで3ステージGCCをコンパイルする。2ステージと3ステージのGCCをテストして挙動に差がないことを確認する。テストが通れば、3ステージGCCは最低限のテストは通過したコンパイラーということになる。

他の言語はどうか。まず、ブートストラップ問題のない言語がある。あるプログラミング言語のコンパイラーが同じ言語で書かれていない場合、例えばCやC++などで書かれている場合、これは簡単だ。なぜならばGCCは極めて安定したコンパイラーであるので、ある程度最近の安定バージョンのGCCでコンパイルすればよい。

ブートストラップ問題を抱えている歴史の浅いプログラミング言語は問題だ。歴史の浅い、まだ発展段階のプログラミング言語の実装はとても急速に変わる。そのため、古いバージョンのコンパイラーは最新のコンパイラーでコンパイルできないという自体に陥る。そのためソースコードからのビルドが難しく、Wandboxではあまりにも古いバージョンのコンパイラーを提供できない。

このような話をしていると、我々は目的のステーキ店についた。空いていてタバコの害もなく高級な肉を出す店だった。

肉を食べながら、我々の話は、いかにしてめるぽんはプログラミングを学んだかという話題に移った。

人がプログラミングを学ぶ方法は様々だ。プログラミングの教育法はまだ学問として完全に固まっておらず、したがって多くのプログラマーは独学で学んでいる。筆者は幼い時にコンピューターがない環境で育ったので、参考書を読んで言語の文法と意味を脳内で理解するという作業のみしていた。さて、後にコンピューターを手に入れて、コードを書き、そのコードが想定通りに動いた時、筆者は目標を失った。なるほど、私の理解は正しかった。私はC言語の文法とその意味を理解している。ソフトウェアを書くことができる。しかし、今の自分の技術力で完成することがわかりきっているコードなど書いて楽しいのだろうか。そこに学びは何もないし、やりがいもない。自分ができるかどうかもまだわからないことに挑戦してこそ、やりがいというものは生じるものだ。そこで私はC++の規格書を読み始めた。そして今に至る。

めるぽんの経歴を知らない読者には、めるぽんがどうやってプログラミングを学んだかということに対して興味を抱かないだろう。この業界は実力主義で、ほとんどのプログラマーは独学でプログラミングを学んでいる。この業界では中卒と博士が机を並べて仕事をすることだって珍しくない。めるぽんがコンピューターサイエンスの学位や博士号を持っていないのにプログラミングができるというのは不思議でも何でもない。そう思うことだろう。我々は義務教育を不登校気味だった中卒がバリバリコードを書き、コンピューターサイエンスの学位を得た者がFizzBuzzすら書けないという話はいくらでも聞いてきた。しかし、めるぽんのような例は聞いただろうか。

めるぽんは高校時代、アマチュア・レスリングで優秀な成績を収めた。高校卒業と同時に自衛隊に入った。自衛隊では体育学校にいた。自衛隊は数年でやめた。自衛隊をやめた数年後には、すでにフリーランスのプログラマーとなっていた。

いったいめるぽんはどうやってプログラミングを学んだというのか。

めるぽんは高校時代、アマチュア・レスリングで優秀な成績を収めた。つまり、めるぽんは高校生まで相当な量の運動をしていたはずで、ガチガチの体育会系の人間だったはずだ。もちろん文武両道な人間はいくらでもいる。しかし、問題はその後だ。

めるぽんは高校卒業と同時に自衛隊に入った。自衛隊では体育学校にいた。自衛隊の体育学校というところは、運動中毒の人間だけが生きていける特殊な世界だ。世の中には運動中毒の人間がいる。「自衛隊に入ったら毎日、一日中、好きなだけ走ることができて、しかも給料が出る。最高だ」などと発言する人間のいる世界である。そして、この発言をした自衛隊員は何百kmも走るウルトラマラソン大会の走者で、実際に、文字通り一日中走っている。

運動こそ人生。仕事は一日中体を鍛える訓練。そんな環境でプログラミングの勉強ができるだろうか。

めるぽんは中学生の一時期、怪我をして柔道の練習ができなくなったことがあるそうだ。そんなめるぽんに、中学校の教師は、ではコンピューターをやれ、といってPC88だか98とプログラミング雑誌を渡したそうだ。当時はN88BASICの世界で、コンピューターを使うということはBASICでプログラミングをするということであった。当時のコンピューターは単純だった。電源を入れるとBASICインタプリターのプロンプトが表示される。BASICで書く。実行される。それだけだ。当時のめるぽんは、意味もわからないままに雑誌に記載されたBASICコードを入力し、当然入力間違いによりシンタックスエラーを起こし、その「シンタックスエラー」というものが何を意味するのかもわからないままにコンピューターを使おうとしていたそうだ。そして、わからないことがあると中学校の教師に質問に行った。

めるぽん「その教師、図画工作の教師で、他にも当時CADを使った授業とかがあって」
筆者「その教師、当時としてはおかしくないか?」
めるぽん「そういえばおかしい気がしてきた。なんであんな教師がいたんだろう」

さて、高校生になっためるぽんは、家の中で偶然にもBASICの教科書を発見する。なぜそんなものが家にあったのかはわからない。これによってめるぽんは、これまで意味もわからずに写経していたBASICのコードの意味を理解することとなる。

高校を卒業後、自衛隊に入り、その体育会系の空気とあまりの運動中毒に、自分には合わない場所だと判断してやめて、ゲーム会社に一年半ほど雇われた後、フリーランスになった。

肉がやってきた。めるぽんは肉が主食であるが、サラダも注文しておいたので、多大な説得の末、多少の野菜を食べさせることにも成功した。なぜめるぽんは肉を食べるのか。

めるぽん「肉と野菜のどちらを食べるかという選択が与えられた場合、これは当然肉を選ぶに決まっている」
筆者「なるほど、そして肉を食べた後は、野菜を食べるわけだな」
めるぽん「いや、肉を食べる」
筆者「寿司ではトロに満足した後は光物がほしくなるように、肉に満足したら野菜を食べたくなるものでは」
めるぽん「肉を選ぶという選択肢は依然として残っている。選択肢にある以上、肉を選ぶのは当然だ」

肉を食べ終えた後、我々の話題はバージョン番号に移った。

バージョン番号はソフトウェアの開発者が勝手気ままにつけるものである。今ではSemantic Versioningなどと叫ばれているが、本当にバージョン番号には何らの規則性もなく、したがってソートできない。Wandboxでは、バージョンの新しい順にコンパイラーを表示しているが、これは手動で順番をハードコードしているのだという。

自動でソートをしたかったが、数値や文字列による比較を拒否するバージョン文字列が多すぎて、例外ルールだらけになるので、結局手でやるのと手間が変わらない。

バージョン番号の付け方にも謎のルールがある。例えば、PyPyはマイナー番号の偶数と奇数で、Python 3.0対応版とPython 2.7対応版を分けているらしい。他にも、リリース版にもかかわらずバージョン文字列にrcと書いてあるものもある。

肉を食べ終えた我々は店を後にした。久しぶりに本物の肉を食べた実感がある。。

ドワンゴ広告

ドワンゴはWandboxのスポンサーになった。Wandboxはドワンゴの社員がコンパイラーのバグと思われるものを見つけた場合に、バージョンごとの挙動の違いを調べるのに役立っている。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

UbuntuがUnityを捨てる予定

Growing Ubuntu for Cloud and IoT, rather than Phone and convergence | Ubuntu Insights

朝からなかなか衝撃的なニュースが飛び込んできた。結論から言うとこうだ。

Ubuntu 18.04ではデフォルトのデスクトップをGnomeにする。Unity8の開発は中止する。スマフォ対応は中止する。おそらくMirの開発もやめる。

CanonicalのMark Shuttleworthは、Ubuntuをスマフォ対応させて、どこでも同じ環境が実現できるという目標をやめて、UbuntuをクラウドやIoTに向けて発展させると発表した。

これはなかなか衝撃的だ。たしかに、Unity8とMirはこの長年開発しているが、さっぱり日の目を見ないソフトウェアだった。4年も開発していまだに実用化に至っていないデスクトップサーバー、コンポジター、デスクトップ環境は見切りをつけるのは当然だ。また、スマフォは根本的に不自由なコンピューターである。不自由なコンピューターに対応するためにリソースを割くのは無駄だ。

convergenceとやらも無意味だ。もしスマフォが本当にまともなデスクトップコンピューターと同じ使い心地であれば、iPhoneやAndroidのような不自由OSとてデスクトップコンピューターと同じUIを採用していたはずだ。それが採用していないのだから、スマフォは根本的に使いづらいコンピューターで、だからこそおもちゃのようなUIを採用しているのだ。

Canonicalがサーバー用に家事を取るのは当然だし、ぜひ鈍重なRHELを駆逐してもらいたい。すべてのコンピューターは最新の安定版のGCCを使えるべきであり、RHELは業界の癌だ。

さて、個人的な影響で言うと、Unityがなくなることだ。私はあまりデスクトップ環境にこだわらないので正直何でもよいが、Unityのデフォルトのキーボード・ショートカットは気に入っていただけに残念だ。

2017-04-04

インターネット端末のシェアでスマートフォンがPCを上回ったというディストピア

Report: Android overtakes Windows as the internet’s most used operating system | TechCrunch

最近の調査で、インターネット上の閲覧に使うOSのシェアにおいて、2017年3月現在、AndroidのシェアがWindowsのシェアを抜き去ったそうだ。

これはつまり、いまインターネットに接続している個人が使うコンピューターは、デスクトップやラップトップではなく、圧倒的にスマートフォン(AndroidかiPhone)であるということだ。

何というディストピアな世界だろうか。

私が子供の頃、世の中の大人の大半がコンピューターを使いこなせず、我々の社会の日常生活が極めて非効率的であることに不満を持っていた。

しかし、当時の私は物事を楽観的に考えていた。何故といって、我々の世代は個人でも安価にコンピューターが所有できる世代である。コンピューターの性能は年々上がり、価格は年々下がっている。すると、我々の世代が大人になる頃には、全員がコンピューターを使いこなせるようになるはずだ。将来、コンピューターを使えないのはしぶとく生き残っている死に損ないのジジババだけになる。すると、我々の社会はコンピューター利用が当然で、誰もがコードを書ける社会になるはずだ。

残念ながら、そのような未来は来なかった。

「スマートフォン」と呼ばれるものの誕生が、我々をバカにしてしまった。スマートフォンではコードが書けないのみならず、まともな文章も書きにくい。スマートフォンの利用者の大半はただ与えられた情報を消費するだけの愚かな存在になりさがってしまった。情報を与える特権を持った者は、キーボードという効率的な入力装置を使いこなせる者だ。

我々の世代と、我々の次の世代は、スマートフォンという名の毒物によって汚染されてしまった。この手のひらサイズのタッチパネルを搭載した貧弱なコンピューターは、今や大半の人間が使う唯一のコンピューターになってしまっている。

筆者はスマートフォンの所有を拒絶している。我々の社会はとてもスマートフォンの利用が当然な社会になってしまったので、スマートフォンを所有しないということは、日常生活において大変な不便を強いられる。しかし、筆者は利用者によるOSの入れ替えやOSの改変を妨害し、コードや文章を書くのが非効率的なコンピューターを所有するのは利便性を上回るリスクであると考えている。

何というディストピアな世界だろうか。