最古のDOSソース、ガレージの紙束から45年越しに復活
ティム・パターソンのガレージに眠っていた3.5インチの紙束から、最古のDOSソースコードが手作業で転写された。45周年に合わせてGitHubで公開され、組み立てた結果は元バイナリとビット単位で一致している。
ティム・パターソンのガレージに眠っていた3.5インチの紙束から、最古のDOSソースコードが手作業で転写された。45周年に合わせてGitHubで公開され、組み立てた結果は元バイナリとビット単位で一致している。
印刷物として保管されていた、最古のDOS
ティム・パターソン(Tim Paterson)のガレージには、3.5インチほどの厚さがある緑罫紙の連続用紙が眠っていた。45年前にPDP-10のラインプリンタから吐き出された、86-DOS 1.00 と PC-DOS 1.00 開発版のアセンブラリスティングだ。今、この紙の山が MITライセンスでGitHubに公開されている。
公開のタイミングは2026年4月28日。86-DOS 1.00 が完成した1981年4月28日からちょうど45年目にあたる。Microsoftのオープンソース部門ブログでは、副社長のスコット・ハンセルマン(Scott Hanselman)と Microsoft OSPO ディレクターの Stacey Haffner が連名で発表を行った。
これまで「現存する最古のDOSソースコード」とされてきたのは、2018年に再公開された MS-DOS 1.25 だった。今回公開された 86-DOS 1.00 のソースは、それよりさらに 1年以上古い。MS-DOSの直接の祖先である86-DOSの、それも初版のソースコードが、紙の状態で半世紀近く生き延びていた事実そのものが驚きに値する。
1通のメールから始まった発掘プロジェクト
きっかけは2024年3月、別件の調査をしていた Yufeng Gao(オーストラリア在住の研究者)が、SCP の8086アセンブラを解析中に行き詰まったことだった。彼が思い出したのは、パターソン本人が2013年にコンピュータ歴史博物館へ送ったメールの一節だ。
6インチほどの厚さのアセンブラリスティングの印刷物がある。これらと、関連プログラムのものだ。
仲間の Rich Cini がパターソンに直接メールを送ると、すぐに返信が来た。「実際は3.5インチくらいだ。下の方は白紙だった」と苦笑混じりの返答で、上から順に86-DOS 1.00、PC-DOSの開発スナップショット2種、CHKDSKやEDLINのソース、SCPアセンブラ、MS BASICコンパイラのランタイムライブラリと、丁寧な目録まで添えられていた。
問題は配送だった。パターソンは米西海岸、Cini は米東海岸、Gao はオーストラリア。最終的に、パターソンの自宅から10分の場所に住む Cini の友人 Frank Ancona が直接受け取りに行き、東海岸の Cini に送るルートで、ようやく2025年9月に紙束が動いた。
印刷から紙が手元に届くまでに、 45年と半年 が経っていた。
OCRは使えなかった
紙束はスキャンされ、合計10束、800ページ以上の連続用紙となった。ここで一つの壁にぶつかる。 既存のOCRツールでは、ソースコードのスペーシングがほぼ確実に崩壊するのだ。
ソースコードはコメント文と違って、空白の数や位置が意味を持つ。通常の英文OCRは「単語」を認識するが、MOV CL,[RELOC]のような行で空白が何個あったかを正確に再現することはできない。
Cini が採用したのは、もっと泥臭い方法だった。45年前、Commodoreの古いROMダンプを復元したときの手法だ。
OCRが同じ間違い方をすることを利用する。「B」と「8」、「S」と「5」、「l」と「1」、「O」と「0」のように、繰り返し起きるエラーをスクリプトで一括置換する。
そして1ページずつ目視で照合した。Gao と Cini の2人で、 ほぼ全ての転写作業をこなした という。Bundle 1(MS-DOS 1.25)だけは、すでに公開されている1.25のソースと完全に同一だったため流用したと、Gao は自身のサイトで「ズルした」と冗談めかして書いている。
組み立て直すと、バイナリは完全一致した
転写されたソースコードは、Seattle Computer Products(SCP)のアセンブラ ASM とユーティリティ HEX2BIN を使うと、当時のバイナリとビット単位で一致するように組み上がる。ハンセルマンも自身のXで「完璧で、再アセンブルすれば元のバイナリと1バイトずつ一致する」と確認している。
紙から起こしたソースが、半世紀近く前のバイナリと寸分違わず一致する。文字通りの デジタル考古学 だ。古文書を写本し、その写本から元の書物を復元できることを証明したに等しい。
86-DOS 1.00 は、実は 1.01 だった
リスティングの中身を読み解いた Gao は、長く気づかれていなかった事実を発見している。それは、世に出回っている「86-DOS 1.00」のバイナリが、実は機能的には1.01相当だということ。
MS-DOS 1.25 のチェンジログには、こう書かれていた。
1.01 05/12/81 Fix bug in `STORE'
STORE のバグとは何だったのか。今回ソースから組み直したバイナリと、世に出回っている「1.00」のバイナリを比較すると、2か所が違っていた。1つは事前読み込みフラグの無効化、もう1つは32ビットファイルサイズを DX:AX に分割する処理での型ミスだ。
元の1.00では、FILSIZの下位16ビットをAXにもDXにもコピーしていた。1.01は下位16ビットをAXに、上位16ビットをDXに分けて格納するよう修正されている。
しかも、修正方法が興味深い。ソースを直して再アセンブルしたのではなく、 バイナリを直接パッチ している。条件ジャンプ命令を NOP で潰した痕跡が残っているのだ。出荷直前の差し迫った修正だったのだろう。パターソンはすでにSCPを退社しており、修正は別の人物 Pat Opalka が顧客の要望で行ったものが、そのままMicrosoftに送られた。
ソースコードに「文字落ち」がある
もう一つ、Gao が見つけた異常がある。86-DOS 1.00 のソースコード 86DOS.ASM には、文字が突然消えている箇所が存在する。たとえばこんな感じだ。
02770 MOV AX,[NSP]
02780 SEG CS
02790 MOV [SPSA ENDIF
02800
02810 PBX
MOV [SPSAVE],AX で終わるはずの行が、なぜか MOV [SPSA ENDIF という構文的に成立しない文字列になっている。間に書かれていたはずの数行が、丸ごと抜け落ちている。
なぜこんなことが起きたのか。Gao は、 8インチフロッピーから DECSYSTEM-20 への シリアル転送中の欠落 という説を立てている。RS-232の接続が一時的に切れた場合、受信側はエラーを検知せずに「無音の時間」を見過ごしてしまう。これなら、欠損が連続したバイト塊として現れる説明がつく。ディスクの不良セクタなら、欠損サイズはセクタ境界に揃うはずだが、そうなっていない。
45年前の通信ノイズの痕跡が、コードの中に化石のように残っていた。
なぜ、紙だけが残ったのか
考えてみれば、これはオペレーティングシステムの保存史そのものだ。8インチフロッピーは磁性が抜ける。テープは加水分解する。DECSYSTEM-20 は廃棄された。デジタルに記録された86-DOS 1.00 は、おそらくこの世界のどこにも残っていない。
残ったのは、紙だ。インクが紙に染みただけのデータ。電源も読み取り装置も要らず、目で読める形式。45年経ってなお、 人間が書き起こせる 唯一のメディアだった。
ディスクは読めなくなる。CDやDVDは劣化する。デジタルアーカイブはサーバの維持費を払い続ける誰かがいる限りしか残らない。著作権法が動画を対象としていなかった1912年以前、米議会図書館はフィルムの保存に困った映画製作者から、1コマずつ印画紙に焼いた「ペーパープリント」を受け取っていた。デジタル時代の保存問題と、20世紀初頭の保存問題が、紙という古い解で奇妙につながる。
紙束は今後、パターソン本人の寄贈によって Interim Computer Museum に収蔵されるという。Microsoftがリリースを公式にしたことは大きいが、本当の英雄は、ガレージの紙束を捨てなかったパターソンと、それを発掘・転写した数人の有志たちだろう。
技術の歴史は、こういう人たちの手で繋がれている。
参照元
- Microsoft Open Source Blog - Continuing the story of early DOS development
- DOS-History/Paterson-Listings - GitHub
他参照
- Yufeng Gao - Tim Paterson's DOS Source Listings
- Rich Cini - Tim Paterson's DOS Source Listings and Other Things
関連記事
- Ghosttyが18年のGitHubを離れる、ハシモト氏決断
- GitHub CLIがテレメトリ収集を開始、デフォルト有効
- GitHub Copilotが個人ユーザーのコードをAI学習に使う──4月24日から
- クラウド絶好調のMicrosoftがWindowsファンに頭を下げた決算
- GitHub、4月に2件の連続障害でCTOが謝罪と説明
- GitHub Copilot、6月1日に従量課金へ全面移行
- Microsoft、Azure LinuxをFedoraベースに刷新へ
- インテルがオープンソース伝道の看板を自ら畳んだ
- GitHub Copilot、6月からトークン課金へ移行
- Windows 95で動くWSL、独立開発者が公開