The Restoration of Early UNIX Artifacts

いまさらながらUSENIX2009で発表された論文The Restoration of Early UNIX Artifactsを読んだ。最初に論文発表資料を読んでから講演映像を観た。発表資料は映像ではよく見えないので予め発表資料を入手して読んでおいておいた方が良い。ちなみに講演映像でのWarren Toomey氏の話は自分の英語力が不足しすぎていて断片的にしかわからなかった。とはいえ予め論文や発表資料を読んでおいたので雰囲気は捉えることができた。余談ではあるがAntikythera島の機械(古代の沈没船から発見された天体の動きを計算する機械式計算機)の概要は調べておくと講演映像はより楽しめる。論文は以下のような構成になっている

  1. Introduction
  2. TUHS and UNIX Archive
  3. The Nsys Kernel: 1973
  4. 1st and 2nd Edition Binaries: 1972
  5. Early C Compilers: 1972
  6. 1st Edition UNIX Kernel: 1971
  7. Lessons Learned

各節についての感想は以下の通り。久々に夢中になって読んでしまった論文だった。

1 Introduction

Softwareを集めても動かなければ0と1の集まりに過ぎないので動態保存すべし, という強い信念が語られる。一方でbackup tapeから発掘した古のsoftwareを動かすまでの困難についても簡単に述べられる。これは程度の違いこそあれ寿命の長い装置に組み込まれたsoftwareの保守をやっていると同じような問題があるので非常に共感する。この論文で扱っている事例は3節から6節の4つ。中でも1st Edition UNIX Kernelには興味を惹かれる。

2 TUHS and UNIX Archive

UNIX Heritage Society(TUHS)の活動の紹介は印象に残る。Ancient UNIXに触れることができるようになったのは彼らの熱心な活動のおかげであり, SCOがOpen Source Software Movementに乗っかっただけではないことが判り, 感謝の念を新たにした。

また1st Editionから32Vまでの変遷と追加された機能の一覧表は似たようなものをどこかで見ているはずではあるが, 改めて見ていろいろ気づかされた。pipeができたのは3rd Edition。参考文献として載っているTHE UNIX ORAL HISTORY PROJECT を読むとtool boxの考え方が明確になってきたのはpipeが実装されてから, とあるのでUNIXの個性(Tool Box, C言語, 移植性)が固まっていく様子が窺える。それ以前はどちらかというとMulticsで取り入れられた技術を実装しているように見えてきた。それにしてもUNIXですらsource codeは残っているがdocumentが残っていない版, あるいはsource codeもbinaryも残っていないがdocumentは残っているといった版がある状況に驚いた。

TapeからSource CodeやBinaryを取り出していく過程も興味深い。今日自分が慣れ親しんでいるtarは7th Editionで追加されたもので, それ以前はrkd, tap, tpといったものが使われていたらしい。それらの形式をdocumentから読み解いて中身を取り出すsoftwareを書いて取り出し, time stampを解読してtapeがいつごろのものを保存しているのかを特定していったとのこと。まさに発掘作業だ(本文中ではそのものずばり, unearthingと表現されている)。

3 The Nsys Kernel: 1973

nsysとlabelが貼られていたtapeから取り出されたのがNsys Kernelで, これは4th Editionがreleaseされる3ヶ月前のもの。これについての問合せへのDennis Richie氏の一言"I’m not sure how much work it would take to get this system to boot."は古のsoftwareの復元作業の困難さを伺わせる。実際に5th EditionのC CompilierでCompileを試みるとC言語の仕様変更やら構造体へのfield追加, 起動するmemory上の位置が違う, といった落とし穴があって随分と労力がかかったらしい。pipe(2)に至っては実装があるのになぜかsystem call tableに登録されていなかったらしいが, その時の事情をDennis Richie氏に確認した結果も興味深かった。

4 1st and 2nd Edition Binaries: 1972

こちらはkernelではなく/bin, /etc, /usr/lib等の寄せ集めで1st Editionと2nd Editionの時代のものが混在しており、これを使ってApoutというPDP-11 Simulatorに1st Editionと2nd Editionの実行環境を作ったとのこと。またi-node情報が含まれていないtapeの512 byte blockを丹念に調査してlsやcat, cpのsource codeを復元したというのがまた凄い。

5 Early C Compilers: 1972

初期のC Compiler 2つの復元の話。一方は構造体を使えるようになる前のもの(last1120c)、他方は構造体を使えるようになってからのもの(prestruct-c)。これらについてはsourceからbinaryを作るところで躓いたが最終的にはtapeに入っていたC Compilerを使ってbinaryを生成、その後はself hostできるようになったとのこと。またprestruct-cの方は一部source fileに欠損があったため, その部分についてはlast1120cのものを持ってきて代用したと記述があった。この状況だと大元のsourceに改変を加えるのもやむを得ないか…と思った。

6 1st Edition UNIX Kernel: 1971

最後は1st Edition UNIX Kernel。これはAl Kossow氏が2006年に発掘したsource codeが印刷された資料からOCRで資料を読み取り, 電子化したものを人力で元資料と照合してsource codeを復元し, 7th Editionのassembler(1st Editionはassemblerで記述されていた)でassembleし, binaryを作成したが, ここでも一部source codeを変更せざるを得なかったと記述がある。出来上がったbinaryをsimulatorで実行させてsource codeの復元漏れや欠損していたbootstrap codeの問題を解決し, simulatorに周辺機器を追加して起動に漕ぎ着けるまでの記述がアツい。

7 Lessons Learned

まとめはこの経験から得られた教訓になっているのだが, やっぱり印象に残るのは最後の"Never underestimate the ‘packrat’ nature of computer enthusiasts."という箇所。自分の乏しい英語力で訳すと「計算機愛好家の執念をみくびるな」といったところになるのでしょうか。とにかく復元作業には多くの人が関わっており, かかった労力もすさまじいものがあるのは論文から伝わってくる。これを成し遂げた人たちに敬意を表したい。