<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Windows on kimoto</title><link>https://new.kymt.me/tags/windows/</link><description>Recent content in Windows on kimoto</description><generator>Hugo</generator><language>ja</language><atom:link href="https://new.kymt.me/tags/windows/index.xml" rel="self" type="application/rss+xml"/><item><title>当時は合法なソフトウェアの開発</title><link>https://new.kymt.me/story/legal-at-the-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://new.kymt.me/story/legal-at-the-time/</guid><description>&lt;p&gt;高校生の頃、当時はまだ合法だったソフトを作って、ネットで公開していた。いまの言葉で言えば、たぶん&amp;quot;作ってはいけない側&amp;quot;のものだ。でも当時は、法律がそこに追いついていなかっただけで、違法ではなかった。自分でも際どいものを作っている自覚はあったけれど、&amp;ldquo;ふつうの無害なソフト&amp;quot;を作っているつもりはなく、&amp;ldquo;いまはまだ合法なソフトウェア&amp;quot;を作っている、という感覚だった。&lt;/p&gt;
&lt;p&gt;なんでそんなものを、高校生が一人で作れたのか。たぶん、当時の自分に「&lt;strong&gt;ライブラリを使ったら負け&lt;/strong&gt;」という、妙に強い美学があったからだと思う。出来合いの関数を呼んで済ませるのは負け。仕様書を原典で読んで、一段下から自分で組んでこそ本物だ――という信条で、われながら頑固だった。&lt;/p&gt;
&lt;h2 id="仕様を読んで下から組む"&gt;仕様を読んで、下から組む&lt;/h2&gt;
&lt;p&gt;その頃書いていたものは、たいてい生の Windows API と、プロトコルの仕様書だけでできていた。コンパイラこそ Visual C++ 6.0 だが、中身は実質 C++ ではなく、素の C だった。C++ の便利な機能に頼らないどころか、標準ライブラリのお世話にもほとんどならない。文字列を入れておくバッファすら、&lt;code&gt;std::string&lt;/code&gt; のようなものは使わず、&lt;code&gt;malloc&lt;/code&gt; で自分で確保して、自分で解放していた。本当に、ライブラリというものをほとんど使っていなかった。そういう小さなプログラムを九十本近く、合わせて四千行ほど書いていた。&lt;/p&gt;
&lt;p&gt;たとえば DNS。名前を引くのにライブラリを使わず、RFC1035 を見ながら問い合わせパケットをバイト列から自分で組み立てて、UDP で投げていた。メールもそうで、SMTP(RFC821)を生のソケットで直接喋る自作メーラーを書いた。しかも凝ったことに、宛先のメールサーバーを自作の DNS リゾルバで MX レコードから自力で引いて、途中のリレーサーバーを介さず相手のサーバーへ直接配送する、というところまでやっていた。ISO-2022-JP のような当時のメールの文字コードも、変換処理を自分で書いて通していた。&lt;/p&gt;
&lt;p&gt;画面まわりも同じだ。MFC のような分厚いフレームワークには乗らず、Windows SDK を直に叩いた。ウィンドウを出すのも、メッセージループを回すのも、生の Win32 API で書く。ときには Win32 のもっと深いところ——他のプロセスに自分の DLL を送り込んで、そのプログラムの内側でコードを動かす、DLL インジェクションのようなことまで、API を直に叩いて自作した。OS が用意した仕組みの、想定された使い方の一歩外側に手を伸ばすのが、とにかく面白かった。&lt;/p&gt;
&lt;p&gt;メールの MIME も、multipart/mixed を自分で組み立てて、本文に添付ファイルを付けられるところまで作った。whois クライアントも、掲示板や日記の CGI（こちらは Perl）も、ぜんぶ自前だった。&lt;/p&gt;
&lt;p&gt;いま思えば効率は最悪だ。既製のライブラリなら数行で済むことを、何十行も書いて再発明していた。でも、そうやって一段下を触っているうちに、パケットの中身も、文字コードの都合も、OS が裏で何をしているのかも、手が覚えていった。「使う」だけでは絶対に手に入らない解像度が、そこにあった。&lt;/p&gt;
&lt;h2 id="小さく削ぎ落として作る"&gt;小さく、削ぎ落として作る&lt;/h2&gt;
&lt;p&gt;冒頭のあのソフトも、その延長だった。作るときは、とにかく&lt;strong&gt;小さくする&lt;/strong&gt;ことにこだわった。余計なランタイムを積まず、標準ライブラリにもなるべく頼らず、実行ファイルを圧縮して、フロッピー1枚に余裕で収まるサイズにした。「ライブラリを使ったら負け」の裏返しで、「余計なものを積んだら負け」でもあったのだと思う。&lt;/p&gt;
&lt;p&gt;そうして削ぎ落として作った小さなソフトを、誰でも落とせる形でネットに公開していた。当時は、そういうものを作って世に出すこと自体が、できることだった。&lt;/p&gt;
&lt;h2 id="二十年後検体になっていた"&gt;二十年後、検体になっていた&lt;/h2&gt;
&lt;p&gt;面白いのはここからだ。何年も――というより十数年、二十年という単位で経ってから――そのソフトが、**査読付きのセキュリティ研究の&amp;quot;検体&amp;rdquo;**として使われていたことを知った。当時は「いまはまだ合法」として配っていたものが、時代が進み、法も検知技術も追いついて、「検知すべき対象」の側に回り、それを見つけ出す手法の実験台のひとつに選ばれていた。作った本人が何も知らないうちに、自分の書いたコードが、どこかの研究室で走らされていた。&lt;/p&gt;
&lt;h2 id="それをいまのマシンが消した"&gt;それを、いまのマシンが消した&lt;/h2&gt;
&lt;p&gt;ふと、あれはどんなソフトだったっけ、と思った。細かい作りは、もう覚えていない。二十年も前に、高校生の自分が書いたものだ。懐かしくなって、いまも残っているその配布ページから、自分で自分のソフトを落としてみた。&lt;/p&gt;
&lt;p&gt;開く暇もなかった。ダウンロードが終わった瞬間、いまの OS が、それをマルウェアとして検知して、目の前で強制的に削除した。止める間もない。ただ「削除しました」という通知だけが残った。当時は合法として配っていた自分の作品を、二十年後の自分のマシンが、危険物として問答無用で拭き消していく。手を伸ばした過去が、現在の側から、静かに、しかし容赦なく消された――そういう感触だった。&lt;/p&gt;
&lt;p&gt;手元のファイルは、それで消えた。二十年前、あんなに苦労して組み上げたものが、いまのマシンにはただ一瞬だった。&lt;/p&gt;
&lt;p&gt;それでも、不思議と嫌な気はしなかった。消えたのは実行ファイルだけで、あれを作った日々——ライブラリを使わず、下から一つずつ積み上げて、やっと動いたときのあの感覚は、消えずに残っている。あれを動かすのにどれだけ夜を溶かしたか、初めてちゃんと動いた瞬間にどれだけ興奮したか。その苦労と達成感だけは消せない。&lt;/p&gt;</description></item></channel></rss>