Как вы знаете, я люблю Hackintosh. И вообще, Hackintosh никогда не был занятием для слабых духом. А Hackintosh на AMD - это уже отдельный инженерный вызов. Сообщество AMD-OSX годами поддерживает совместимость macOS с процессорами, которые Apple никогда официально не поддерживала. Но даже когда ты добиваешься практически идеальной работы системы, остаётся одно особенно больное место - виртуализация.
Дело в том, что на x86 macOS штатный Hypervisor.framework ориентирован на Intel VMX, тогда как процессоры AMD используют совершенно другой механизм аппаратной виртуализации - SVM. Поэтому работающая macOS на Ryzen ещё не означает, что ты можешь нормально пользоваться аппаратным ускорением виртуальных машин. Приходится мириться с программной эмуляцией либо искать обходные пути.
Мне же стало интересно: насколько сложно самостоятельно получить доступ к AMD SVM из macOS? Причём не через Hypervisor.framework, а непосредственно из собственного kernel extension, взаимодействующего с аппаратными возможностями процессора.
Спойлер: сложно. Но возможно.
Сегодня выкладываю небольшой Proof of Concept, который подтверждает саму возможность аппаратного SVM на AMD Hackintosh:
GitHub: https://github.com/nekkitl/osx-svm-poc
osx-svm-poc — исследовательский проект, включающий IOKit provider, XNU kernel extension и небольшой userspace-клиент. Его главная задача - проверить, способен ли Ryzen выполнить аппаратный переход в гостевой режим через VMRUN, получить VMEXIT_HLT и корректно вернуть управление macOS.И это действительно работает на реальном железе.
Сразу оговорюсь: опубликованный PoC - не готовый гипервизор. Он не предназначен для повседневной эксплуатации, не запускает произвольные операционные системы и не заменяет Hypervisor.framework. Это воспроизводимый эксперимент, подтверждающий принципиальную возможность работы AMD SVM из собственного kernel provider под macOS.
Документация на русском языке: https://github.com/nekkitl/osx-svm-poc/tree/main/docs/ru
_
А теперь небольшой спойлер: на скриншоте я ушёл значительно дальше опубликованного PoC. Там уже экспериментальный VMM с собственным accelerator для QEMU, настоящей SeaBIOS и загрузчиком ISOLINUX. Но это совершенно другой уровень сложности, позволяющий на практике разобраться, как взаимодействуют процессор, гипервизор и ОСь между собой.
