HN 日本語サマリー

← 一覧へ戻る
プログラミング

MoofTCP – 68k Mac向けのMacTCPのモダンな代替品

MoofTCP – A modern replacement for MacTCP on 68k Macs (github.com)

19 pointsby marcusbasant12 コメント

要約

MoofTCPは、古い68k Mac(特にメモリが限られているSystem 6環境)向けのMacTCPの代替となるTCP/IPスタックです。オリジナルのMacTCPと比較して、メモリ使用量を抑えつつ、信頼性、低遅延、スループットの向上を目指しています。DHCP対応や簡単なインストーラー、MultiFinder対応などの機能も備えています。

全文翻訳

MoofTCP

System 6で動作する68000 Mac向けの、メモリ効率の良いモダンなMacTCP代替品。

[画像: License: MIT] [画像: Platform: System 6 / 68000] [画像: Version 1.0]

MoofTCPは、AppleのMacTCPのドロップイン代替品です。MacTCP用に書かれたプログラムは変更なしで動作しますが、その下にはポータブルC言語でゼロから書き直された新しいTCP/IPスタックがあり、独自のコントロールパネル、インストーラー、DHCPクライアントを備えています。これは4MBのRAMを搭載したMac Classic向けに構築されたため、1バイトたりとも無駄にはできません。

[画像: The MoofTCP control panel]

なぜ?

MacTCPは素晴らしいですが、古く、4MBのMac ClassicにBlueSCSIのようなSCSI Wi-Fi/Ethernetアダプターを接続した場合、応答が遅く、メモリを大量に消費し、設定が煩雑になることがあります。MoofTCPは、以下の順序で目標としています。

  1. 信頼性。 ハングアップ、メモリリーク、アプリ終了時の予期せぬ動作はありません。
  2. 低遅延。telnetセッションでのタイピングのようなインタラクティブな使用のためです。
  3. スループット。準モダンなユースケースを処理するためです。

...これらすべてを、MacTCPと同等の常駐メモリ使用量で実現します。

特徴

  • ドロップイン互換。 MacTCPの.IPPドライバインターフェース(TCP、UDP、ICMP echo)とdnrp名前リゾルバを実装しています。既存のMacTCPプログラムはそのまま動作します。
  • DHCPまたは固定アドレス。 コントロールパネルでどちらかを選択できます。静的IPを管理する必要はもうありません。
  • MoofTCP Lite。 DHCPを含まないビルドで、メモリの約5KBを節約でき、リソースが限られたマシンに適しています。1つのインストーラーに両方が含まれており、チェックボックスで選択できます。
  • フレンドリーなインストーラー。 MacTCPのファイルを脇に移動し、MoofTCPをインストールします。削除ボタンはすべて元通りに戻します。インストールが中断された場合も自己修復します。
  • MultiFinder対応。 接続を開いていたアプリが終了すると、後始末をします。
  • 組み込み診断機能。 オプションのインメモリログと、バグレポート用の小さなMoofDiagツールがあります。
  • ポータブルコア。 core/内のTCP/IPスタックはmallocやグローバル状態を使用せず、デスクトップでサニタイザーとファザーを使用してテストされています。

スクリーンショット

インストーラーMoofTCP Lite パネル
[画像: The installer][画像: The Lite panel]

クイックスタート

  1. MoofTCP-1.0.dsk、MoofTCP-1.0.hqx、またはMoofTCP-1.0.sitをReleasesページからダウンロードし、Macに転送します(BlueSCSIの共有フォルダが便利です)。
  2. MoofTCP Installerを開き、Lite version (no DHCP) のチェックを外したまま、Installをクリックします。
  3. Macを再起動します。
  4. Control Panels, MoofTCPを開き、IPアドレス、マスク、ルーター、DNSサーバーを入力するか(またはGet the address by DHCPにチェックを入れる)、設定を保存します。
  5. 再度再起動します。これでオンラインです。

MacTCPに戻すには、インストーラーを実行し、Removeをクリックします。リリース内のRead Meファイルに、MoofTCPとMoofTCP Liteの切り替え方法を含む詳細が記載されています。

StuffIt Lite 3.6は、.hqxパッケージの展開に問題なく動作することがテストされています。

必要なもの
  • System 6.0.8(テストされたバージョン)を搭載した68k Mac。他のバージョンで動作した場合は報告してください!
  • BlueSCSI v2 WiFi with DaynaPORTのような、.ENET0ドライバを提供するEthernetアダプター。MoofTCPにはEthernetドライバは含まれていません。

互換性

実際のMac Classic(System 6.0.8、4MB、BlueSCSI v2 WiFi with DaynaPORT)およびSnowエミュレーターでテスト済みです。

プログラム結果
Flynn (telnet terminal)動作します(実機およびエミュレーター)
Wikipedia Reader動作します(実機およびエミュレーター)
MacTCP Watcherエミュレーターで動作します
NCSA Telnetエミュレーターで動作します
Fetch (FTP)エミュレーターで動作します
TurboGopherエミュレーターで動作します
Eudora起動しますが、メール送受信は試していません

動作しないプログラムがありますか?イシューを開いてください(下記参照)。

メモリ

MoofTCPMoofTCP Lite
ドライバコード95,623 バイト90,722 バイト
最初のオープン後の空きシステムヒープ(実機Mac Classic、シングルFinder、フルビルド)約 30.7 KBN/A

MultiFinderは必要に応じてシステムヒープを拡張するため、空きメモリはより変動します。

問題が発生した場合?

MoofTCPは、メモリ内に小さな診断ログを保持します。プログラムが誤動作してもMacが動作し続ける場合は、すぐにMoofDiagを実行してください(リリースに含まれる診断ツールダウンロードにあります)。そして、MoofDiag.outファイル(ツールの隣に書き出されます)と、実行していた操作についてのメモを添えてイシューを開いてください。LLMにコードベースと診断出力の分析を依頼し、修正PRを提出することも自由です。

既知の制限事項

  • IPv6には対応していません。
  • System 6.0.8のDaynaPORT Ethernetドライバでのみテストされています。
  • DHCPは基本的な機能のみです:LEASE RELEASE、INIT-REBOOT、アドレス衝突プローブはありません。DHCP実行中は、プログラムはUDPポート68を使用できません。DHCPサーバーがない場合、最初のオープンは約10秒待機してから失敗します。

ソースからのビルド

Dockerのみが必要です。固定されたRetro68クロスコンパイライメージが自動的にプルされます。

scripts/build-mac.sh MoofTCP              # MoofTCPファイル -> build-mac/moof/
MT_LITE=1 scripts/build-mac.sh MoofTCP    # MoofTCP Lite -> build-mac-lite/
scripts/release.sh --force 1.0            # 両方を含むインストーラー -> dist/MoofTCP-1.0.{dsk,hqx,sit}

release.shはhfsutils、macutils、unar、gcc、Python 3も必要とします。

テストの実行

ポータブルコアとグルーロジックは、gccとCMake(AddressSanitizerとUBSanはデフォルトで有効)を使用してデスクトップでテストされます。

cmake -S . -B build && cmake --build build
ctest --test-dir build --output-on-failure
cmake -S . -B build-lite -DMT_NO_DHCP=ON   # Lite構成

エミュレーターテスト(Snow)には、AppleのシステムソフトウェアとBlueSCSI DaynaPORTイメージが必要です。これらはこのリポジトリには含まれていないため、ご自身で用意する必要があります。scripts/内のスクリプト(setup-home.sh、golden-stage.sh)が期待されるものを説明しています。

プロジェクトレイアウト

core/      ポータブルTCP/IPスタック(mallocなし、グローバルなし)、ホストでテスト済み
mac/       Mac用グルー:.IPPドライバ、INIT、リゾルバ、コントロールパネル、インストーラー、診断アプリ
tests/     ホストテスト(ctest)、ファザーを含む
scripts/   ビルド、リリース、エミュレーター、ハードウェアセッション用スクリプト
tools/     固定されたツールバージョン;tools/sitは小さなStuffItフォーマットライター

貢献

バグレポート、互換性レポート(「プログラムXは動作する/しない」)、プルリクエストを歓迎します。コードの変更については、CONTRIBUTING.mdを読み、まずホストテストを実行してください(上記参照)。CLAUDE.mdはコードの詳細なマップとそのルールです。セキュリティ問題については、SECURITY.mdを参照してください。

謝辞

  • 68kクロスコンパイラについてはRetro68。
  • テストが実行されるMacエミュレーターについてはSnow。
  • このプロジェクトが構築されたネットワークハードウェアについてはBlueSCSIとDaynaPORT。
  • このプロジェクトの開発には、人間の計画とテストとともにClaude Codeが使用されました。

TODO

  • 使用しながら実際のハードウェアでより包括的なベイクインテストを実施
  • Daynaportも同様に再作成(MoofPortにご期待ください)
  • パフォーマンス向上のため、BlueSCSIコードベースをレビューして統合の機会を探る
  • 小型または古いシステムでのパフォーマンス向上のためのアルゴリズム最適化の可能性あり

ライセンス

MIT。"MacTCP"および"StuffIt"はそれぞれの所有者の商標であり、ここでは互換性を説明するためにのみ使用されています。MoofTCPはAppleまたはサードパーティのコードを含んでいません。ビルドには、Retro68ツールチェーンで出荷されるAppleのインターフェースが使用されます。