1972年のUNIX V2「Beta」復活
(tuhs.org)- DMRテープのs1/s2をフォレンジック分析し、動作可能なUNIXシステムを構築。s1はカーネルを収めたUNIX INIT DECtapeで、s2には配布ファイルの大半が含まれている
- s1カーネルは、現在までに確認されている最古の機械可読なUNIXカーネルで、V1とV2の中間に位置し、V1・V2のa.outをどちらも実行できる
- ユーザーコアサイズはV2同様 16 KiB(8K words) に拡大されているが、syscall tableはV1およびunix-jun72カーネルと同じで、V2 syscallは含まれない
- 起動条件が厳しく、aapのPDP-11/20エミュレータだけがカーネル起動に成功し、SIMHとErsatz-11はlogin promptの前で停止する
- 公開されたRFディスクイメージにはs1/s2のファイルのみが含まれており、aapエミュレータで起動可能。init(7)の挙動から、
/usrはRF上にあったとみられる
s1/s2テープから復元したUNIX V2「Beta」
- DMRテープをフォレンジック分析した結果、s1/s2テープから動作可能なシステムを構築できた
- DMR tapes は分析対象となったテープ群
- s1 tapeはカーネルを収めたUNIX INIT DECtape
- s2 tapeは配布ファイルの大半を含む
- s1カーネルは、現在までに確認されている最古の機械可読なUNIXカーネルで、V1とV2の中間に位置する
- 未修正のunix-jun72カーネルはV1 a.outのみをサポート
- s1カーネルはV1とV2のa.outを標準で両方実行できる
- ユーザーコアサイズは8 KiB(4K words)から16 KiB(8K words) に増加
- syscall tableはV1およびunix-jun72カーネルと同じ
- V2 syscallは含まれない
- syscallの面ではV1に近く、コアサイズとV2バイナリ実行の面ではV2の特性を持つため、「V2 beta」と見なされる
- システム上で
ed、cc、a.outの実行が可能- 例示セッションでは
hello world!プログラムを作成・コンパイル・実行している
- 例示セッションでは
起動制約とRFディスクイメージ
- 起動可能な環境は限定的
- aap's PDP-11/20 emulator だけがカーネル起動に成功
- SIMHとErsatz-11はlogin promptに到達する前に停止
- 本来のインストール手順は、s1から起動した後にs2からファイルを復元する方式
- aapエミュレータはTC11をサポートしていないため、s1/s2テープから直接インストールするのは難しい
- 実際の構成は、迂回的にRFディスクイメージを作成する方法で進められた
- s1 tapeのファイルを抽出して空のRFディスクに配置
- unix-jun72カーネルをインストールした後、SIMHでRFから起動
- s2の残りのファイルを抽出
- 最後にhex editorでunix-jun72カーネルをs1カーネルに置き換え
- 生成されたRFイメージにはs1/s2由来のファイルのみが含まれる
- Research-UNIX-V2-Beta から入手可能
- s1s2unix_rf.img の直接ダウンロードリンクも提供されている
- このイメージはaapエミュレータでは起動するが、SIMHでは起動しない
- init(7)プログラムはRKを
/usrにマウントしない- この挙動は、
/usrがRFに保存されていたことを示唆する
- この挙動は、
1件のコメント
Hacker News のコメント
Brian Kernighan の講演で聞いたジョークを思い出した。Ken Thompson が3週間でテキストエディタ、B コンパイラ、入出力ファイル管理の骨格を作り、それが最終的に UNIX になったという話だった
ジョークの肝は、今の私たちは当時より少し効率が落ちているということ
妻が子どもたちを連れてイギリスへ行ったので、Ken は好きなことを思う存分できた、と記憶している。もちろん、最初の UNIX を書く前からすでに経験も非常に豊富だった
頭の中にプロジェクトがあるプログラマーなら、一度試してみる価値はある。3週間、小屋のような場所で仕事や家族から離れ、必要な本や文書を持ち込み、インターネットを断つのだ。可能ならフィーチャーフォンを使い、どこまで進めるか見てみるやり方だ
ただし、すでに十分考えていて、少しコードも書いてあるプロジェクトであるべき。さらに考えると、外部ライブラリにほとんど依存しない低レベルプロジェクトがこの実験には最も向いている。サードパーティライブラリの山に頼るプロジェクトだと、インターネットなしで問題が起きたとき詰まりやすいし、Ken も適切なプロジェクトを選んだというわけだ
1時間の動画で、Thompson が面白い話をたくさんしている。Kernighan は Thompson に話させる役回りを見事にこなしている
9時から5時まで働くような感じだったのか、それとも人生の他の部分を脇に置いて、終わらせるためにゴブリンモードに入っていたのか知りたい
しかし残りの20%は長い尾のように続き、たいてい途方もない苦役になってやる気を削いでしまう
Spock も感嘆するほど興味深い。Mac で PDP-11 エミュレータをコンパイルする方法を学んでみたい
その次は 2.11BSD ディストリビューションのインストールを試してみるとよい。文書化がよくできていて、初期 Unix の多くの混乱が過ぎた後に出たものだ。その後は RT-11 で遊ぶのも非常に楽しく、実際に小さなアプリもいくつか書いてみた
Apple Silicon でもうまく動く
本当に良い
人々が実作業に ed を使うところを初めて見た
それに、他に誰が ed を扱わなければならなかったのかも気になる。最近、vi のない非常に古いシステムに接続する必要があり、自分でエディタを作った。古代のシステム向けのエディタが必要な人がいれば連絡してもよい。あまり派手ではない
このソフトウェアを作った人々と研究者たちの仕事は驚くべきもので、本物のエンジニアたちに敬意を表する
詳細は覚えていないが、新しいファイルを作るときは
makeで起動した。make loveと入力すると、エディタに入る前にnot warと出力されたその後は二度と使わず、数年後に Xenix を使えるようになったときも ed は使わなかった。vi のほうがはるかにまともな代替手段だった
ある人が、Android のスクリーンキーボードは vi にはひどすぎるのでスマートフォンでは ed を使っていると言っていて、実際その通りだったので試してみた。スマートフォンでは ed は vi より少し悪かったが、両者はそれぞれ違う形で悪い
HeliBoard では、キーボードから ed コマンドを入力するのは vi よりずっと簡単だったが、何度か vi なら混乱しなかったはずのバッファ状態で混乱した。練習すれば良くなるかもしれないが、結局 vi に戻った
ed は動くには動くが、現代の基準では面白くない。それでもテレタイプ出力と比べれば、画面で使うのはすごいことだったはずだ
ついでに言うと、約 1 MIP の 3B2 が同時ユーザー約20人をさばけていた
ed はよく使っていて、実は昨日も使った。画面を消さずに何かを編集する必要があったからだ
それ以前には、ディスクに保存されたカードイメージ用のエディタも作ったが、非常に原始的なものだった
ときどき tuhs メーリングリストを眺めるのが好きだ。Ken Thompson、Rob Pike といった名前や、あまり知られていないが初期 UNIX とコンピューティングの現場に関わっていたさまざまな名前を見るのは素晴らしい
ソフトウェア考古学みたい
ソーシャルメディアで生産・消費される文化や、インターネット文化の他の多くの姿と同じように、完全に一時的で使い捨て。歴史もなければ未来もない
SaaSは単に閉じているというレベルではなく、実際には文字どおり単一のインストールに縛られていることが多い。保存して別の場所で起動することはできるかもしれないが、元のチームなしで何年も後にそれをやるのは、現代のPCのエミュレータ上で1972年のUnixを起動するよりはるかに大仕事になる
そのUnixにはマニュアルがあり、複数の配布環境にインストールして実行できるよう設計されていた。SaaSは、作者だけがデプロイできる寄せ集めに近い。必ずしも意図的だからではなく、そう作るよう圧力をかける進化的な力がないからだ
内部で他のSaaSと絡み合っていることも多く、まるでプロプライエタリなソフトウェアがその場で編集されている一つのグローバルなコンピュータのように、クラウド全体の状態を保存して復元しなければならないかもしれない
あのファイル権限が何を意味するのか、参考資料を教えてくれる人はいる? だいたいは推測できるけど、探してもUnix v2の権限についての情報が見つからなかった
lsの出力は見慣れた感じだけど、sdrwrwの部分だけが見慣れないhttps://gitlab.com/segaloco/v1man/-/blob/master/man1/stat.1?...
sdrwrwでは、1列目はsまたはlで、smallまたはlargeを意味する。2列目はd、x、u、-で、ディレクトリ、実行可能、setuid、なしを意味する。残りは所有者と非所有者の読み取り/書き込みビットhello worldが1328バイトだって? 肥大化したな!
初期のRustコンパイラだったと思ったけど、関連資料が見つからない。Goだったのかもしれない
追記: 見つけた。'rust-lang/rust#13871: "hello world" contains Lovecraft quotes' https://github.com/rust-lang/rust/issues/13871
printfを使ったhello worldを1 KiB未満でできる。writeによるhello worldは170バイト未満すごい。あの時間ポータルに入って、代替現実で暮らせるかな?
コンピュータにつなぐアダプタを手に入れて、好きな*nixをsimhで動かせばいい。参考資料としてはhttps://jstn.tumblr.com/post/8692501831がおすすめ
動くようにしたら、ホストマシンを机の後ろや見えない場所に押し込めば、1980年みたいに暮らせる
RFテープを復旧してみると、単純なテキストファイルだけを見ても、DOSや
.isoファイルが使わないバッファ領域が見えてくる2.11 BSDディストリビューションでも、基本的なタイル表示とウィンドウマネージャはネイティブOSにインストールする必要がある。だからKDEなりX11ウィンドウマネージャなりを使うことになる