(メモ)DOCTYPEスイッチあるいはウェブ標準としてのQuirks Modeの覚え書き

HTML4世代にとっては何を今更な話題かもですが、とあるQiitaのエントリーを見て*1、最近の人にはきっとわからない話題なんだなということでおさらいのようなエントリーを書いてみようかなと。

導入された当初ではブラウザー独自の挙動でしたが、現在では過去との互換性のために、WHATWG Quirks Modeというウェブ標準でまとめられ定義されたものになっています。

概要を振り返っておくと、2000年代あたりの古いウェブブラウザーで導入されたこの仕組みは、それよりも更に古い歴史的なブラウザーのクセ(つまるところ、仕様をうまく実装できていなかったbuggyな挙動)を模倣するような動作モードを導入しました。これにより、古いブラウザーが、ウェブ標準に忠実に作成されたウェブページと、歴史的なブラウザーのクセにあわせて作成されたウェブページとをうまく切り分けてレンダリングしようとした――今日的にはDOCTYPEの記述で切り分けるのは失敗だったと言えるものの――というものです。

大雑把な分類としては、DOCTYPE宣言がないあるいはHTML4よりも前のDOCTYPE宣言のあるHTML文書を奇癖モード(quirks mode、歴史的には互換モードとも呼ばれていた)、HTML5で定められたDOCTYPE宣言のような特定のDOCTYPE宣言があるHTML文書を無奇癖モード(no-quirks mode、歴史的には標準モード)、XHTML 1.0 TransitionalのDOCTYPE宣言についてはそれらの中間の限定奇癖モード(limited-quirks mode、歴史的にはほぼ標準モード)となります。奇癖モードの大まかな挙動はMozilla Quirks Mode Behavior | MDNあたりが参考になるでしょう。

長々と書きましたが、HTML標準はWHATWG HTML以外に存在せず*2W3C HTML5とそれより前のHTML仕様は全て廃止されてしまったために、これから新しく作るHTML文書のDOCTYPE宣言は<!DOCTYPE html>*3以外にあり得ません。また誤ってDOCTYPE宣言を省略してしまうと、前述のように文書が奇癖モードとして解釈されるので、思わぬところで不都合が起こることがあります。

こういった歴史的事情があるので*4、文書の「最初に」<!DOCTYPE html>を必ず書きましょうということになっているわけです。

*1:まあ一言で言ってしまえば「酷い」内容なのですが、晒してしまうのもそれはそれでかわいそうなので止めておきます

*2:厳密には、現時点ではW3C HTML 5.1や5.2が存在しますが、これも将来廃止予定です

*3:大文字・小文字は区別しません

*4:いちいち説明するのが面倒とも言う

W3Cで現在公開されているHTMLとDOM仕様は将来廃止されます

まえがき

W3C(とWHATWG)からの公式なアナウンスはまだ確認していませんが、何度目かに結成されるW3C HTML WorkingのDraft Charterと、このCharterから辿れるDRAFT Memorandum of Understanding Between W3C and WHATWG(Memorandumは日本語で覚書などと訳されるので、ここでも覚書と呼びます)がブログエントリーのタイトルのソースになります。もっとも、今確認できる覚書もドラフトですから、変更があるかもしれません。しかしながらURLで観測できるわけですから、大筋でW3CWHATWGとの間で合意が取れているのではないかと推測します。あとは、覚書だけでなくCharterもドラフトということになっていますが、以下の文章では面倒なので省略します。最後にお約束ですが、このブログエントリーは「だいたいあってる」感じにしているので、正確なところは元の文書を当たってください。
なお、当ブログの流れ的には、(メモ)W3C、HTMLとDOM仕様の並立状態が有害であることを認めていたの続きになります。

TL;DR

W3CのHTMLとDOM(と関連仕様)は将来、Superseded Recommendationとして廃止されます。HTMLとDOMは、WHATWG Living Standardが唯一の仕様です。

暇な人向けのやや詳しい内容

まずはCharterのほうから。

最初の行に、「WHATWG HTMLとDOMのレビュードラフトをW3C勧告にすることがミッション」とされています。もうこれだけで説明が事足りると思いますが読み進めていくと、Scopeのセクションでは、(ユーザー、実装者、開発者を含むウェブの)コミュニティとHTMLやDOMに関係するW3CのGroupに対し、HTMLとDOMに何かあれば、WHATWGのレポジトリに直接コントリビュートするように勧められています。ただし、WHTWGのレポジトリに立てたissueに対してWHATWGが公平に解決されないとissueを立てた人が考える場合に、W3C HTML WGが解決の手助けをすることはあるようです。

少なくとも1年に1回はWHATWGのレビュードラフトをW3C文書の言うところの勧告候補相当以上のステータスとして承認するようです。まあ、もはやHTMLとDOMに対して、W3Cの場で技術的な解決をするわけでもないので、例えばCSSのような他のW3C文書ほどステータスにとらわれる必要もないでしょう。更新され続けるWHATWGのHTMLとDOM標準を基本的には見に行けば事足りるわけですから。


もう少し詳しいことは、覚書にはいろいろと書いてあります。

最初のPlan for HTML and DOM specificationsのセクションでは、

HTML and DOM shall be developed principally in the WHATWG, following WHATWG Living Standard (LS) specification process.

という調子で、shallが出てくるのがいかにも覚書という趣を出しているといったところでしょうか。WHATWGでHTMLとDOMは開発されると、くっきりはっきり書かれております。Living Standardのスナップショットにあたるレビュードラフトを、W3C勧告になるようにW3Cがコメントをして承認する、というのが計画とあります。

Format of jointly published documentsのセクションでは、WHATWGレビュードラフトであり、W3Cの勧告候補、勧告案、または勧告でもある文書は、whatwg.orgで公開するものとされています。w3.orgではバックアップを取るともありますが、一般には公開されません。なお、レビュードラフトのサンプルが https://www.w3.org/2019/01/whatwg-w3c-sample.html にあります。


Normative referencingのセクションでは、あるW3C仕様のReferenceからHTMLやDOMを参照するとき、WHATWG Living Satndardを参照するように定められています。

Transition Planのセクションでは、W3CがHTML 5.3とDOM 4.1の開発を中断するとあります。レビュードラフトがW3C勧告になったときに、少なくともW3C HTML 5.1、5.2とDOM4はSupersededとマークされます(すでにそう変更されているHTML 5.0も覚書には含まれています)。対象とされるW3C勧告は次のとおりです:

あわせて、レビュードラフトがW3C勧告になったときに、次の勧告ではないW3C文書は、(技術的な内容がなく、WHATWG標準を参照するように書かれた)W3Cワーキンググループノートとして再発行されます。

あわせて、WHATWGで発行されているW3Cの文書について、HTMLとDOMの一部ではない次の文書について、SupersededとマークまたはW3Cワーキンググループノートとして再発行されます。

Forkingのセクションでは、W3CWHATWGの両方のライセンスのもとでは、派生物を作ることができますが、この覚書はそのような派生物の作成を避けることにある、とされます。

まとめ

当時のWHATWG HTMLのEditorだったHixieことIan HicksonがW3Cと袂をわけたのが2012年7月*1ですから、7年の歳月を経てようやくW3CWHATWGの仕様の並立状態が解消されるマイルストーンまできました。Draft Charterどおりにことが進めば、2020年の第1四半期にはレビュードラフトをW3C勧告にしたいとのことですから、次のオリンピックまでにはW3C上のHTMLとDOM文書のステータスに決着がついているという展開もそれなりに期待できそうです。

というわけで、W3C HTMLとDOMのことは忘れましょう。WHATWG HTMLとDOMのみを参照しましょう。

おまけ

なお、HTML 5.0とそれ以前のHTMLに関するW3C勧告は既にすべて、Superseded Recommendationとして2018年3月に廃止されています(下記のリンクリストを辿れば一目でわかります)。当ブログの2017年8月付けのエントリーW3C HTML 5.0仕様とそれ以前の(X)HTML仕様に対する廃止勧告の提案、および2018年3月付けのエントリーさようなら W3C HTML5.0仕様ももしかしたら参考になるかもしれません。