引退にあたり、40年以上かけて蓄積したソースコードを公開
(dunfield.themindfactory.com)- ある開発者が引退を機に、40年以上にわたって蓄積してきたソースコードを公開し、古いシステム・ツール・個人プロジェクトを直接確認できるようにした
- 公開範囲には、ARM向けマルチプロセス/タスクカーネル、6809 CPU向けオペレーティングシステム、Altair 1980時代の初期OSなど、OSやカーネルまで含まれる
- Micro-C Compiler、クロスアセンブラ、逆アセンブラ、8052エミュレータ、デバッガといった低レベル開発ツールもあわせて提供される
- DOSBox、DOSユーティリティ、ファイル同期、ZIP処理、インストールパッケージ生成、テキストエディタなど、PC作業向けユーティリティが幅広く公開されている
- アマチュア無線、RS-232赤外線リモコン、Ethernet TTY、X10制御、DVD 1500枚を読むためのロボットなど、個人ハードウェアプロジェクトまで含まれており、保存価値が高い
公開の目的と案内文書
- 引退を機に、「自分が書いたもの」にあたる40年以上蓄積されたソースコードを公開
- 公開の目的は、他の人がこのコードを有用に活用したり、その一部から学べるようにすることにある
- 公開ページで案内されている文書:
OS、カーネル、仮想マシン、シミュレーション
- ARMOS: ARM向けマルチプロセス/タスクカーネル
- CUBIX: 6809 CPU向けオペレーティングシステム
- DMF: Altair 1980時代の初期OS
- DVM: Dunfield Virtual Machine
- SIMSYS: Altair、D6809、H8、Horizon、Mod8関連システム
- MONITORS: 各種組み込みプロセッサ向けモニタ
- 8051ICE: EMILYを使うインサーキットエミュレータ
- EMILY52: 8052エミュレータ
コンパイラ、アセンブラ、デバッガ、開発補助ツール
- MICRO-C: Micro-C Compiler
- MCSAMPLE: Micro-Cのサンプルプログラム
- XASM: クロスアセンブラとツール
- DISASM: クロス逆アセンブラ
- DMS: Dunfield MicroScopeデバッガ
- DESMO: Debug Scripting Monitor
- DDSIDE: Dunfield Development Systems IDE
- BLDTOOL: ビルド作業を支援するツール
- PUBSRC: 公開ソースセクションの保守ツール
- HFC: Help File Compiler
- ESL: Extensible Script Language
DOS、ファイル、ディスク、編集、パッケージング用ユーティリティ
- DBBD: DOSBox起動フロッピーディスク
- DBUTIL: DOSBoxユーティリティ
- DD_DBSRC: DOSBoxソースコードツリー
- DOSUTIL: 各種DOSユーティリティ
- FDI: Floppy Disk Image
- IMDSRC: ImageDisk
- EDT: EDTテキストエディタ
- ELF: 長いファイル名の編集ツール
- FTOOLS: ファイル操作用の各種ツール
- SYNC: 2つのディレクトリツリーを同期
- ZDIR: ZIP内部ファイルの一覧表示と
touch - MAR: インストールファイル圧縮に使われていたMicroARchiver
- MKPKG: 単一の
.exeパッケージインストーラを生成 - ESP: 実行ファイル文字列パッチ
- PT: PaperTapeツール
- MICROCAD: 非常に小さなCAD描画プログラム
ハードウェア、通信、制御、個人プロジェクト
- DARC: Dunfield Amateur Radio Controller
- HTX242: RS HTX-242アマチュア無線トランシーバ制御
- ICOMCIV: アマチュア無線向けICOM CI-Vインターフェースコード
- IR232: RS-232シリアル赤外線学習リモコン
- ETTY: Ethernet TTY
- SNIFF: Ethernetスニファ
- DLM: Data Line Monitor
- ITS: Interactive Terminal Switch
- DDLINK: COM、LPT、NETファイル転送用DavesDataLink
- SERCNCT: 1つのCOMポートで複数デバイスを切り替え
- DBOX: Sony VCRコントローラ
- DVDROBOT: DVD 1500枚を読むために作られたロボット
- EPROM: EPROMプログラマ
- 8031DWG: 8031ベース設計サンプル
- X10CTRL: PCからX10デバイスを制御
- RINGSW: 電話回線の distinctive ring スイッチ
- PC100: VT-100端末エミュレータ
- LABTOOLS: 各種実験室/試験ツール
- CAM: 発達障害児向けプロジェクト
- MACMON: 子どもたちのネットワーク利用の監視/ログ
- TRANZTCL: Verifone TRANZ PointOfSale開発ツール
1件のコメント
Hacker News のコメント
DOSUTIL.ZIPをざっと見たところ、シンプルでエレガントな C プログラムが本当に良かった
その多くは標準 C の
#includeを1〜2行しか使っておらず、2万行の C コードに#ifが24個しかない点も印象的だったこういうコードベースを読んだ経験が、Cosmopolitan Libc の作業を始めるときのインスピレーションになった
#ifマクロを大幅に減らせるそれでも同じように比べるなら、
use文は2つだけではあるSTYLE.TXTのTrue=7という慣例は見慣れなかった低レベルコードとハードウェアの経験から「低レベルで起こり得る不具合を最小化」しようとして、C では
0==FALSE、!0==TRUEであることを利用し、1の代わりに7を真として使うこともあった、という内容だった1ビットの差より3ビットの差のほうがまし、という習慣的な選択だが、実際にそのような1ビットのハードウェアエラーが起きるならシステムの大半は壊れるはずなので、本人も愚かだと認めている
昔はランダムなビット反転が条件文を壊すことがよくあったのか気になる
失敗時にもどの分岐なら安全に実行できると仮定するのか、各条件のビット数を数えて1が0より多ければ真と見なすのか、誤り訂正なしにビットが反転したとログに残したりオペレーターに通知したりするのかまで決めなければならない
誤り検出符号が役立つ場面はあるが、真を7と決めるだけでは不十分だ
それでもスタイル文書を読むのは楽しかったし、こうして全部公開している点が良かった。誰かにとってはきっとぴったりのツールがあるはずだ
0xA5(1010 0101)を使って、少し変形した交互ビット列を送る一度にできるだけ多くの故障可能性を確認しようとする方法だ
TRUE=7は本当の解決策ではないブール変数なら
if (var == TRUE)、else if (var == FALSE)、それ以外の値のときにどうするかを、すべての条件ごとに処理しなければならず、その処理コード自体もクラッシュしてはならないさらにビット反転は、
switchに使う変数やif (i > 17)のような条件、ポインタ、スタック上の戻りアドレス、コードそのものにも影響し得るせいぜい非常に部分的な解決策で、実装も些細ではないので、標準的な慣例とは見なしにくい
個人的には
-1を使ったと思う昔のコードをきちんと保存しておかなかったのがとても残念だ
初めての非 trivial なプログラムだったスネークゲーム、アセンブリで作った初のユーティリティ、Centronics プリンタ用の初のデバイスドライバ、大学の課題として二日酔いのひどい状態で1時間で Pascal で作った万年カレンダーまで、どれも些細で保存する価値はないと思っていた
結局、1990年代後半以前のコードはひとつも残っていない。若い開発者は自分のコードを大事に保存すべきだ
もちろん、こうした「無料」サービスが終了すると問題になるので、セルフホスティングも役に立つ
当時は TSR が魔法のように見えた。たぶん母の家の地下室にあるフロッピーディスクのどこかに残っているかもしれない
著者が2019年にほとんど死にかけた出来事を振り返った記事も読む価値がある: https://dunfield.themindfactory.com/2019.htm
検査結果があまりにも悪く、ある医師は診察中にいつ死ぬか分からないとして治療を拒否したほどだった
それでも今も生きていて普通に過ごし、毎週土曜日には海辺を走ってもいる。検査結果は良くなっておらず、いつも息切れしているが、ただ死ぬことを拒んでいる人のようだ
リンク先で医師が言った「書類に書かれているよりずっと良く見える」と似ている
記事には「子どもたちを抱きしめ、自分のベッドで眠り、食事をし、手で少し作業すること」さえすべて否定されたというくだりがあったが、父が白血病と肺炎で回復せず、呼吸管を外せなかったときも、医師たちは同じように一生障害が残ると強く言っていた
本当に良い。いつか似たようなことをやってみたいと何度も思ったことがある。
祖父母から遺産を受け取るのに似ている。本物の宝石や不思議な品が、がらくたやゴミの間に混ざっているだろうが、その全体が、豊かで興味深い人生を送った実在の人々の物語を物語っている。
いくつかのハイライトだけでは、その人生をきちんと捉えることはできない。
幸い、90年代後半に作った商用のメモリアロケータは残っている。シングルスレッドで、Metrowerks CodeWarrior と旧 MacOS しかサポートしていなかったが、Mac で最速かつバグのないアロケータだった。
MacOS X が出て役に立たなくなり、今これに誰が興味を持つのかは分からない。
昨日話したように Trapeze のソースコードは失ってしまった([https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)](https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)))。後で誰も気にしなくなった頃に共有するため、自分の成果物を保管しておこうという発想がなかったのだと思う。
本当に素晴らしい。自分のコード履歴が将来どう見えるかと比べると、かなり純粋なコードのように感じる。
2040年の自分のコードは、「今では誰も使っていない」ライブラリやフレームワークを大量に使っていた痕跡を示すことになりそうだ。
良し悪しの問題ではなく、単に時代の反映にすぎない。
今日流行している開発慣行は、驚くほど一時的で脆い。今のプロジェクトのうち、放置されたまま10年耐えられるものもほとんどなく、40年となるとなおさら難しい。
pip installやnpm installは、いずれ全部使い物にならなくなるだろう。最も影響力のあるユーティリティは ImageDisk だと思う。
IBM PC を使ってさまざまな種類のコンピュータ由来のフロッピーディスクを保存するために使われ、bitsavers.org や archive.org にある多くの古いソフトウェアがこのツールで復元された。
Vernor Vinge の A Deepness in the Sky には、数千年後の人類社会が登場する。そこでは、ほぼすべてのソフトウェアはすでに書かれており、問題はそれを見つけることだけだ。
そのためプログラマー兼考古学者たちがアーカイブを掘り返し、必要ならエミュレータの中のエミュレータの中のエミュレータでコードを実行する: https://garethrees.org/2013/06/12/archaeology/
あなたも、明日であれ5,000年後であれ、誰かが恩恵を受ける宝の山に貢献したわけだ。
引退直前の最後のバグ修正という冗談で、micro-cad を見ようとしたら 404 になった。
URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
期待される動作は、
.zipファイルをダウンロードできること。MCSAMPLEzip に全体が一緒に入っているようだ。素晴らしい。特定の言語や自動化作業をするときにいつも手元に置く、個人的な「バイブル」をいくつか蓄積してきたし、HN で学んだ整理の仕方もかなりある。
ただ、自分の思考過程にあまりにも個人的で特化したものに感じられて、公開しようと思ったことはなかった。
しかし、こうした資料を見ていると刺激を受ける。本当に素晴らしいアイデアで、可能なら引退プロジェクトへの感謝として金銭的な支援もしたい。
それに、どんな整理方法を学んだのかも知りたい。他の人の生産性向上のコツやソフトウェアを学ぶことには、いつも関心がある。
興味があれば、ファイルを互いに交換してみたい。あなたの資料から学べることが多そうだ。私の Gmail ユーザー名は HN ユーザー名と同じ。