OS2/歴史/temp/MichalN/OS2_2.0

OS2/歴史/temp/MichalN/OS2_2.0

※このページの文章は、The History of OS/2OS/2 2.0 に関する部分の日本語訳です。元のページに貼り付けてあった画像は持ってきてないので、元のページを各自ご参照ください。

OS/2 2.0

IBM は OS/2 バージョン 2.0 を1992年3月にリリースしたが、これはまったく予想外というわけではなかった。 実際32ビット OS/2 は最初期から確約されていたわけだし、Gordon Letwin はその著書 "Inside OS/2"*1(念のため言っておくと、この本は1988年に出版された)の中で "OS/2 - 386" の概略をあきらかにしていた。 32ビット OS/2―コード名 Cruiser― に関する作業はおそらく、IBM と Microsoft が OS/2 1.2 を必死でやっつけている真っ只中だった1988年中のいつごろかに始まった。IBM が(単独で)OS/2 1.3 に関する作業をしていたとき、Cruiser の開発はすでに進行中だった。OS/2 2.0 の主席設計者は Michael S. Kogan で、技術書にして名著 The Design of OS/2 *2の共著者である。

そろそろスクリーンショットに移ろう。OS/2 2.0 はこんな感じだった。

(figure: OS/2 2.0 LA)

古参 の OS/2 使いから「これ違うだろ!」と怒鳴られそうだ。だが間違っていないことは保証しておく。 上のスクリーンショットは OS/2 2.0 LA すなわち限定公開版 "Limited Availability"(今ならコレクターズアイテムだろうか)で撮ったものである。このリリースはその名の通り小売販売されず、ベータテスターと「特別な」顧客にのみ提供された。OS/2 2.0 LA は1991年11月に出荷された――1991年終りまでに IBM が OS/2 2.0 をリリースできたらフロッピーディスクを食ってやる、と公言していた Steve Ballmer への嫌がらせだったかもしれない(生憎バルマー氏はフロッピーを食べなかったので、明らかな悪意を持った人々が彼は自分の言葉を守らないと言い立てていた。マイクロソフトの輝かしいイメージを汚すためなら何でもやりかねないような人がいたのである)。 LA リリースが出た理由として、IBM が32ビット OS/2 を1991年中に提供するという契約を顧客と交わしていたということが考えられる。IBM はいつもどおり契約を守り、そうでなくても少なくとも守ろうと努力するということである。

LA 版は GA(製品版 General Availability)リリースと非常によく似ていたが、見るからに未完成で、作業の終わっていない細目の詳細が記された長い README ファイルがついていた。 抜け落ちていた主要な機能はシームレス Win-OS/2 で、これは OS/2 のデスクトップ上で Windows 3.0 を実行できるようにするものである。OS/2 2.0 LA は Windows アプリケーションをサポートしていたが、それは全画面セッション内だけだった。 これは書いておきたいところだが、2.0 LA では内蔵版の Windows が "IBM Win-OS/2" という名前ではなく、単なる "Windows 3.0a" で、個人的に言える限りでは大部分のバイナリも Windows 3.0a と実際まったく同じ物だった。

OS/2 2.0 LA には他にも少し違うところがあった。スクリーンショットにあるように、各ウィンドウの小アイコンがシステムメニューボタンになっておらずタイトルバー上にはじき出されている。これは古い IBM CUA '91 デモの名残りで、開いたフォルダ(のタイトルバー)に "Contents" とあるのもそういうことである。

OK。そろそろ「本物」にいってみよう。OS/2 2.0 GA はこんな感じだった。

(figure: OS/2 2.0 GA)

ごらんの通り、それほど違いはないが、GA 版デスクトップはすこしばかり物が多くなっている。

一大特徴

OS/2 最大の売りはシステムそのものだった。しかし単体で最も重要な新機能はユーザインターフェース、いわゆるワークプレースシェル(略して WPS)だった。これは OS/2 1.3 や Windows 3.0 の GUI とは完全に別物だった。新しいインターフェースはオブジェクト指向であり、すべてが今やオブジェクト、すなわちドライブオブジェクト、プリンターオブジェクト、プログラムオブジェクト、シュレッダーオブジェクトなどなどであった。オブジェクトはドラッグアンドドロップで操作――移動、コピー、印刷、削除その他を行うことができた。マウスの右ボタンは WPS によってようやく用途を与えられ、ポップアップメニューのオープンやドラッグアンドドロップに使われた(もちろんすべて再設定可能なのだが)。

OS/2 2.0 ベータテスタの中に WPS に対して強い抵抗(object)を示す人がいたとしても驚くことではなかった。何年かたつと、多くの人々(たぶんその人たち)は WPS こそ OS/2 の特徴なのだと主張した。

技術的側面

OS/2 2.0 は初めて広範に利用されたPC用32ビットOSだった。プログラマーに完全な32ビット API、そしてあの嫌なセグメントどころか64Kバイトの制限をも追い払うフラットなプログラミングモデルを提示した。16ビットプログラミングから32ビットに移行し(まだ DOS だったのだが)、なんとも救われたような気持ちになった時のことを私はいまでも覚えている。 まず1980年代の終りに Pharlap のような 386 DOS エクステンダが出たが、それらにはあらゆる種類の「問題」がつねに存在し、プログラミングは必ずしも容易でなかった(バイモーダル割り込みハンドラとかさ?)。

32ビットの内幕はすこし異なる。システムの大部分は16ビットのままだった―主な理由は時間的制約と互換性である。時間的制約により、OS/2 2.0 ではグラフィックエンジンは16ビットのままだった(そしてこのため、プレゼンテーションマネージャのビデオドライバとプリンタドライバもそうだった)が、後に OS/2 2.1 では32ビット版に置きかえられた。 互換性によって OS/2 1.3 互換の物理デバイスドライバ(PDD : Physical Device Driver)を OS/2 2.0 が使えるようになった。 同様に OS/2 カーネルの多くの部分が16ビットで、これは過去の16ビット OS/2 アプリケーションをサポートするためだった。 しかし、マルチプル仮想 DOS マシン(MVDM:Multiple Virtual DOS Machine)のサポートやページングをサポートしたメモリマネージャなどといったシステムの主要部はまったくの新規で完全に32ビットだった。新規コードの大部分はCで書かれ、1.x でのように昔ながらのアセンブラではなかった。

プラットフォームの統合化

「統合プラットフォーム(The Integrating Platform)」が IBM による OS/2 2.0 の売り文句だった。新しい32ビットの OS/2 ソフトウェアに加えて、DOS や Windows や OS/2 1.x の既存アプリケーションを個別に動かせるということだった。インテル 386 以降の CPU の仮想 8086 モードを全面的に利用したものだった。複数のウィンドウや全画面セッションのみならず、ユーザが「特定」DOS セッションを作成すれば、組み込み DOS サポートを使わずに DOS 4.0 や 5.0、DR-DOS はおろか CP/M のようなものまでブートさせて同時に動かすことができた。

Windows アプリケーションのサポートは DOS サポートを論理的に拡張したものだった。全画面 Win-OS/2 セッションは仮想 DOS マシン内で Windows 3.0 を基本的にはそのまま実行する。シームレス Win-OS/2 セッションは PM/WPS アプリケーションと協調しなければならないため、いろいろと細工がしてあった。Win-OS/2 特別版のディスプレイドライバによってこれが達成された。 IBM のとったアプローチはおそらく最高のパフォーマンスを提供したが、これはまず不幸にして大きな欠点となり―つまり OS/2 ディスプレイドライバの作成がより困難に(言いかえれば、より高価に*3)なったわけで、その後ドライバが増えないことの一因になったことは間違いない。 つまりベンダは完全な OS/2 ドライバだけでなく、Windows ドライバの OS/2 専用版も作らなければならなかった。 IBM が成すべきだったことは、Win-OS/2 を PM コールにマッピングする「ブリッジ」ドライバを作り、ベンダが OS/2 ドライバだけを提供すればすむようにすることである(これは新しい GRADD ドライバでとられたアプローチである)。

しかし OS/2 の DOS サポートはすばらしかった。DOS のアプリケーションを主に使っていた多くのユーザでさえ OS/2 を使ってみたのだが、それもマルチタスク能力が追加されたゆえだった。個人的には OS/2 の DOS サポートは本物の DOS に次ぐものであり Windows 9x よりもよいものだった(NT はともかくとして)と思う。

今になってみれば言えることだが、DOS や Windows アプリケーションのきわめて高水準なサポートというのは諸刃の剣だった。 それはユーザを DOS と Windows のアプリケーションにより留めおくことになると同時に、DOS/Windows 向けにすれば DOS/Windows と OS/2 の市場を相手にできたという理由によって開発者にネイティブ OS/2 プログラムの開発を手控えさせることになった。 差し引きで見れば駄目ではなかったが、IBM が当初期待していたほどよいことにはならなかったと私は思っている。

インストール

さいきん未開封の OS/2 2.0 を一本買うことができた。IBM は 3.5 インチや 5.25 インチの 2HD フロッピー版のほかに CD-ROM 版も販売していたが、1992 年にはまだ CD-ROM ドライブは普及にほど遠く、OS/2 2.0 は数種の SCSI CD-ROM しかサポートしていなかった。私のバージョンは 3.5 インチフロッピーで、総計21枚である。

私は OS/2 2.0 を自宅のマシン、RAM 256M の PIII-600 にインストールした。 インストールは終始スムーズとはいかなかった。 最初の障害は、長年を経て21枚のフロッピーのうち1枚に不良セクタができていたことだった。 それほど驚くことでもはない。 だから不良ディスクがもっとも重要な1枚であるインストール・ディスケットだったことにもやはり驚いてはいけないのだ。 しかし太っ腹な古参 OS/2 ユーザの好意により、私はすぐにフロッピーイメージを得ることができた。 すると OS/2 はフロッピーからのブート中にマシンをリブートしてしまうのだった。 そこで私はマシンの BIOS 設定をちょっといじって CPU キャッシュを無効にすると、きちんと動くようになった―あとで知ったがこれは OS/2 2.1 でも「基本技」なのだった。 その後は何事もなくインストール。

私のマシンではこの古い OS/2 は爆速である――ブートマネージャから起動してデスクトップが完全に出るまでにほぼ9秒しかかからない。まことに残念ながら eComStation にはここまでの速さはない。

アプリケーション

OS/2 2.0 は、その数年前の OS/2 1.x と同じ問題に直面していた――アプリケーションの不足である。 DOS や Windows、OS/2 1.x アプリケーションのほとんどを動かすことができたが、新しい32ビットアプリが現われるまでには時間がかかった。IBM が当然ながら最初に、DB2 や C Set/2、LAN サーバといった32ビットソフトウェアを提供した。

コンパイラに重点を置いていたので、1992〜1993年はアプリケーションをあまり保持していない(アプリケーションを開発することが私の仕事だったわけで)。まずはじめは CorelDraw 2.5。

(figure: coreldraw 2.5 about)

これ以前に、Corel は CorelDraw 2.0 の16ビット OS/2 版を OS/2 1.3 向けに出していたらしい。 バージョン 2.5 は Draw、Chart、PhotoPaint といったものを含んだ完全なソフトウェアパッケージとなっていた。

(figure: coreldraw 2.5 install folder)

残念ながらこのパッケージはかなりのやっつけ仕事に見えた。Draw と Mosaic を除いたその他すべてのプログラムが Windows 3.x 版だったためである! CorelDraw でさえも OS/2 ネイティブのヘルプを持っておらず、巨大な Windows のヘルプファイルがひとつあるだけだった。

(figure: coreldraw 2.5 - PARIS.CDR)

だがそういったことを別にすれば、CorelDraw は実に使えるベクタードロープログラムだった。 私はべつにグラフィックアーティストでも何でもないが、TeX ドキュメントに埋め込む EPS フォーマットの図を作るにあたり幾度も CorelDraw の世話になった。

そして CorelDraw には競争相手さえいたのだ。Micrografx によって開発された Micrografx Designerであり、CorelDraw と同様に Windows 版もあった。

(figure: designer - CARSEAT.DRW)

どちらのアプリも使い込んだとは言えないが、Designer のほうがより完成度が高いように思えた。PhotoPaint と同等のツールは付属していなかったが、提供されているクリップアートとフォントのライブラリが充実していた。両者のそれ以外の違いは、CorelDraw ではプレビューウィンドウが分離されていて編集不可能ということだった。Designer ではプレビューモードとドローの直接編集もしくはワイヤーフレーム画での編集とを切り替えることが可能だった。

Micrografx Designer は Micrografx 自前の Mirrors ソフトウェアを使って開発されていた。

(figure: mirrors)

なんとも興味深いことに、どうやら CorelDraw も Micrografx Mirrors を利用していたようである。

そもそも Micrografx は Mirrors を OS/2 1.x 用に開発し、32ビット版の開発にあたっては IBM と密接な協力をおこなった。 Windows から OS/2 へのソース移植を可能にするという意味で、Mirrors は IBM の Open32 と同じコンセプトのものだった(Open32 と違って16ビット Windows を対象としていたが)。 以下の人々について記しておくのも一興だ。 Kurt Delimon と Jeff English はあの有名なプログラミング解説書である Real-World Programming for OS/2 2.11 *4の共著者なのであった。

残念ながら1992〜1993年代の OS/2 ワードプロセッサは一つも入手できていない。いずれなんとかしたいところだ。

コンパイラ

OS/2 1.x もそうだったが、OS/2 2.0 はいい開発プラットフォームだった。32ビットプロテクトモード OS として十分堅牢とはいえなかったにしても、DOS や Windows 3.x の開発者に馴染みとなっているクラッシュやハングアップ、リブートの頻繁さとはかなりの違いがあった。 OS/2 2.0 リリースの年のうちに、いくつかの32ビットコンパイラがリリースされた。すべてのメジャーなコンパイラベンダが32ビット OS/2 をサポートしたといっても過言ではないと思う――もちろん Microsoft という特記すべき例外はあったが。

OS/2 1.x は Microsoft のツールのみを使って開発された。OS/2 2.0 開発の初期段階もやはり Microsoft のコンパイラに依存していた。すなわち "Microsoft C 386 Compiler" と呼ばれていたコンパイラで、小売販売されたことはなく、OS/2 DDK の中に置かれ、デバイスドライバ(たぶん OS/2 のカーネル部も)のビルドに使われている。 このコンパイラとCランタイムライブラリの入った1990年中頃の MS OS/2 2.0 SDK を私は持っている。 ちなみにこの SDK に入っている LINK386 は、LX ではなく LE 形式*5の実行ファイルを生成した。

だが1990年の決別ののち、OS/2 コンパイラの提供について IBM がもはや Microsoft に期待できないことは明らかだった。 その一例を挙げれば、1992年の時点で Microsoft は32ビットの一般向けコンパイラを出していなかった。このため IBM トロント研究所は CSet/2 と呼ばれる32ビット C コンパイラを開発した。残念ながら私は CSet/2 を持っていないが1993年初頭にリリースされたその後継版、IBM CSet++ を持っている(これ以降のものはだいたい持っている)。

IBM はしばしば、製品のネーミングと製品同士の関連性のややこしさで顧客を実に惑わせてくれる。CSet++ もまったく例外ではなく、実際にはまぎれもないスタンドアロンのパッケージ3つから構成されていた。

  • C/C++ Tools ― C/C++ コンパイラ本体、クラスライブラリ、デバッガ、ブラウザ、プロファイラ。
  • WorkFrame/2 ― オブジェクト指向の統合開発環境。
  • OS/2 Toolkit ― OS/2 開発用のヘッダ、ライブラリ、ツール

これら3つのパッケージの関連性は実に込み入っていた。C/C++ Tools は最も単純なプログラムをリンクするにも Toolkit を必要とし、Workframe を使うことはできたが必須ではなかった。Workframe は単体で使うものではないが、理論的にはどんな OS/2 コンパイラでもサポート可能だった。Toolkit も同様である。

C/C++ Tools 2.0(私の知る限り、IBM コンパイラで C++ をサポートしたの最初のバージョン)は Workframe 1.1 と OS/2 2.0 もしくは 2.1 用の OS/2 Toolkit を使うことができた。下の画面でおわかりのように、C/C++ Tools はデバッガ、プロファイラ(Execution Analyzer というやつ)、C++ クラスブラウザ、さらには大量の C++ クラスライブラリとオンラインドキュメントが付属していた。

(figure: IBM C/C++ 2.0 folder)

おそらくパッケージ中でもっとも強力なツールは IBM のデバッガ IPMD だった。

(figure: IPMD)

IPMD は今でもずっと最高の OS/2 デバッガであり、あらゆるプラットフォームにおいてもおそらく最上位に近いものだろう。

すでに言ったように、C/C++ Tools は IDE として IBM WorkFrame/2 を使っていた。

(figure: IBM workframe/2)

WorkFrame/2 1.1 それ自身は非常に小さく―単なるフレームワークだった。そこから外部エディタ、対象プログラム、コンパイラ、デバッガその他を起動するのだった。

二番手のコンパイラは Borland C++ for OS/2 バージョン 1.0 である。C/C++ Tools 2.0 とほぼ同時期(1993年上半期)にリリースされた。

(figure: bcos2 about)

Borland C++ の売りは名高い IDE だったが、それは Borland の Windows 版コンパイラと非常に似ており、構文ハイライトや統合化されたデバッガその他の機能が付属していた。

(figure: bcos2)

Borland は Turbo Debugger の単体版も作っていた。

(figure: tdos2)

Turbo Debugger GX は IPMD ほど強力ではなかったが便利だった。しかし Borland には他のどの OS/2 コンパイラにもないものがあった。Resource Workshop である。

(figure: rwsos2)

多くのプログラマが、Resource Workshop は OS/2 Toolkit で提供されている同等ツールよりも優れていると思っていた。おそらくそれほど驚くことでもないだろうが、一見しただけで Borland がツールの見た目に IBM よりもずっと気を遣っている、と思わせるに十分である。

見た目にいちばん無頓着だったのが三番目に調べたコンパイラである Watcom C/386 9.0 だった。Watcom C/386 9.0 は一年ほど先行していたので、C/C++ Tools 2.0 や Borland C++ 1.0 との比較は公平ではないだろう。Watcom は32ビット OS/2 コンパイラを提供した最初の企業のひとつだった。Watcom は以前から16ビット OS/2 開発をサポートしており、32ビット OS/2 サポートの作業を(OpenWatcom のソースコードによれば)1991年に開始した。

Watcom C/386 9.0 は他のふたつのコンパイラとは非常に違っていた。一例をあげると、それは C 開発のみをサポートしていた。GUI のツールはまったく何もなかった。デスクトップにフォルダやアイコンは何も作らなかった。コマンドライン版だけでないツールはデバッガ WVIDEO だけだった。

(figure: wvideo)

しかし Watcom には他のコンパイラにないものがあった。クロスコンパイルである。Watcom は32ビットの OS/2、DOS、Windows プログラムのビルド(Win32s のはるか以前から、Watcom は独自のエクステンダ技術によって Windows 3.x での32ビット開発をサポートした)、さらには Netware と AutoCAD ADS の開発もサポートした。

1993年、Watcom はコンパイラのバージョン 9.5 をリリースし、それには C++ や Windows NT 向けビルドのサポートが追加されていた。C++ のサポートを別にすれば、9.5 の OS/2 部分には 9.0 からの目に見える違いはない。相変わらず GUI ツールのようなものはなく、1994年リリースのバージョン 10.0 まで待たねばならなかった。しかしこれはまたいずれの話題としたい。

OS/2 開発ツールの全容は emx gcc を抜きにして語れない。emx というのは Eberhard Mattes eXtender という意味だと思う。Eberhard Mattes は気鋭のドイツ人プログラマで、Unix のソフトウェアを OS/2 2.0 と DOS に無理なく移植するために emx パッケージを作成した。emx で(若干の注意を払って)作成したプログラムは OS/2 だけでなく DOS でも動かすことができるが、これは EMX.EXE が DPMI 互換の 386 DOS エクステンダだからである*6。 Eberhard Mattes 自身は emx を使って emTex を作成した。すぐれた植字パッケージ TeX の DOS および OS/2 版である。

手元にある分をすこし調べてみると、1992年5月の旧版 emx gcc (0.8c) が見つかった。 IBM や Borland、Watcom のコンパイラと比べると emx は全体的に OS/2 プログラム(特に PM)の作成に不向きだった。Unix プログラムの移植には非常によい選択だったのだが。 emx の初期のバージョンは OMF 形式のオブジェクトファイルのサポートがなく、このため他のコンパイラで書かれたライブラリが利用できなかった。DLL を作ることができず、総じて非常に「よそもの」に感じられた。無料だったが、ドキュメントの乏しさと OS/2 固有機能の欠如のため、OS/2 プログラムを一から書き起こす際の選択肢にはしにくかった。他のコンパイラと違って emx には OS/2 Toolkit が付属しておらず、これが大きな欠点だった。だがほぼすべての OS/2 ユーザが自分のマシンに EMX.DLL を入れているのも、emx での Unix プログラムの移植が容易だったゆえである。

さてコンパイラから OS/2 に戻ろう。OS/2 2.0 のリリースはPCの歴史において間違いなく重要な瞬間だった。 初の32ビットリリースは、その後のものに比べて、たとえばネットワークやマルチメディアのサポート面で―そういったものはまだ何もできていなかった―何かあまりに少なすぎるように思える。 しかしそれは32ビットアプリケーションを育む確固たる基盤であり、そして「DOS よりもよい DOS」であった。

OS/2 2.0 は世界を制することはなかった―残念ながら。しかしそれは、2〜3世代前のマシン向けに設計されたのでない OS で 386 ベースのPCに何ができるのかを確かに示したのである。

謝辞

非常に貴重な OS/2 2.0 LA その他を提供していただいた John Martin Alfredsson に感謝する。OS/2 2.0 LA にふれることでこの文章がより完全なものにできたと思う。フロッピーの不良で難渋していたときに救いの手をさしのべてくれた Will Honea に感謝する。

The Design of OS/2 by H.M. Deitel and M.S. Kogan, published by Addison-Wesley in 1992. 他ではなかなか得られない興味深い事実を得た。かなり深い部分まで書かれた本であり、すべての OS/2 プログラマが読むべきである。

(てきとうな訳注)

*1 邦訳『OS/2 システム・アーキテクチャ』アスキー→Amazon ちなみにビルゲイツが序文を書いている。

*2 邦訳『OS/2 のデザイン』Addison-Wesley→Amazon 内容とはまったく関係ないが、カバーデザインのダサさは商品レベルをもはや逸脱している。

*3 シームレス Win-OS2 のディスプレイドライバは Windows 3.x のディスプレイドライバそのものなので、作成には Windows の DDK が別途必要だった(日本円で10万円程度だったと思う)。その後 IBM は OS/2 の DDK を無料化したが、シームレス Win-OS/2 ドライバ関連のコードは IBM から別途入手する必要があった。(ついでに言うと Windows 3.x も OS/2 も日本語版のディスプレイドライバを作るには「日本語版」の DDK を必要とした。日本語版の OS/2 には英語 Win-OS/2 と日本語 Win-OS/2 が入っていたので、もしかすると英語版と日本語版両方の Windows DDK が必要だったかもしれない)

*4 これは邦訳あったっけ?

*5 LE 形式の実行ファイルは Windows 3.x/9x の仮想デバイスドライバなどに使われている。

*6 この記述は正しくない。EMX.EXE は DPMI 互換ではなく、DPMI サーバの機能も有していない。DPMI 環境で動作する EMX.EXE 互換の DOS エクステンダ RSX は Rainer Schnittker 氏によって開発された。