[1] 仕様の巨大化はしばしば[[モジュール化]]につながりますが、往々にしてモジュール化は[[死亡フラグ]]だったりします。 その要因としては、 - [2] 細分化によって範囲が狭くなったと錯覚して全体としての適用範囲を拡大しすぎ、手に負えなくなる - [3] 各モジュールを委員会の各メンバーに割り振った結果進捗にむらが出て、全体としての完成が見えなくなる -- [5] 最終的には担当者不在のモジュールが出現してどうしようもなくなる - [4] モジュール化によって見かけ上独立させた各仕様が現実には複雑に依存し合っており、あるモジュールの進行が他モジュールに依存して先に進まなくなったり、詳細に規定するべき接合部分が曖昧にされて実装不能になったりする - [6] 全体を統括できる人がいなくなり、方向性が決まらずプロジェクト自体が迷走あるいは崩壊する ... といったことが挙げられるでしょうか。 [21] モジュール化で規格制定作業が迅速になるというのはだいたい嘘で、 分離した他の仕様と結局依存関係が残ってしまったり、足並みを揃えようとする力が働いたり、 色々な理由で結局たいしてはやくなりません。 [22] バリエーションとしてモジュール化して “重要な一部のモジュールだけ先に完成させて残りは順次進めていく” というケースもよくあり、その場合大抵は重要な一部のモジュール以外は関心が低いなどの理由で切り捨てられる結果となります。 [23] 仕様同士の疎結合化もしばしばモジュール化が良いとする根拠に挙げられますが、 実際は密結合にしたくて密結合にしていることなどなく (元の仕様を書いた人も馬鹿じゃないので、 意味もなく何でも1つに詰め込んだりしない)、接合部分の仕様が必要以上に複雑になったり、 どちらのモジュールからも明確に規定されなくて相互運用性上の問題を引き起こしたりすることがよくあります。 [24] モジュール化すればモジュールそれぞれで必要なところだけ改訂していける、 というのも大体は嘘で、どれかを改訂したい時には他のも改訂が必要になるか、 あるいは本来改訂が必要なのに改定せずに仕様が不安定な状態のまま放置されるか、 はたまたある仕様に別の仕様の改訂の差分が含まれているようなモジュール化の意味のない状態になるか、 いずれにせよ当初の目的はあまり達せられません。 [27] [[モジュール化]]により同じような定義や規定が複数の仕様に併存し、 それぞれの細かな差異をどう処理するべきかが問題になったり、 他の仕様から参照するにあたって何をどう参照するべきか不明確で困ったりすることもしばしばあります。 * Web におけるモジュール化で崩壊したプロジェクトの例 - [14] [[HTML3]] (増え続ける要求にモジュール化で対応したが何一つ完成せず崩壊) - [7] [[XHTMLモジュール化]] / [[XHTML2]] (機能を無意味に切り売りした結果崩壊) -- [19] [[XHTML2]] ([[RDFa]]、[[Role]] などを切り崩して [[XHTML1]] 用の[[モジュール]]として出版する作業のため [[XHTML2]] 本体仕様の作業が遅れ、他の要因も合わせて結局プロジェクト全体が頓挫。) - [8] [[CSS3]] (10年以上経ってやっとモジュール1つだけ[[勧告]]に達した) - [9] [[SVG 1.2]] (次期 [[CSS3]] 候補) - [10] [[RSS 1.0]] (本体仕様以外正式には完成しなかった) - [12] [[URL scheme]] ([[RFC 1738]] の完全な後継版が出ないまま10年くらい放置状態だった) - [17] [[Window 1.0]] ([[HTML5]] から独立したが作業できる編集者がいなくなり、結局 [[HTML5]] に戻された。その間しばらく仕様欠落状態に陥っていた。) - [18] [[Web Sockets]] (元々 [[WHATWG]] で [[HTML5]] の一部として完成に近い状態だったが分離されて [[IETF]] に持ち込まれて迷走。) - [28] [[WICD]] (そもそもあまり支持されてなかったけどモジュール化により誰得なことが明確になって崩壊した) - [29] [[DOM]] ([[DOM3 Core]] で使わない機能が [[DOM3 Core]] に含まれているとか、他のモジュールで削除された機能の情報が残っているとか、仕様の差分が他のモジュールにあるとか、[[DOM2 Views]] みたいな本体より定型文の方が長い意味不明なモジュールとか) * Web 以外の例 - [13] [[IDNA2008]] (複数の [[RFC]] の間で不明瞭な相互参照しまくりで難解で誰得) - [20] [[XLink]] / [[XPointer]] ([[XML]] 本体仕様から議論の余地が多い or 関心が低い部分を分離していった結果誰も使わない・使えない仕様になったり、仕様自体完成しなかったり。) - [11] [[Webサービス]] ([[プロトコル・スタック]]重ねすぎで誰も理解できなくなった) - [30] [[Usefor]] (仕様分割してもなおも揉めまくって十数年、ようやく完成したが [[Netnews]] は滅亡寸前) * 失敗したか未確定な例 - [15] [[W3C]] における [[HTML5]] - [16] [[Widgets 1.0]] - [25] [[HTTP]] ([[RFC 2616]] の改訂) * 関連 [26] [[IETF]] の仕様は全面改訂していく方式の他に、 [[TCP]] や [[DNS]] や [[telnet]] のように差分を[[オプション]]として出版していく方式があります。 これは仕様の[[モジュール化]]というよりは[[デルタ仕様書]]に分類するべきでしょうが、 やはり[[モジュール化]]のような問題を引き起こします。