Side-by-side を使う理由,Windows 2000 が死すべき理由,Web が既に死んでいる理由

『何となく Blog by Jitta』より.DLL Hell へ向かうありがちな質問への回答.

ところで、UNIX の世界にも静的ライブラリと動的ライブラリはあります。しかし、うろ覚えですが(指摘求む)、UNIX の場合、動的ライブラリには、拡張子の後にバージョン番号が追加されています。コンパイル時に、実行時に結合するライブラリのバージョンを指定することが出来るんですね。

マイクロソフトは、なぜこれをマネしなかったのか。なぜ今頃になって、ようやくマネをしたのか。

簡単です。ディスク資源が足りなかったのです。ファイル名も、8.3の 11文字しか使えなかったし。NTFS でファイル名の制限をなくし、ディスク資源が潤沢になった今になって、既存の Win32 アプリケーションに影響しない .NET Framework という別の基盤を使って、ようやくマネすることが出来るようになったのです。

うーん,DLL の Side-by-side (SxS) は別に .NET の専売特許というわけでもないですけどねぇ.例えば Windows Vista の Visual C++ 2005 ランタイムライブラリ,随分おもしろいことになっているようですし.
Windows XP 以降の,manifest ファイルによる DLL のバージョン制御は,あれはあれで結構よく考えられています.問題はこの機能を持たない Windows 2000 の存在です.DLL のバージョニングサポートという点で,残念ながら Windows 2000 はそれ以前の OS と同じ問題を抱えています.
あと,同一の DLL をみんなで共用することのメリットとしては,ファイルのメモリマッピングに由来するワーキングセットの縮小効果もありますよと.メインメモリが数 MB から数十 MB の時代,プロセス間でコードやデータを共有することはほとんど必須の要請だったんじゃないでしょうか.
それよりも個人的に興味深いのは,こちらの方かな.Jitta さんの投稿のきっかけとなる,『C#VB.NET の質問掲示板』へのポスト.

これは、ウェブページとその中に貼付けられる画像のような関係に捕らえています。 この例えで言うと、動的なパスで管理されている複数のページが画像を参照しようとするとき、絶対パスまたは、相対パスで参照させるはずです。 画像入れ替えのとき、一回で済むし、同意義のファイルが散在しなくて済むからです。

ウェブページが動作するたびに、画像を、ウェブページと同じパスに持ってくるという動きは非常にナンセンスに思えます。

いや,その Web の仕組み,本当にうまくいっていますか? 近年,Windows の DLL Hell なんかより,Web ベースのサービスの不安定さの方が余程頻繁にお目にかかっているような気がするんですが.

  • 延々と解決されないブラウザ間の差違
  • 何もしていないのに止まるサービス (本当に何もしなくても発生する障害)
  • 突然のメンテナンス (動いているんだから弄らなくていいのに,何やってるの?)
  • アップデートしたと思ったらあちこちでエラー発生 (id:Kazzz:20061120:p2)
  • 頼まれもしないのに機能拡張 (そして使っていた機能が消滅)
  • 10年もてばよいの法則どころでなく,みんな明日を乗り切ることしか考えていない

別に相対リンクを使おうが何をしようが構わないので,ちゃんといつでも全ページ正しく動作することを保証してくださいねと.あるいは SxS のように,昨日のバージョンを残しつつアップデートを行っていくか.Web サービス時代のバージョニング問題が今後どうなっていくのか,あまり明るい未来は無いような気がしますが,それでも期待はしています.