Block Rockin’ Codes

back with another one of those block rockin' codes

#HTTP2Study の軌跡

Intro

この記事は HTTP2 アドベントカレンダー 24 日目 の記事です。

HTTP2Study

HTTP2 Study は、2013年8月くらいから小さく小さく活動しているコミュニティです。

HTTP2 もまだ HTTP2.0 と呼ばれていた頃で、 Draft でいうと 04 くらいですね(今は 16)。

(ちなみに、現在の仕様では "HTTP2.0" ではなく "HTTP/2" もしくは "HTTP2" が正しい名称です。)

仕様を策定してる HTTPbis としての議論は概ね片付いて、 HTTP2 の仕様は RFC にするための次のステップに移り、もし仕様を覆すような大きな指摘が無ければ、来年の頭にはこのまま RFC として公開されるかもしれないというところまで来ました。

そして今日はこの仕様策定をずっと追いかけてきた HTTP2Study がやってきたことを、簡単にまとめてみます。

きっかけ

この業界であれば HTTP/1.1 を普通にみんな使ってるわけですね。 そして keep-alive や pipelining といった仕様に対して、意見というか文句がある人は結構いて、思うに任せて呟いたりしていた人もよく見ていました。

まあ、 RFC 2000 番台で公開された仕様で、リアルワールドでがっつりデプロイされている仕様なので、そう簡単には変えられません。仕方ないのはわかります。

そして最近になって、その隣で WebSocket のような仕様が策定される様を自分は見ていました。仕様は結構ドラスティックに変わって、結果 RFC として公開されました。 でもやっぱり、仕様に文句言う人が結構沢山いるんですよね。まあわかります。フレームが複雑な気は確かにします。でもそれは意味があって議論した結果できたことで。。

というか、ついこの間まで仕様策定してたんだから、意見があるなら策定中に言えば反映されたかもなぁ、と薄々思っていました。


SPDY が出た時も文句がある人が結構いました。 HTTPS 前提とかバイナリフレームとか色々気に食わなかったんでしょう。でもこれは一企業の独自プロトコルなのでまあしょうがない。


でも、これが HTTP の次の仕様として策定されるドラフトの土台になって、標準化が始まりました。

この大きな変化の中で、仕様の策定段階から仕様を読んだり、実装を進めたり、集まって自分たちなりに議論したりすれば、この仕様策定に少しは「関与」することがもっとできるのではないか?

RFC 出てから文句を言うのではなく、議論の段階でそこに参加することで、今まで結果に対して受け身でしか無かった「標準仕様」というものに対して、もう少し積極的に関われるんじゃないかと思い、そういう場所を作ってみようという思いがありました。

単に参加者の前でスライドを読んで終わる発表会や、 LT 大会よりも、実装とか議論を意識的に重視してきたのはその意味もあります。





嘘です、 Web が変わって行く様が見たかっただけです。

実装

HTTP2 を実装するのが一つの目的なので、主要な人はだいたい実装を持っています。

主な実装は以下の Wiki にまとめられているんですが、この中で 5 つ、ここに載ってないものでも 2,3 個が日本から出ています。

http2 implementation

言語で言うと、 C, Go, Node.js, Ruby, Haskell etc と言う感じで多岐に渡っています。

中でも @tatsuhiro_t さんが実装する nghttp2 は、世界で最も素早く仕様に追随し、ほぼ全ての機能を実装して、あらゆるところで使われている神実装です。功績は書ききれない。

httpbis のチェアである Mark Nottingham にも 「nghttp2 は参照実装(reference implementation) だ」とお墨付きをもらっています。

こんな凄い開発者が日本人だったから HTTP2Study はできたという面は、正直かなりでかいです。

勉強会

小さく小さくやってきました。ただかなり濃かったと思います。

日々仕様は変わって行くので、まずは仕様策定が進む大事な会議である IETF の会議に参加したメンバーに、その参加報告をしてもらっています。主に @mad_p さんや @jovi0608 さんにやって頂きました。

海外渡航とか長期滞在はそう簡単にはできませんので、この報告は非常に助かってます。 (今年は、自分も IETF89 に参加する機会 があったのでやらせていただきました。)

各自が実装してみた知見の共有も結構やりました、ただ発表会じゃなくてそこから議論が始まるくらいには近い距離感を意識したので、時間内に終わったことはあまりないし、それができるように発表は少なくしてきたのも良かったと思います。

他にも、 HTTP2 の性質上色々なレイヤに話が及ぶので、そうした話に詳しい方もお呼びして話して頂きました。

たとえば Canon の藤沢さんに HPACK の原型になった EXI圧縮 の話をお願いしたり、 @hirano_y_aa さんに、議論中の WebSocket over HTTP2 の話をお願いしたり、 @kaname さんに、ネットワークインフラ(プロバイダ寄り)からみた HTTP2 のお話をお願いしたり。

ここでしか聞けな話は多かったと思います。

hack-a-thon

実装者も多いのでハッカソンも何回かやりました。

このタイミングで、後述するテストケースが生まれたりもしましたね。 これらは、 HTTP2 を実装する上であるとうれしいものだし、 HTTPbis の ML では同じようなものをやるやる詐欺してる人も多かったけど、実際にちゃんと作りました。後者は @kazu_yamamoto さんが作ってくれたものをもとに今作業中です。

成果物も多くなったので、 http://http2.info/ を作ってまとめる作業もやりました。(ロゴも含めて @summerwind さんがデザインしてくれました)

また、初心者も実装に参加できるように、膨らんだ HTTP2 の仕様を削りに削って最小の Hello World を実装できるようにするハンズオン。 「HTTP2 最速実装」シリーズも作りました。これはやるたびに仕様が変わるので、持ち回りで最新の仕様にアップデートしたもんをやっています。 (v0 は wiki に俺が書いたのがはじまりなんだけど、さすがに古いのでこれはアップデートしないとだ。。)

そして、毎回会場を貸していただいてる @y_iwanaga_ さんには本当に感謝です。いつも色々手配して頂いて本当にありがとうございます!

issue-thon

HTTP2 の仕様は github で管理されているので、そこにあがっている issue を読んできて、みんなで議論するという回をためしにやってみました。

目標としては、 issue を眺めるだけじゃなくて、それを理解して議論してコメントを書くことで、議論に参加しようというもの。

といっても理解するだけでも結構大変なので、俺はコメントするようなところまで行けませんでしたが、かなり高度な議論になり、会自体はすごく勉強になりました。

これも少人数だったのがよかったのかも。

またやりたいと思うのですが、 HTTP2 の issue は基本片付いた(だから RFC に向けて進んでる)ので、まあ直近は無いかもれませんが、似たような構成を別の形でやりたいですね。

(ちなみに、 @mad_p さんが今年の IETF でコミュニティの話を発表したときは、海外勢には issue-thon が一番食いつきよかったようです。)

HTTP2 Conference

色々なタイミングが重なったので、今年は HTTP2 のカンファレンス を開催しました。 まあ世界初のカンファレンスというと聞こえがいいですが、単純に RFC も出てない仕様のカンファレンスという意味では気が早かっただけですかねw

ゲストとして、 High Performance Browser Networking の著者でもある Ilya Grigorik に来日してもらって、キーノートをお願いしました。

そして、この少し前に h2o を実装した @kazuho さんも交えて、トークセッションをやらせてもらいました。

全体的に濃くて良いカンファレンスになったと思います。

ドラフトに ACK が載った

そんなこんなで色々やっている間に、ドラフトにこのコミュニティがやってきた活動に対して謝辞が載りました。

http://tools.ietf.org/html/draft-ietf-httpbis-http2-16

The Japanese HTTP/2 community provided an invaluable contribution,
including a number of implementations, plus numerous technical and
editorial contributions.

日本の HTTTP/2 コミュニティは、多くの実装に加え、
様々な技術的および編集上の修正など、多大な貢献をしてくれました

http://http2.github.io/ のページのトップにも、 HTTP/2 JP のページへのリンクがいつの間にか載っていました。

多分世界的に見ても、ここまで盛り上がっている地域コミュニティは多分まだないので、「どこぞの島国にクレイジーな奴らがいる」くらいの印象なんだろうとは思いますが、まあこうして認知してもらえる程度には貢献できたのかなと思います。

今後

直近では、ハッカソン を年明けにやります。 これは Interop といって、それぞれが実装を持ち寄って相互接続試験をやるという内容です。

今回は最速実装のような初心者向けコンテンツも用意しない(interop に集中するため)ので、初心者向けではありません。

あとは、とりあえず RFC が出るのを楽しみにするフェーズですね。出たらちょっとしたお祝いでもやれたらなと思っています。 HTTP2 も RFC になる前に大どんでん返しがあって、振り出しに戻る可能性だってありますが。

他は、正直まだ考えていません。来年の今頃は #quicstudy になってるかもw

ふりかえって

コミュニティとしての成果だけでなく、そこにいる人々の個別の成果も含めれば、ここに書いたのはほんの一部です。 そして実際、自分個人としてはまあ大したことはしてません。日程を決めて場所を取ってコンパスに登録したくらいです。

ただ、幸運にも凄い人たちが集まって、そこから得られるものは凄く多かったし、なによりもこうやって、議論や実装を重視する場ができたのが自分としては良かったなと思います。

そうした人たちに色々教えてもらったおかげで、自分の実装もかろうじて動くくらいまではきました。

本当にこのコミュニティは勉強になります。凄い場所だなといつも思います。

今後どうなるかはわかりませんが、とりあえず次の interop に向けて各自冬休みがんばりましょう!!