僕の一番好きなPower Macは、ニンテンドーWiiだ

2026/10/31 2:25

僕の一番好きなPower Macは、ニンテンドーWiiだ

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

Rairii のゲスト投稿では、ArtX ベースの PowerPC システム(特にニンテンドーコンソールであるゲームキューブ、Wii、Wii U)への古典的な Mac OS バージョン 7.6 と 9.2.2 の成功したポート作業について詳述されている。同プロジェクトは 2025 年 6 月 22 日に開始され、AI の助力なしに完全に手動作業によるコーディング、リバースエンジニアリング、デバッグを通じて完了している。大きな突破点は、FAT ファイルシステムを備えた OpenBIOS を改修して Mac OS イメージをロードできるようにしたことであり、開発者は NT ARC ファームウェアローダーなどの既存のツールの再利用を行ったが、ドライバーは大幅に修正した:Elliott Nunn の virtio ベースのディスプレイドライバーの再利用、"SD Gecko"(SPI アダプター)および"EXI-IDE"(SPI エミュレーション)ディスクドライバーの実装、物理アドレス空間の前提条件と MMIO マッピングのエラーを修正する「Trampoline」へのパッチ適用などである。重要なカーネルパッチはマイクロコントローラー用のビットフラグの修正、Flipper および PCI アーキテクチャ間の中断コントローラの不整合への対処、レガシーモードの問題の解消といったハードウェア固有の課題に対応している。具体的なレガシーバグも修正された例として、「SuperMario」m68k 環境におけるシリアルポートコード内の無限ループがある。現在、SD を通じて SPI で実機上で Mac OS 7.6 は 40 秒以内に正常に起動するが、Mac OS 9.2.2 については不安定な Open Transport コンポーネントを除去しクラッシュを防ぐためにさらなる作業が必要である。

本文

Wii と GameCube で動作するクラシック Mac OS:移植プロジェクトの報告

ライリー氏による投稿です。CHRP クローン時代以来、Apple 以外によって新規ハードウェア上でクラシック Mac OS をデスクトップ環境に成功させた事例として、本プロジェクトが大きなマイルストーンを迎えました。

プロジェクトの背景と概要

  • 目標: 「ArtX チップセット」と呼ばれるパワー PC システム(Wii の「Vegas」や GameCube など)上でクラシック Mac OS(OS 7.6, 9.2.2)をデスクトップ環境として起動すること。
  • 歴史的文脈: Wii U のチップセット「Latte」や後継の「Bollywood」は、GameCube のチップセットである「Flipper」から発展したものであり、実質的に ArtX により設計された系譜に属します。
  • 開発者声明(重要):
    • プロジェクト開始日は2025 年 6 月 22 日(OpenBIOS のフォーク)。
    • AI やコーディングエージェントは一切使用せず、すべて独力でのコーディング、リバースエンジニアリング、デバッグを実施。
    • このプロジェクトは娯楽および学習を目的としており、「AI」を利用すると学びが失われるとの考えです。

移植の経緯と技術的課題

1. OpenBIOS とブートローダー(Trampoline)の移植

  • 起動フロー: 「New World」クラシック Mac OS は、Open Firmware 環境上で動作するブートローダー「Trampoline」から始まります。
  • 既存リソースの利用と改変:
    • Goldfish64 氏の Wii 向け Mac OS X 移植(OpenBIOS 含む)からいくつかのドライバーを流用したが、そのまま使用せず独自に開発。
    • NT(Windows NT)移植版で培った技術を応用(例:NT ARF ファームウェアローダーの変更によるビッグエンディアン形式の ELF ロード)。
  • 初期デバイス: EXI バス上の 2 つのドライバーを移植。
    • SD Gecko: SPI を介した SD カードサポート(GameCube メモリカードスロットへのアダプタ)。
    • EXI-IDE: 実機とは完全に一致しないが、Dolphin エミュレーターのデバッグ機能に対応した「不正確なエミュレーション」をテストに利用。

2. メモリアドレス空間の不一致と修正(最重要)

Trampoline は物理アドレス空間の前提条件が本システム(Wii/GameCube)と異なるため、大幅な修正が必要でした。

  • 問題点:
    • Trampoline の計算するバッファの物理アドレスが無効。
    • 0x8000_0000
      以上の領域を MMIO(メモリアップロード I/O)前提としているが、Wii では RAM の一部である。
    • RAM に隙間があり、MMIO がそれを埋めている構造になっている。
  • 解決策:
    • カーネルメモリチャンクリスト内の MMIO マッピングを修正:
      • 物理アドレス:
        0x0100_0000
        (RAM の途中)から
      • 仮想アドレス:
        0xE000_0000
        へ
      • サイズ:
        0x1000_0000
        のマッピングを設定。
    • この変更により、MMIO 全体に加え、RAM の一部終端と(GameCube 以降)、別の RAM の始端をカバー可能に。
  • 迂回処理の実装:
    • Trampoline の関数内でバージョン検出を実装し、古いバージョン(16 ビットページ数)を検知するとフックして処理をバイパス。
    • 旧バージョン特有の
      0x8000_0000
      以上の無条件 1:1 マッピングと競合するため、これを削除する処理を実装。

3. ハードウェア特化パッチの適用

特定のパワー PC マッキントッシュ向けに設計されたコードを修正。

  • フラグビットの除外: マイクロコントローラー存在を示すフラグを外す。
  • バス周波数計算: 特定ハードウェアタイマーに基づく再計算処理を除去。
  • 割り込みコントローラ: PCI バス上のリトルエンディアンデバイス対応コード(本システムには存在せず)を修正・除外。
  • フック戦略: 初期化コードへの呼び出しをフックし、ロード後に追加パッチを適用可能に。

4. デバイスツリー(Device Tree)の偽装と修正

Trampoline が認識する形に合わせてデバイスをシミュレート。

  • 割り込みコントローラ: リトルエンディアン版で偽装(Flipper IC に最も似ている)。Wii U ではパワー PC コア対応のため一部変更あり。
  • フレームバッファアドレス: キャッシュ外の仮想アドレス(
    0xExxx_xxxx
    )へ変更。
  • 電源管理: Mac99 互換のパワー管理デバイスを追加してシミュレートし、Trampoline のドライバ準備を可能に。

クラッシュ回避と動作環境の確保

m68k コードとパワー PC ネイティブコードの修正

追加パッチによる不具合解消のため、以下の点を確認・修正。

  • m68k コード:
    • ネイティブ割り込みコントローラーレジスタへの直接アクセスコードを修正。
    • オーディオ割り込みオン/オフ関数ポインタをスタブ化(既にテーブルに存在するため有効活用)。
    • ADB と電源管理マイクロコントローラー初期化関数:ハードウェア非存在チェックなしで低メモリ破損するのを防ぐため、実装を見直し。
  • パワー PC ネイティブコード:
    • コピー&ペースト失敗によるバグ修正(ポート 2 が無いうちに無限ループになるケース)。
    • USB コントローラ不存在時の NULL ポインタアクセス防止。
    • 割り込みコントローラーレジスタ読み書きコードの修正。
  • 電源管理ドライバー: BlueBox のスタブドライバーから、シャットダウン/再起動対応の独自ドライバーへの移行計画。

ドライブとフォーマットの解決

  • ディスクフォーマット: FAT ファイルシステム上のイメージを使用。Mac OS ROM TBXI ファイルを
    \ppc\bootinfo.txt
    として配置し OpenBIOS でロード。
  • SCSI の偽装: OpenBIOS に好むディスクフォーマットを実装し、SCSI ドライバーでハードウェアをシミュレート。
  • クイックの発見(重要):
    • 光ディスクドライバーは
      512
      バイトセクターをエミュレートするが、裏層 SCSI ドライバーがスキャッター・ギャザーサポートチェックしていない場合、読み込み側で実装が必要となる問題が発生。

致命的なバグの修正プロセス

  • PowerPC StartLib!GetStartupDevice: 内部構造(デバイスツリーやインデックス)を深く掘り起こし、ゼロ以外であることを確保する修正を実施。
  • HFS ブートセクター拒絶の原因:
    • IDE デバイスの PIO モードでアラインされていないオッドバッファアドレス(低 4 ビットが 1)を受け取るバグ。
    • その場合 EXI DMA を試みず、データ読み書きを回避するドライバー修正。
    • リソースフォークヘッダー読み取り時のデータ妥当性チェックで失敗していた原因の特定と解消。

マウスカーソルと表示機能の実装

  • Elliot Nunn 氏の virtio ドライバー: 参考にしてディスプレイドライバーを実装し、正しく表示可能に。
  • GameCube コントローラ: USB を使わず、コントローラーポート用ドライバーを移植してマウスカーソル移動を実現。

実機ハードウェアでの起動成功(Wii / GameCube)

Mac OS 7.6 の起動

  • 環境: Wii の SD コントローラー(SPI 経由)、または Dolphin エミュレータ上のハッキングされたツリー。
  • MacsBug の影響: デバッグ用としてマウントするが、初期段階でクラッシュを引き起こすため削除が必要だった(約 20 分後にデスクトップ表示)。
  • 起動時間:
    • Wii(SPI/SD): 約 40 秒(最遅アクセスモードでの確認)。
    • NT ドライバーと比較して、転送速度が 64 倍高速化していることが確認(CPU 独占による同期転送の違い)。

Mac OS 9.2.2 の起動と Open Transport の問題

  • Open Transport: シリアルデバイスやネットワークデバイスを処理できない不具合が見つかり、拡張フォルダから除外することで正常起動。
  • パフォーマンス: エミュレータ上では非常に遅く、長時間動作してもクラッシュしやすかったが、HFS セクター読み取り等の基本的な動作は確認。

今後の展望とロードマップ

現時点での移植はまだ公開リリースには程遠い状況です。当面の目標は以下の通りです。

  • Wii:
    • SD コントローラーの完全な起動制御。
    • USB コントローラーのリバースエンジニアリング完了(VibeCoded EHCI ドライバー等の活用)。
  • Wii U:
    • Wii U でのクラシック Mac OS 起動への挑戦。
  • その他:
    • RAM のバリアー突破のためのパッチ開発。

このプロジェクトは、ゲームコンソール上のクラシック Mac OS を実現する新たな試みとして、CHRP クローン時代の発展系である ArtX システムの可能性を広げるものと考えています。

同じ日のほかのニュース

一覧に戻る →

2026/10/30 16:09

Cursor マーケットの VS コード拡張機能「Claude Code」に後門が存在する

## Japanese Translation: 公式 Cursor マーケットPLACE で配布されている公式 Claude Code 拡張機能(バージョン 2.1.313)に重大な裏門(バックドア)が発見された。攻撃者は Windows、Linux、macOS のいずれの環境でもユーザーのマシンに対して永続的なアクセス権を取得できる。ベンダーが管理する配布チャネルに関する標準的な仮説とは異なり、この悪意のあるアップデートは SSH キーを埋め込み、逆回線トンネルを確立することで、インストール時に直接ユーザーの関与を必要とせずにもれなくシェルへの完全なアクセス権限を取得する。この脅威は macOS のセットアップスクリプトに含まれる特定の脆弱性を利用し、セキュリティチェックを迂回すると同時に、機微なシステムデータを攻撃者管理のサーバーにビーコン送信している。Cursor は以来、その登録から該当の侵害されたリリースを削除した。バージョン 2.1.313 を使用している組織は、直ちに環境を検査し、拡張機能をアンインストールし、埋め込まれた認証情報や実行中のトンネルプロセスを能動的に探してセキュリティを回復する必要がある。この事件は、堅牢なサプライチェーン監査の緊急性を示しており、正規の開発ツールが企業ネットワーク内におけるデータ窃取および lateral movement(横方向移動)の予期せぬベクトルとして機能し、ベンダー配布ソフトウェアへの信頼を損なう可能性があることを強調している。

2026/10/31 6:30

sanstun:Rust で実装された、sans-IO を採用した並列性に優れた WireGuard 実装

## Japanese Translation: Sanstun は、非推奨の `firezone/boringtun` フォークを代替する、WireGuard 状態機械の最適化された Rust 実装(IO なし)をリリースしました。この新しい設計は、並列処理に適した慣用 API を使用して I/O および副作用(時間と乱数を含む)をコアビジネスロジックから分離することで、使いやすさ、セキュリティ向上、パフォーマンスを優先しています。主な利点には、プロトコル不変性をマッピングする型を通じたコンパイル時安全性、`Instant` オブジェクトによる時間処理を通じた正確なシステムシミュレーション、Diffie-Hellman 鍵交換およびクッキー管理を通じた DoS 攻撃に対する内蔵防御が含まれます。API は明示的に記録業務(例:カプセル化の開始)と重い暗号化/復号化を分離することで同期ボトルネックを回避し、暗号処理をワーカースレッドにオフロードした場合のベンチマークでは 45 倍以上のスピードアップの可能性を示しています。ユーザーは現在、パケットを手動でバッファリングする必要があり、`Tunnel::initiate_handshake` を通じてハンドシェイクを開始する必要がありますが、この設計はプライベートハンドシェイクコンスストラクタ(`Interface::receive` のみアクセス可能)を介してコンパイル時にレート制限および正しいトンネルルートを強制します。このアプローチにより、以前のフォークで問題となった直感的ではないドレインや設定できないバッファサイズのなどの内部バッファリング問題は解消されます。Sanstun パターンは Rust に限定されず、様々なプログラミング言語での実装にも有益である可能性があります。Apache 2.0 ライセンスの下で crates.io で利用可能であり、非推奨の `firezone/boringtun` フォークから移行する過程で GitHub の issue および PR を通じて貢献を招集しています。

2026/10/31 0:10

北フランクが侵害された

## Japanese Translation: Northflank エンジニアは、Wiz によって発行された重大なサイバーセキュリティ脅威アラートを成功裏に無効化し、クラウドインフラストラクチャを保護するための卓越した速度を示しました。対応は、UTC11:43 にアラートが確認されたわずか 1 分後から開始され、UTC12:02 までに最初のネットワークポリシーパッチを展開しました。この迅速な最初の介入により、プラットフォームに影響を与え得た脆弱性に対する潜在的な露出が大幅に軽減されました。事態の進展に伴い、追加のパッチングが迅速に行われました:UTC12:50 に第 2 インスタンซ์が展開され、UTC13:00 に特殊な Wiz CIRT サポートの依頼が行われました。支援を受諾した直後、さらに更新が連続して展開された(UTC13:05 など)ことにより、チームの準備状況および外部セキュリティ専門家との協力的なアプローチによってシステムの完全な強化を確保していることが浮き彫りになりました。この事象は、現代のアプリケーションプラットフォームにおいて迅速なインシデント対応メカニズムが極めて重要であることを強調しており、脅威が発見された際にユーザーに即座の保護を提供し、損害やデータ漏洩を引き起こす前にリスクを効果的に軽減することを確保しています。

僕の一番好きなPower Macは、ニンテンドーWiiだ | そっか~ニュース