Hypervisor.framework
Hypervisor.framework — это программный фреймворк, разработанный компанией Apple Inc. (организация признана нежелательной и запрещена в РФ) и входящий в состав операционных систем macOS и iOS / iPadOS. Он предоставляет разработчикам приложений низкоуровневый API (интерфейс прикладного программирования) для создания и управления виртуальными машинами, работающими непосредственно на аппаратном обеспечении, без необходимости использования сторонних гипервизоров (например, KVM или VirtualBox). Фреймворк является частью системного программного обеспечения Apple и не предназначен для конечных пользователей, а служит основой для сторонних решений виртуализации.
История и предпосылки создания
До появления Hypervisor.framework виртуализация на macOS была возможна только с помощью сторонних гипервизоров, таких как VMware Fusion, Parallels Desktop или Oracle VirtualBox. Эти решения полагались на собственные драйверы ядра (kexts) для доступа к аппаратным возможностям виртуализации процессоров Intel (VT-x) и AMD (AMD-V). Такой подход создавал ряд проблем: необходимость поддержки драйверов для каждой новой версии macOS, потенциальная нестабильность системы из-за стороннего кода в пространстве ядра, а также сложности с обеспечением безопасности и целостности системы (System Integrity Protection, SIP).
В 2015 году, с выходом OS X El Capitan (10.11), Apple представила Hypervisor.framework. Это стало частью более широкой стратегии компании по упрощению разработки системного ПО и повышению безопасности. Фреймворк предоставил стандартизированный, документированный и поддерживаемый Apple интерфейс для виртуализации, вытеснив необходимость в сторонних драйверах ядра. Первоначально фреймворк был доступен только на macOS, работающей на процессорах Intel.
С переходом Apple на собственные процессоры архитектуры Apple Silicon (начиная с 2020 года) Hypervisor.framework был полностью переработан. Теперь он использует аппаратные возможности виртуализации, встроенные в чипы M1, M2 и последующие. Это позволило виртуализировать операционные системы как для архитектуры ARM64 (в том числе гостевые версии macOS, Linux для ARM), так и, с помощью технологии эмуляции Rosetta 2, запускать виртуальные машины с x86-64 гостевыми системами (например, Windows для ARM). В 2022 году, с выходом macOS Ventura (13.0), Apple также представила Virtualization.framework — надстройку над Hypervisor.framework, которая упрощает создание виртуальных машин с гостевыми ОС, поддерживаемыми Apple (macOS, Linux).
Архитектура и принцип работы
Hypervisor.framework работает на уровне ядра операционной системы (XNU). Он предоставляет разработчику прямой, но контролируемый доступ к аппаратным возможностям виртуализации центрального процессора (CPU) и управлению памятью (MMU). В отличие от полноценных гипервизоров, Hypervisor.framework является гипервизором типа 2 (hosted hypervisor), то есть работает поверх существующей операционной системы (macOS).
Основные компоненты
Фреймворк состоит из набора C-функций и объектно-ориентированных классов (в Objective-C и Swift). Ключевые элементы:
- HV (Hypervisor) API: набор низкоуровневых вызовов для создания и управления виртуальными машинами. Включает функции для:
- Создания и уничтожения виртуальных ЦП (vCPU).
- Настройки регистров vCPU (включая управляющие регистры, такие как CR0, CR3, CR4).
- Обработки исключений (VM-exits), возникающих при попытке гостевой ОС выполнить привилегированные инструкции.
- Управления таблицами страниц (page tables) для гостевой памяти.
- VM (Virtual Machine) объекты: представляют собой экземпляр виртуальной машины. Каждый такой объект содержит набор vCPU, а также виртуальное адресное пространство.
- VCPU (Virtual CPU) объекты: представляют собой виртуальные ядра процессора. Разработчик может создавать несколько vCPU для одной VM, эмулируя многопроцессорную систему.
- Memory Regions: фреймворк позволяет отображать физическую память хоста в адресное пространство гостевой системы, используя механизмы аппаратной виртуализации памяти (SLAT — Second Level Address Translation, известный как EPT на Intel и NPT на AMD).
Отличие от Virtualization.framework
Hypervisor.framework — это низкоуровневый инструмент. Он не предоставляет готовых решений для эмуляции устройств ввода-вывода (например, дисков, сетевых карт, USB-контроллеров). Разработчик, использующий только Hypervisor.framework, должен самостоятельно реализовывать эмуляцию всей периферии (например, с помощью программной эмуляции или передачи устройств хоста через виртуальные функции).
Virtualization.framework, напротив, является высокоуровневой обёрткой. Он включает в себя готовые реализации виртуальных устройств (Virtio-диски, Virtio-сеть, графический вывод через Metal), что значительно упрощает создание функциональных виртуальных машин. Однако Virtualization.framework ограничен поддержкой только тех гостевых ОС, которые Apple официально сертифицировала (macOS, Linux с поддержкой Virtio). Hypervisor.framework же даёт полный контроль, позволяя запускать любые операционные системы (включая Windows, FreeBSD, специализированные RTOS), если разработчик готов реализовать всю необходимую эмуляцию.
Применение и примеры использования
Hypervisor.framework используется в нескольких ключевых областях:
1. Сторонние гипервизоры и эмуляторы
Наиболее известные коммерческие и открытые проекты, использующие Hypervisor.framework:
- Parallels Desktop и VMware Fusion: эти коммерческие продукты для виртуализации на macOS используют Hypervisor.framework в качестве бэкенда для доступа к аппаратной виртуализации. Это позволяет им работать стабильно и без необходимости установки сторонних драйверов ядра.
- UTM (Universal Turing Machine): популярный бесплатный эмулятор и гипервизор с открытым исходным кодом. UTM использует Hypervisor.framework для запуска виртуальных машин с высокой производительностью (например, Windows на ARM, Linux) и QEMU для эмуляции других архитектур (x86, ARM32).
- VirtualBox: начиная с версии 6.1, Oracle VirtualBox поддерживает Hypervisor.framework в качестве альтернативного механизма виртуализации на macOS, хотя по умолчанию использует собственный драйвер.
- Docker Desktop for Mac: использует Hypervisor.framework для запуска легковесной виртуальной машины Linux, внутри которой работают контейнеры Docker. Это заменило более раннюю версию, основанную на xhyve.
2. Разработка и тестирование операционных систем
Hypervisor.framework является популярным инструментом среди разработчиков операционных систем и низкоуровневого ПО. Благодаря ему можно запускать собственную разработку ядра или загрузчика непосредственно на реальном аппаратном обеспечении (с виртуализацией) без необходимости загрузки на физическое устройство. Фреймворк позволяет отлаживать код на уровне гипервизора, перехватывая исключения и анализируя состояние регистров.
3. Исследования в области безопасности
Исследователи безопасности используют Hypervisor.framework для создания инструментов анализа вредоносного ПО, отладки драйверов и изучения поведения операционных систем. Возможность запуска гостевой ОС в изолированной среде с полным контролем над её выполнением делает фреймворк ценным для динамического анализа.
4. Образовательные проекты
Благодаря документированному API и относительной простоте (по сравнению с написанием собственного гипервизора), Hypervisor.framework используется в университетских курсах по операционным системам и виртуализации. Студенты могут создавать простые виртуальные машины, изучая принципы работы MMU, обработки прерываний и контекстного переключения.
Ограничения и критика
Несмотря на свою функциональность, Hypervisor.framework имеет ряд ограничений:
- Отсутствие поддержки ввода-вывода (I/O): как упоминалось, фреймворк не предоставляет эмуляции устройств. Разработчику приходится самостоятельно реализовывать эмуляцию дисков, сети, графики и других контроллеров, что является крайне трудоёмкой задачей.
- Ограниченная поддержка гостевых ОС: Apple официально поддерживает только виртуализацию macOS и Linux (через Virtualization.framework). Для запуска Windows (особенно x86-версий) на Apple Silicon требуется использование эмуляции (через QEMU), что снижает производительность.
- Зависимость от версии macOS: API Hypervisor.framework может меняться между версиями macOS, что требует от разработчиков адаптации своих приложений. Некоторые функции (например, поддержка виртуализации для ARM) появились только в macOS Big Sur (11.0).
- Производительность: хотя Hypervisor.framework обеспечивает прямой доступ к аппаратуре, он всё же является гипервизором типа 2, что влечёт за собой накладные расходы по сравнению с гипервизорами типа 1 (например, VMware ESXi или Hyper-V). Для большинства задач эта разница незаметна, но для высоконагруженных серверных приложений может быть критична.
Заключение
Hypervisor.framework является ключевым компонентом экосистемы виртуализации на платформах Apple. Он предоставляет разработчикам стандартизированный и безопасный интерфейс для создания виртуальных машин, заменяя устаревшие и нестабильные сторонние драйверы ядра. Несмотря на свою низкоуровневую природу и отсутствие встроенной эмуляции устройств, фреймворк лёг в основу таких популярных продуктов, как Parallels Desktop, UTM и Docker Desktop for Mac. С переходом на Apple Silicon Hypervisor.framework был адаптирован для работы с новой архитектурой, обеспечив возможность виртуализации как ARM64, так и x86-64 гостевых систем.
Источники
- Apple Inc. «Hypervisor Framework» — Официальная документация для разработчиков (developer.apple.com).
- Apple Inc. «Virtualization Framework» — Официальная документация для разработчиков (developer.apple.com).
- Документация проекта UTM (getutm.app).
- Документация Parallels Desktop (parallels.com).
- Статья «Hypervisor.framework: A New Way to Virtualize on macOS» — блог компании Apple (2015).
- Технические заметки Apple о поддержке виртуализации на Apple Silicon (2020-2023).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →