1−1: 目的
ネットニュースに流れるURLをブラウザにコピペして、そのページを閲覧するというスタイルに黒田 歩はイラつきを感じていた。簡単な解決方法はいくつかある。たとえば、ネットニュースの記事から自動的にキーワードとURLを保存する方法もあるだろう。あるいは、サーバが手当たりしだいにページにアクセスし、そこにある文字列と、そのページのURLを保存するという方法もあるだろう。だが、前者は受動的な方法であり、取りこぼしやそもそもURLがネットニュースに流れるかなど、確実性にも欠ける。後者は――いずれはそうなるとしても――、あまりにも大規模なサーバと、あまりにも大きな帯域を持つ接続が必要であると思えた。
つまるところ、各人の興味のありそうなページのみ、キーワードとURLを保存できればいい。ページの公開や更新からは、ある程度のタイムラグはあってもいい。そして、可能な範囲でリモートのサーバにしてもローカルのサーバにしても、負荷は分散できた方がいい。
その条件を満たすなら、小さなプログラムがネットの中を徘徊し、自身を送り出したサーバなりただのワークステーションに対して、自身が今いるサーバ内に該当するページが存在するなら、該当するキーワードとページのURLを送れるようにすればいい。それ自体は、単純なアイディアだった。同時に、危険を孕んでいることもわかっていた。
その危険を無視するなら、まずはその小さなプログラムをどうやってWWW上に放流するかという問題があった。CGIとして、探索したいキーワードと返信先をサーバに送るという方法が簡単な実現方法ではあった。だが、その方法では、ローカルのサーバが逐次リモートのサーバにアクセスする必要があり、なにより送られるものは小さなプログラムですらなく、そのため自律性に欠けていた。つまり、送られるものは、行き着いたサイトを自力でとまでは行かずとも探索し、順次自律的に次に訪れるサイトを決定し、次に訪れるサイトに自分からアクセスし、そして自分自身を送る機能が必要だった。それは単純なものではあっても、エージェントである必要があった。
黒田 歩は、それをただ "worm" と呼び、開発を始めた。まず始めに必要なのは、ともかく最初はCGIで送るとして、サーバのバッファ・オーバーランを避けるためにサーバのソースに手を入れることだった。現時点では、およそ十分と思える程度にしておけばいい。CGIでwormを送ることは最終的には止める方向で考えていたからだった。
次に手をつけたのは、worm自身を記述する言語の仕様を決めることだった。一番単純なものは、言語と呼ぶにはふさわしくないし、記述されたものをエージェントと呼ぶにもふさわしくはないが、自身がwormであることを示す記述子を持ち、加えてサイト内を探索するにあたってのキーワード群の定義と、キーワードが見つかった場合の該当するキーワードとページのURLの送り先の定義を含むものだった。
だがそれでは、自明のこととして、機能として十分ではない。単純に考えても、記述したキーワードのいずれかが、そのサイト内で見つかったというだけでは、そこにあるページのURLを送ってくる基準とするには弱いように思えた。キーワードに重みをつけ、それをどのように計算し、その上でURLを送るかの基準を記述でき、また実行できる必要があった。
つまり、チューリング完全ではなくていいのだが、なにがしかの計算は記述できる必要があった。むしろチューリング完全となれば懸念している危険が明らかなものとなるかもしれなかった。その危険は、worm自体のみで完結する危険ではないが――つまるところwormが動くのはどこかのサーバ上なのだから――、その危険はできるだけ除いておきたかった。
そうして、黒田 歩は紙の上で、そしてワークステーション上で仕様を検討し、仮の実装をし、自分が所属する研究室内でのみwormの巡回のテストを始めた。