Windows NT系
Windows NT系(ウィンドウズ エヌティーけい)はマイクロソフトが開発したWindows NTのアーキテクチャに基づいて製作されたオペレーティングシステム (OS) の総称。遅くとも Windows 98/98SE/Me のサポートが終了した2006年以降から2021年現在に至る Windows の主流系統となっている。MS-DOSを基に拡張・発展してきたWindows 9x系とは全く異なった構造をしており、9x系とは分けて考えるときに、NT系と定義する。
広義の「Windows NT」として、Windows NT系という言葉が用いられる。
以下のオペレーティングシステムがNT系に該当する。なお、発売年は最初に発売された言語版とエディションを記載する。
Windows NT系の製品の特徴として、大きく分けてクライアント向けの製品とサーバ向けの製品の2種類存在する。
Windows NTには同バージョン製品でクライアント向けの「Workstation」とサーバ向けの「Server」の2種類がラインナップされている。ただし、Windows NT 3.1だけはクライアント兼サーバの「Windows NT 3.1」と、ドメインコントローラ専用のWindows NT Advanced Server 3.1のラインナップだった。
Windows 2000以降はクライアント向けを「Workstation」から「Professional」に呼称変更し、Windows XPにおいてもその路線を継承した。また、Windows XPにおいては家庭などでの使用を前提に9x系を統合した「Home Edition」を新たにラインナップに追加した。その一方で、Windows 2000 Serverの後継となるサーバ版はItanium/Itanium2専用のWindows Advanced Server/Datacenter Server, Limited Editionを経て、XPに遅れる形でWindows Server 2003として異なるラインナップの位置付けに改まっている。
マイクロソフトはMS-DOSの後継OSとしてOS/2をIBMと共同開発しており、1980年代末にはOS/2 3.0の開発を主に担当していたが、契約関係・開発の進め方等においてIBM側としばしば対立、プロジェクトの進捗が大きく停滞する状況となっていた。
そこでビル・ゲイツは事態の打開策としてプロジェクトマネージャーを社外に探し、当時DEC に在籍していたデヴィッド・カトラーを抜擢した。カトラーはDECのVAXマシン用OSであるVMSの開発者として名を上げた人物である。カトラーは当初OS/2 3.0のプロジェクトに参加したが、難航するIBMとの交渉の過程でOS/2に事実上見切りをつけ、後にNTと名付けられることになる新OS開発を水面下で推進するようになった。それは彼がかつてDECで手がけたVMSのアーキテクチャを基礎とする極めて近代的な構成でポータビリティの高いOSであった。
OS/2次期バージョンの開発が遅延する中で、マイクロソフトはストップギャップとして80386搭載マシンを主なターゲットとして開発していたWindows 3.0を1990年に発売する。このWindows 3.0が大ヒットしたことでゲイツは方針を転換し、後継OSをOS/2ではなく自社オリジナルのWindowsにすることを決意する。だが、初期のWindowsは見た目はGUIではあったが内部的には16ビットコードで書かれたMS-DOSを土台としたアプリケーションランチャーの域を出るものではなく、また当時未だサポートされていた(そしてPC/ATの搭載CPUであったが故にPC市場の主流でもあった)Intel 80286の機能的な制約に由来する貧弱なメモリ管理機能、マルチタスクの不完全さ、ネットワーク機能の欠落など課題が山積していた。
そこでゲイツは、カトラーが開発していたOS/2 3.0→NTを基本としつつ、それにWindows 3.0である程度確立されたGUIシェルを被せ、またそこで実装されていた16ビットWindows API (Win16) との互換性を持たせたOSを自社開発することとし、1993年にはNT系第一弾となるWindows NT 3.1の発売を果たした。
NTは極めてコンパクトなマイクロカーネル、サブシステムの概念を導入し、Win32、OS/2、POSIXのサブシステムをユーザ空間に配置した。サブシステムで致命的な問題が起きてもクラッシュと呼ばれるシステム全体の破綻を起こさない、当時のPCで動作するOSとしては画期的なシステムであった。しかしこの構造は当時のPCには負荷が大きく、結果として重いOSと評されることになる。殊にバージョン3.1リリース時にはプログラムの最適化が不十分であったこともあって当時の標準的なPC環境よりも遙かに過大なメモリを必要としたため、「メモリ・イーター」との不名誉な呼ばれ方をされたこともあった。
当初は重いOSにPC側の性能がついていかず、この新しいOSをビジネスPC用OSの後継にしようというマイクロソフトの目論みは失敗した。しかし、NT 3.1、NT 3.5に続いて発表した NT 3.51において、時をほぼ同じくしてリリースしたWindows 95をクライアントとしたサーバOSとしての性格を強調するマーケティングを行い、NetWareの牙城であったNOSの市場に足場を確保することに成功した。
バージョンアップを重ねる際にマイクロカーネル概念の一部を放棄してWin32サブシステムやグラフィクス・デバイスドライバの論理層などをカーネル空間に展開してスループットを向上するなど、重いオペレーティングシステムという汚名を払拭するためのいくつもの改修が行われた。UNIXでnfsをカーネル内に実装してスループットを向上させる技術を参考に、としての性能向上を図った。OSI参照モデルに倣ったプロトコルスタックを廃しBSDの単純かつ高性能なプロトコルスタックを取り入れたWinsock 2と新しいプロトコルスタックの搭載はネットワーク性能を大幅に向上させた。日々進歩するUNIXやBSDは、マイクロソフトにとって欠かせぬ教材であったとも言えよう。あわせてNTに本格的に対応した新バージョンのVisual C++がリリースされ、サードパーティーやソフトハウスがNT向けアプリケーションの開発を本格的に行えるようになった。当時大変人気のあったMMORPG Diabloが安定して動作し、TCP/IPによるイントラネット・インターネット接続によるネットワークプレイが実現できたのは、これらの改修による。
その後もマイクロソフトはデスクトップ用の業務用OSの後継としても売り込みを図るが、当時Windows 95からサポートが始まりゲーム市場で急速に普及し始めていたDirectXの対応が不十分であったこともあって一部のITプロフェッショナルを除いては市場に浸透せず、2000年にリリースしたWindows 2000においても、技術者の間で支持を得るにとどまった。Windows 2000が認められたのは、Windows 9xシリーズのプラグアンドプレイやACPI等の電源管理機能、USBへの対応などユーザビリティの高い機能を実装したことと、DirectXのサポートやマルチメディア機能が強化されたこと、それにこの頃にはハードウェアの性能がNT系OSの重さを問題としない(つまり重たくない)レベルにまで向上していたことによると考えられる。
Windows 2000は業務用のデスクトップOSとして歓迎されたが、一般家庭向けの市場でNT系OSが普及するのは次のWindows XPまで待つことになる。Windows XPが発売されてからはセキュリティの問題が取り上げられるようになった。そのため、Windows XPはService Pack 2にてCPUのセキュリティ機能DEPを利用したり、インターネットからの攻撃にはファイアウォールを標準で搭載することとなった。Windows XP Service Pack 2開発前後に開発中であったサーバー用Windowsは予定よりも遅くずれることが発表され、Windows XP Service Pack 2で搭載された各セキュリティ保護機能を搭載するとともに、Windows 2000のサーバーエディションで問題となったIISのインストール直後に機能し始めるといった設計が見直されることとなった。
Windows Vistaは予定が何度も変更された。変更規模の計画が大小含め幾度も変更されたことに加えて、従業員に対するセキュリティ訓練のための開発中断、Windows XP Service Pack 2とWindows Serverの開発があったこと、搭載が予定されている機能の開発で問題が多かったことによる。Windows Vistaは発売されると動作の重さが問題となった。Windows Vistaのサービスパックにて重さへの問題が対処されるが、結局次のWindows 7が発売されるまで話題が収まることはなかった。Windows Vistaと同じソースコードベースであるWindows Server 2008ではハードウェア仮想化機能であるHyper-Vが搭載された。Windows 7では、重さに対処する問題、同じソースコードベースであるWindows Server 2008 R2では仮想化機能の更なる対応などが行われた。Windows VistaのバージョンであるNT 6世代はクライアント版もサーバー版も機能と価格が異なるバリエーションとなる多くのエディションが登場した。
Windows 7がリリースされた時点で、既に従来のスタイラス操作ではなく複数の指による画面操作(マルチタッチ)が可能で、また一つのチップで低消費電力かつ低発熱で長時間動作可能なARMアーキテクチャが採用された小型機器のスマートフォンやタブレットが世に出回っていた。これを受けて、Windows 8ではそれらのデバイスで同様に動作するように開発が行われた。Windows 8が完成する以前、ARMアーキテクチャに対応するWindowsとして既にWindows CEが存在していたが、Windows NTとは採用対象となるセグメントの違いからOSアーキテクチャが異なり、デスクトップアプリケーションやデバイスドライバ用APIの互換性も乏しく、そもそもNT用に設計されCEでは導入されていないAPIがあるなど、それらの問題に対応する必要があった。ARMタブレット向けのWindows 8はWindows RTという名称でリリースされた。ARMアーキテクチャにNTカーネルが対応することにより、自社のスマートフォン用OSのWindows Phone OSでもバージョン8以降からNTカーネルが採用された。他のスマートフォン・タブレット用OSでは一般的であったアプリケーション販売のサービス、SNSサービスや自社のオンラインストレージサービスであるOneDrive等、自社他社問わず既に広く利用されているインターネットオンラインサービスに対応した。また、Windows 8ではModern UIスタイルアプリケーション(Windowsストアアプリ)の開発・実行基盤として、ARMアーキテクチャとx86/x64アーキテクチャとで共通のWindowsランタイムが開発された。Windows 8.1/Windows RT 8.1およびWindows Phone 8.1では、さらにWindowsランタイムおよび開発環境の統合が進められ、互換性が向上した。
Windows 10では、Windowsランタイムの発展型であるユニバーサルWindowsプラットフォームおよびユニバーサルWindowsドライバーにより、モバイルやIoTを含めてすべてのOSのカーネルやコアAPIが統合・共通化された。
3.x以前ならびに9x系のWindowsではx86アーキテクチャに絞って設計されたが、Windows NTについては開発当初から様々なCPUアーキテクチャで動作させることを考慮しており、カーネルは移植性が高い設計となっている。
NT 3.1と3.5では、PC-9800シリーズ用およびFMRシリーズ用を含む32ビットのx86(IA-32)版、MIPS Rシリーズ版とAlpha版がリリースされた。これらはARCアーキテクチャのワークステーションで動作するもので、x86版においてもBOOT.INIの記法や「システムパーティション」、「ブートパーティション」といった起動関係の用語などに影響を与えている。また、NT 3.51と4.0ではPowerPC版もリリースされ、PowerPCを搭載したIBMのThinkPad Power Seriesでも動作した。このほか、ClipperアーキテクチャとSPARCに移植されたが、リリースされなかった 。
Windows 2000 (NT 5.0) ではAlpha版の開発は行われたもののβ3で開発が中止されたため発売には至らず、製品版ではデータセンターエディションにIA-64版をリリースした以外はインテル・アーキテクチャ系のみの提供となった。Windows Server 2008 R2 (NT 6.1)では、IA-32に非対応となったと同時にIA-64への対応を終了することが明らかとなっている。
後にマイクロソフトがXbox 360でPowerPCを採用した際、搭載されるOSはPowerPC版Windows NTの資産を利用したのではないかとの憶測が流れたが、マイクロソフトはこれを否定し、x86を採用したXbox初代のOSを新たにPowerPCに移植したものであるとしている。Xbox 360の開発環境として、PowerPC G5を搭載するApple製Power MacにPowerPC用に新たに移植されたWindows XP (NT 5.1) が搭載されているが、市販はされていない。
Windows RTはタブレットコンピュータに多く採用されているARMアーキテクチャでNTカーネルが動作するように開発されたものである。
2016年12月、ARM64への対応が発表された。
Windows NTのコアであるNT Executiveは、セキュリティに対して非常に厳しい設計が行われている。カーネルから提供されるオブジェクトは基本的にセキュリティ記述子を伴っており、利用するユーザーによってアクセス権が細かく設定されている。XPユーザーではあまり見かけないであろうが、それ以前のバージョンのNT系列OSではファイルにアクセス権を非常にこと細かに設定できる。XPではエクスプローラーからではなく、コマンドプロンプトからCACLSコマンドでアクセス権を設定する。なお、Professionalでは簡易ファイル共有を停止することにより、2000以前と同様のセキュリティ設定タブがGUIで利用可能になる。
下位基盤として頑強なセキュリティを持つNTだが、Windows 95のシェルや機能を移植された際に9xとの互換性の問題からそれらのセキュリティの存在を無視する実装を行ったことによりユーザーは管理者 (Administrator)権限でログオンしていないと作業しづらいといった問題が生じた。限定された権限での動作を考慮していないアプリケーションの問題等、利用する上で不都合が多々あった。
このような経緯から、Windows NT系列、特に2000からXPにかけてはユーザー(特に個人や小規模なネットワーク環境で使っているユーザー)はAdministrators権限でログオンしていることがほとんどである。これはUNIXでいえばrootでログオンしっぱなしの状態であり、非常に深刻な脆弱性をもたらす。なぜなら、あらゆるオブジェクトにアクセス可能であり、たとえばシステムファイルの書き換えを阻むものは何もないからである。これによりワームほかウイルスが侵入する隙を作ってしまい、たかだか電子メールに添付してある実行ファイルを開いてしまっただけで悲惨な結果を招くことがある。この様な問題に対しては、新しいユーザーを作りそのユーザーにはPower UserないしUser権限のみを与えるという方法がある。新しいソフトウェアをインストールできないといった問題が生じることもあるが、NT本来の頑強なセキュリティを利用できるというメリットに比べればさほど大きな問題はない。これに加え、必要なときのみ管理者権限(Administrators)を得る手段として、「別ユーザとして実行」(Windows 2000より)、「高速ユーザ切り替え」(Windows XPより)、「ユーザーアカウント制御 (UAC)」(Windows Vistaより)などの策が講じられている。
なお、NT Executiveはオブジェクトを作成する際にセキュリティ記述子にNULLを指定できる。これはWindows NT系OSの最大のセキュリティホールである。なぜなら、セキュリティ記述子がないオブジェクトは誰でもアクセスできるからである。たとえば名前付きイベントオブジェクトであれば誰でもそのイベントを叩いてイベントを発生させることが可能であるし、名前付きパイプなどであれば勝手にオープンして勝手なデータを流し込むといったことが可能となってしまう。
ユーザーモードには、ユーザーが利用するアプリケーションやWindowsのサブシステム、システムプロセスの一部が配置されるメモリ領域を言う。ユーザーモードの権限のもとでは、ハードウェアやカーネルモードプロセス、カーネルモードにあるメモリへのアクセスはできない。
各アプリケーションの実行環境を提供する。
Windows XPを含めそれ以降の64ビット版では、Win64サブシステムが基本となる。Win32サブシステムはWOW64機能を用いて実装される。
Windows NT系の基本的なサブシステムである。
従来のMS-DOS/Windows 3.1系列のソフトウェアを動作させるためのサブシステムであり、WoW(Win16 on Win32)機能により互換性を保つようになっている。
Vista以降では英語版相当の機能は提供されているが、日本語版独自の機能は提供されていない。
厳密に言うとサブシステムの本体は仮想86モード、286プロテクトモード、386プロテクトモードをハンドリングする仮想マシンモニタNTVDM (NT Virtual DOS Machine) で、WOWはNTVDMがトラップしたWin16 API呼び出しをWin32 APIに呼び変えを行うグループログラムである。NTVDMは16ビットDOSシステムコールとWin16 APIを動作させることに特化した実装となっており、例えばVESA VGA BIOSなどはサポートしていない。このことは初期のDOS+Windows環境の下でDOSアプリケーションとWindowsアプリケーションを共に利用していたユーザーがNTへ乗り換える際に大きな壁となった。
すべての64ビットWindowsでWin16サブシステムは搭載されていない。特にx64の場合、Longモード、つまり64ビット命令セットが利用可能な状態での動作時に、16ビット命令セットの動作に必要な仮想86モードがサポートされなくなったという事情もある。
初期のOS/2プログラムを動作させるためのサブシステムである。セキュリティ面からこのサブシステムは停止することが望ましいとされる。Windows XPおよびWindows Server 2003以降ではサポートされていない。
POSIX互換のサービスを提供するためのサブシステムである。米国政府に納入するためにこのサブシステムを実装しなければならなかったとされ、あまり積極的に利用されなかった。OS/2サブシステムと同じく、Windows XPおよびWindows Server 2003以降ではサポートされておらず、次に述べるInterixサブシステムに取って代わっている。
POSIX互換のサービスを提供するためのサブシステムである。Windows NT標準のPOSIXサブシステムの不備を解消するため、Softway Systems社(1999年9月17日、Microsoft社に吸収合併)が開発したOpenNTを起源とする。後にUnixライクな環境を提供するServices for UNIXに標準搭載され、Windows NT系OS にネイティブで高品質なPOSIX環境が提供されることとなった。Windows Vistaの上位パッケージやWindows Server 2003よりSUA (Sub-system for UNIX-Based Applications)として標準搭載される。Windows NTに依存した部分がいくつか存在し、コンパイルする際にソースコードの書き換えが必要となることがある。惜しまれつつもWindows 8.1 / Windows Server 2012 R2よりInterixサブシステムは廃止された。代替手段としてHyper-Vを利用した仮想Unix環境、もしくはCygwinの利用が推奨されている。
Windows Subsystem for Linuxとして2016年3月に発表されたネイティブLinuxレイヤーを提供するサブシステムである。LinuxカーネルのシステムコールをNTカーネルのシステムコールに変換することによりLinuxアプリケーションのネイティブ動作を実現している。Interixサブシステムではソースコードの修正やInterix用にコンパイルを行う必要があったが、Subsystem for Linux ではUbuntu Linuxとバイナリレベルでの互換性を実現しているため、Ubuntuでビルドしたバイナリをそのまま実行できる。bashやEmacsなどUnix/Linuxのソフトウェアが利用可能となる。
カーネルモードには、NT Executiveやカーネル、各デバイスドライバが配置されるメモリ領域を言う。カーネルモードにおかれるプロセスには、ユーザーモードに存在した各種の制限はない。
Cache Manager
Memory Managerに一部機能は依存するが、I/Oのパフォーマンス管理をする。
Configuration Manager
レジストリを管理するコンポーネント。
I/O Manager
ハードウェアデバイスに依存しないI/Oを提供し、I/Oを管理する。
Security Reference Monitor
サブシステムのセキュリティの管理やACLを通してオブジェクトやリソースへのアクセスの制御、ユーザアカウントやログオンセッション管理を取り仕切るコンポーネント。
IPC Manager
プロセス間通信を管理するコンポーネント。
Process Manager
プロセスやスレッドの管理をするコンポーネント。
PnP Manager
プラグアンドプレイを管理するコンポーネント。
Power Management
CPUやその他ハードウェアの電源管理をするコンポーネント。
Window Manager/GDI
ウィンドウ管理やグラフィックを行う。
Object Manager
サブシステムとシステムコールがWindowsのリソースへのアクセスを管理する。
Local Procedure Call
プロセス間通信の接続を提供する。サブシステムとの通信に利用される。またRPCのローカル転送でも用いられる。
Memory Manager
メモリや仮想メモリの管理をするコンポーネント。
NTカーネルはNT ExecutiveとHALの中間にある。NT 5.2までは幾つかのNTカーネルが存在したが、Windows Vistaからはntoskrnl.exeに統一された。
ntoskrnl.exe - 標準的なPC
ntkrnlpa.exe - 標準的なPC(32ビットWindowsのみ。PAEが有効なときのみ。)
ntkrnlmp.exe - マルチプロセッサPC
ntkrpamp.exe - マルチプロセッサPC(PAEが有効なときのみ。)
等、幾つか実装が分かれていた。
HALを除くカーネルモードで動作するプログラムをハードウェアから分離する層である。カーネルとの分離が理想だが、HALはカーネルと共存関係にある。また、極僅かのx86用の命令が含まれている(カーネルでエミュレートされる)。NTカーネルとHALは独立しておらず、NTカーネルがハードウェアに直接アクセスを行うこともあったが、Windows VistaからNTカーネルとHALの依存関係は無くなり、hal.dllに統一された。
hal.dll - 標準的なPC
halaacpi.dll - APIC ACPI PC
halacpi.dll - ACPI PC
halapic.dll - APIC PC
halmacpi.dll - マルチプロセッサACPI PC
halmps.dll - マルチプロセッサPC
halsp.dll - Compaq SystemPro
halborg.dll - Sillicon Graphics Workstation
等、幾つかのHALが存在していた。HALはOSインストール時に自動的に選択される。
NT系列のOSは当初より従来のWindows 9x系には見られない「サービス」という概念を採用している。基本的にはUNIXのデーモンとそれらをコントロールする体系(RC)を統合したものである。サブシステムと似ているが必ずしもカーネルと密に連携を取る必要はない点が異なっており、マイクロカーネルにおけるサーバプログラムも含まれている。サーバプログラム、クライアントプログラム、セキュリティ管理、プロトコルスタック、デバイスドライバ、ファイルシステム、仮想マシンマネージャ等は全部サービスとして構成されている。
サービスとしてシステムに組み込まれているモジュール群は標準状態で100を超えるが、そのうち常時稼動しているサービスは20–30個であり、全サービスが常に起動しているわけではない。
サービスのメリットは、オペレーティングシステムの構成要素をモジュール化し運用上必要なサービスを精査して管理することで、セキュリティを向上させリソースの無駄を排除しシステムのパフォーマンスを高められることなどである。
サービスは、特定のユーザーのもとで動作する。一般的には、サービス用として用意された次のユーザーのいずれかを用いる。なお、LocalSystem以外はWindows XPで新設された。
下2つに当てはまらないほとんどのサービスに適する。
Windowsネットワークへのアクセスの際、コンピュータ自身のアカウントで認証を受けられる点がLocalServiceと異なる(この点、LocalServiceでは権限の低い匿名アクセスとなる)。
ユーザーモードにおいて最も強力なSYSTEM権限のもと動作する。システム全体に影響を与えるようなサービスで使用する。
それ以外のユーザー権限を割り当てることも可能である。これには、サービスがアクセスできる範囲を限定しセキュリティを高める効果がある。例えば、不特定多数からアクセスが予想されるサービスに特定のディレクトリへのみアクセスを許可し、それ以外は不許可にしたとする。こうすることにより読み取られたくないファイルへのアクセスが抑制できる。これらの管理権限の管理は各種資源が持つアクセス制御リストへの適切な編集が必要である。
サービスの管理をWindows NT 4.0までは「コントロールパネル」で、Windows 2000以降では「サービスマネージャ」によって行える。NT 4.0まではNTサービスという名称であり、Windows 2000からWindowsサービスに名称が変更された。
ユーザーやシステムからハードウェアへのI/Oをそのハードウェア固有の機能から抽象化するものと、システムサービスを提供するものと両方ある。64ビット版Windowsでは、セキュリティと動作の安定性向上のため原則としてデバイスドライバの署名が必須とされている。NT 4.0まではWindows NTカーネルモードドライバが使われ、Windows 2000以降はWindows Driver Modelが使われている。WDMはWindows 98やWindows Meでも同じソースコードでドライバが開発できるように作られている。