古参のアセンブリ言語使いはどれほどの脅威となりうるか?

高いスキルを持つ古参のアセンブリ言語の使い手たち。そのスキルが悪意を伴ったときなにが起きるのか?

古参のアセンブリ言語使い

つい先日、ユージン・カスペルスキーは自分のブログで「古参のウイルス作者たちの帰還」について書いたばかりだ。私は彼らのことも、彼らの素晴らしい作品のことも覚えている。彼ら、というのは必ずしもマルウェア作者を指すわけではない。ここで言うのはプログラマーや、コーダーや、アセンブリ言語に長けた人たちのことだ。彼らはちょうど、スカイウォーカーがらみの物語に出てくるヒーローたるジェダイやシスのような、ライトセーバーを持つとパワーとスキルが増す(疑うならヨーダにきいてみるといい)人たちのようなものだ。それから私が思い起こすのは…いや、彼らの真の力を目の当たりにしたのは、ざっとあたりを見渡せば3人くらいのものだろう(私、ユージン・カスペルスキー、それからビル・ゲイツだ)。まじめな話、古参のハッカーの能力を理解するのは難しい。そこで、ユージンがブログで語ったことを具体的にお見せしようと思う。そうすれば、彼らの帰還がどれだけおそろしいニュースであることか、イメージしていただけるだろう。

のろい計算機と究極のチャレンジ

1992年のコンピューターは、基本的に、大画面を備えた賢い計算機だった(まじめな話だ)。しかし、チャレンジに喜んで挑む熱心なグループがいくつかあった。何人かのプログラマーは、メモリやプロセッサやレジスタやOSコマンドをとことん使い倒し、さらに重要なことにはハードウェアのパワーを100%活用して、なにができるかを見極めた。ここで言っておきたいのだが、このような課題をやりとげるには、おそろしくクリエイティブでなければならないし、死ぬほどコーヒーを飲む必要があるし、常軌を逸したIQレベルが求められる。このムーブメント自体は1988年ごろに始まり、MS-DOSが広く使われ出したのと多かれ少なかれ軌を一にしている。このムーブメントは公式に名づけられていないが、なんにせよ、進化論の法則に従えば、遅かれ早かれ競争は生まれただろう。これが1992年に「Assembly」が誕生した背景だ。

Future Crewが未来から帰ってくる

1992年、スカンジナビアのコーダー集団「Future Crew」は、親交のあるプログラミング集団「Complex」「Amiga」とともに、「Assembly」というイベントを立ち上げた。これはアセンブリ言語をつかった素晴らしい作品をシェアし、『Best Corder』の称号をかけて競うイベントだ。いくつかのカテゴリに分かれているが、興味深いのはプラットフォームデモ(PC、Amiga、C64)とPC 64Kだ。最初のカテゴリでは、最も洗練されたコーディングソリューションであること、またはミニマムかつ最適化されたコードでハードウェア能力を最大限に引き出していること、が競われる。2番目のカテゴリは少し複雑だ – コーダーは、コンパイル済みプログラムを64キロバイト以内に抑えなければならない – そこで、ノミネートされることはすなわちコーディングの洗練度を競うという意味になる。

コーディングデモは、複雑な物理演算など特定のタスクを実行するにあたってのハードウェア能力またはソフトウェア手法(あるいはその両方)を証明すべくプログラミングされた、一連のイベントである

1992年、Future Crewは「Unreal」と題されたデモでコンテストに勝利した。以下がそのデモだ(これが1992年の作品だということ、まだWindowsが世に現れていない時期であることに注目してほしい。このデモが「Unreal」(非現実)と呼ばれたのにはわけがある。つまり、こんなことはこれまで誰もやったことがなかったからだ):

3D環境で動くモデル、多層グラフィック、複雑な物理演算、光源や反射の演算などが、彼らによって初めて実演された。しかも、コードを全部コンパイルしたあとのサイズは1メガバイト程度だった(音楽込みで!当時mp3による圧縮の技術はなかった)。これを成し遂げる唯一の方法は、アセンブリ言語の習得にほかならなかった。個人的な意見だが、アセンブリ言語は、もっとも複雑なプログラミング言語だ。アセンブリ言語がどんなものかイメージしていただけたところで、Future Crewのメンバーが何年か前に私に語った言葉を紹介したい。

コードデモの習得は、時間がかかるし、ものすごく難しい。真剣に学ぼうとすれば、数年かかる。まずはPascalCのような高レベル言語からスタートして、それからアセンブリ言語に進むのがいい。うまくなるには時間をかけて実際にやってみる必要がある。楽にショートカットする方法はない。大事なのは自分がやっていることを理解しようと努めること、得たい結果を得るためにプログラムを書き換えて試すこと、達成するための最善の方法が何なのかについて知恵を得ること。コーディングを十分に習得するためには、たくさんの忍耐と、たくさんの情熱と、たくさんの時間が必要だ。簡単なことじゃない。

このコンテストに関わった人々は、ソフトウェア開発者のインスピレーションの源となった。誰かが彼らのアイデアを盗んだ、という話ではない。彼らのクリエイティブなビジョンを人々が自分のものにした、という意味だ。現在私たちが手にしている多くの製品 – あらゆるゲーム、Adobeのグラフィックやビデオを扱う製品、GPS、Google Earth – これら数百億ドル規模の製品はすべて、ある時点でAssemblyからインスピレーションを得ている。(ちなみにイベント会場内での録画や写真撮影は禁じられており、違反者は永久追放に処された)

1993Second Reality」と「Eclypse

Assemblyは大成功をおさめ、翌年には参加者数もデモ数も倍増した。ちなみにこの傾向はその後も続き、1999年以降はフィンランドのヘルシンキにある一番大きなフットボール競技場での開催となった。世界中から集う5000人を収容するためだ。

1993年、Future Crewはまた魅せてくれた。今後のコンテストのクオリティのハードルを引き上げる、素晴らしい、プログラミング界をすっかり変えるようなデモ「Second Reality」が披露されたのだ:

ここで重要なポイントは、このデモが作られたのはIntelがPentiumプロセッサを作成する「前」である、ということだ。Intelによるアナウンスは3月22日、Pentium搭載PCの初出荷は1994年のこと。一方、Assemblyの開催は夏(7月か8月)。つまり、Future Crewは、Pentium出荷開始の少なくとも半年前にはこれをデモンストレーションしてみせたのだ。この素晴らしいグラフィックやサウンドは、x486 CPU、旧式のサウンドブラスター、グラフィックカードなし、の条件で実現されている。このデモは、審査員とコーディング界に吹っ飛ぶほどの衝撃を与えた。アセンブリ言語によるプロレベルの仕事とミニマム主義のアプローチ(Second Realityのサイズは約1.5MB)から得られる結果がいかほどのものか、彼らは世に示したのだ。この年、Future Crewの名は世界にとどろいた。

これはFuture Crewのビデオ「Behind the scenes」、彼らがSecond Realityに取り組んでいたときのものだ:

1993年の勝者のうちもうひとつ印象的なのは、EMFによる「Eclipse」だ。これは、64kのカテゴリで1位に輝いた:

64キロバイトの制約の中で、どれだけのことができるかおわかりだろうか?グラフィック、音楽、レイヤー効果、トランジション、テキスト、スクロールするメニューが詰め込まれている。

1994 – EMFによる「Verses」の優勝

大量の計算が現実に可能だということ、Pentiumクラスの速度で3Dオブジェクトのモーフィングが簡単にできるということを、EMFは世に示した:

 

64Kの優勝作品「Airframe」(Prime作)

現代の3Dによる飛行シミュレーターや宇宙シミュレーターの最高峰だ:

コードがいかに急速な進化をとげたかを見てもらうため、1995年から2012年にかけての全優勝作品と作者たちを挙げてみよう。

1995年優勝作品:「Stars」(NoooN作)

 

1996年優勝作品:「Machines of Madness」(Dubius作)

 

1997年優勝作品:「Boost」(Doomsday作)

 

1998年優勝作品:「Gateways」(Trauma作)

 ちなみに、これはWorld of Warcraftのビジュアルの祖でもある。MMORPG (Massively Multiplayer Online Role-Playing Game、大規模多人数同時参加型のオンラインロールプレイングゲーム)の3Dビジュアルが登場したのはこのときだ。

1999 – 3DFXの技術

この年、3DFXの技術がグラフィックをすっかり変えた。MatureFunk作のデモ「Virhe」は、人々を圧倒した:

 

Assemblyの変革

2000年、Assemblyのルールが少し変更された。Amiga、PC、C64、のカテゴリ分けを変更して、「Combined demo」「Oldskool demo」「64k intro」の3カテゴリによるコンテストとなった。「64k intro」カテゴリは2010年に廃止されたが、プロのアセンブリ言語使いが64キロバイトの制限の中で成し得た素晴らしい例の数々は、この記事の終わりの方で紹介していく。

まずは、アセンブリ言語マスターとして最も卓越した、Combined demoカテゴリの勝者たちだ。

2000年優勝作品:「Spot」(Exceed作)

この照明効果をみてほしい。まったく驚くばかりだ…これが13年前の技術とは!

2001年優勝作品:「Lapsuus」(Maturefurk作)

 

2002年優勝作品:「Liquid… Wen?」(Haujobb作)

ここで指摘しておきたいのは、Assemblyの全デモ作品に出てくるグラフィックは、人の顔やキャラクターも含め、すべてコードで書かれているということだ。つまり、画像ファイルはデモ中に含まれていない。

2003年優勝作品:「Legomania」(Doomsday作)

3Dコンソールゲームよ、こんにちは!任天堂のWiiのビジョンが生まれたのはこのころだ。

 

2004年優勝作品:「Obsoleet」(Unreal Voodoo作)

 

2005年優勝作品:「Iconoclast」(ASD作)

 

2006年優勝作品:「Starstuck」(The Black Lotus作)

コーディング集団のThe Black Lotusが、ふたたびコーディング界を圧倒した。今回は、グラフィックコーディングの高い洗練度が衝撃を与えた。クオリティのハードルが大いに上がったといえる:

 

2007年優勝作品:「LifeForce」(ASD作)

これもまた、アセンブリ言語使いの素晴らしい作品だ。

 

2008年優勝作品:「Within Epsilon」(Pyrotech作)

 

2009年優勝作品:「Frameranger」(Fairlight, CNCD & Orange作)

これは、個人的なお気に入りのひとつ。

 

2010年優勝作品:「Happiness is right around the bend」(ASD作)

見事なタンクが登場する。

 

2011年優勝作品:「Spin」(ASD作)

 

2012年優勝作品:「Spacecut」(Carillon & Cyberiad CNCD作)

これは驚くべき作品だ。

 

64k introのベスト作品集

ここまでで、プロのプログラマーが64キロバイトの制限の中でどれほどのことができるか、イメージしていただけたと思う。次に紹介するのは、2005年の優勝作品「Che Guevara」(Fairlight作)だ。

繰り返すが、これは64キロバイトのアセンブリコードだ。ほんのちょっとの超過もない。

その3年後である2008年には、同じグループ(Fairlight)がとんでもない技術進歩を見せ、64キロバイトの範囲にこれだけのものを詰め込んだ –作品「Panic room」をご覧いただきたい。このカテゴリの優勝作品だ:

しかし、過去最高の64kデモは、2010年の64k introカテゴリ優勝作品「X marks the spot」(Portal Process作)だ:

ここで、少し説明をさせてもらおうと思う。これらのデモ、特に64キロバイト制限で作られた作品は、才能あふれた古参プログラマーが心血を注いだときにどんなものができあがるか、を示してくれている。それだけではない。もっと重要なのは、彼らがアセンブリ言語に熟達しているということだ。多くの製品や作品がVisual CやObject Cなど、いわゆる「高レベル」のプログラミング言語で書かれている現在、これはあまり普通のことではない。

少しの間、想像してみてほしい。こんなプログラマーが、またはFuture Crewのようなプログラマー集団が、3Dのクリエイティブや音楽などを脇に置き、熱意を隅に追いやって、ただひとつの目的に集中することにしたとしたら – あなたの金融関連のデータを盗んだり原子炉の操作を助けたりする小さなコードを書くことにしたとしたら?彼らはうまいことやるだろうか?64キロバイトあれば十分なら、どの程度のサイズに収まるだろう?WindowsAppleの総合セキュリティシステムに侵入する経路を見つけるだろうか?彼らは稼働性が高いだろうか?柔軟性が高いだろうか?参加人数5000人規模の無料イベントを20年も続けられる財力はものを言うだろうか?

ここで答えを出そうとは思わない。答えは皆さん自身が出すべきものだ。ただ、私は誰かが「自分のPCにはセキュリティ対策は必要ない」と言うのを耳にするたび、「Second Reality」を思い出し、祈らずにはいられない。

Future Crewのメンバーが多忙にしているのは、ありがたいことだ。デモのコーディングに長けているなら、それを自分の仕事にしたいものではないか?3DMark11のテストをPCで実行するときには、UnrealやSecond RealityやFuture Crewのことを思い出してほしい。Future Crewは「Scream Tracker 3」(1994年12月)以来、チームとしては何も発表していない。公式に解散したわけではないが、メンバーは1990年後半に別々の道へ進んでいる。Futuremark(3DMark)、Remedy(Death Rally、Max Payne、Alan Wake)、Bugbear Entertainment (FlatOut、Glimmerati、Rally Trophy)、Bitboys(グラフィックハードウェア会社)、Recoil Games(Rochard)は、いずれも、Future Crewのメンバーが全体または一部として立ち上げに関わっている。

彼ら全員に感謝をささげたい。彼らは世界を変えたし、心血を注げばなんだって可能だということを示してくれた…カスペルスキー インターネット セキュリティを含め。

インスピレーションをありがとう。そして、Assemblyの一部を成したひとりひとりのプログラマーが、誰ひとりとしてそのスキルを悪の目的に使用することのないことを、心の底から願う。

 

ヒント