MinWin

MinWin(ミンウィン)は、マイクロソフトがWindowsをVistaへアップグレードする際に採用したカーネルとオペレーティングシステムの構造を表す非公式な用語。この用語はオペレーティングシステムの約95%を占める共通部分を説明するための言葉として2003年に初めて使われたが、後に非常に限定されたコアな一部分のみを指す言葉になった。Windows 7やWindows Server 2008 R2の一部である、必要最小限で自己完結したOSとして知られている。

背景

元々Windowsは大きな1つの、相互に強く依存したコンポーネントの集合をコアとしたオペレーティングシステムとして設計されていた。その後のリリースにおいても、Windowsのコアは無数のコンポーネントの集合として考えられ、コンポーネント間の依存度の高さがグラフィカルユーザインタフェースや印刷機能を持たないバージョンの開発を妨げていた。また数多くの設定がグラフィカルユーザーインターフェイス経由でしか変更できないということが更なる複雑さを招いていた。「Windowsの開発は風の中に辛うじて立っている砂上の楼閣だ」とWindowsジャーナリストのポール・サーロットは評した。
マイクロソフトがWindows Server 2003を開発していた2003年4月に、当時のWindowsコアテクノロジーグループの副社長だったロブ・ショートはインタビューでコマンドライン版を開発していることを明らかにした。「Linuxのコミュニティでは必要なものだけを組み合わせて実行できるようになっており、我々もWindowsのレイヤーを見渡し、各レイヤーにどのような機能があるのかを確認して、どのようにすればこのような形に近づけることができるのかということを模索している。Linuxはこの点において私たちより進んでいるが、私たちも改良を考えている。私たちが開発しているコマンドライン版に全ての機能を実装できるかどうかはまだわからない。数多くのツールがグラフィカルユーザーインターフェイスに依存している。」　ディレクション・オン・マイクロソフトのマイケル・チェリーらはWindows Server 2003で各種設定機能とグラフィカルツールの依存関係が減っていることを確認したが、もしサーバーがグラフィカルユーザーインターフェイスを全く必要としない場合であっても、オペレーティング本体をインストールするのに完全なグラフィカルユーザーインターフェイスが必要なままだった。
Windows Server 2003がリリースされるとロブ・ショートはオペレーティングシステムのコアな部分の中にある依存関係を文章化して解消することを目的としたカーネルアーキテクチャチームを作った。カーネル開発チームはこの問題が広範囲に渡るものであり、社内の様々なグループに影響を及ぼす恐れがある難題であるということに当初から気づいていた。カーネルアーキテクチャチームはまた、カーネル内外の全てのコンポーネントに関わるプログラマーの悪い習慣を改める責務があると予想した。WindowsはVista開発中の2005年末時点で5500の独立したファイルにより構成されていたが、この任務を実行するため、オペレーティングシステムの全てのコンポーネントに対し、他のコンポーネントとの相対的な依存度を示す「レイヤー番号」を割り当てた。オペレーティングシステムのコアに近い部分には低いレイヤー番号が、遠い上位の部分には高いレイヤー番号が割り当てられた。この情報を基にしてコアアーキテクチャチームは低レベルと高レベルの間の依存関係を解消する方法を模索し始めた。これを続けていくうちに様々な目的にアレンジできるWindowsのサブセットを作ることが可能になってきた。
マイクロソフトでWindows Audioチームの開発者だったラリー・オスターマンは2008年11月にインターネット掲示板のChannel 9に「アーキテクチャレイヤーのコードリファクタリングに伴い、Longhorn Reset以来となる無理のない拡張となった(だからVistaが最初のMinWinベースのオペレーティングシステムだったと言われているのだ)。」と投稿した。この投稿に対し、別のWindows開発者であるブランドン・パドックは「これはガイドラインや信条を超えるものであり、私たちが開発プロセスに適用している、よりセキュアなソフトウェアを書くためのガイドであるSDL(信頼できるコンピューティングのセキュリティ開発ライフサイクル)のようなものであるが、MinWinを作るために注がれた努力は、どのようにすればWindowsでコンポーネントの機能が明確になり、正しいレイヤー構造を設計できるのかということを身をもって表している。」と投稿して補足した。

リリース

マイクロソフトはMinWinを単体のプロダクトとして発売するつもりはないと宣言する一方で、Vista以降はMinWinを活用した様々なWindowsを出荷している。

Windows Vista

マイクロソフトがMinWinという用語を最初に使ったのはVistaの開発中だった2003年で、当時はLonghornというコードネームで呼ばれていた。当時はLonghornのコード全体の約95%がMinWinで構成されると説明しており、Longhornの各エディションの最上位に置かれていた。MinWinの名称はVistaの広告に使われることはなく、開発者やIT業界人へのプレゼンテーションにも使われなかったが、カーネルアーキテクチャチームによる改良の成果はVistaと共に出荷された。

Windows Server 2008

Windows Server 2008はアクティブディレクトリ、DNSサーバー、DHCPサーバー、IISサービスなどのサーバーを立てるために必要十分なコンポーネントのみを搭載したWindowsを提供することが目標だった。開発中の2005～2006年はこの選択肢を社内でMinWinと呼んでおり、最終的に正式名称がサーバー・コアと決まるまではサーバー・ファウンデーションと呼ぶこともあった。サーバー・コアがWindows Server 2008の機能として出荷される頃には、MinWinという用語はより小さなコンポーネントを指す言葉に変化しており、より小さくて独立した、上位のコンポーネントとの依存性を取り払った、小型のWindowsオペレーティングシステムを作ることが目標かつ目的になっていた。
マイクロソフトでサーバー・コアのプログラム・マネージャーをしていたアンドリュー・メイソンは2008年2月にTechNetで受けたインタビューで、Windows Server 2008は、サーバー・コアと同様にフルインストール版でも、より小さなコンポーネントの集まりの上に構築されていると答えた。このリリースではMinWinは「オペレーティングシステムのもっとも低レベルな部分の集合」と定義されており、Windowsカーネル、ハードウェア抽象化レイヤ(HAL)、ファイルシステム、ネットワークなどが含まれている。イベントログ、パフォーマンスカウンター、Windows Management Instrumentation(WMI)などのその他の部分は一般的にはオペレーティングシステムのコアな部分であると考えられるが、これらはサーバー・コアの一部である。

Windows 7

マイクロソフトの開発者であるエリック・トラウトは2007年10月に独立したMinWinのデモンストレーションを行った。これは約100ファイルで構成され、基本的なHTTPサーバーが動作していた。トラウトによるとMinWinが消費するハードディスクの容量は25MBで、メモリ消費量は40MBだった。これにはグラフィカルユーザインタフェースは含まれておらず、フルスクリーンモードのコマンドプロンプトで操作された。トラウトはこのデモで、MinWinは単体の商品としては提供されないが、その代わりにWindows 7のような今後のオペレーティングシステムの基盤として使われるだろうと話した。
トラウトのデモが行われてから数か月後にマイクロソフト技術部副社長のスティーブン・シノフスキーがCNETのNews.comでイーナ・フライドのインタビューに答えた際に誤解が生じた。シノフスキーはWindows 7のカーネルがWindows Server 2008のカーネルを進化させたものであり、さらにこれはVistaのカーネルを進化させたものだと答えた。この言葉は掲示板のSlashdotなどで、Windows 7にはMinWinが含まれないという意味であると誤解された。マーク・ルシノビッチはMinWinにまつわる各種の誤解は「カーネル」という言葉の意味が曖昧なことと関係があると指摘した。MinWinはそれ自体はカーネルではなく、Windows NT Executiveと複数のコンポーネントが含まれた集合で、ルシノビッチはこれを「カトラーのNT」と呼んだ。