5 ポイント 投稿者 GN⁺ 2023-11-04 | 1件のコメント | WhatsAppで共有
  • ある開発者が引退を機に、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件のコメント

 
GN⁺ 2023-11-04
Hacker News のコメント
  • DOSUTIL.ZIPをざっと見たところ、シンプルでエレガントな C プログラムが本当に良かった
    その多くは標準 C の #include を1〜2行しか使っておらず、2万行の C コードに #if が24個しかない点も印象的だった
    こういうコードベースを読んだ経験が、Cosmopolitan Libc の作業を始めるときのインスピレーションになった

    • ビルド対象が1つだけなら、#if マクロを大幅に減らせる
    • 昔の C コンパイラは、現代の C コンパイラならきちんと検出するようなさまざまな誤りを、そのまま見逃してくれた
    • Rust では、ルートが1つだけのシンプルな HTTP リスナーを書いたところ、Cargo がビルドのために依存関係を105個ほど引っ張ってきた
      それでも同じように比べるなら、use 文は2つだけではある
    • 逆に C には、マクロだけで実装したハッシュテーブルもある。かなり格好いい: https://troydhanson.github.io/uthash/
  • STYLE.TXTTrue=7 という慣例は見慣れなかった
    低レベルコードとハードウェアの経験から「低レベルで起こり得る不具合を最小化」しようとして、C では 0==FALSE!0==TRUE であることを利用し、1 の代わりに 7 を真として使うこともあった、という内容だった
    1ビットの差より3ビットの差のほうがまし、という習慣的な選択だが、実際にそのような1ビットのハードウェアエラーが起きるならシステムの大半は壊れるはずなので、本人も愚かだと認めている
    昔はランダムなビット反転が条件文を壊すことがよくあったのか気になる

    • たとえそういうことがあったとしても、すべての条件文を3値ブールのように考えるわけにはいかない
      失敗時にもどの分岐なら安全に実行できると仮定するのか、各条件のビット数を数えて1が0より多ければ真と見なすのか、誤り訂正なしにビットが反転したとログに残したりオペレーターに通知したりするのかまで決めなければならない
      誤り検出符号が役立つ場面はあるが、真を7と決めるだけでは不十分だ
    • 著者も事実上、愚かな習慣だと認めており、むしろ意図が分かりにくくなると思う
      それでもスタイル文書を読むのは楽しかったし、こうして全部公開している点が良かった。誰かにとってはきっとぴったりのツールがあるはずだ
    • シリアルデータラインが動作しているか確認するときは、0xA51010 0101)を使って、少し変形した交互ビット列を送る
      一度にできるだけ多くの故障可能性を確認しようとする方法だ
    • そこまで心配するなら、TRUE=7 は本当の解決策ではない
      ブール変数なら if (var == TRUE)else if (var == FALSE)、それ以外の値のときにどうするかを、すべての条件ごとに処理しなければならず、その処理コード自体もクラッシュしてはならない
      さらにビット反転は、switch に使う変数や if (i > 17) のような条件、ポインタ、スタック上の戻りアドレス、コードそのものにも影響し得る
      せいぜい非常に部分的な解決策で、実装も些細ではないので、標準的な慣例とは見なしにくい
    • よくある問題というより、「起こるかもしれないから、簡単なところでは防いでみよう」に近い
      個人的には -1 を使ったと思う
  • 昔のコードをきちんと保存しておかなかったのがとても残念だ
    初めての非 trivial なプログラムだったスネークゲーム、アセンブリで作った初のユーティリティ、Centronics プリンタ用の初のデバイスドライバ、大学の課題として二日酔いのひどい状態で1時間で Pascal で作った万年カレンダーまで、どれも些細で保存する価値はないと思っていた
    結局、1990年代後半以前のコードはひとつも残っていない。若い開発者は自分のコードを大事に保存すべきだ

    • 今どきの子どもたちは Git とさまざまなホスティングハブを使っているので、コードが消えることは少ないという点で、この問題は自分たちの世代だけが経験するものになりそうだ
      もちろん、こうした「無料」サービスが終了すると問題になるので、セルフホスティングも役に立つ
    • 昔のコードはたくさん残っているが、恥ずかしすぎてもう見返したくない
    • 自分も似たようなものだ。DOS スプレッドシートプログラムも作ったし、modeX のチャートや数式もあったし、ゲームをいくつか、ウイルスもいくつか作った
      当時は TSR が魔法のように見えた。たぶん母の家の地下室にあるフロッピーディスクのどこかに残っているかもしれない
  • 著者が2019年にほとんど死にかけた出来事を振り返った記事も読む価値がある: https://dunfield.themindfactory.com/2019.htm

    • 強烈だった。2015年に心臓発作を起こし、心臓の90%が損傷した義父を思い出した
      検査結果があまりにも悪く、ある医師は診察中にいつ死ぬか分からないとして治療を拒否したほどだった
      それでも今も生きていて普通に過ごし、毎週土曜日には海辺を走ってもいる。検査結果は良くなっておらず、いつも息切れしているが、ただ死ぬことを拒んでいる人のようだ
      リンク先で医師が言った「書類に書かれているよりずっと良く見える」と似ている
    • 医師たちはなぜああいうことを言うのか気になる
      記事には「子どもたちを抱きしめ、自分のベッドで眠り、食事をし、手で少し作業すること」さえすべて否定されたというくだりがあったが、父が白血病と肺炎で回復せず、呼吸管を外せなかったときも、医師たちは同じように一生障害が残ると強く言っていた
    • 不思議なことに、H. P. Lovecraft の The Shadow Out of Time を思い出す
    • 暗い話だが、最終的にはハッピーエンドのように見える
  • 本当に良い。いつか似たようなことをやってみたいと何度も思ったことがある。
    祖父母から遺産を受け取るのに似ている。本物の宝石や不思議な品が、がらくたやゴミの間に混ざっているだろうが、その全体が、豊かで興味深い人生を送った実在の人々の物語を物語っている。
    いくつかのハイライトだけでは、その人生をきちんと捉えることはできない。

    • なぜ引退した後にだけやる必要があるのか? 今すぐやってはいけないのか?
    • 40年間プログラミングして作ってきたものを少しは残しておけばよかったが、新しい職場に移るたびに全部置いてきてしまった。
      幸い、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 installnpm install は、いずれ全部使い物にならなくなるだろう。
  • 最も影響力のあるユーティリティは ImageDisk だと思う。
    IBM PC を使ってさまざまな種類のコンピュータ由来のフロッピーディスクを保存するために使われ、bitsavers.org や archive.org にある多くの古いソフトウェアがこのツールで復元された。

  • Vernor Vinge の A Deepness in the Sky には、数千年後の人類社会が登場する。そこでは、ほぼすべてのソフトウェアはすでに書かれており、問題はそれを見つけることだけだ。
    そのためプログラマー兼考古学者たちがアーカイブを掘り返し、必要ならエミュレータの中のエミュレータの中のエミュレータでコードを実行する: https://garethrees.org/2013/06/12/archaeology/
    あなたも、明日であれ5,000年後であれ、誰かが恩恵を受ける宝の山に貢献したわけだ。

    • 現代、つまり遠い未来の暦は、人類初の月面着陸を基準にしていると一般には思われているが、実際には Unix Epoch を基準にしている、というくだりを、Vinge 好きのエンジニアたちは特に好む。
  • 引退直前の最後のバグ修正という冗談で、micro-cad を見ようとしたら 404 になった。
    URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
    期待される動作は、.zip ファイルをダウンロードできること。

    • MCSAMPLE zip に全体が一緒に入っているようだ。
    • 私も同じ 404 に遭遇した。元の CAD プログラム は多くないので、ぜひこれを見てみたい。
  • 素晴らしい。特定の言語や自動化作業をするときにいつも手元に置く、個人的な「バイブル」をいくつか蓄積してきたし、HN で学んだ整理の仕方もかなりある。
    ただ、自分の思考過程にあまりにも個人的で特化したものに感じられて、公開しようと思ったことはなかった。
    しかし、こうした資料を見ていると刺激を受ける。本当に素晴らしいアイデアで、可能なら引退プロジェクトへの感謝として金銭的な支援もしたい。

    • ここで言う「バイブル」が正確に何を指すのか気になる。
      それに、どんな整理方法を学んだのかも知りたい。他の人の生産性向上のコツやソフトウェアを学ぶことには、いつも関心がある。
    • 私にもこういうバイブルがかなりある。
      興味があれば、ファイルを互いに交換してみたい。あなたの資料から学べることが多そうだ。私の Gmail ユーザー名は HN ユーザー名と同じ。