Windows 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においてようやくデスクトップOSとしても市場に認められることとなった。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が統合・共通化された。

セキュリティ

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のサブシステム、システムプロセスの一部が配置されるメモリ領域を言う。ユーザーモードの権限のもとでは、ハードウェアやカーネルモードプロセス、カーネルモードにあるメモリへのアクセスはできない。

サブシステム

各アプリケーションの実行環境を提供する。

Win64サブシステム

Windows XPを含めそれ以降の64ビット版では、Win64サブシステムが基本となる。Win32サブシステムはWOW64機能を用いて実装される。

Win32サブシステム

Windows NT系の基本的なサブシステムである。

Win16サブシステム

従来の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へ乗り換える際に大きな壁となった。
x64およびIA-64エディションにはWin16サブシステムが搭載されていない。特にx64の場合、Longモード、つまり64ビット命令セットが利用可能な状態での動作時に、16ビット命令セットの動作に必要な仮想86モードがサポートされなくなったという事情もある。

OS/2サブシステム

初期のOS/2プログラムを動作させるためのサブシステムである。セキュリティ面からこのサブシステムは停止することが望ましいとされる。Windows XPおよびWindows Server 2003以降ではサポートされていない。

POSIXサブシステム

POSIX互換のサービスを提供するためのサブシステムである。米国政府に納入するためにこのサブシステムを実装しなければならなかったとされ、あまり積極的に利用されなかった。OS/2サブシステムと同じく、Windows XPおよびWindows Server 2003以降ではサポートされておらず、次に述べるInterixサブシステムに取って代わっている。

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に依存した部分がいくつか存在し、コンパイルする際にソースコードの書き換えが必要となることがある。惜しまれつつもWindows8.1 / Windows2012 R2よりInterixサブシステムは廃止された。代替手段としてHyper-Vを利用した仮想Unix環境、もしくはCygwinの利用が推奨されている。

Linuxサブシステム

Windows Subsystem for Linuxとして2016年3月に発表されたネイティブLinuxレイヤーを提供するサブシステムである。LinuxカーネルのシステムコールをNTカーネルのシステムコールに変換することによりLinuxアプリケーションのネイティブ動作を実現している。Interixサブシステムではソースコードの修正やInterix用にコンパイルを行う必要があったが、Subsystem for Linux ではUbuntu Linuxとバイナリレベルでの互換性を実現しているため、Ubuntuでビルドしたバイナリをそのまま実行できる。bashやEmacsなどUnix/Linuxのソフトウェアが利用可能となる。

カーネルモード

カーネルモードには、NT Executiveやカーネル、各デバイスドライバが配置されるメモリ領域を言う。カーネルモードにおかれるプロセスには、ユーザーモードに存在した各種の制限はない。

デバイスドライバ

ユーザーやシステムからハードウェアへのI/Oをそのハードウェア固有の機能から抽象化するものと、システムサービスを提供するものと両方ある。64ビット版Windowsでは、セキュリティと動作の安定性向上のため原則としてデバイスドライバの署名が必須とされている。NT 4.0まではWindows NTカーネルモードドライバが使われ、Windows 2000以降はWindows Driver Modelが使われている。WDMはWindows 98やWindows Meでも同じソースコードでドライバが開発できるように作られている。