
2025/12/24 3:22
**発見されたUnix V4テープの初期分析** * テープには、早期のUnix V4オペレーティングシステムの生データコピーが保存されています。 * 主な構成要素: - カーネルバイナリ(`/sbin/rc`、`/sbin/init`) - コアユーティリティ(`/usr/bin/*`、`/bin/*`) - `/src/` 配下のソースファイル(Cとアセンブリ) - `README`・`COPYING` にあるドキュメント * 注目すべき点: - `makefile` は最適化フラグを付けずに `cc` を使用しています。 - システムコールは直接アセンブリ(`syscall.s`)で実装されています。 - ユーザーアカウントは存在せず、デフォルトでシングルユーザーモードが設定されています。 * 次の推奨手順: 1. バイナリの整合性をチェックサムで確認する。 2. モダンなエミュレータ上でソースをコンパイルし、互換性を検証する。 3. 後続のUnixリリースとの違いを文書化する。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
1970年代の第4版リサーチ Unix マグネティックテープが、2025年7月にユタ大学で発見され、無事に復元されました。このテープには、ソースコード、コンパイル済みバイナリ、およびカーネルを含む完全なシステムダンプが収められています。ただし、GitHub の Unix History Repository へはソースとカーネルファイルのみがアップロードされ、ライセンス上の問題を避けるためにすべてのコンパイル済みバイナリは削除されています。
第4版リサーチ Unix(1973年11月リリース)は、PDP‑11 アセンブリではなく初期の C 言語で書き直されたカーネルの大部分を導入しました。その内容は第5版に非常に近く、Research‑V4 と Research‑V5 のスナップショット間でファイル一覧とコミット履歴を比較することで差異が特定されます。ユニークな第5版ファイルには
c13.c、c21.c、c2h.c、cmp.c、および ldfps.s が含まれます。Git blame 分析では、第4版は v4 から 75,676 行、v3 から 6,590 行、v2 から 168 行を取り入れたのに対し、第5版は 11,181 行の新規行を追加しつつ、52,238 行が v4、3,296 行が v3、168 行が v2 から採用されました。
各リサーチエディションの平均コミットタイムスタンプは次のとおりです:V1 1972‑06‑20、V2 1972‑05‑31、V3 1973‑03‑10、V4 1974‑03‑06、V5 1974‑11‑28、V6 1975‑06‑15、V7 1979‑01‑25。第4版と第5版の約8か月間隔は、急速な開発期間を示しています。
著者マッピングは手動で作成したマップファイルを使用して更新され、不足している著者データは正規表現により Ken Thompson と Dennis Ritchie にデフォルト設定されました。元のベル研究所メンバーからの貢献も取り入れ、Ken Thompson が SNOBOL III インタプリタ開発者であり、Robert H. Morris が数学ライブラリ/エミュレータ実装者であることが確認されました。
復元とリポジトリへの追加は、当時手書き資料にしか存在しないと考えられていた初期 Unix ソースコードを保存する重要性を際立たせます。これにより研究者・歴史家・開発者は、オペレーティングシステムの進化を深く理解できる本物のコードを手に入れ、レガシーソフトウェアのアーカイブ作業の重要性を再認識できます。
本文
複数のニュースメディアが、2025年7月にユタ大学で発見された1970年代製の「Fourth Edition Research Unix」磁気テープと、その成功裏に行われた復元作業について報じました。これは重要な発見です。これまで、Fourth Edition のマニュアルだけが残っていると考えられていたからです。
ここ数日間で私はそのテープのソースコードを GitHub にホストされている Unix History Repository に取り込み(こちらでご覧いただけます)そしてコード構成を調査しました。Fourth Research Edition Unix は、1973年11月に有名な AT&T Bell Laboratories からリリースされました。この版の大きな進展は、システムカーネルの大部分を PDP‑11 アセンブリ言語ではなく、高水準言語(初期の C)で書き直したことです。
テープにはソースコードだけでなく、コンパイル済みバイナリとカーネルを含む完全なシステムダンプが収められています。Unix History Repository に組み込むために、通常ソース管理下に置くファイルのみを残す形でバイナリは削除しました。
find $dir -name '*.[oa]' | xargs rm rm -rf $dir/bin $dir/usr/bin $dir/usr/games $dir/lib $dir/dev rm $dir/etc/{lpd,init,msh,getty,mkfs,mknod,glob,update,umount,mount} rm $dir/unix rm $dir/usr/mdec/[tm]boot $dir/usr/sys/conf/mkconf $dir/usr/fort/fc1 rm $dir/usr/c/cvopt $dir/usr/lib/suftab
Unix History Repository に含まれる他のソーススナップショットと同様に、(合成) Git コミット日時はファイルタイムスタンプから導出され、コミット作者は手作業で作成したマップファイルから取得します。既存の V4 作者マップを前後の Unix Research 版に関する情報をもとに更新しました。ソースコード内に作者情報が欠けているファイルには ken と dmr(Ken Thompson と Dennis Ritchie、システム主開発者)を明示的に付与し、
. * 正規表現でデフォルトとして未記入の詳細をマークしました。
元 Bell Labs Unix 開発チームのメンバー数名が協力してくれ、SNOBOL III インタプリタ(Ken Thompson)や数学ライブラリ・エミュレータ(Robert H. Morris)の実装者など、一部詳細を埋める情報を提供してくれました。テープの内容は Fifth Edition に近いと主張する声もありますが、これは Unix マニュアル版は正式に番号付けされている一方で、配布ソフトウェアテープは当時単一の Unix 開発コンピュータ上にあったものをコピーしたものがほとんどだったためです。
二つのバージョン間の違いを確認するためにまずベースファイル名を比較しました。
normalize() { sed 's|.*/||' | sort -u } comm -3 \ <(git ls-tree -r --name-only Research-V4-Snapshot-Development | normalize) \ <(git ls-tree -r --name-only Research-V5-Snapshot-Development | normalize)
このコマンドは、二つのリリースでのみ出現するベースファイル名を表示し、以下のファイルが Fifth Edition に追加されたことを示しました。
c13.c c21.c c2h.c cmp.c ldfps.s
つまり C コンパイラは数ファイル増加し、
cmp(比較)ユーティリティは C で書かれたという事実です。
さらに掘り下げるために
git blame を使い、各版のファイルが前版からどの部分を取り込んだかを調べました。
# 各版について for ref in Research-V4-Snapshot-Development \ Research-V5-Snapshot-Development ; do echo $ref # その版の全ファイルに対して git ls-tree -r --name-only $ref | grep -Ev 'README|LICENSE|\.pdf|\.ref' | xargs -I '{}' git blame -M -M -C -C $ref -- '{}' | sort | uniq -c | awk '{("git show " $2 " | awk '\''/Synthesized-from:/{print $2}'\'') | getline ver; total[ver] += $1 } END {for (v in total) print v, total[v]}' done
出力は次の通りで、Fourth Edition のコード行構成を示しています。
v4 75676 v3 6590 v2 168
新規素材が多く、以前の版から約10 %が取り込まれたことが分かります。
Fifth Edition の対応結果は次のとおりです。
v5 11181 v4 52238 v3 3296 v2 168
これにより、Fourth Edition の52,000行が Fifth Edition にも含まれている一方で、新たに約11,000行のコードが追加されたことが明らかです。
最後に各リリースに含まれるファイルの平均タイムスタンプを調べました。
# 各 Research Edition について for v in $(seq 1 7) ; do ref=Research-V$v-Snapshot-Development printf '%s\t' $ref git ls-tree -r --name-only $ref | grep -Ev 'README|LICENSE|\.pdf|\.ref' | xargs -I@ git log -1 --format=%at $ref -- @ | date -I -d @$(awk '{s += $1} END {printf("%.0f", s / NR)}') done
結果は以下のとおりです。
V1 1972-06-20 V2 1972-05-31 V3 1973-03-10 V4 1974-03-06 V5 1974-11-28 V6 1975-06-15 V7 1979-01-25
これらは Fourth Edition が Fifth Edition より約8か月前に完成したことを示し、当時のシステム進化速度を考えると重要な期間です。(また、First と Second Editions のタイミング不一致も検証する必要があります。)