共通オペレーティングシステムのためのプログラムであって、オペレーティングシステムコンポーネントとハードウェアデバイスの間でインターフェースを提供するハードウェア抽象化レイヤと、前記ハードウェア抽象化レイヤに依存し、前記オペレーティングシステムコンポーネントにサービスを提供するカーネルと、前記カーネルに依存し、オペレーティングシステムアプリケーションを実行するための関数のライブラリを含むオペレーティングシステムダイナミックリンクライブラリと、前記カーネルに依存し、アプリケーションプログラミングインターフェースが基本オペレーティングシステムコンポーネントに制限されるように、該アプリケーションプログラミングインターフェースをサポートするサブシステムダイナミックリンクライブラリレイヤと、前記カーネルに依存し、オペレーティングシステムアプリケーションのネットワーク通信機能をサポートするネットワーキングレイヤとを含み、前記カーネル、前記オペレーティングシステムダイナミックリンクライブラリ、前記サブシステムダイナミックリンクライブラリレイヤ、および前記ネットワーキングレイヤは、前記オペレーティングシステムコンポーネント間の依存関係の数を最小限にするように構成されることを特徴とするプログラム。前記カーネルは、記憶媒体からデータを読み込むファイルシステムと、前記ハードウェアデバイスを制御するためのデバイスドライバとを含むことを特徴とする請求項1に記載のプログラム。前記アプリケーションプログラミングインターフェースは、メモリ管理のためのダイナミックリンクライブラリと、グラフィカルデバイスインターフェースと、ユーザインターフェース要素と、通信プログラムと、セキュリティ-暗号化アプリケーションとを含むことを特徴とする請求項1に記載のプログラム。前記ネットワーキングレイヤは、伝送制御プロトコル/インターネットプロトコルTCP/IPスタックと、動的ホスト構成プロトコルクライアントと、自動プライベートインターネットプロトコルアドレス指定と、ドメインネームシステムクライアントと、ネットワークベーシック入出力オペレーティングシステムオーバTCP/IPとを含むことを特徴とする請求項1に記載のプログラム。ネットワーキングレイヤは、前記オペレーティングシステムコンポーネントのネットワークプロパティを試験することを特徴とする請求項1に記載のプログラム。ユーザが共通オペレーティングシステムにログオンすることを可能にするための機能を提供するログオンクライアントをさらに含むことを特徴とする請求項1に記載のプログラム。セキュリティアプリケーションの基本機能を提供するローカルセキュリティ認証サーバをさらに含むことを特徴とする請求項1に記載のプログラム。コンポーネントベースのアプリケーションを構築するためのソフトウェアアーキテクチャを提供するコンポーネントオブジェクトモジュールをさらに含むことを特徴とする請求項1に記載のプログラム。実行中にプログラムにバインドされるルーチンのライブラリを含むランタイムライブラリをさらに含むことを特徴とする請求項1に記載のプログラム。オペレーティングシステムサービスの管理を提供するサービス制御マネージャモジュールをさらに含むことを特徴とする請求項1に記載のプログラム。複数のユーザセッションを管理するセッション管理サーバをさらに含むことを特徴とする請求項1に記載のプログラム。デバイスドライバのプラグアンドプレイインストールをサポートするプラグアンドプレイマネージャをさらに含むことを特徴とする請求項1に記載のプログラム。プロセスが別個のプロセス内のコードを呼び出し可能なリモートプロシージャコールインフラストラクチャをさらに含むことを特徴とする請求項1に記載のプログラム。多数の複雑な依存関係は、オペレーティングシステム開発サイクル中に依存関係管理が欠如していたことの結果である。必要とされているのは、限られた数の依存するコンポーネントを有する共通オペレーティングシステムを確立する仕方である。様々なオペレーティングシステム構成をサポートするための共通オペレーティングシステム機能セットを提供するための方法およびシステムを説明する。共通オペレーティングシステム機能セットは、いくつかの配置deploymentデバイスおよび配置方法に適用可能な最小限のメモリフットプリントfootprintを提供するように編成される。共通オペレーティングシステムは、信頼性が検証された一揃いの統合されたコンポーネントを提供するオペレーティングシステムコンポーネント間の依存関係を含む。共通オペレーティングシステムは、様々なオペレーティングシステムシナリオのための機能を提供するアプリケーションプログラミングインターフェースAPIセットを含む。方法は、オペレーティングシステムコンポーネントを定義すること、オペレーティングシステムコンポーネントの依存関係を識別すること、グループ内のコンポーネントが共通の依存関係を共有するようにコンポーネントグループを作成すること、コンポーネントグループ間で依存関係規則を確立すること、および依存関係規則を実施することを含む。共通オペレーティングシステムを提供するための典型的なシステムは、ハードウェア抽象化レイヤ、カーネル、オペレーティングシステムダイナミックリンクライブラリレイヤ、サブシステムダイナミックリンクライブラリ、およびネットワーキングレイヤを含む。ハードウェア抽象化レイヤは、ハードウェアデバイス群との対話を提供する。カーネルは、ハードウェア抽象化レイヤに依存し、オペレーティングシステムコンポーネントに基本的なサービスを提供する。オペレーティングシステムダイナミックリンクライブラリ、サブシステムダイナミックリンクライブラリ、およびネットワーキングレイヤはすべて、カーネルに依存する。オペレーティングシステムダイナミックリンクライブラリレイヤは、オペレーティングシステムアプリケーション群を実行するための関数のライブラリを含む。サブシステムダイナミックリンクライブラリレイヤは、アプリケーションプログラミングインターフェース群が基本的なオペレーティングシステムコンポーネントに制限されるように、アプリケーションプログラミングインターフェース群をサポートする。ネットワーキングレイヤは、オペレーティングシステムアプリケーション群のネットワーク通信機能をサポートする。簡単に述べると、本発明は、様々なオペレーティングシステム構成をサポートするための共通オペレーティングシステム機能セットを提供するための方法およびシステムを対象とする。共通オペレーティングシステム機能セットは、いくつかの配置デバイスおよび配置方法に適用可能な最小限のメモリフットプリントを提供するように編成される。共通オペレーティングシステムは、信頼性が検証された一揃いの統合されたコンポーネントを提供するオペレーティングシステムコンポーネント間の依存関係を含む。共通オペレーティングシステムは、様々なオペレーティングシステムシナリオのための機能を提供するアプリケーションプログラミングインターフェースAPIセットを含む。例示的なオペレーティング環境図1を参照すると、本発明を実施するための1つの典型的なシステムが、コンピューティングデバイス100のようなコンピューティングデバイスを含む。基本構成は、破線102内のコンポーネントを含む。基本構成において、コンピューティングデバイス100は、通常、少なくとも1つの処理装置104、およびシステムメモリ106を含む。コンピューティングデバイスの正確な構成および種類に依存して、システムメモリ106は、揮発性RAMなどの、不揮発性ROM、フラッシュメモリ、その他などの、またはこの2つの何らかの組合せであることが可能である。システムメモリ106は、通常、オペレーティングシステム108、1つまたは複数のアプリケーション110を含み、プログラムデータ112を含むことが可能である。コンピューティングデバイス100は、追加の機構または機能も含むことが可能である。例えば、コンピューティングデバイス100は、例えば、磁気ディスク、光ディスク、または着脱式のフラッシュメモリモジュールなどの追加のデータ記憶装置着脱式の記憶装置および/または固定式の記憶装置も含むことが可能である。そのような追加のストレージを図1に着脱式のストレージ114、および固定式のストレージ116で示す。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を格納するために任意の方法または技術で実装された揮発性媒体および不揮発性媒体、着脱式の媒体および固定式の媒体が含まれることが可能である。システムメモリ106、着脱式のストレージ114、および固定式のストレージ116はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD-ROM、デジタル多用途ディスクDVDまたは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピューティングデバイス100がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。任意のそのようなコンピュータ記憶媒体はデバイス100の一部とすることができる。コンピューティングデバイス100は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス118も有することが可能である。ディスプレイ、スピーカ、プリンタなどの出力デバイス120も含まれることが可能である。以上のデバイス群は、当技術分野で周知であり、本明細書で詳述する必要はない。コンピューティングデバイス100は、ネットワークなどを介して、デバイスが他のコンピューティングデバイス群124と通信することを可能にする通信接続122も含むことが可能である。通信接続122は、通信媒体の一例である。通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータによって実現され、あらゆる情報配信媒体が含まれる。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、RF媒体、赤外線媒体、およびその他の無線媒体などの無線媒体が含まれる。本明細書で使用するコンピュータ可読媒体という用語には、記憶媒体と通信媒体がともに含まれる。共通オペレーティングシステム共通オペレーティングシステムは、すべてのオペレーティングシステム構成において使用される信頼できる基礎レイヤを提供する。共通オペレーティングシステムは、最小限の基礎アプリケーションプログラミングインターフェースAPIセットを表す。APIセットに対して書かれたあらゆるソフトウェアも、オペレーティングシステムのすべての構成に適合する。例えば、APIセットに対して書かれた試験コードは、すべてのオペレーティングシステム条件の下で実行可能である。試験手続きを適用して、オペレーティングシステムおよびその他の目標とするプラットフォームに関するパフォーマンスを検査すること、API適用範囲coverageを強調すること、および完成させることができる。オペレーティングシステムコンポーネントを試験するのに使用されるコードは、共通オペレーティングシステムに基づく試験プラットフォームに依存する。このため、試験コードを容易に開発することができ、オペレーティングシステムの信頼性を確実にすることができる。共通オペレーティングシステムは、すべての組み込まれた構成にわたって共有される安定したプラットフォームの集中試験focusedtestingを介して、組み込まれたランタイムの一般的な信頼性を高める。試験手続きは、オペレーティングシステムコンポーネントのコアセットを試験することができるように、コンポーネントに分解することができる。試験は、さらなるコンポーネントを追加することによって拡大することができる。例えば、各オペレーティングシステムコンポーネントを個々に試験して、各コンポーネントがコアと一緒に動作できるかどうかを判定することができる。共通オペレーティングシステムは、コンポーネントベースのエンジニアリングツールを提供する。例えば、共通オペレーティングシステムを使用して、コンポーネントマニフェストを検証する可能な限り最小の構成すなわち、最小限のフットプリントを構築することができる。共通オペレーティングシステムは、積極的なフットプリントの縮小をもたらし、組み込まれた相手先ブランド供給OEMの資材表billofmaterials費用が低くなる。共通オペレーティングシステムの信頼性、および最小限の表面エリアsurfaceareaは、固定機能サーバ群を作成するのによく適している。固定機能サーバ群を作成することの主な利点は、顧客の総所有費用を低減することである。共通オペレーティングシステムのコンポーネントは、オペレーティングシステム構造においてより上位のレイヤの依存関係を有するコンポーネントによって保守されることが可能であるすなわち、バグ修正が行われる、より新しいバージョンで置き換えられるなど。共通オペレーティングシステムは、共通オペレーティングシステムを検証するために実行される様々な分析に基づき、コアオペレーティングシステムメモリ、起動パフォーマンス、およびAPIセットを含むに関するドキュメンテーションを向上させる。向上したドキュメンテーションは、OEMおよび独立のソフトウェアベンダによるオペレーティングシステム動作の理解を高める。共通オペレーティングシステムは、プレブートpre-bootオペレーティングシステムとして動作する。共通オペレーティングシステムは、オペレーティングシステムのあらかじめ構築済みのカスタマイズされたイメージを対象ハードウェア上に重ね合わせることによってインストールされる。共通オペレーティングシステムがコンピューティングデバイスにインストールされると、次に、共通オペレーティングシステムアプリケーション群が、共通オペレーティングシステムの上に層を成すオペレーティングシステムの残りの部分をインストールすることができ、あるいは、異なるバージョンのオペレーティングシステムをインストールすることができる。共通オペレーティングシステムは、デジタルコンパクトディスクCDなどの読み取り専用媒体から起動されることが可能であることにより、システム回復を助ける。オペレーティングシステム全体をCD上にインストールすることができる。ハードディスク上にインストールされたシステムがクラッシュした場合、オペレーティングシステムは、CDからのオペレーティングシステムでマシンを再起動させることにより、回復することができる。ただし、システムは、CD上にインストールされたオペレーティングシステムの最小限のサブセットを再起動することによって、より迅速に回復させることもできる。共通オペレーティングシステムは、ハードディスク上にインストールされたオペレーティングシステムを回復させるプラットフォームを提供する。一実施形態では、共通オペレーティングシステムは、ユニバーサルシリアルバスポートにプラグ接続された着脱式のフラッシュメモリモジュールから起動することができる。図2は、本発明による共通オペレーティングシステムの機能ブロック図を示す。共通オペレーティングシステム200は、すべてのオペレーティングシステム構成に要求されるコアオペレーティングシステム機能を含むビルディングブロックである。ただし、共通オペレーティングシステム200は、オペレーティングシステムのハードウェアアーキテクチャ固有の機能をまったく含まない。共通オペレーティングシステム200は、基礎レイヤであり、このレイヤの上に、オペレーティングシステムの将来のバージョンを構築することができる。共通オペレーティングシステム200は、他のオペレーティングシステム製品を開発するための標準のビルディングブロックも提供する。共通オペレーティングシステム200のコア機能は、ハードウェア抽象化レイヤHAL202およびカーネル204によって提供される。HAL202は、共通オペレーティングシステム200が、一般レベルまたは抽象レベルでハードウェアデバイスと対話することを可能にするプログラミングのレイヤである。HAL202は、カーネル204またはデバイスドライバから呼び出すことができる。カーネル204は、共通オペレーティングシステム200の中心的なモジュールである。共通オペレーティングシステム200が起動されると、カーネル204がロードされる最初のコンポーネントである。ロードされた後、カーネル204は、メインメモリの中に留まる。カーネル204は、共通オペレーティングシステム200内の他のコンポーネントによって要求される基本的なサービスを提供する。カーネル204は、HAL202に依存する。カーネルは、デバイスドライバ群206およびファイルシステム208を含み、それらに依存する。ファイルシステム208は、他のオペレーティングシステムコンポーネントおよびアプリケーション群が、ファイルの集合としてストレージファイル群と対話することを可能にする抽象化を提供する。カーネル204の諸部分、およびその他のデバイスドライバ群は、ファイルシステム208からロードされる。デバイスドライバ群206は、プリンタ、ディスクドライバ、またはキーボードなどのデバイス群を制御するプログラム群を含む。一実施形態では、デバイスドライバ群206は、共通オペレーティングシステム200を含む起動可能なシステムを作成するのに必要である。一部のクラスのデバイスドライバ群を使用して、共通オペレーティングシステム200の起動可能なイメージを作成することができる。そのようなクラスは、システムデバイス群、ストレージデバイス群、ユーザインターフェースデバイス群、およびネットワーキングデバイス群のためのデバイスドライバ群を含む。ただし、これらのクラスのデバイスドライバ群は、共通オペレーティングシステムビルディングブロックの一部ではない。デバイスドライバクラスは、構築プロセスを介して後に追加されて、インストール可能な共通オペレーティングシステムを作成する。カーネル204より上のプログラミングレイヤ群には、オペレーティングシステムダイナミックリンクライブラリDLL210、サブシステムDLL212、およびネットワーキングレイヤ214が含まれる。オペレーティングシステムDLL210は、オペレーティングシステムによってサポートされるアプリケーションが使用することができる実行可能な関数のライブラリを含む。例えば、Windows登録商標NTDLLは、Windows登録商標NTアプリケーション群によって使用される実行可能な関数のライブラリである。DLLは、いくつかのアプリケーションによって同時に使用されることが可能である。一部のDLLは、オペレーティングシステムを備え、あらゆるアプリケーションに利用可能である。他のDLLは、特定のアプリケーション用に書かれ、そのアプリケーションと一緒にロードされる。サブシステムDLL群212は、アプリケーション群に機能を提供するAPI群のサポートを提供する。一実施形態では、APIは、WIN32である。共通オペレーティングシステム200は、API群を基本的なコンポーネントに制限する。共通オペレーティングシステム200によってサポートされる基本的なAPIセットには、メモリ管理のためのDLL群KERNEL216、グラフィカルデバイスインターフェースGDI218、ユーザインターフェース要素群USER220、およびセキュリティ-暗号化アプリケーション群ADVAPI222が含まれる。KERNEL216は、アトム関数、通信ポートサポート、コンソールサポート、デバッグサポート、デバイスI/O、DLL関数、エラー処理、ファイルI/O、ファイルマッピング、ファイルシステム関数、ハンドル-オブジェクト関数、メールスロット、メモリ管理、各国語サポート、名前付きパイプ、プロセスおよびスレッド、リソース読み込み、ストリング、構造化例外処理、同期、システム情報、時刻関数、ツールヘルプ関数、ユニコードおよび文字セットを含む、多数の異なるメモリ管理関数をサポートする。GDI218によってサポートされる関数には、次のオペレーティングシステム機能が含まれる。すなわち、ビットマップ、ブラシ、クリッピング、カラー、デバイスコンテキスト、塗りつぶされた図形、フォントおよびテキスト、線および曲線、メタファイル、パス、ペン、印刷、および領域である。USER220は、次のオペレーティングシステム機能をサポートする。すなわち、ボタン関数およびメッセージ、キャレットcaret管理、クリップボードサポート、コンボボックス関数、座標空間-変換関数、カーソル管理、ダイアログボックスメッセージ、動的データ交換、動的データ交換管理、編集コントロール、フック、アイコン読み込み、キーボードアクセラレータ、キーボード入力、リストボックスコントロール、メニューコントロール、ウインドウズメッセージおよびメッセージキュー、マウス入力、マルチディスプレイモニタサポート、マルチドキュメントインターフェース、ペインティングおよびドローイング、未加工rawの入力、四角形関数、リソース読み込みアイコンなどの、スクロールバー、文字列関数、システム情報関数、ログアウト、タイマ関数、ウインドウ管理、ウインドウクラス登録、およびウインドウプロパティ関数である。次の関数が、ADVAPI222によってサポートされる。すなわち、アクセス検査、セキュリティ記述子関連関数、プロセス管理関数、レジストリ関数、サービス管理関数、システムシャットダウン関数、およびイベント追跡関数である。ネットワーキングレイヤ214は、サブシステムDLL群212の中のアプリケーション群がネットワークと通信することができるようにネットワーク機能を提供する。ネットワーキングレイヤ214は、伝送制御プロトコル/インターネットプロトコルTCP/IPスタック224、動的ホスト構成プロトコルDHCPクライアント226、自動プライベートIPアドレス指定AutoIP228、ドメインネームシステムDNSクライアント230、およびNetBTネットワーク基本入出力オペレーティングシステムオーバTCPIP:networkbasicinputoutputoperatingsystemoverTCPIP232を含む。共通オペレーティングシステム200は、ネットワーキングレイヤ214を使用して、コアコンポーネントのネットワークプロパティを試験する。TCP/IPスタック224は、インターネット上のホスト群を接続するための通信プロトコルを含む通常のTCP/IP動作をサポートする。TCP/IPは、ネットワークを介してデータを伝送することに関する標準である。TCP/IPスタック224は、現在のバージョンのIPIPv4、およびIPv6などの将来のIP世代を実装する。IPセキュリティIPSecが、TCP/IPスタック224に組み込まれる。IPSecは、IPレイヤにおけるセキュリティで保護されたパケット交換をサポートするプロトコルのセットである。TCP/IPスタック224は、ユーザデータグラムプロトコルUDP、インターネット制御メッセージプロトコルICMP、およびアドレス解決プロトコルARPを含む、いくつかのプロトコルを実装する。UDPは、IPネットワークを介してデータグラムを送受信する直接的なやり方を提供する。ICMPは、エラーメッセージ、制御メッセージ、および情報メッセージを含むパケットをサポートする。ARPは、IPアドレスを物理アドレスに変換する。TCP/IPスタック224は、IPマルチキャストもサポートする。DHCPクライアント226は、DHCPサーバからネットワーク上のデバイス群に動的IPアドレスを割り当てるためのプロトコルを提供する。DHCPクライアント226は、マルチキャストグループアドレス割り当てを獲得するためのマルチキャストアドレス動的クライアントアプリケーションプロトコルを含む。AutoIP228は、DHCPサーバが利用可能でない場合に、DHCPクライアント226がIPアドレスを自動的に自己構成することができるように機能を提供する。DNSクライアント230は、ドメイン名をIPアドレスに変換する。NetBT232は、ローカルエリアネットワークLANのための特別な関数を追加するAPIである。DNSサーバがネットワーク上で利用可能でない場合、他のコンピュータ群は、NetBT232を介するブロードキャスト名解決を介して探し出される。NetBT232は、NetBTインターフェースおよび名前解決を要するレガシアプリケーション群のサポートも可能にする。DLL210、212、およびネットワーキングレイヤ214より上の共通オペレーティングシステム200のレイヤ群には、Winsock234、ログオンクライアント236、ローカルセキュリティ認証サーバLSASS238、コンポーネントオブジェクトモデルCOM240、ランタイムライブラリRTL242、サービス制御マネージャSCMモジュール244、セッション管理サーバSMSS246、プラグアンドプレイPnPマネージャ248、およびリモートプロシージャコールRPC250が含まれる。シェル252が、共通オペレーティングシステム200の最も外側のレイヤである。シェル252は、シェル252の代わりにアプリケーションを代用することができるため、オプションである。Winsock234は、TCP/IPプロトコルを介して他のコンピューティングデバイスと通信することができるプログラム群を開発するためのAPIである。Winsock機能は、ほとんどすべてのコンピューティングデバイスがネットワークインターフェースを有するため、共通オペレーティングシステム200の中に含められる。ログオンクライアント236は、ローカルユーザまたはネットワークユーザが、共通オペレーティングシステム200にログオンすることができるように機能を提供する。ログオンクライアント236は、ローカルセキュリティアカウントマネージャSAMに対してユーザを認証した後、ユーザの身元を確定するのに必要とされる最小限の機能を含む。ログオンクライアント236は、ユーザがログオンすることをすべてのデバイスが要求するわけではないため、共通オペレーティングシステム200のオプションのコンポーネントである。LSASS238は、暗号化やデジタル証明などのセキュリティアプリケーション群のための基本的機能を提供する。LSASS238は、SAMに対して認証を行い、ローカルログオン機能をサポートする。LSASS238は、ログオンクライアント236から認証要求を受け取り、適切な認証パッケージを呼び出して、アカウントの確認および検証を実行する。ログオンクライアント236に関連するユーザインターフェースUIが、ログオンクライアント/LSASSプロセスと対話して、ユーザをログインさせる。共通オペレーティングシステム200は、ローカルログオンに必要とされる最小限の数のセキュリティパッケージを使用して起動することができる。COM240は、コンポーネントベースのアプリケーション群を構築するためのソフトウェアアーキテクチャである。COMオブジェクト群は、アプリケーション群、およびその他のコンポーネントがCOMオブジェクトの機能にアクセスすることを可能にするインターフェース群を公開する、それぞれが固有IDを有する別々のコンポーネントである。RLT242は、実行中にプログラムにバインドされるルーチンのライブラリを含む。SCMモジュール244は、サービスの開始と停止を制御する。SCMモジュール244は、DHCP226およびDNS230がサービスとして動作するため、必要である。SMSS246は、複数のサブシステムセッションおよびユーザセッションを管理するためのセッションマネージャである。PnPマネージャ248が、検出されたハードウェアを制御するのに必要とされるドライバ群のプラグアンドプレイインストールをサポートする。PnPマネージャ248は、ハードウェア関連機能であるが、アーキテクチャ固有ではない。PnPマネージャ248は、一部のデバイスがPnP対応ではないため、オプションのコンポーネントである。RPC250は、1つのコンピュータ上のプログラムが、サーバコンピュータ上のコード、または同一のコンピュータ上の異なるプロセス内のコードを実行することを可能にするプロトコルである。RPC250を使用すると、システム開発者は、サーバのための特別な手続きを開発する必要がない。クライアントプログラムは、適切な引数を有するメッセージをサーバに送信し、サーバは、実行されたコードの結果を含むメッセージを戻す。共通オペレーティングシステム200は、コンポーネント化試験、およびコンポーネントベースのユニット試験のための開発ツールとして使用することができる。コンポーネント化は、コンポーネント間の依存関係を理解し、減少させて、オペレーティングシステムをそれほどモノリシックではなくすることに関わる。コンポーネントグループ化は、オペレーティングシステムをモノリシックシステムからコンポーネント化されたシステムに変換するのに役立つフレームワークを提供することにより、オペレーティングシステムの保守のしやすさserviciabilityを向上させる。共通オペレーティングシステム200は、コンポーネント化されたシステムの非常に信頼できる基礎オペレーティングシステムレイヤを提供する。共通オペレーティングシステム200は、コンポーネントグループが上に置かれる基礎オペレーティングシステムレイヤを定義することにより、コンポーネントグループを作成する。コンポーネントのグループ化が、慣用のオペレーティングシステムのモノリシック構造を解消する。オペレーティングシステムのどのレイヤ上にコンポーネントが置かれているかに依存して、そのコンポーネントがより上位のレイヤのコンポーネントに依存しないように、ヘッダの適切なサブセットを提供することができる。共通オペレーティングシステムを作成するためのプロセスを、図3を参照して説明する。共通オペレーティングシステムは、オペレーティングシステムコンポーネント間の依存関係を管理することによって作成される。プロセスは、ブロック300で始まり、標準のオペレーティングシステムが、多数の互いに依存するコンポーネントを有する。ブロック310で、各コンポーネントの機能を特定することにより、コンポーネント定義が提供される。処理は、ブロック320に進む。ブロック320で、オペレーティングシステムのモノリシック構造内における各コンポーネントの位置を特定することにより、コンポーネント間の依存関係が明らかにされる。処理は、ブロック330に進む。ブロック330で、目標シナリオを可能にするための意味のあるビルディングブロックを表すコンポーネントグループが、識別される。各グループのコンポーネントは、共通の依存関係を共有する。コンポーネントグループの作成は、コンポーネント間の依存関係を解消する。例えば、USER、GDI、およびKERNELDLLのそれぞれの中のコンポーネントがすべて、シェルの中の別のコンポーネントに依存することが可能である。この例では、シェルの中でコンポーネントグループ例えば、新たなDLLを作成することにより、3つの依存関係が解消される。新たなDLLは、3つのコンポーネントを実行するのに要求される最小限の数のAPIを含む。このため、各コンポーネントは、新たなDLLの中のAPIのサブセットを使用して実行される。別の実施形態では、より上のレベルの依存関係がもはや存在しないようにソースコードを変更することにより、コンポーネント間の依存関係が解消される。処理は、ブロック340に進む。ブロック340で、コンポーネントグループ間の依存関係規則が確立される。依存関係規則は、各コンポーネント、および各コンポーネントグループにいずれの依存関係が適切であるかを判断する。依存関係規則は、オペレーティングシステムコンポーネント間に存在する依存関係の数を最小限に抑える。処理は、ブロック350に進む。ブロック350で、コンポーネントグループ間の依存関係規則が実施される。依存関係規則実施は、コンポーネントが望ましくない依存関係を有することを防止する。依存関係規則実施は、DLL群の効率的な使用を確実にする。処理は、ブロック360で終了する。以上の明細書、例、およびデータが、本発明の構成の製造および用法の完全な説明を提供する。本発明の趣旨および範囲を逸脱することなく、本発明の多数の実施形態を実施することができるので、本発明は、本明細書に添付した特許請求の範囲に存する。