Valid XHTML 1.1! クリエイティブ・コモンズ・ライセンス

ascii.PC 連載 コンピュータのき・も・ち

――あるいは How to be an Computer Otaku

連載第 11 回: コンピュータにとっては、あなたも一塊のソフトウェアでしかないのだ。

Valid XHTML 1.0!

(ascii.PC 2002 年 4 月号)
山形浩生



 たぶんここ数ヶ月くらいで、多くの人はウィルスというやつに何らかの形で出くわしたことだろう。うちの家族なんか、気がつかないうちにそれをばらまく側にまわってしまって大パニック。そんなこともあろうかと思ってウィルスチェッカーも入れておいてあげたのに、「なんかいろいろ言ってきてうるさいので切ってしまった」とのこと。とほほほほ。

 コンピュータウィルスもずいぶん昔からいろいろあるけれど、昔はいまよりずっとマイナーな存在だった。昔はコンピュータ人口が少なくて、いまほど人はファイルを交換したりしなかったのと、あとコンピュータにできることが限られていたからだ。ウィルスを拾う可能性といえば、フロッピーディスクを人から借りた時にうつされるとか、あるいはパソコン通信で無料ソフトを拾ってきたらそれがウィルス入りだったとか、その程度だった。またいまみたいに、ワンクリックでソフトが起動できたり、メールの中にいろんなプログラムを仕込むことも不可能だった。それがいまや、人々の接触も増えたし、コンピュータ自体がいろんな芸をするようになった。人間の普通の病気と同じだ。エイズだって、昔ならアフリカのどこかの村が壊滅して、それっきりだっただろう。でも、人の移動が増え、ほんの25年前は新婚旅行でも珍しかった海外旅行が、いまじゃ日常茶飯事だ。やることも、昔はただの観光だったのが、いまじゃあれもこれも。おかげでエイズは一気に世界に広がっているわけだ。コンピュータのウィルスと同じように。

 さて、ウィルスにもいろいろあるけれど、いまはやっているやつは以下のようなことをする。

  1. メールのアドレス帳を捜す
  2. その人がこれまで見てきたウェブページを捜す
  3. そこに載っているメールアドレス(らしきもの)に自分自身を送りつける

これだけ。これだけのことが無数のマシンで自動的に繰り返されることで、ウィルスは数日の間に数百万人に広がる。さらにエイズのHIVウィルスがセックスという人間の好きな行為に便乗して広がるように、このウィルスも「アイラブユー」とか、「こないだ頼まれたファイルだけど、意見ちょうだい」といった人間の興味や信用に便乗して広がっていく。

 天然のウィルスとちがうのは、これが天然じゃないというところだ。コンピュータウィルスというのはプログラムの一種だ。勝手に湧いてきたわけじゃない。だれかが意図的に、そういう動作をするプログラムを書いた。その意味で、ウィルスもメールソフトやウェブブラウザやワープロや、画面のすみに時計を表示するプログラムなんかと同じものではある。ただ、そのプログラムのやることが特殊なだけだ。

 で、プログラムって何よ、というのが今回のテーマだ。


 プログラムには、何か目的がある。たとえばワープロなら、何か文書を作ったり編集したり、ということだ。それをやるようなプログラムを書けばいい。が……ここでプログラムというものの最初のハードルがくる。

 「文書を作る」ってどういうことだ? 何ができればいいんだろう。

 プログラムのむずかしさは、人はまず自分の欲しいものがよくわかっていない、ということだ。えーと、えーと、字が入力できたり、消したり、切ってペーストしたり。見出しをつけてページ番号をふって字間と行間を変えてフォントや字の大きさを変えて……そうこうするうちに、ワープロソフトには使ったことのない機能が山積みになっていて、それでも(またはそのせいで)思い通りに文書ができない。「時計を表示」くらいの疑問の余地はなさそうなことでも、「どのくらいの大きさで?」「どんな文字で?」「秒は表示するの?」といった話を具体的に考え始めると……たいがいの人ははっきり答えられない。「じゃまにならないくらいで」「まあ見やすく」「適当に」とかは言えるけど、それ以上のはっきりした注文が出せる人はなかなかいない。

 で、次はそれを具体的にどう実現するかという段階だ。いま何時かという時間の情報をどこから持ってくるか。そこから、必要な情報だけを取り出すにはどうしたらいいのか。それをどう画面に表現するか(午前、午後をどうやって計算しようか)。これを細かくやっていくと、こうすれば必ず画面に時間が表示できるという一連の手続きができる。それがアルゴリズムだ。

 そしてそれをコンピュータにわかる言語になおす作業がある。多くの人が「プログラミング」と呼んでいる作業はここのところだ。具体的な例としてはどこかのウェブページで、ブラウザのメニューから「ソースを見る」というのを選んでほしい。ふつうに見ているそのページとはかなりちがう、<a href="text.html">なんてのがたくさん入った、文字だけのファイルが表示されるだろう。それに近いものだ。

 プログラミングというのは、そうやってある手続きなり状態なりを、文字だけで表現することだ。

 が、ここで次のハードルがある。人が自分の気持ちをきちんとことばで表現できないのと同じく、あることをコンピュータにわかる言語で表現しきるというのも結構むずかしい。ことばが足りなかったり言い過ぎたり。さらにコンピュータは、愚直だ。ふつうの人間ならまさかと思うことでも平気でやってしまう。うっかりカッコを閉じ忘れたり、コンマやピリオド一つ忘れただけで、プログラムがまったく動かなくなって頭をかきむしった経験のないプログラマはいない。

 そしてもう一つ。プログラムのむずかしいところは、思った通りのことをやらせるだけじゃない。思っていないことをやらないようにさせることだ。が……これが最高に難しい。

 たとえばよくあるプログラムのミス(バグ、というのだ)は、ゼロで割る、というもの。宴会でワリカンにする時の一人あたり支払額を計算するソフトを書いたとしようか。総額を入れて、頭数を入れて、総額を頭数で割ればいい。アルゴリズムはこれで完成だ。が、仮に頭数のところでだれかがゼロ人と入れたら? 実際にはゼロ人なんてあり得ない。でもだれかがうっかりゼロ人と入れたらどうしようか? 答えは無限大だ。でもコンピュータで無限大は処理できないので、下手をするとマシンは完全に発狂する。まさにこのおかげで、軍事演習真っ最中のアメリカ海軍の巡洋艦が完全に停止してしまったことがある。あるいは、総額が8桁しか入らないところに、20桁の数字をだれかがつっこんだら? このやりかたで、コンピュータに変な命令を実行させる手口が一時かなりはやった。もちろん言われれば後から対策はとれる。でも気がつかないことに対策を取るのは不可能だ。

 で、その変なコンピュータにわかる言語で一通り書き終えたところで(これがさっき出てきた「ソース」だ)、それを実際にコンピュータが実行できる形式に変換する作業がある(ことが多い)。この部分の詳細は省くけれど、これを経ると、プログラムは人間には読めない形式になる。いわゆる「実行形式」というやつ。

 あなたの使っているプログラムのすべては、こういう手続きを経てできている。目的を考え、それを細かく分割して具体的な手続きに変えて、それをコンピュータ用の言語で記述して、そしてそれを実行形式に変換して、そして後から気がつかなかったバグを直す。ウィルスも、表計算ソフトも。これがプログラム/ソフトウェアというものだ。

 実は……天然のウィルスや、あるいは人間も、同じようにプログラミングされているという考え方がある。生物には遺伝子があって、その遺伝子をもとに人間が作られる。もちろん、ワープロソフトでみんなが作る文書が全然ちがうように、遺伝子だけですべてが決まるわけじゃない。でもかなり決まってくる。だから、人の遺伝子を解読すれば、人の機能や可能性がすべて明らかになるんじゃないか。そしてそれをさらにさかのぼれば、その人間をプログラミングした存在の「目的」がわかるんじゃないか。人がなぜ存在しているかがわかるんじゃないか。そう考える人もいる。

 ただまあ、それまでの道のりはあまりに長いのだ。人の遺伝子解読は、先日一通り終わった。でもそれはソースを読んだというだけだ。そのソースがどんな意味を持つかはまだほとんどわからない。まして「目的」まで到達するのは遙か彼方だ。ショウジョウバエの遺伝子はかなり読まれて機能もわかってきているけれど、まだショウジョウバエの宇宙的な存在意義はわかっていない。

 そしてコンピュータウィルスというものに、人が嫌悪を覚えながらも惹かれるのは、そんな可能性をいろいろ考えさせてくれるからだ。ひたすら増殖するだけ、存在するだけのプログラム。環境のさまざまな条件(たとえば人間)を利用して、ひたすら増殖をしたがるソフト。それは結構、本物の生物に近い存在かもしれない。実は本物のウィルスというのも、遺伝子だけの存在だ。つまりそれはある意味で、純粋なソフトウェア、ではあるのね。そして実際のウィルスの中に、人間のためになって、それで増えるものがたくさんあり、一方で人間の隙につけこむウィルスがいるように、ソフトウェアも人間のためになることで増えるもの(ふつうのプログラム)と、人間の隙につけこむウィルスがいるわけだ。


 一方で、コンピュータにとっての人間、という話がある。コンピュータは、あなたがだれか、何かを知らない。イヌがパソコンの前にすわって「インターネットでは、おれがイヌだとはだれも知らないんだよ」と言うマンガが一時出回っていたけれど、コンピュータも、あなたがだれか知らない。実はコンピュータにとって、まさに人間というのは変なソフトウェアの一種なのだ。いや、これはたとえ話なんかじゃない。本当に文字通りそうなのだ。UNIX 系のソフトを使っている人は、ユーザ管理のファイルを覗いてみるといい。するとそこでは、h-yamagataとかいう人間ユーザとならんで、atok とか wnn とか sendmail とか、いろんなプログラムが「ユーザ」として管理されているのがわかる。人間はほかのソフトウェアとまったく同列のものでしかない。しかもかなり変な動きをするソフトなので、たぶんコンピュータはえらくとまどっているだろう。人間はいろんなソフトのユーザグループを作って、そのソフトの使い方について情報交換をするけれど、もしコンピュータに意志があったら、人間ユーザグループを作るんじゃないかな。そこでの会話は、たぶんこんな具合だ:

Linuxくん: 実はぼくのh-yamagataというソフトが最近妙な動きばかりして困ります。すぐに勝手にシステムを再起動するし。再インストールしたいんですけれど、どこかにソースコードはありませんか? そもそもこれは何をするソフトなのでしょうか?
BSDちゃん: そのソフトはうちにもいつの間にかインストールされていたけれど、ソースコードはこないだセレラ社のマシンが解読したばかりだし、まだビルドの方法もよくわからないようで、たまに成功しても数十年かからないとビルドが終わらない変なソフトだよ。個人的には、なにかイベントのスケジューラーみたいではあるけれど、やることに規則性がなくて、応答がえらく遅いくせに変なときにはいろんな操作をたくさん要求して我慢がきかないし、本当に始末の悪いソフトだよ。
atokさん: あー、そのソフトならあたしも知ってる。こっちが何かしかけているときに、すぐに中断させようとしたり、もう散々なんですけどー。最近ちょっと安定してきたみたいだけど、いっそ削除しちゃったらどうでしょうか?

 つまりあなたがコンピュータの動作に怒ったりしてみても、コンピュータにとってそれは、あなたの使っているワープロがエラーメッセージをたくさん出すのと大差ない事態でしかないわけだ。もちろん、本来そうであってはいけないはず、ではあるんだけどね。h-yamagataというソフトウェアの意志こそは、すべてに優先されてしかるべき、なのかもしれない。ただ、現状のコンピュータは、そういうふうにはなっていないのだ。

 それが諸悪の根元だと考える人もいれば、いや人間なんてそそっかしいうっかりミスばかりやっているダメなソフトなんだから、それ相応の扱いでたくさんだ、と考える人もいるのだけれど。でも日々の生活の中でコンピュータが思い通りに動かないときには、たまには一歩下がってコンピュータにとって自分、ソフトウェアとしての自分がどういう存在かを考えてみるのも一興かもしれない。一ソフトウェアとして、あなたはお行儀よく、ほかのソフトに嫌われないよう振る舞っているだろうか? そして未だによくわからないアルゴリズムにしたがってプログラミングされた自分は、いったいどんな目的を持って記述されたんだろうか。ついでに、自分のバグの直し方まで思いつければ、もう言うことはないのだけれど。まあこれは期待するだけ無駄かね。


前の号 次の号
ASCII.pc Top  YAMAGATA Hirooトップ


YAMAGATA Hiroo<hiyori13@alum.mit.edu>
Valid XHTML 1.1!クリエイティブ・コモンズ・ライセンス
このworkは、クリエイティブ・コモンズ・ライセンス
の下でライセンスされています。