it-консалтинг и аутсорсинг
что мы делаем контакты блог

Mac на PC. Часть I – Что такое Хакинтош?

Ильдар Бигашев 06.04.2017

Истории и слухи

В среде пользователей Mac известна история о том, что в начале двухтысячных один из инженеров Apple показал Стиву Джобсу ноутбук на базе Intel с запущенной версией Mac OS X. Никаких подтверждений тому не было, пока в 2012 году на ресурсе Quora не была опубликована запись от имени Ким Шейнберг (Kim Scheinberg), жены Джона Кулльманна (John Kullmann), инженера Apple, проработавшего в компании 13 лет.

***
Летом 2000 года жизненные обстоятельства Джона складываются таким образом, что его семейству потребовался переезд на восточное побережье штатов и возможность работать в компании удаленно. Последнее значило, что он более не может быть участником группового проекта и ему потребуется вести независимую разработку.
Джон отправляет своему начальнику, Джо Соколу (Joe Sokol), письмо с темой “Intel”, в котором предлагает обсудить возможность назначения его ответственным за Intel-версию Mac OS X, пояснив, что он уже неделю работает с платформой, находит это интересным и если проект посчитают важным, то он мог бы заниматься этим все время.
Прошло 18 месяцев. В декабре 2001 года Сокол сообщает Джону о том, что ему требуется как-то “оправдать его зарплату” и просит сообщить ему о текущих работах.
К этому моменту в офисе Джона уже было три PC и еще столько же дома, купленных у друга, занимающегося продажами “кастомных” PC. На всех была запущена Mac OS X.
Сокол с изумлением наблюдает за тем, как Джон загружает PC со знакомой надписью на экране: “Welcome to Macintosh”.
В какой-то момент Джо замолкает и говорит: “Я сейчас вернусь”. Через несколько минут он возвращается с Бертраном Серле (Bertrand Serlet), который также наблюдает за демонстрацией загрузки и спрашивает Джона: “Сколько вам потребуется времени, чтобы запустить это на Vaio?”, – на что получает ответ: “недолго”. Бертран переспрашивает:” Две недели? Три?”, – Джон отвечает что-то вроде “два часа.. максимум три.”
Бертран отправил Джона в ближайший Fry (известный магазин компьютерной техники), чтобы купить самый топовый и дорогой Vaio, который будет в наличии. В 7:30 вечера того же дня Vaio уже загружается Mac OS X.
На следующий день Стив Джобс летит на встречу с президентом компании Sony.

Неизвестно, что в этой истории правда, а что – нет. Но встреча с Sony имела место быть.

Официально


6 июня 2005 года на Worldwide Developers Conference (WWDC) Apple анонсирует планы перехода на процессоры Intel и предлагает отдельным разработчикам Developer Transition Kit за 999$. Энтузиасты совершают попытки запуска Mac OS X на стороннем “железе”, но получают ошибку о том, что “данная конфигурация не поддерживается” (некоторые старожилы поговаривают, что успехи все-таки были).
10 января 2006 года на Macworld Conference & Expo, всемирной выставке-конференции, посвященной платформе Macintosh и продуктам для неё, Стив Джобс объявляет, что следующий iMac будет с процессором Intel. Представляется операционная система Mac OS X Tiger, которая будет предустановлена (версия 10.4.4) на все новые компьютеры Mac. И что важно, новые модели поддерживают EFI (Extensible Firmware Interface), а не Open Firmware, которое использовалось в предыдущих системах платформы PowerPC.
Через месяц, 14 февраля того же года, появляется новость о релизе первого “хака”, позволяющего запустить Mac OS на компьютере не от Apple. Спустя часы выходит обновление 10.4.5, но уже через две недели тот же программист под ником crg92 выпускает следующий “хак”.
И по сегодняшний день энтузиасты постоянно работают над возможностями запуска Mac OS X (теперь уже macOS) на обычных PC.
Такие компьютеры впоследствии стали называть “Хакинтош”.

Новые Mac используют EFI


Первая спецификация EFI была разработана компанией Intel, однако в июле 2005 года разработка была приостановлена на версии 1.10 и в дальнейшем передана объединенном форуму EFI, а сама спецификация была переименована в Unified Extensible Firmware Interface (UEFI). В то же время компания Intel оставляет за собой право предоставления лицензий для всех продуктов, использующих EFI.
EFI предназначен для замены BIOS — интерфейса, традиционно использующийся всеми IBM-PC-совместимыми персональными компьютерами.
По сути это интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования. Основное предназначение EFI – корректно инициализировать оборудование при включении системы и передать управление загрузчику операционной системы. В отличие от 16-битного BIOS, использующего 64кб, EFI 32 и 64-битный, занимает от 4Мб и позиционируется как аппаратно-независимый. В реальности UEFI BIOS аппаратно-зависимый.

Чем важен EFI?

Поначалу пользователи “Хакинтош” могли запускать Mac OS X на обычных ПК, используя модифицированное ядро системы, обходящее обращения к EFI.
Однако, в начале ноября 2007 года был разработан способ эмуляции EFI, использующий изменённый загрузчик (bootloader) Darwin. На деле это означало, что появилась возможность “представить” PC для Mac OS X таким образом, что система “считала” его компьютером Mac и работала с “неродным” железом. С использованием эмуляции EFI, компьютер мог загружать немодифицированные ядра операционной системы и использовать оригинальные расширения (Kernel Extensions). Появляются и специальные загрузчики, bootloader, которые позволяют произвести прямую UEFI загрузку, а также загрузку с помощью обычного загрузочного сектора, который чаще всего используется на компьютерах, оснащенных традиционным BIOS.
По состоянию на 2015 год, одним из самых используемых является загрузчик Clover, принадлежащий к семейству RealEFI.

Bootloader – как это работает?


Чтобы запустить Хакинтош, нужен специальный загрузчик. Существует множество разных загрузчиков, но по своей основе разделить на два класса: FakeEFI и RealEFI (более подробно об их видах можно прочитать на страницах OSx86 Project).
FakeEFI был изобретен David Elliot много лет назад и работает по простому принципу: он создает видимость того, что EFI уже отработал. В памяти остаются следы активности (boot-args и дерево таблиц) и запускается ядро mach_kernel. Загрузчик Chameleon справляется с этим, за исключением проблем, вроде отсутствия поддержки панели загрузочного диска. В то же время Apple “предоставила” и другие сложности, связанные с недостающими Rutime Services. Например, в январе 2013 года из-за недостающей функции SetVariable() перестал работать iMessage. Впоследствии проблема была решена, но появились и другие. Варианты legacy-загрузчиков: Chameleon, enoch, Chimera, PC-EFI, revoboot.
RealEFI прошивается вместо существующего BIOS, но есть метод использования подгружаемого загрузчика для плат, которым BIOS нужен.
Система такой загрузки была разработана компанией Intel и сейчас находится в активной разработке с открытыми исходными кодами на сайте tianocore.org. Этот загрузчик называется DUET, но у него есть проблемы: он загружает EFI, но не предусматривает загрузку Mac OS X, поэтому нужно приспособить DUET под требования Mac OS X. Несмотря на то, что на новых материнских платах EFI уже есть, он непригоден для загрузки Хакинтоша. Варианты EFI-загрузчиков делятся на две категории: для PC BIOS – bareboot, XPC, и для UEFI BIOS – Ozmosis.

Загрузчик Clover служит для обеих целей

Название Clover данный загрузчик получил от одного из основателей проекта, kabyl’а, который увидел сходство клавиши “Command” с четырехлистным клевером.
EFI – это не только начальный этап загрузки операционной системы: создаются таблицы данных, содержащие информацию о платформе, загрузочные и runtime-сервисы, которые доступны для загрузчика операционной системы и для неё самой. Работоспособность системы зависит от корректности этого этапа. На встроенном UEFI загрузить Mac OS X нельзя, также как и сделать это из чистого DUET. CloverEFI и CloverGUI выполняют немалую работу по корректировке встроенных таблиц для возможности запуска Mac OS X.
Clover – это EFI загрузчик операционных систем, для компьютеров уже имеющих UEFI BIOS (Unified EFI…), и для компьютеров, не имеющих такового. При этом сами операционные системы могут поддерживать EFI- загрузку (OSX, Windows 7-64EFI, Linux), либо нет (Windows XP). В последнем случае предусмотрен legacy-boot: возврат к старой схеме BIOS-загрузки через загрузочные сектора. Если быть точнее, то Clover – это не загрузчик, а скорее Boot Manager, который выполняет подготовку и запуск родных загрузчиков разных ОС (boot.efi, grub.efi, bootmgr.efi).

При включении или при перезагрузке компьютера загрузка операционной системы с помощью boot manager происходит по следующему пути:
Вариант 1. Компьютер основанный на BIOS (legacy-загрузка)
BIOS > MBR > PBR > boot > CLOVERX64.efi > OS loader (boot.efi в случае Mac OS X,
bootmgr.efi для Windows, grub.efi для Linux).
Вариант 2. Компьютер, основанный на UEFI BIOS (новая схема, UEFI-загрузка)
UEFI BIOS > CLOVERX64.efi > OS loader

Таким образом, имея подготовленный загрузчик, мы можем “попасть” в нужную нам систему. Но перед этим потребуется ее установить, подготовив ещё один отдельный загрузчик, добавить необходимые расширения ядра для установки, а также расширения и драйвера для работы системы в целом.

***
В следующей статье: что из себя представляет установка Хакинтош, какие сложности могут возникнуть в работе и мысли о коммерческом использовании Хакинтош.