HTML5における、仕様と実装のデリケートなダンス

HTML5とは何なのか?を知るうえで、Dive into HTML5 の第一章『How Did We Get Here? - Dive Into HTML5』が非常に参考になったので、ちょっと整理してみます。

注意 : この記事は原文の翻訳が目的ではないので、内容については原文を参照ください。

第一章は、まるごと、HTML5からさかのぼったHTMLの歴史を説明しています。歴史といっても年表的なものなく、その背景で、どのような人たちが、どのように仕様策定を進めていったのか、現場のリアルな実情を描き出している。というのも、HTML5は独立したひとつの仕様というよりは、様々な人の努力の結果が凝縮され、さらに現在進行形で変化し続けている、ウェブ全体の大きな動きの一断面ともいえるからです。

How Did We Get Here? - Dive Into HTML5』 より

Implementations and specifications have to do a delicate dance together. You don't want implementations to happen before the specification is finished, because people start depending on the details of implementations and that constrains the specification. However, you also don't want the specification to be finished before there are implementations and author experience with those implementations, because you need the feedback. There is unavoidable tension here, but we just have to muddle on through.

仕様と実装は、つねにデリケートなダンスを踊らなければいけない。仕様が決まる前に実装してしまうと、こまかい実装に人々が依存するようになってしまう。それは、仕様を制限することにもなるから避けたいところだ。しかし、実装が出てくる前に仕様を完了するのも望ましくない。著者は、実装によるフィードバックが必要だからだ。そこには避けられない緊張関係が存在する。だが、なんとか切り抜けて進むしかない。

その過程を<img > エレメントを例に、1993年のMarc Andreessenの提案からスタートした議論を、具体的にたどりつつ説明しています。

How Did We Get Here? - Dive Into HTML5』 より

Obviously someone must have created it. These things don't just appear out of nowhere. Every element, every attribute, every feature of HTML that you've ever used -- someone created them, decided how they should work, and wrote it all down. These people are not gods, nor are they flawless. They're just people. Smart people, to be sure. But just people.

One of the great things about standards that are developed "out in the open" is that you can go back in time and answer these kinds of questions.

間違いなく、誰かがつくったんだ。なにもないところから、突然現れるわけがない。すべてのエレメント、アトリビュート、あなたも使ったことがある、すべてのHTMLの機能 ー それは誰かがつくったものだ。望ましい動作を考え、それをすべて書き上げた。彼らは神じゃない。欠点が無い訳でもない。彼らだって、ただの人間だ。才能ある人たち、でも確かなことに、ただの人なんだ。

スタンダード(標準)が素晴らしいのは、"すべてがオープン(out in the open)"に開発されているので、当時に戻って質問の解答を探すことができることだ。

続く、<img > エレメントを巡る、Marc Andreessen 、Tony Johnson 、Tim Berners-Lee 、Jim Davis 、Jay C. Weber、 Dave Raggett らの議論は読み応えがあるので、ぜひ本文で。ここでは少し飛んで、『An unbroken line』の章に。

How Did We Get Here? - Dive Into HTML5』 より

  • HTTP still exists. HTTP successfully evolved from 0.9 into 1.0 and later 1.1. And still it evolves.
  • HTPP は存在し続けている。HTTPは0.9から1.0、そして1.1に進化した。
  • HTML still exists. That rudimentary data format -- it didn't even support inline images! -- successfully evolved into 2.0, 3.2, 4.0. HTML is an unbroken line. A twisted, knotted, snarled line, to be sure. There were plenty of "dead branches" in the evolutionary tree, places where standards-minded people got ahead of themselves (and ahead of authors and implementors). But still. Here we are, in 2010, and web pages from 1990 still render in modern browsers. I just loaded one up in the browser of my state-of-the-art Android mobile phone, and I didn't even get prompted to "please wait while importing legacy format..."
  • HTMLも存在している。最初はインライン イメージにさえ対応していなかったのに! 未熟なデータ形式は、2.0, 3.2 そして 4.0へと進化した。HTML は途切れることの無い線だ。からまったり、結び目がついたり、もつれたラインには違いないけど。進化の系統樹には、沢山の"死んだ枝(Dead Branches)"、標準化を目指す人たち(著者も実装者も)が一度は目指した場所、が残っている。それでもなお、2010年のいま、1990年につくられたウェブページを、最新のブラウザ見ることができる。最新のアンドロイド携帯電話のブラウザで今見たって、"レガシー フォーマットを読み込んでいます。しばらくお待ちください" なんて言われることはない。
  • HTML has always been a conversation between browser makers, authors, standards wonks, and other people who just showed up and liked to talk about angle brackets. Most of the successful versions of HTML have been "retro-specs," catching up to the world while simultaneously trying to nudge it in the right direction. Anyone who tells you that HTML should be kept "pure" (presumably by ignoring browser makers, or ignoring authors, or both) is simply misinformed. HTML has never been pure, and all attempts to purify it have been spectacular failures, matched only by the attempts to replace it.
  • HTML は常に、ブラウザ制作者、著者、標準関係者、その他の多くの鍵括弧について語るのが好きな人々の間で議論されてきた。成功したHTMLのバージョンのほとんどは、"回顧仕様(retro-specs)"だ。ちょっとづつ正しい方向に修正しながら、世の中の動きにあわせて遅れずについてきた。「HTMLは"純粋"でなければいけない(おそらくはブラウザ制作者や著者、あるいはその両方を無視すること)」、という人がいたら、その人は単に間違った情報を聞いたのだろう。HTMLは純粋であったことなんかないし、純粋化しようとした全ての試みは、壮大に失敗してきた。
  • None of the browsers from 1993 still exist in any recognizable form. Netscape Navigator was abandoned in 1998 and rewritten from scratch to create the Mozilla Suite, which was then forked to create Firefox. Internet Explorer had its humble "beginnings" in "Microsoft Plus! for Windows 95," where it was bundled with some desktop themes and a pinball game. (But of course that browser can be traced back further too.)
  • 1993年当時のブラウザは、分かる形では残っていない。Netscape Navigatorは1998年に放棄され、Mozilla Suite を作成するためにフルスクラッチで書き直された。その後、Firefoxへとフォークすることになる。Inter Explorer は、"Microsoft Plus! for Windows 95," にピンボールゲームやデスクトップテーマと一緒に同梱されるかたちで"つつましやかに"に始まりを迎えた。(ただしもちろん、そのブラウザの過去をさらにたどることもできる。)
  • Some of the operating systems from 1993 still exist, but none of them are relevant to the modern web. Most people today who "experience" the web do so on a PC running Windows 2000 or later, a Mac running Mac OS X, a PC running some flavor of Linux, or a handheld device like an iPhone. In 1993, Windows was at version 3.1 (and competing with OS/2), Macs were running System 7, and Linux was distributed via Usenet. (Want to have some fun? Find a graybeard and whisper "Trumpet Winsock" or "MacPPP.")
  • 1993年当時のオペレーティングシステムのいくつかは残っている。ただし、それらは全部、モダンウェブとは関係ない。ほとんどの人が今ウェブを"体験"しているのは、windows 2000以降が動作するPCか、Mac OS X、Linux 系の動くPC、iPhoneのようなハンドヘルドデバイスだろう。1993年当時、Widowsはバージョン3.1(OS/2と競争していた)で、Mac はシステム7で動作し、LinuxはUsenetで配布されていた。(興味がある? 髭の賢者を見つけて小声で聞いてみよう"Trumpet Winsock" あるいは "MacPPP."と )
  • Some of the same people are still around and still involved in what we now simply call "web standards." That's after almost 20 years. And some were involved in predecessors of HTML, going back into the 1980s and before.
  • 何人かはいまだ現役で、我々がいまや"ウェブ標準"と読んでいるものに関わっている。20年の歳月をこえて、1980年代、あるいはそれ以前の、HTMLの先祖に関わっていた人々である。
  • Speaking of predecessors... With the eventual popularity of HTML and the web, it is easy to forget the contemporary formats and systems that informed its design. Andrew? Intermedia? HyTime? And HyTime was not some rinky-dink academic research project; it was an ISO standard. It was approved for military use. It was Big Business. And you can read about it yourself... on this HTML page, in your web browser.
  • 先祖について話すとなると... 結果としてのHTMLとウェブが有名すぎて、影響を与えた同時代のフォーマットやシステムについて忘れがちにだ。Andrew? Intermedia? HyTime? HyTime は旧態然とした学術探究のプロジェクトなどでは無かった。それらはISO標準だったのだ。軍事利用にも承認され、大きななビジネスだった。もっと詳しく興味があれば、HTMLで書かれたページをブラウザで読める。

But none of this answers the original question: why do we have an <img> element? Why not an <icon> element? Or an <include> element? Why not a hyperlink with an include attribute, or some combination of rel values? Why an <img> element? Quite simply, because Marc Andreessen shipped one, and shipping code wins.

しかし、いずれも元の質問の答えにはなっていない。なぜ <img> エレメントがあるのか? <icon> エレメントでも、<include> エレメントでもなく? include アトリビュートを持ったハイパーリンク、あるいは何らかのrelバリューの組み合わせではなく? なぜ<img> エレメントなのか? 実は答えはシンプル。 Marc Andreessen が出荷したから、そして出荷されるコードが勝つからだ。

That's not to say that all shipping code wins; after all, Andrew and Intermedia and HyTime shipped code too. Code is necessary but not sufficient for success. And I certainly don't mean to say that shipping code before a standard will produce the best solution. Marc's <img> element didn't mandate a common graphics format; it didn't define how text flowed around it; it didn't support text alternatives or fallback content for older browsers. And 17 years later, we're still struggling with content sniffing, and it's still a source of crazy security vulnerabilities. And you can trace that all the way back, 17 years, through the Great Browser Wars, all the way back to February 25, 1993, when Marc Andreessen offhandedly remarked, "MIME, someday, maybe," and then shipped his code anyway.

The ones that win are the ones that ship.

ただ、すべての出荷されたコードが勝つというわけではない。だって Andrew と Intermedia と HyTime だってコードを出荷していたから。コードは成功には欠かせないが、十分という訳ではない。また、標準化の前にコードを出荷するのがベストなソリューションだとは、私は断じて言っていない。Marcの<img>エレメントは、汎用的なグラフィックのフォーマットを扱えなかった。テキストの画像の回り込みについては定義しなかったし、代替テキストや古いブラウザ用の代替コンテンツもサポートしなかった。そして17年たっても、いまだにコンテンツ スニッフィングの問題と格闘していて、ひどいセキュリティー脆弱性の温床にもなっている。その理由は Great Browser Warsの17年の足跡をたどり、1993年の2月25日の、 Marc Andreessenのぶっきらぼうな"MIME、いつか、もしかしたらね" という所見にもとづいてコードを出荷した事実に戻ることができる。

勝ったのは、出荷したものだったのだ。

その後の流れを、本文をもとにざっくりとまとめてみます。

W3CはHTML4.0を公開後は、XHTMLに注力し、"the next generation of HTML."として、XHTML 1.1を2001年5月に公開した。しかしその後、W3Cと、Webブラウザの開発ベンダーの間は、異なるビジョンを志向するようになる。W3Cが、XHTMLによるウェブのXML化を強く志向する一方で、Webブラウザ開発ベンダーは、より現実的な問題に向き合っていた。ブラウザやOS、過去のバージョンとの互換性の維持や、ウェブの使い勝手を向上するためのアプリケーション的な進化を志向するようになった。

そして、2004年の6月の『Position Paper for the W3C Workshop on Web Applications and Compound Documents』が、大きな分かれ道となった。Opera SoftwareのIan Hicksonは、OSレベルのAPIに依存せずにウェブ アプリケーションを開発するための、HTML、CSSおよびDOMのミドルウェア的な拡張を提案したが、W3Cで否決されてしまった。その結果、主要なWebブラウザ開発ベンダーは WHAT(Web Hypertext Application Technology) Working Group を立ち上げ、Web Forms 2.0 、Web Apps 1.0、Web Controls 1.0 などの、ウェブ アプリケーションのための仕様の標準化に取り組み始めた。

仕様(W3C)と実装(Webブラウザ開発ベンダー)の分断は、その後数年の停滞期間をもたらすことになる。この状況にたいし、Tim Berners-Lee氏が2006年に声明を発表する。W3CとWHAT WGが再び協力して、HTMLを継続的に進化させるべきであると訴えた(Reinventing HTML | Decentralized Information Group (DIG) Breadcrumbs)。これに呼応して、W3Cは経過措置として2007年からXHTML2 と HTML5 の両方のWorking Group を開設する。最終的には2009年7月に、HTML5への一本化を決定した。XHTML2 のWorking Groupを閉鎖し、Web Applications 1.0 を HTML5 と改名して、次世代のWeb標準として中心に位置づけた。

この説明を読んで、なぜHTML5が重要なのかを理解できました。5年以上の分断の時期を越えて、再び始まった『仕様と実装のデリケートなダンス』、その舞台がHTML5というわけです。HTML5は、仕様書の完成を待って、読解すればよいというものではない。仕様の策定、Webブラウザの実装、Webアプリケーションでの利用が、相互にフィードバックを受けながら進められている。そのインクリメンタルな進化の過程こそが、HTML5の最も重要なポイントなのでしょう。