素歩人徒然 血液型 プログラムの移行と動作確認
素歩人徒然
(44)

血液型


── プログラムの移行と動作確認

 世の中には何ら科学的な根拠もないのに広く信じられている物事が多い。血液型による性格分析などはその典型的な例であろう。血液型からその人の性格が分かるというのである。こういった考え方は日本独特のもので、ある資料によれば日本人の実に70%近くがこれを信じているという。

 もともと血液の型が意識されるようになったのは輸血の必要性から生じたものである。それまでは誰も血液に型の違いがあるなどとは思っていなかった。現在でも、輸血以外の目的で血液型が意味を持つことはない。たとえあったとしても、それは犯罪捜査で個人を識別するときくらいのものであろう。ましてや血液型が個人の性格とか、あるいは仕事への向き不向きに影響するというようなことは決してないと私は思うのである。

 輸血の際に血液型の違いで血液凝固が起こるのは、生理学的に言えば赤血球の膜上の抗原と、他の血液の血清中にある抗体とが反応するからである。A型血液とB型血液の赤血球はそれぞれA抗原とB抗原を持っている。AB型血液はA抗原とB抗原の両方を持っている。O型血液はH抗原を持っている。
 一方血清中ではA型血液は抗B型抗体を、B型血液は抗A型抗体をそれぞれ持っている。不思議なことにO型の血液には抗体がない。

 このような血液型の違いは構造的に見るとミクロレベルの違いに過ぎない。赤血球の膜上には100以上の種類の糖が付いているが、そのうちのたった一つの糖の構造が違うだけなのだそうである。そんなわずかな違いが個人の性格に影響するとは到底思えない。

 輸血を行う際には、この抗体反応が起こらないような組み合わせにしなければ命取りになる。したがって我々は普段から自分の血液型くらいは正確に知っておく必要がある。しかし血液型の組み合わせさえ正しければ絶対安全かというと必ずしもそうとばかりはいえない。輸血の際に肝炎などの各種ウィルスに感染する危険もあるからである。

 ところで私がなぜここで血液型の話を持ち出したかというと、私は最近プログラム移植とそれにともなう動作確認の作業で苦労していて、その過程でプログラムを他の機種に移行させるのは“輸血”のようなものではないかと感ずるようになったからである。
 プログラム移植とは、ある環境下で動作していたプログラムをそれとは異なる機種またはOS上の環境に持っていって同じように動作させることをいう。医学における“臓器移植”や“皮膚移植”などになぞらえて、これを“プログラム移植”と呼ぶのである。私にとってプログラム移植とは、これまではまさに臓器移植のようなものというイメージだった。しかしここへきて私はプログラム移植とは輸血のようなものではないかと思うようになった。

 Wintelの時代(いまや古くさい表現となってしまった)を経て、プログラム移植は格段に容易になった。何しろハードウェアもOSもほとんど変わらない時代が続いているのだから。OSが変わったと言っても精々Windowsのバージョンアップ程度のことである。

 Windowsシステムには互換ボックスと呼ばれる環境が用意されているので、MS-DOSの環境で動いたプログラムはWindows 3.1でも動く。Windows 3.1で動いたプログラムはWindows 95でも動く。Windows 95で動いたプログラムはWindows 98でも動く。Windows 98で動いたプログラムはWindows Meでも動く‥‥といった具合である。

 プログラム移植が容易になったのはそれはそれで大変結構なことである。しかしいつまでも「互換ボックス」という名の環境下で過去のしがらみを抱えていくには限界があるのではないかと私はかねがね危惧していた。はたせるかな新たに登場したWindows XPでは少し様子が違うようなのである。

 普通、プログラム移植というとソースプログラムレベルでの移植のことを指す。しかしハードウェアもソフトウェアもそれほど変わらない時代になると、バイナリレベルでの移植が求められるようになってくる。つまり目的プログラムしか手元にないソフトウェアを異なる環境で動作させることが求められるのである。それを実現させるためには“動作環境”というものをそれなりに調整してやらねばならない。

 たとえば大学などのプログラミング教育の現場で用いるコンパイラ等の処理系は、すべて無料で手に入るものを使うことが多い(いわゆるフリーウェアあるいはシェアウェアである)。そういったソフトウェアは大抵ソースプログラムは手に入らないので、移植に当たってソースレベルでの変更はできない。そういったソフトウェアを学生の持参するノート型パソコンの上で(たとえ機種や使用OSに多少の差があっても)とにかく支障なく動作させねばならないのである。したがって事前にそれぞれのOS上でうまく動くことを確かめておく必要がある。ここで私が行っているプログラム移植とは、そういった今まで使っていたコンパイラ等のプログラムをバイナリレベルで他の機種へ移行し、新たな動作環境で同じように動くことを確認することなのである。

 そのための“動作環境”を構築する手段として、これまで「互換ボックス」と呼ばれる環境下でコマンドレベルの操作が使われてきた。たとえばWindows XPの環境下で従来のコマンドレベルの操作を行いたければ[スタート]→[すべてのプログラム]→[アクセサリ]から「コマンドプロンプト」の機能を選択する。この機能は cmd.exe というプログラムによって実現されているのだが、これを用いても従来のシステムで作られたプログラムは必ずしも正常に動作しないことがある。
 ならば‥‥と、従来の command.com という「MS-DOSプロンプト」を用いると、これが不思議なことにうまく動かない(*1)。これは新システムでのバグなのか仕様変更によるものなのか(現時点ではまだ正確なことは分からないが)色々と不都合が起こって容易にはプログラム移植ができない状態なのである。

【注】(*1)たとえば環境変数の領域が足りない。領域の拡張もできない。これではバッチファイルを実行しようとしても動作させることが困難である。

 どうやらWindows XPは、従来のWindowsシステムと一見似てはいるけれど、その血液型はまったく違うもののようである(*2)。どこかに抗体が存在していて異なる血液の侵入を妨害しようとしているらしい。従来のプログラムとの互換性を守ることよりも、ウィルス被害等に遭わないようセキュリティを高めることの方により重きを置いているためかもしれない。古いシステムの弱点までも引き継がないよう、抗体反応を起こして防御しているのではないかと思うのである。

【注】(*2)Windows NT/2000/XPのグループと、Windows 3.1/95/98/Meのグループとでは生まれが違う。つまり血液型が違うのである。

 プログラムの移植とその動作環境の構築、そしてその下での動作確認という輸血作業(?)にはいろいろと苦労が多く、当分の間私の悩みは解決されそうにないのである。あぁ〜ア!。■