2 poin oleh GN⁺ 9 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • macOS berbasis Apple Silicon membatasi maksimal 2 macOS VM yang dapat dijalankan melalui Virtualization.framework, berdasarkan klausul perjanjian lisensi macOS
  • Hasil analisis menunjukkan batas ini dikelola oleh variabel privat hv_apple_isa_vm_quota di dalam kernel XNU, dan dapat dioverride melalui argumen boot
  • Untuk melewati pemeriksaan AppleInternal milik System Integrity Protection, digunakan prosedur membangun dan mem-boot kernel pengembangan (Development Kernel)
  • Setelah konfigurasi, berhasil menjalankan hingga 9 macOS VM secara bersamaan di UTM, Viable, Parallels dan lainnya
  • Fakta bahwa Apple meninggalkan fitur override batas VM di dalam kernel menjadi poin menarik, dan disebutkan kemungkinan pengembangan alat otomasi atau perbaikan melalui ekstensi kernel di masa depan

Proses menghapus batas 2 mesin virtual macOS di Apple Silicon

  • Saat menjalankan mesin virtual macOS dengan Virtualization.framework pada Mac berbasis Apple Silicon, terdapat batas maksimal hanya 2 VM
    • Batas ini ditetapkan sesuai klausul 2.B.iii pada perjanjian lisensi perangkat lunak macOS (SLA)
    • Klausul tersebut mengizinkan hingga 2 instance macOS hanya untuk pengembangan, pengujian, penggunaan macOS Server, dan penggunaan pribadi nonkomersial
  • Hasil analisis menunjukkan bahwa batas ini diimplementasikan bukan di user space, melainkan di area privat kernel (XNU)
    • Kernel Intel tidak memiliki kode yang sama, dan keluarga fungsi hv_vm_* pada kernel Apple Silicon menangani stack virtualisasi
    • Variabel hv_apple_isa_vm_quota dalam kode inisialisasi hv_init() mengelola jumlah VM, dan nilainya bertambah atau berkurang saat VM dibuat atau dihapus
    • Kernel memiliki argumen boot hypervisor= dan hv_apple_isa_vm_quota=, dan yang terakhir dapat mengoverride batas VM
  • Pada kernel rilis, penggunaan argumen hypervisor dibatasi oleh pemeriksaan AppleInternal milik System Integrity Protection (SIP)
    • Argumen hv_apple_isa_vm_quota hanya diterapkan jika flag CSR_ALLOW_APPLE_INTERNAL aktif
    • Untuk melewati hal ini, digunakan metode mem-boot kernel pengembangan Apple (Development Kernel)

Membangun kernel collection pengembangan

  • Perlu mengunduh dan memasang Kernel Debug Kit (KDK) dari situs Apple Developer
    • KDK harus benar-benar cocok dengan build macOS host, karena ketidakcocokan dapat menyebabkan error linking kernel·kext dan kegagalan boot
  • Setelah memeriksa arsitektur kernel dengan perintah uname, gunakan perintah kmutil create untuk membuat kernel collection pengembangan (VirtualMachine.kc)
    • Contoh menggunakan macOS 14.0 (build 23A5301h) dan kernel T6020
    • Opsi --variant-suffix development digunakan untuk memilih kernel pengembangan, sambil menyertakan beberapa repositori ekstensi sistem

Konfigurasi boot kernel pengembangan

  • Matikan Mac lalu boot ke recoveryOS, kemudian lakukan pengaturan berikut di Terminal
    1. Nonaktifkan System Integrity Protection (csrutil disable)
    2. Hilangkan pembatasan argumen boot (bputil --disable-boot-args-restriction)
    3. Tentukan kernel collection kustom (kmutil configure-boot)
    4. Setel argumen boot (dikirim lewat perintah nvram)
      • kcsuffix=development : boot dengan kernel pengembangan
      • hypervisor=0x1 : mengaktifkan fungsi khusus pada stack virtualisasi
      • hv_apple_isa_vm_quota=0xFF : menetapkan jumlah maksimum VM menjadi 255
  • Setelah reboot, penerapan konfigurasi dapat dicek dengan sysctl kern.osbuildconfig dan nvram boot-args

Hasil menjalankan banyak VM

  • Setelah konfigurasi selesai, pengujian dilakukan dengan solusi berbasis Virtualization.framework seperti UTM, Viable, dan Parallels
    • Pada MacBook Pro M2 Pro, berhasil menjalankan 9 macOS VM secara bersamaan
    • Sistem masih tetap dapat digunakan pada tingkat yang layak untuk pengujian

Waktu penambahan fitur dan struktur internal

  • Argumen boot hv_apple_isa_vm_quota ditambahkan bersama stack Virtualization sejak macOS 12 Monterey
    • Pada versi setelahnya, termasuk macOS Sonoma, pemeriksaan AppleInternal masih tetap ada
    • Hal ini menunjukkan Apple tetap mempertahankan berbagai fitur nonpublik di dalam XNU

Hal yang perlu diperhatikan saat update OS

  • Saat menggunakan kernel collection kustom, fitur update OS otomatis dinonaktifkan
    • Karena error dapat terjadi setelah update, kernel collection bawaan harus dipulihkan
    • Di recovery mode, membuat kebijakan boot baru dengan bputil dapat mengembalikan ke kernel default
    • Contoh: gunakan opsi bputil --full-security atau --disable-boot-args-restriction

Penutup dan ide perbaikan ke depan

  • Implementasi batas VM oleh Apple berhasil dianalisis, dan cara tidak resmi untuk melepas batas tersebut telah diverifikasi secara eksperimental
    • Meski tidak didokumentasikan resmi oleh tim Virtualization, menarik bahwa Apple meninggalkan fitur override batas VM di kernel
  • Rencana pengembangan selanjutnya
    • Pengembangan alat otomasi build KC dan konfigurasi boot
      • Mendukung pembuatan kernel collection pengembangan otomatis per host dan konfigurasi recovery mode
    • Implementasi fungsi override variabel hv_apple_isa_vm_quota melalui ekstensi kernel (kext)
      • Menjelajahi kemungkinan melepas batas tanpa harus mem-boot kernel pengembangan
  • Sebagai topik riset berikutnya, direncanakan eksplorasi pendaftaran DEP dan kemungkinan override nomor serial pada VM Apple Silicon

1 komentar

 
GN⁺ 9 hari lalu
Komentar Hacker News
  • Batasan seperti ini yang berlaku sama pada semua Mac terasa terlalu tidak masuk akal
    Jika membeli Mac yang lebih bertenaga, seharusnya bisa memvirtualisasikan lebih banyak instance macOS
    Misalnya, membatasi M5 ke 2, M5 Pro ke 4, dan M5 Max ke 8 akan terasa lebih masuk akal

    • Bahkan saya tidak mengerti kenapa harus ada batasan sama sekali
      Performa hardware adalah batas alaminya, jadi pengguna akan berhenti sendiri
    • Ini tampaknya bukan soal resource, melainkan keputusan bisnis
      Kemungkinan besar untuk mencegah layanan VPS Mac murah
    • Ini bukan melawan batas hardware, melainkan melawan kekhawatiran Tim Cook soal penjualan
    • Jika membeli lisensi Windows 11 Pro seharga 100 dolar, batas VM-nya adalah 1024
      Hyper‑V bisa menjalankan hingga 1024 VM sekaligus jika hardwarenya sanggup
      Bahkan di laptop Windows ARM kecil saya pun 4 VM bisa berjalan tanpa masalah
    • Benar-benar konyol
      Saya menjalankan VM untuk menguji openclaw, lalu terkejut karena akses ke iCloud dan App Store dibatasi
  • Menarik bahwa Mykola Grymalyuk bergabung dengan Apple 2 tahun setelah menulis posting blog ini
    Meme “mati sebagai pahlawan atau…” langsung teringat

  • Mulai M3 ke atas, nested VM bisa dijalankan memakai Hypervisor.framework / Virtualization.framework
    Jika ini bisa dipakai untuk melewati batasan tersebut, hasilnya akan cukup menarik

    • Kalau tidak salah, hanya guest Linux yang bisa di-nesting
      macOS hanya bisa sampai satu tingkat, jadi tidak mungkin menjalankan guest macOS lain di dalam guest macOS
    • Jika setiap VM bisa menjalankan 2 VM, mungkin saja bisa dibuat rantai VM tanpa akhir
      Saya terlalu malas, tapi semoga ada yang mau mengujinya
  • Saya benar-benar penasaran kenapa Apple memasang batasan seperti ini

    • Model bisnis Apple adalah menjual hardware dan software sebagai satu paket
      Penjualan hardware mendanai pengembangan software, jadi mereka tidak ingin orang yang tidak membeli hardware tetap memakai macOS
    • macOS punya banyak pembatasan terhadap pengguna seperti ini
      Prioritasnya adalah Apple tetap memegang kendali, bukan kebebasan pengguna
    • Mungkin juga ini untuk mencegah satu Mac dipakai menjalankan ladang akun online (identity farm)
  • Mengejutkan bahwa kernel kustom bisa dikompilasi, di-boot, dan bahkan menampilkan GUI

  • Tulisan ini sendiri sangat menarik, tetapi aneh memakai platform dengan batasan sewenang-wenang seperti ini untuk pengembangan

    • Saya meragukan apakah Apple pernah benar-benar menjadi platform pengembangan yang serius selama 20 tahun terakhir
      Banyak developer memakainya karena hardwarenya kelas atas, tetapi macOS selalu terasa seperti “hampir Linux, tapi OS yang dikendalikan perusahaan yang berpusat pada iTunes”
  • Katanya, memakai custom kernel collection di Apple Silicon membuat pembaruan OS otomatis tidak lagi memungkinkan
    Tapi justru ini mungkin berkah tersembunyi

  • Saya penasaran apakah ini juga bisa bekerja di lume
    Saat ini ada batasan serupa

    • Sepertinya bisa
      Setahu saya, lume adalah wrapper tipis di atas Virtualization.framework milik Apple
  • Saya pernah dengar kalau mematikan SIP dan mengatur boot argument bisa membuat ini berjalan tanpa custom kernel

    • Kalau benar, ini adalah tips yang diremehkan
  • Apple membatasi VM hanya 2?

    • Ya, VM macOS secara lisensi memang hanya boleh 2
      Guest OS lain bisa dijalankan tanpa batas