Webにおけるモジュール化の失敗例

Webにおけるモジュール化の失敗例

[1] 仕様の巨大化はしばしばモジュール化につながりますが、往々にしてモジュール化は死亡フラグだったりします。 その要因としては、

... といったことが挙げられるでしょうか。

[21] モジュール化で規格制定作業が迅速になるというのはだいたい嘘で、 分離した他の仕様と結局依存関係が残ってしまったり、足並みを揃えようとする力が働いたり、 色々な理由で結局たいしてはやくなりません。

[22] バリエーションとしてモジュール化して “重要な一部のモジュールだけ先に完成させて残りは順次進めていく” というケースもよくあり、その場合大抵は重要な一部のモジュール以外は関心が低いなどの理由で切り捨てられる結果となります。

[23] 仕様同士の疎結合化もしばしばモジュール化が良いとする根拠に挙げられますが、 実際は密結合にしたくて密結合にしていることなどなく (元の仕様を書いた人も馬鹿じゃないので、 意味もなく何でも1つに詰め込んだりしない)、接合部分の仕様が必要以上に複雑になったり、 どちらのモジュールからも明確に規定されなくて相互運用性上の問題を引き起こしたりすることがよくあります。

[34] 疎結合な独立した機能群の場合は仕様書を良い単位で分割できる可能性がありますが、 それはある種の階層化であり、機能的な単位と仕様書の単位が整合しているから問題が起こりにくいのです。 密接に関わる機能群の仕様書を分割しようとするとうまく分割できないのは当然のことです。

[24] モジュール化すればモジュールそれぞれで必要なところだけ改訂していける、 というのも大体は嘘で、どれかを改訂したい時には他のも改訂が必要になるか、 あるいは本来改訂が必要なのに改定せずに仕様が不安定な状態のまま放置されるか、 はたまたある仕様に別の仕様の改訂の差分が含まれているようなモジュール化の意味のない状態になるか、 いずれにせよ当初の目的はあまり達せられません。

[27] モジュール化により同じような定義や規定が複数の仕様に併存し、 それぞれの細かな差異をどう処理するべきかが問題になったり、 他の仕様から参照するにあたって何をどう参照するべきか不明確で困ったりすることもしばしばあります。

Web におけるモジュール化の失敗例

[32] モジュール化の結果崩壊したプロジェクトの例

  • [14] HTML3 (増え続ける要求にモジュール化で対応したが何一つ完成せず崩壊)
  • PEP
  • [7] XHTMLモジュール化 / XHTML2 (機能を無意味に切り売りした結果崩壊)
    • [19] XHTML2 (RDFaRole などを切り崩して XHTML1 用のモジュールとして出版する作業のため XHTML2 本体仕様の作業が遅れ、他の要因も合わせて結局プロジェクト全体が頓挫。)
  • [8] CSS3 (10年以上経ってやっとモジュール1つだけ勧告に達した、慢性的な編集者不足、どこで何が定義されているか専門家すら戸惑う状態)
  • [9] SVG 1.2 (SVG Tiny 1.2 のみ何とか完成したものの誰にも支持されず黒歴史化)
  • [10] RSS 1.0 (本体仕様以外正式には完成しなかった)
  • [12] URL scheme (RFC 1738 の完全な後継版が出ないまま10年くらい放置状態だった)
  • [17] Window 1.0 (HTML5 から独立したが作業できる編集者がいなくなり、結局 HTML5 に戻された。その間しばらく仕様欠落状態に陥っていた。)
  • [18] Web Sockets (元々 WHATWGHTML5 の一部として完成に近い状態だったが分離されて IETF に持ち込まれて迷走、セキュリティーホールが作られて一旦実装が無効化される騒ぎに)
  • [29] W3C DOM (DOM3 Core で使わない機能が DOM3 Core に含まれているとか、他のモジュールで削除された機能の情報が残っているとか、仕様の差分が他のモジュールにあるとか、DOM2 Views みたいな本体より定型文の方が長い意味不明なモジュールとか)

[33] 崩壊まで至らないものの明らかに失敗している例

  • [25] HTTP RFC 723x (どこで何が定義されているか理解するのが難しい)

[31] モジュール化とは関係なしに失敗したもの

  • [16] Widgets 1.0 (一部で実装されたものの広範囲の支持は得られず)
  • [28] WICD (そもそもあまり支持されてなかったけどモジュール化により内容がないことが明確になった)

Web 以外の例

  • [13] IDNA2008 (複数の RFC の間で不明瞭な相互参照しまくりで難解で誰得)
  • [20] XLink / XPointer (XML 本体仕様から議論の余地が多い or 関心が低い部分を分離していった結果誰も使わない・使えない仕様になったり、仕様自体完成しなかったり。)
  • [11] Webサービス (プロトコル・スタック重ねすぎで誰も理解できなくなった)
  • [30] Usefor (仕様分割してもなおも揉めまくって十数年、ようやく完成したが Netnews は滅亡寸前)

失敗したか未確定な例

  • [15] W3C における HTML5 (誰得モジュールがいくつか出版されただけなので失敗したとも断言しがたい)

関連

[26] IETF の仕様は全面改訂していく方式の他に、 TCPDNStelnet のように差分をオプションとして出版していく方式があります。 これは仕様のモジュール化というよりはデルタ仕様書に分類するべきでしょうが、 やはりモジュール化のような問題を引き起こします。

メモ

[35] W3Cスキーマに対抗するXMLの新仕様「RELAX NG」 (2001/11/9 ) <http://www.atmarkit.co.jp/news/200111/09/xml.html>

クラーク氏は、XML 1.0の仕様策定にかかわったメンバーの1人。XMLがこれほど成功した要因を、仕様がモジュール化されていたためだと分析する。「XMLの仕様を策定しているとき、想定されていた分野は電子出版だった。しかし、いまでは電子出版はXMLの用途のごく一部にすぎない。もともと電子出版用に開発されたXMLが成功したのは、シンタックス(文法)とセマンティックス(意味)を分割したからだ」(クラーク氏)。

つまり、XML 1.0の仕様で決められているのはXMLを記述する方法(つまり文法)だけであり、その文書がどのような意味を持つのかは、そのXML文書を処理するアプリケーションの責任になっている。このように、仕様がカバーする範囲を明確にし、それぞれの仕様をシンプルにした結果が、XMLの成功要因だとした。

[36] モジュール化っていってるけど Clark 発言はデータ形式応用仕様の分離の話しかしていない。 そしてその分離は SGML 時代からずっと一貫した前提なんだよなー。

[37] XML 本体と XLinkXPointerXPathXSLTXSL-FO がばらばらになって、 XMLXPathXSLT だけ成功した、 モジュール化のおかげで失敗した部分が足を引っ張らずに済んだ、という話なら納得感ある。