当時は合法なソフトウェアの開発

高校生の頃、当時はまだ合法だったソフトを作って、ネットで公開していた。いまの言葉で言えば、たぶん"作ってはいけない側"のものだ。でも当時は、法律がそこに追いついていなかっただけで、違法ではなかった。自分でも際どいものを作っている自覚はあったけれど、“ふつうの無害なソフト"を作っているつもりはなく、“いまはまだ合法なソフトウェア"を作っている、という感覚だった。

なんでそんなものを、高校生が一人で作れたのか。たぶん、当時の自分に「ライブラリを使ったら負け」という、妙に強い美学があったからだと思う。出来合いの関数を呼んで済ませるのは負け。仕様書を原典で読んで、一段下から自分で組んでこそ本物だ――という信条で、われながら頑固だった。

仕様を読んで、下から組む

その頃書いていたものは、たいてい生の Windows API と、プロトコルの仕様書だけでできていた。コンパイラこそ Visual C++ 6.0 だが、中身は実質 C++ ではなく、素の C だった。C++ の便利な機能に頼らないどころか、標準ライブラリのお世話にもほとんどならない。文字列を入れておくバッファすら、std::string のようなものは使わず、malloc で自分で確保して、自分で解放していた。本当に、ライブラリというものをほとんど使っていなかった。そういう小さなプログラムを九十本近く、合わせて四千行ほど書いていた。

たとえば DNS。名前を引くのにライブラリを使わず、RFC1035 を見ながら問い合わせパケットをバイト列から自分で組み立てて、UDP で投げていた。メールもそうで、SMTP(RFC821)を生のソケットで直接喋る自作メーラーを書いた。しかも凝ったことに、宛先のメールサーバーを自作の DNS リゾルバで MX レコードから自力で引いて、途中のリレーサーバーを介さず相手のサーバーへ直接配送する、というところまでやっていた。ISO-2022-JP のような当時のメールの文字コードも、変換処理を自分で書いて通していた。

画面まわりも同じだ。MFC のような分厚いフレームワークには乗らず、Windows SDK を直に叩いた。ウィンドウを出すのも、メッセージループを回すのも、生の Win32 API で書く。ときには Win32 のもっと深いところ——他のプロセスに自分の DLL を送り込んで、そのプログラムの内側でコードを動かす、DLL インジェクションのようなことまで、API を直に叩いて自作した。OS が用意した仕組みの、想定された使い方の一歩外側に手を伸ばすのが、とにかく面白かった。

メールの MIME も、multipart/mixed を自分で組み立てて、本文に添付ファイルを付けられるところまで作った。whois クライアントも、掲示板や日記の CGI(こちらは Perl)も、ぜんぶ自前だった。

いま思えば効率は最悪だ。既製のライブラリなら数行で済むことを、何十行も書いて再発明していた。でも、そうやって一段下を触っているうちに、パケットの中身も、文字コードの都合も、OS が裏で何をしているのかも、手が覚えていった。「使う」だけでは絶対に手に入らない解像度が、そこにあった。

小さく、削ぎ落として作る

冒頭のあのソフトも、その延長だった。作るときは、とにかく小さくすることにこだわった。余計なランタイムを積まず、標準ライブラリにもなるべく頼らず、実行ファイルを圧縮して、フロッピー1枚に余裕で収まるサイズにした。「ライブラリを使ったら負け」の裏返しで、「余計なものを積んだら負け」でもあったのだと思う。

そうして削ぎ落として作った小さなソフトを、誰でも落とせる形でネットに公開していた。当時は、そういうものを作って世に出すこと自体が、できることだった。

二十年後、検体になっていた

面白いのはここからだ。何年も――というより十数年、二十年という単位で経ってから――そのソフトが、**査読付きのセキュリティ研究の"検体”**として使われていたことを知った。当時は「いまはまだ合法」として配っていたものが、時代が進み、法も検知技術も追いついて、「検知すべき対象」の側に回り、それを見つけ出す手法の実験台のひとつに選ばれていた。作った本人が何も知らないうちに、自分の書いたコードが、どこかの研究室で走らされていた。

それを、いまのマシンが消した

ふと、あれはどんなソフトだったっけ、と思った。細かい作りは、もう覚えていない。二十年も前に、高校生の自分が書いたものだ。懐かしくなって、いまも残っているその配布ページから、自分で自分のソフトを落としてみた。

開く暇もなかった。ダウンロードが終わった瞬間、いまの OS が、それをマルウェアとして検知して、目の前で強制的に削除した。止める間もない。ただ「削除しました」という通知だけが残った。当時は合法として配っていた自分の作品を、二十年後の自分のマシンが、危険物として問答無用で拭き消していく。手を伸ばした過去が、現在の側から、静かに、しかし容赦なく消された――そういう感触だった。

手元のファイルは、それで消えた。二十年前、あんなに苦労して組み上げたものが、いまのマシンにはただ一瞬だった。

それでも、不思議と嫌な気はしなかった。消えたのは実行ファイルだけで、あれを作った日々——ライブラリを使わず、下から一つずつ積み上げて、やっと動いたときのあの感覚は、消えずに残っている。あれを動かすのにどれだけ夜を溶かしたか、初めてちゃんと動いた瞬間にどれだけ興奮したか。その苦労と達成感だけは消せない。