WindowsOSの歴史を振り返る
先ずOSとは何かということを知らねばなりません。OSを簡潔に表現すると、ハードウェアを制御し、プログラマーに対して適切なサービスを提供するためのソフトウェアです。ハードウェアを制御すというところがポイントで、OSを正しく批評するにはハードウェアの状況を見なければなりません。OSの歴史はハードウェアの歴史とマッチしているといっても過言ではないでしょう。特にCPUの歴史との関連が深いです。それを踏まえて、Windowsの歴史を振り返ってみましょう。
1978年インテルは16ビットCPU(アドレスバスは20ビット)の8086を1978年に発表しました。当時としては高性能な製品で、1Mバイトのメモリを操作できるようになりました。しかしこのCPUは、既存の資産を無効にしてしまいかねないものだったので、外部機器とのやり取りを8ビットに抑えた8088を1979年に発表しました。これにより、インテルのシェアが一気に高くなります。これが運命の始まりです。
大型コンピューターのシェアが80%の超巨大企業IBMが、小型コンピューターに目を付けました。といっても、IBMからしてみれば、小型コンピューターはおもちゃのようなもの。本格的に経営資源を割くわけにはいかないと考え、マイクロソフト社(ビルゲイツ氏)にOS開発の依頼をしました。
この時できたのが、初めてのWindowsであるMS-DOS(当時はPC-DOSと呼ばれていた)です。このOSは他社の権利を買い取り、改良する形で作成しました。何故ならば、IBMのPCの発売予定日が1981年ごろだったので、BASICコンパイラを販売していたマイクロソフト社でも、1年の期間でOSを0から開発する余裕がなかったのです。ちなみに、この買い取ったOSの元々の名前は86-DOSでした。
MS-DOSの仕組みは極めてシンプルです。割り込みベクタテーブル、IO.SYS、MSDOS.SYS、COMMAND.COM、デバイスドライバ領域、ユーザー領域、VRAM領域にメモリを分けただけのものでした。ユーザーインタフェースもCUIでした。とはいえ、当時のOSとしては良いものです。
MS-DOSのユーザーインタフェースが文字ベース(CUI)だったので、一般ユーザーは使いにくいものでした。そこで、GUIベースのOSをめざし、1985年にWindows1.0を発売しました。ただし、本当のところはOSというよりも、アプリケーションの1つでした。しかもGUIゆえに640KBの容量があったので、ユーザーが使えるメモリ容量は少ないです。なおかつ、メモリを節約するためにウィンドウを重ねることすらできませんでした。
ウィンドウを重ねられなかったので、Windows2.0で拡張メモリ機能を使って、解決しました。これがユーザーの心をつかみヒットしました。しかし、CPUの進化は止まりません。インテルのCPUが進化するに従い、新しいOSを発売していきます。
インテルは1982年に、メモリ容量16MB対応、プロテクトモードを有した80286を発売します。プロテクトモードというのは、セグメントと呼ばれる単位でメモリを区切り、その範囲内のデータを保護したり、マルチタスクを実現したり、仮想記憶を実現したりできます。非常に画期的な機能なので、マイクロソフト社は、プロテクトモード対応のWindows3.0を発売します。
Windows3.0はMS-DOSの流れを受けていたので、ひとまずMS-DOSをリアルモードで立ち上げてから、改めてプロテクトモードで動くWineos3.0を起動する形でした。なぜこのような形でMS―DOSを残すのかというと、既存のお客様が引き続き、既存のアプリを使い続けられるようにしたかったからです。既存のお客様を大にする所が大成功のカギだと思います。
Windows3.0の核となるのは、DOSX.EXE(32ビットCPUではWIN386.EXE)です。DOSX.EXEはセグメント機能を使いこなすために、セグメントに関する情報を管理したり、プロテクトモードに移動したり、権限を決定したりしていました。
ここでいう権限とは、メモリにどれだけアクセスできるかを表す度合です。80286CPUは0~3の特権レベルをセグメント毎に設定できるようになっていました。この値が小さいほうが強い権限を持っていて、0はメモリのどこでも自由にアクセスできます。でもそれだと簡単にクラックされるので、普通のユーザーは権限が3になるように設定します。これをやっているのが、DOSX.EXEです。ちなみに、Windows3.0はWin16APIを使っていました。
先ほどWIN386と書きましたが、Windows3.0は人気があったので、32ビットCPUである、80386が発売された1995年まで使われていました。Windows系開発者の中で有名な御三家、KERNEL,USER,GDIもこの時すでに存在していました。どうやらWin16APIができたときから居るようです。人気があったので、既存のお客様の要望に応えるために、16ビットと32ビットのハイブリッドOSになっていたのです。
この当時の問題はセグメント方式が原因で発生する、通称「64KBの壁」でした。アドレスバスは増え続け、最大メモリ容量は増えたのですが、セグメントの使用で一度に64Kまでしかメモリを扱えませんでした。「64Kの壁」を破るために、32ビットCPUとそれに対応するWin9x系(95,98、ME)とWinNT系が登場しました。
Win9x系は、Win3.x系の拡張モード(32ビットに対応するためのモード)にWin32APIを付与して作られたOSです。マイクロソフト社としても、本格に敵に32ビットCPUに移行したかったのですが、既存のお客様が持っている遺産を無視できなかったのです。一方、WinNT系は始めから32ビット主眼に作られたハイエンドなOSでした。
Win9x系の特徴は仮想マシンマネージャ(VMM32.VXD)です。Win3.xにはOSを仮想的に作ることはできませんでした、Win9xではそれが可能でした。これにより、MS-DOS以来の資産に対応していました。また、仮想マネージャは、32ビットCPUの機能を使うための動作モードを以降や、メモリ管理などをしていました。これにより、まだ不安定さが残るもののWin3.xよりも安全なOSとなりました。ちなみに、Win9xでもMS-DOSから起動していました。
先ほどWin9x系は「まだ不安定」だと書きましたが、その理由はWin16APIとWin32APIとの共存のための仕組みによるものでした。Win16とWin32はアドレスの扱いが異なります。また、仮想マシンもはっきりとわかれていませんでした。これらの理由により、どうしても不安定にならざるを得ませんでした。Windows95でよく再起動した思い出を持っている人は多いと思います。
一方、WinNT系は始めから32ビットCPUを主眼に設計されており、仮想マシンも個々のアプリケーションごとに用意できました。これにより、Win9xよりも飛躍的に堅牢になりました。始めからこうすればいいというのは簡単ですが、当時の状況を考えると、既存のお客様を捨てることはできないので、仕方がないと思います。現実に商売している企業は、机上の空論とは違い、妥協も必要なのです。
WinNT系にはもう一つ特徴があります。それは、オブジェクト指向を取り入れた事です。WinNT系はオブジェクト指向を目指して作られているので、カーネルの構造がはっきりと役割分担されています。この思想はWindows Vistaで成熟します。
Windows Vistaは、オブジェクト指向OSが進化して、デバイスドライバもフレームワーク化されています。後で登場したWindws7の人気がありすぎて、批判されがちなVistaですが、OSを知っている人は、デバイスドライバの事を思い出し、無暗に批判しないでしょう。この時から、様々なサービスを提供する形へと進化しています。
Windows7の事は記憶に新しいでしょう。Windows7では、さまざまなデバイスがサポートされるようになりました。例えば、センサー、タッチ操作、生体認証などです。Windows7からあらゆるデバイスにマッチするOSを目指していると思います。
Windows8とWindows8.1は、みんな覚えているでしょう。では違いは分かりますか?意外と知られていないと思いますので、違いを重点にして説明します。Windows8はクラウド対応で、従来よりもネットワークを意識して作られています。また、パームトップ型PCの対応も意識されています。その為インタフェースが変わって、大バッシングされました。そして、Windows8.1でスタートボタンが復活して、そこだけが注目されています。でも、実のところ、カーネルのバージョンが上がっているので、それだけではありません。
私が調べたところ、デバイスドライバレベルで多くの違いが見られました。タイマーが高精度になり、より快適な動作ができるようになりました。また、スリープ状態でも動くタイマーが追加されました。他にも細かくバージョンアップしています。カーネルのバージョン6.2から6.3へ上がったのは伊達ではないようです。さらに、最新のハードウェアに対応しています。
私が注目しているのはWindows8で登場したWinRTです。オブジェクト指向OS+コンポーネント思考+サービス思考を実現するためのものでしょう。以前からマイクロソフト社は、OSを.NET化するといっていましたが、その試みが実現しつつあるのではないでしょうか?これから先もWindowsから目が離せません。
纏めます。WindowsOSの批判は主に、移行期の製品を出す(Windows MEやWindows Vista)と、既存のお客様の事を考えていない(主にスタートボタンがない)です。しかしながら、CPUやハードウェアは常に進歩しており、Windowsに限らずどのOSも常に移行期です。Unix系OSも常に完成していません。人類が進化し続ける限り、OSが完成することないのです。また、既存のお客様の事を大切にしているからこそ、さまざまな努力と工夫を行い、OSを徐々にレベルアップさせています。マイクロソフト社の技術力ならば、互換性を無視した斬新なOSを作れるでしょうが、そうすると多くの既存のお客様が困ってしまいます。机上の空論を言うのは簡単ですが、実社会に存在する企業は、ハードウェアベンダーやお客様の事を考えつつ製品を作らねばならないのです。したがって、感想ならばいざ知らず、批判するときは、経営に関する知識とOSに関する知識を持ち、過去の歴史を踏まえながら意見するべきだと私は思います。