10 poin oleh GN⁺ 2026-04-09 | 3 komentar | Bagikan ke WhatsApp
  • Proyek porting untuk menjalankan Mac OS X 10.0 (Cheetah) secara native dengan memanfaatkan perangkat keras berbasis PowerPC milik Wii telah rampung
  • Kernel Darwin/XNU dimodifikasi agar sesuai untuk Wii, dan bootloader, device tree, serta driver ditulis langsung hingga berhasil boot sampai lingkungan GUI
  • Driver IOKit kustom yang mendukung kartu SD, framebuffer, dan perangkat input USB diimplementasikan untuk mencapai operasi sistem yang lengkap
  • Struktur khas Wii turut diakomodasi, seperti perbaikan konflik pengaturan BAT, pembangunan lapisan driver untuk Hollywood SoC, dan framebuffer konversi RGB→YUV
  • Setelah lebih dari 10 tahun percobaan, proyek ini mewujudkan boot penuh dan pengoperasian Mac OS X di Wii, sekaligus membuktikan nilai tantangan dari proyek yang tampak mustahil

Gambaran proyek menjalankan Mac OS X di Wii

  • Proyek porting dilakukan untuk menjalankan Mac OS X 10.0 (Cheetah) secara native di Nintendo Wii
  • Wii sebelumnya sudah pernah menjadi target porting OS seperti Linux, NetBSD, dan Windows NT, dan kini Mac OS X ikut ditambahkan ke daftar itu
  • Dengan memanfaatkan perangkat keras berbasis PowerPC milik Wii, proyek ini menjalankan kernel Darwin/XNU dan menulis sendiri driver serta bootloader yang dibutuhkan
  • Hasilnya, Wii berhasil melakukan boot penuh hingga lingkungan GUI Mac OS X, lengkap dengan dukungan input keyboard dan mouse

Meneliti kelayakan

  • CPU PowerPC 750CL pada Wii merupakan penerus PowerPC 750CXe yang digunakan pada G3 iMac/iBook, sehingga tidak ada masalah kompatibilitas CPU
  • RAM 88MB pada Wii (MEM1 24MB + MEM2 64MB) memang lebih kecil dari spesifikasi resmi (128MB), tetapi pengujian QEMU menunjukkan sistem tetap bisa boot dengan 64MB
  • Perangkat keras yang didukung meliputi USB Gecko (debugging serial), kartu SD, interrupt controller, output video framebuffer, dan port USB
  • Jika inti open source Mac OS X, yaitu Darwin (kernel XNU, IOKit), dimodifikasi agar sesuai dengan Wii, maka lapisan GUI di atasnya juga dapat berjalan
  • Wii memungkinkan eksekusi kode buatan sendiri melalui Homebrew Channel dan BootMii, sehingga cocok untuk eksperimen porting

Pendekatan porting

  • Dipilih satu dari tiga strategi boot:
    1. Porting Open Firmware
    2. Porting BootX
    3. Menulis langsung bootloader kustom
  • Sebuah bootloader khusus Wii ditulis dari nol untuk melakukan inisialisasi hardware, memuat kernel, membuat device tree, dan menyerahkan kendali ke kernel
  • Setelah kernel berjalan, kode bootloader tidak lagi diperlukan, dan tahap berikutnya berfokus pada patch kernel serta penulisan driver
Iklan

Menulis bootloader

  • Berdasarkan kode contoh ppcskel, diimplementasikan inisialisasi Wii serta fungsi kartu SD, framebuffer, dan debugging USB
  • Kernel XNU berformat Mach-O dimuat ke memori lalu dijalankan dengan lompat ke entry point yang ditentukan
  • Untuk memastikan kernel benar-benar berjalan, disisipkan patch kedipan LED guna melacak tahap masuk ke kernel
  • Dengan menelusuri balik jalur eksekusi kernel, ditemukan exception 300 pada tahap device_tree.c → disadari perlunya mengirim device tree
  • Membuat dan mengirim device tree

    • Dibangun tree minimum yang di-hardcode berdasarkan struktur hardware Wii yang tetap (/cpus, /memory)
    • Pointer device tree dimasukkan ke struktur boot_args dan dikirim ke kernel
    • Setelah itu kernel dapat mengenali tree dengan benar dan proses boot berlanjut

Patch kernel

  • Pengaturan BAT (Block Address Translation) pada XNU bentrok dengan peta memori Wii sehingga sumber kernel perlu dimodifikasi
  • Lingkungan build kernel disusun di guest Mac OS X Cheetah (QEMU)
  • Setelah perbaikan BAT dan penambahan redirect output konsol ke USB Gecko, proses debugging menjadi memungkinkan
  • Berikutnya memori virtual, IOKit, dan subsistem BSD berhasil diinisialisasi dengan normal
  • Pada log boot muncul pesan “Still waiting for root device” → menandakan perlunya driver kartu SD

Menulis driver

  • Memahami struktur IOKit

    • IOKit adalah framework ekstensi kernel berbasis C++ yang merepresentasikan lapisan hardware melalui struktur driver-nub
    • Contoh: IOPCIBridgeIOPCIDeviceSomeEthernetCardIOEthernetInterface
    • Karena Wii memakai struktur SoC (Hollywood), bukan bus PCI, dibutuhkan driver kustom pengganti IOPCIFamily
    Iklan
  • Driver Hollywood

    • Driver NintendoWiiHollywood ditulis untuk dicocokkan dengan node “hollywood” pada device tree
    • Driver ini membuat dan mendaftarkan nub NintendoWiiHollywoodDevice untuk merepresentasikan hardware di bawahnya
    • Dengan begitu, driver perangkat turunan seperti kartu SD dapat terhubung
  • Driver kartu SD

    • Akses kartu SD Wii diimplementasikan dengan mewarisi IOBlockStorageDevice
    • Komunikasi dengan kartu SD dilakukan memakai perintah IPC milik MINI (koprosesor Starlet), yaitu IPC_SDMMC_SIZE, READ, dan WRITE
    • Untuk mengatasi masalah memori cache, digunakan buffer memori non-cache
    • Hasilnya, nub IOMedia berhasil dibuat sehingga filesystem root dikenali dan boot penuh menjadi mungkin
    • Pada log boot muncul BSD root: disk0s4
  • Driver framebuffer

    • Dengan mewarisi IOFramebuffer, area MEM1 Wii (0x01700000) ditetapkan sebagai framebuffer
    • Untuk perpindahan antara konsol teks awal dan GUI, isConsoleDevice() dibuat mengembalikan true
    • Karena hardware video Wii memakai format YUV, diimplementasikan double framebuffer untuk konversi RGB→YUV
    • Melalui loop konversi, konversi warna dilakukan pada 60Hz → GUI tampil dengan warna normal
  • Dukungan input USB

    • Untuk menjalankan kontroler USB 1.1 OHCI milik Wii, dicoba penggunaan AppleUSBOHCI
    • Masalah 1: tidak ada source IOUSBFamily, sehingga debugging tidak bisa dilakukan
    • Masalah 2: ketergantungan pada IOPCIDevice, sehingga dibuat NintendoWiiHollywoodPCIDevice palsu khusus Wii
    • Masalah 3: ketidakcocokan endian (Wii memakai reversed-little-endian), sehingga byte-swap software perlu dihapus
    • Setelah memperoleh source IOUSBFamily untuk Mac OS X Cheetah melalui IRC, source tersebut dimodifikasi dan berhasil di-build
    • Hasil akhirnya, input keyboard dan mouse USB berfungsi, dan Wii bekerja sebagai sistem Mac OS X yang lengkap
Iklan

Penyempurnaan bootloader dan kernel

  • Penyempurnaan bootloader

    • Ditambahkan pencarian partisi kartu SD dan menu boot, serta diimplementasikan parsing Apple Partition Map (APM)
    • Ekstensi kernel (kext) dimuat dari bootloader lalu didaftarkan ke node /chosen/memory-map
    • Dengan cara ini, sistem dapat boot menggunakan image instalasi Mac OS X yang tidak dimodifikasi
  • Penyederhanaan kernel

    • Modifikasi kernel khusus Wii diminimalkan:
    • perbaikan pengaturan BAT
    • pengenalan alamat I/O berbasis node “hollywood”
    • perbaikan koherensi cache framebuffer
    • Driver dipisahkan dari kernel untuk meningkatkan efisiensi build dan kemudahan pemeliharaan

Penutup

  • Proyek yang pertama kali dibayangkan saat kuliah pada 2013 akhirnya selesai lebih dari 10 tahun kemudian
  • Tantangan ini terinspirasi dari kasus porting Windows NT ke Wii
  • Pada akhirnya berhasil dicapai boot penuh dan pengoperasian GUI Mac OS X 10.0 di Wii
  • Ditekankan pelajaran bahwa “semakin mustahil sebuah proyek terlihat, semakin layak ia untuk dicoba”

3 komentar

 
ffdd270 2026-04-09

Tulisan yang enak dibaca dengan penulis yang keren juga….

 
jjpark78 2026-04-09

Kebangetan, ternyata yang paling niat di antara para geek memang orang Barat..

 
GN⁺ 2026-04-09
Komentar Hacker News
  • Proyek ini benar-benar pekerjaan yang luar biasa. Tulisannya sendiri juga sangat memikat sehingga saya terus terhanyut sampai selesai
    Bagian yang paling berkesan adalah, “WindowServer menunjukkan keluhan, dan untuk mengatasinya saya harus menulis driver framebuffer sendiri”
    Saya terkejut melihat lapisan abstraksi I/O Kit di MacOS benar-benar menjalankan fungsinya. Tepuk tangan untuk para pengembang NeXT

    • Saya juga merasakan hal yang sama. Sebagai orang yang pertama kali menulis driver, kurva belajarnya curam, tetapi melihat sistemnya benar-benar hidup membuat saya jadi memahami pendekatan IOKit
      Saya tidak punya pengalaman pengembangan driver di platform lain jadi sulit membandingkannya, tetapi dari sisi struktur rasanya cukup menarik
    • Saya dengar IOKit dibuat dari nol khusus untuk OS X, dan pada masa NeXT mereka memakai model lain bernama DriverKit
      Dulu para pengembang NetBSD juga pernah menjalankan PPC Darwin di atas lapisan kompatibilitas Mach/IOKit sampai bisa menampilkan Xquartz. Menarik bahwa NetBSD menerjemahkan pemanggilan IOKit
    • Ada banyak kemiripan dengan stack Linux juga, jadi saya ingin melihat proyek Linux on Wii untuk membandingkan bagaimana mereka menangani masalah framebuffer
      Masih sulit dipercaya bahwa sebanyak ini OS bisa berjalan di atas Wii
    • Pengalaman sejak era OPENSTEP yang menargetkan banyak arsitektur dan sistem operasi tampaknya membantu abstraksi seperti ini
    • Saya setuju dengan pernyataan, “Mengejutkan betapa baik abstraksi di MacOS”
      Sebenarnya perbedaan antara abstraksi yang baik dan buruk bergantung pada seberapa baik abstraksi itu dijelaskan
  • Rekayasanya sendiri sudah hebat, tetapi yang benar-benar mengesankan adalah penulisnya mengembangkan ini di kursi kelas ekonomi

    • Buat saya, memakai laptop dengan layak di kursi ekonomi saja sudah sulit, apalagi sampai menyambungkan Wii dan melakukan debugging
    • Dulu Apple pernah membuat iklan tentang mengedit di dalam pesawat (tautan YouTube)
    • Orang yang duduk di sebelahnya mungkin cuma melihat ponsel sambil berpikir, “Itu apaan?” Kalau saya, rasanya tidak akan tahan untuk tidak bertanya
    • Dari fotonya, kelihatannya bisa bus, bisa juga pesawat. Bagaimanapun juga, membawa Wii sambil mengembangkan saat sedang bepergian adalah bukti konsentrasi dan dedikasi yang luar biasa
      (Setelah dicek lagi, foto pertama di bus, yang kedua di pesawat)
    • Luar biasa bisa tenggelam dalam proyek serumit ini saat sedang bepergian. Saya lihat lagi fotonya, mungkin kereta atau bus juga. Bagaimanapun, ini benar-benar flex yang hebat
  • Sebagai penulis port NetBSD untuk Wii dan Wii U, saya mengucapkan selamat yang tulus atas proyek ini
    Saya menantikan melihat masalah apa saja yang dihadapi dan bagaimana semuanya diselesaikan

    • Port Anda memberi inspirasi besar. Terima kasih sudah banyak berkontribusi di bidang ini
  • Dulu saya juga penggemar Mac yang hardcore, dan pernah membuat “aplikasi iOS” tidak resmi pada masa awal lewat rekayasa balik
    Tetapi proyek ini melampaui semuanya. Menjalankan MacOS di Wii saja sudah luar biasa, tetapi tulisannya sendiri juga sangat rapi dan menarik

    • Terima kasih atas kata-kata baiknya :)
  • Baru sekarang saya tahu bahwa RAM Wii hanya 88MB. Untung game-game saat itu tidak berbasis elektron

    • Fakta sejarah yang menarik: pada bulan yang sama saat Wii dirilis, Windows Vista juga keluar di Amerika Utara
      Kebutuhan minimum Vista adalah 512MB, tetapi kebanyakan PC saat itu punya memori lebih sedikit dari itu
      Sekarang 8GB mulai terasa kecil dan 16GB menjadi standar, dunia memang sudah banyak berubah
    • Lucu juga bahwa menu pengaturan Wii ternyata berupa halaman web HTML. Konsol tahun 2006 pun tidak bisa lepas dari cengkeraman web
  • Sebelum memulai proyek ini, saya sempat mengecek, “Apa ini memang mungkin dilakukan?” lalu menemukan komentar Reddit tahun 2021 yang bilang "kemungkinannya 0%"
    Justru itu yang memotivasi saya. Dari situ saya mulai dengan menganalisis perangkat keras Wii. Benar-benar lucu

    • Nilai dari proyek seperti ini adalah mengabadikan pernyataan “mustahil total” seperti itu untuk selamanya
      Orang sering mengira dirinya skeptis yang berprinsip, padahal sebenarnya mereka cuma menganggap hal yang ‘hampir mustahil’ sebagai sesuatu yang pasti tidak akan pernah terjadi
    • Jadi ingat lelucon Linux dulu. Jangan tanya “bagaimana melakukan X di Linux?”, tetapi katakan “X tidak mungkin di Linux”, maka seseorang akan langsung menunjukkan caranya
    • Saya juga memulai proyek setelah melihat kalimat “BLE atau WiFi tidak bisa ditambahkan” di dokumentasi MacroPad dari Adafruit
      Saya berpikir, “Masa sih?” lalu mengonfigurasi ulang port UART dan memasang ESP32
    • Adegan debugging dengan “semuanya berwarna magenta” juga lucu
    • Banyak komentator internet seperti ini yang mengira sinisme adalah kecerdasan
      Masalahnya, tidak ada konsep tentang sinisme yang lahir dari ketidaktahuan
  • Membayangkan seseorang duduk di kursi ekonomi pesawat sambil melakukan debugging kernel panic di Wii benar-benar di luar nalar, tingkat konsentrasinya sulit dibayangkan
    Kebanyakan orang bahkan susah membaca satu buku di pesawat

  • Proyek yang sangat keren. Ini mengingatkan saya pada masa keemasan pengembangan level rendah dulu
    Dulu inisialisasi VGA dan menggambar piksel itu mudah, dan chip seperti 6502 juga sangat mudah diakses
    Tetapi sekarang sistem sudah terlalu kompleks sehingga hambatan masuknya jadi tinggi
    Ditambah lagi AI justru berpura-pura menyederhanakan pengembangan sambil membuat aksesibilitas makin buruk

  • Saya juga sedang mencoba mem-porting Mac OS 9 ke Wii U
    Melihat proyek ini benar-benar membuat saya terkesan, dan setiap kali muncul pikiran “ini tidak mungkin”, saya jadi mendapat keberanian lagi

    • Keren sekali. Mac OS 9 adalah sumber tertutup, jadi tampaknya ini tantangan yang lebih sulit
    • Tidak adanya kode sumber XNU atau Darwin memang merugikan, tetapi itu bisa ditutupi dengan alat seperti source leak System 7.1, Ghidra, dan MCP. Semoga berhasil
  • Tulisannya bagus, tetapi memasukkan video .mov dengan tag <video> menimbulkan masalah kompatibilitas browser
    Di Chrome atau Firefox videonya tidak bisa diputar

    • Kalau tidak jalan di Chrome dan Firefox, praktis berarti tidak jalan di hampir semua browser
    • Terima kasih! Sudah saya perbaiki