このページの本文へ

Windows Info 第123回

Windows 3.1時代のファイルマネージャーを見てWindowsを振り返る

2018年04月22日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows 3.0/3.1時代のファイルマネージャーで思い出す
Windowsの歴史

 Windows 3.0/3.1時代に使われていたファイルマネージャーがオープンソースになったという。ファイルマネージャーは、現在のWindowsエクスプローラーの祖先みたいなファイル管理ツールである。Windows 3.0/3.1では、今のスタートメニューに相当するものとしてアプリケーションのアイコンを登録できる「プログラムマネージャー」がシェルとして使われていた(設定でファイルマネージャに切り替えることもできた)。

オープンソース化され、Windows 10でも動作するようになったファイルマネージャー。28年前に作られたWindows 3.0に標準搭載されていた、現在のエクスプローラーのご先祖様である

 さらに言えば、Windows 3.0以前のWindows 2.11までは、MS-DOSエグゼクティブというファイル管理ソフトウェアがシェルになっていて、その後継として登場したのがファイルマネージャーとなる。

 そもそもWindows 3.0/3.1は、Win16環境のWindowsだ。Windows 3.0の発表は1990年5月。いまから28年も前の話である。若い読者にとっては、石器時代の話にも等しい昔の話だろう。そもそも、PC自体が一般にはあまり普及しておらず、使っていたとしてもMS-DOSユーザーのほうが多かった時代だ。筆者はこの頃、家電メーカーでPCやワークステーション関係の仕事をしており、こうした動きのまっただ中にいた。

 現在のWin32環境とは違い、Windows 1.01で作られた16bit CPU向けの「オペレーティングエンバイロンメント」では、最初にMS-DOSが起動しており、デバイスやファイルシステムのアクセスは、MS-DOSやBIOS経由で行なわれていた。当時の最新CPUはi386DX/SXだったが、Windows 3.0では16bitのリアルモードのみしかない8086でも動作するようになっていた。このため起動時にCPUやハードウェアに合わせて3つの起動モードがあった。

リアルモード:8086の16bitリアルモードで動作
プロテクトモード:80286の16bitプロテクトモードで動作
エンハンスドモード:i386DX/SXの拡張プロテクトモード(32bitモード)で動作

 このうちリアルモードは、Windows 3.1では廃止された。

 Windows 3.0が出たとき、マイクロソフトとIBMは、次世代の標準プラットフォームをかけて競争の真っ最中だった。話は1985年にまでさかのぼる。マイクロソフトとIBMは、次世代OSの開発で提携する。

 今にしてみれば、なぜIBMとマイクロソフトが提携してOSを開発することになったのかはよくわからないが、当時の記憶では、IBMが1984年に発表したMS-DOSのマルチタスク環境であるTopViewを極度に警戒していた。マイクロソフトは1983年にWindowsを発表していたが、出荷されるのは1985年になってから。IBMのTopViewは、テキスト表示ながらMS-DOSアプリをウィンドウ内に表示できるマルチタスク環境だった。

 このIBMとマイクロソフトの提携の成果として作られたのがOS/2である。OS/2は1987年にPS/2とともに出荷されるが、この時点ではGUIはなく、80286のプロテクトモードにしか対応していなかった。その後、マイクロソフトはOS/2を自社の製品ラインとはせず、OS/2 1.2(1989年)を最後にOS/2の開発から手を引き、OS/2 Ver.3として開発中だったOSをWindows NTとする。

 当時のマイクロソフトは、MIPSのR3000上でWindows NTを動かしており、PCのOEMメーカーにR3000ベースでのコンピュータ開発を打診していたことがある(ACEプロジェクト)。

 その裏でマイクロソフトが開発を進めていたのがWindows 3.0(1990年)だ。Windows 3.0は、本来はOS/2とAPI的に互換性を持たせる予定で、GUIのスタイルに関してはOS/2のプレゼンテーションマネージャーと同じになるように開発が進んでいた。しかし、Windows 3.0は、OS/2互換のAPIは採用せず、Windows 2.11(1989年)の上位互換であるWin16を継承している。

 この頃のWindowsは、MS-DOSの上に乗っており、仮想記憶も特権モードもなく、メモリ空間が最大でも1MBしかない8086で動作させるため、大変“無理”のある作りになっていた。マルチウィンドウを実現するためにマルチタスクが必要だったが、採用されたのは「協調的マルチタスク」であった。

 これは、アプリケーションが明示的に制御を戻したり、APIを呼び出したタイミングでタスクを切り替えるもの。アプリケーションが制御を返さなければ、ずっと他ののタスクは止まったままになる。こうしたさまざまな制限とMS-DOSとの互換性を保つために、Windowsのアプリケーションは特殊な構造になっていた。

今のWindowsアプリではありえない部分が
ソースコードから見られる

 たとえば、Windowsアプリケーションは、C言語で開発するときには、WinMainという関数から起動するのである。

Win16アプリでは、メインプログラムはWinMain関数から開始する

 これは、公開されたファイルマネージャーにも残ったままだ。多少C言語を使った方なら、C言語の起動は、main関数であることはご存じだろう。いくつかの理由から、Windows 1.01が作られた当時、main関数からWindowsアプリケーションを起動させることはできなかった。

 1つには、当時は、MS-DOSが主流で、MS-DOSとWindows両対応のアプリを開発するという目的があったと思われる。WindowsのアプリもDOSのアプリも同じ拡張子「exe」を使っており、Windowsアプリケーションは、先頭部分にMS-DOS互換のプログラムを置くことができるようになっている。

 実際に当時のWindowsプログラムをMS-DOS上で起動すると、「このプログラムはWindows用」とメッセージを表示して終了することが多かったが、原理的には両方で動作するプログラムの開発が可能だった。そうなると、C言語のランタイム部分は、MS-DOS用にそのまま残さねばならない。その場合、MS-DOSでmain関数を使ってしまうため、WindowsはWinMain関数を呼び出してアプリを動作させるように作られた。

 当時のMS-Cは、Lattice-CのOEM版であり、ランタイムや起動コード部分に手を入れることは難しかったのだと思われる。そもそも、Windows自体がOEM版のMS-Cで開発されていた。

 ファイルマネージャーのソースコードをみると、WinMainがそのまま残っている。WindowsもWin32からは、普通にmain関数から起動できるのだが、このとき互換性のためWinMainも残された。しかし、現在でもこの名残が残っているようで、WindowsアプリケーションのランタイムがちゃんとWinMainを呼び出してくれるようだ。

 また、このソースコードでは、現在では「ご禁制」ともいえる、ハンガリアン記法が見られる。

今ではあまり見かけなくなったハンガリアン記法が残るソースコード

 このハンガリアン記法とは、当時マイクロソフトが推奨していた変数の命名方法だ。たとえば、ロングポインターを格納する変数であれば「lp」、ハンドルなら「h」、整数ならば「i」や「n」といったデータの「型」を変数名の頭に付ける方法である。こうしておけば、たとえばlpで始まる変数にhで始まる変数を間違って代入しないだろうと言われていた。当時マイクロソフトは秘密にしていたが、Win32APIなどがデータ構造をアクセスさせるために返すハンドルは、実はポインターだった。

 現在では、あまり意味がないとして、.NETなどでは非推奨となっていて、使う人をほとんど見ない。そもそも、ハンガリアン記法とは、数式を「演算子」と「引数」の順に表記する「ポーランド記法」に由来する命名。この記法を考えた論理学者の出身国から取られた。

 もともとは論理学の表記なのだが、コンピューターで数式を処理する際にはこの形式に変換することで処理しやすくできるため、ソフトウェア開発者には、比較的知られた名称だった。同様にハンガリアン記法は、考案者(チャールズ・シモニー)の出身国から取られた。

 というわけで、ファイルマネージャーのソースコードを見ると、今では見ることはほとんどないハンガリー記法のソースコードが含まれている。だが、このハンガリアン記法、マイクロソフトがWindowsの開発者にも推奨していたが、.NET Frameworkでは利用を禁止している。

.NET Frameworkの「一般的な名付け規則」(General Naming Conventions)では、「DO NOT use Hungarian notation.」とハンガリアン記法を禁止している

 このため、最近のコードサンプルなどではまず見ないのだが、筆者など、ついつい「lp〜」で始まる変数を作ってしまうことが今でもある。

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
2
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,880
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
5
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,100
6
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥2,111
7
【Amazon.co.jp限定】バッファロー microSD 128GB 100MB/s UHS-1 U1 microSDXC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-128U11HA/N
【Amazon.co.jp限定】バッファロー microSD 128GB 100MB/s UHS-1 U1 microSDXC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-128U11HA/N
¥3,080
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥4,918
9
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
¥1,980
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン