2004-03-15

近況

キッチンタイマーを社員証と一緒に首からさげ, ヒルネタイマーに使おうとしている. 残念ながらここ数日は昼寝をしておらずまだ出番がまだない. ミーティングタイマーとして使ってみたらタイムアウト前にミーティングが終わり寂しい思いをした. 勤務中にはタイマーよりストップウォッチの方が使い道は広いかもしれない. ミーティングの時間をはかり, 昼寝の時間をはかり, さぼってウェブをみている時間をはかる. あるいコード書きの時間を. 以前読んだ PSP (Personal Software Process) の本がそんな話だった. これを読んだ頃の私は Web 中毒で著しく生産性を損ねていた. ストイックな方法論である PSP では, 自分の作業時間をこまかく計って記録, あとから反省, そして計画 ... というような開発スタイルをとる. "ソフトウェア開発道" というかんじ. あるいはひとり ISO ごっこ. これだ. PSP は電脳中毒患者を救ってくれる, などと期待を抱きながら支援ツールを探し Web をさまよい夜が更けてゆく, そんな日々を思いだす.

Postel's Law から Genx へ (xml-dev)

Tim Bray の提案から xml-dev での review を経ながら, XML 生成用 API "Genx" の開発が進んでいる. これまで XML を確実に生成するには各 DOM 実装のシリアライズ機能を使うのが普通だった. この Genx はそういうオンメモリのツリー構造を仮定しない, いわば SAX の出力版といったライブラリ. つくりも割と簡単に使えそうなかんじ. ただこういった XML centric な方法を使わなくても XML の生成は手間でない. 生成した文字列がたまたま XML だというテキストべースの方法, たとえば PHP や ASP のようなマークアップ埋め込み型言語やスクリプト言語のテンプレートライブラリを使えばいい. だからこういうツールはあまりなかった. そんななか今になって Genx が作られたのには理由がある.

もともとの議論は RSS と Atom に関する話題から始まった. RSS を配布しているサイトは, blog/日記ツールの出力する RSS を使うかサイト作者が自分でスクリプトを書いている. そういうツール類の多くは XML の API を使って RSS を出力しているわけではない, らしい. (ざっとソースを見たかんじでは, MovableType も tdiary もテキストベースだった.) テキストベースのアプローチは出力した XML の well-formedness を保証しない. だから閉じタグを忘れたり, エスケープの必要な文字をエスケープしないことがたまにある. そういった RSS を, XML のパーサを使う RSS Reader は 処理できない. 大半の RSS Reader は XML パーサを用いている. ただ, 中には自力で XML パーサ(RSS パーサ)を書くことでちょっとくらいの不正はフォローしようとがんばる RSS Reader もあって, これを "liberal" な パーサと呼ぶ. (NetNewsWire, NewsGator あたりは liberal だという.)

この状況は HTML を連想させる. HTML ブラウザは適当にかかれた non-wellformed ("wild") HTML をパースできる. このゆるさは (実装上の手抜きのせいか市場主義的貪欲さのあらわれかはさておき) HTML の普及に寄与した. 一方これは "Internet Explorer でしか見られないページ" のような interoperability の問題を生み, 他のブラウザメーカや HTML をパースしようという市井の人々は大変な迷惑を蒙った. もしかしたらこの潜在的な足枷が innovation の芽を摘んでいるかもしれない. XML の仕様は, 不正な XML はエラー扱いし, 処理を続けてはいけないと義務づけている. だから liberal な RSS Reader は XML conformant ではない. ただ, 不正な RSS を許容する文化は既に広まってしまった. RSS は HTML のようにこの面倒を抱えながら発展していくことになるわけ.

Postel' Law

そもそも XML はエラーのフォローを許すべきだという 提案 が Aaron Swartz からなされ, 問題の議論が始まった. その主張の背景には "Postel's Law" と呼ばれる原則がある.

2.10. Robustness Principle

TCP implementations will follow a general principle of robustness: be

conservative in what you do, be liberal in what you accept from

others.

RFC793より引用. これを言った Jon Postel は Internet 黎明期にプロトコル制定などで活躍したえらい人だそうで, プロトコルスタック実装者をはじめ信奉者は多い. Aron Swartz もこれをひき, XML は間違っている, Postel's Law にのっとってないと主張する. xml-dev や XML/RSS 技術者の weblog ではこれを受けて長い論争が展開された. XML 技術者は well-formed でない XML は XML でないと主張し, XML は Postel's Law に従わず成功したのだ(ongoing) とか, あるいは ill-formed な入力を認めるくらいなら RSS や Atom なんて使わなければいい (norman.walsh.name) などという. RSS 支持者は Aaron Swartz のように, そんなこといったって不便じゃんと反論.

次世代である Atom が制定されようとしている時期だけに, 議論は一層白熱する. RSS はもう普及してしまったから仕方ない. しかし Atom の導入によって liberarity というレガシーを捨て去るチャンスがあるというのに, みすみすそれを逃すのか. XML コミュニティはそう苛立つ. 一方の Atom 関係者は, RSS は liberal でも許容されるのに Atom がそれを拒否したら, Atom 普及のチャンスを逃すかもしれないと恐れている. また RSS/Atom Reader は競争が激しいため, そんな理想主義に振り回されていたら競合に市場を奪われてしまう危惧もある. こうして議論は平行線を辿る. (ただし, RSS Reader 実装者の一部は改宗し, Atom では well-formedness を要求することにしたと言っている: inessential.com, Nick Bradbury. 反応を見ると, 利用者からの評判は概して悪そうだな. ちょっと同情...)

ill-formed な RSS/Atom が配信され続ける限り, それを解釈しようとするクライアントはなくならないだろう. well-formedness の文化を広めるためには, クライアント作成者に圧力をかけるだけでなく RSS を配信する側にも協力を求めたい. 議論の中では エラーのある RSS を出力するページを検出したクライアントがページ作者に自動で警告メールを送りつければよいという主張もあった.

RSS 作成者に対するもう少し穏便で前向きなアプローチとして Genx がつくられた. well-formed な XML を作ってほしい. でも色々面倒だし XML なんて知らんという気持もわかる. だから簡単に well-formed な XML を作れるようにしよう. そんな流れで Genx が現れ, xml-dev の議論はなんとなく収束した. Tim Bray のこの機転は見事だ. Genx を C で書くところにも機微はみてとれる. XML は Java 中心の文化圏をかんがえると, ライブラリは Java で書くのが普通に思える. しかし Java で書かれたライブラリは個人ウェブサイトで大きな比重を占める Perl や PHP から使うことができない. C なら各言語への binding を比較的簡単に書ける. よく考えているなと思う.

The history of draconian error handling in XML

この議論に付随して書かれた Mark Pilgrim の 記事 を読むと, エラー処理を標準化する難しさがわかる. XML のワーキンググループでも xml-dev と同じような議論があり, 結局は vote によって結着したという. 私はこの決断に賛成する. XML は HTML や SGML のもつ諸問題を解決しようという動機がある. HTML のルーズさはもともと SGML の複雑さに起因するところがある. XML は SGML の複雑さを捨てるかわりに HTML 利用者へある程度の厳格さを求めた. プログラマ的下心, アーキテクト的下心, ビジネスマン的下心. この選択はそんなものの妥当な折衷案だという気がする.