Пред­положим, ты недав­но при­обрел «мак» или раз­думыва­ешь, не сде­лать ли это. Но macOS кажет­ся чуж­дой и непонят­ной, да и вооб­ще ходят слу­хи о том, что там чих­нуть нель­зя без раз­решения Тима Кука. Дру­гая рас­простра­нен­ная небыли­ца — что macOS все­го лишь чуть‑чуть переде­лан­ный Linux. В этой статье мы прой­дем­ся по всем основным механиз­мам macOS и заод­но погово­рим о том, какие в реаль­нос­ти есть огра­ниче­ния и мож­но ли их обой­ти.
 

Краткая история macOS

Ис­тория macOS, как и в целом исто­рия Apple, увле­катель­на и пол­на зах­ватыва­ющих перипе­тий. Здесь я перес­кажу ее в очень сок­ращен­ном и упро­щен­ном виде.

Все началось в далекие вось­мидеся­тые годы с компь­юте­ров Apple II. Опе­раци­онной сис­темы в сов­ремен­ном понима­нии это­го сло­ва у них, по сути, не было: сей­час их ОС мы бы наз­вали про­шив­кой. Как и в слу­чае с дру­гими домаш­ними компь­юте­рами той эпо­хи, в нее вхо­дил интер­пре­татор BASIC, слу­жив­ший для выпол­нения поль­зователь­ских команд.

www

Ни­како­го замет­ного нас­ледия Apple II и III в macOS сей­час не най­ти, одна­ко жела­ющие при­кос­нуть­ся к исто­рии могут запус­тить эму­лятор Apple II пря­мо в бра­узе­ре.

Компь­ютер Apple Macintosh, вышед­ший на рынок в 1984 году, разитель­но отли­чал­ся от этих машин. Его опе­раци­онная сис­тема сра­зу вклю­чала в себя гра­фичес­кий поль­зователь­ский интерфейс с под­дер­жкой мыши. Окон­ный интерфейс по тем вре­менам счи­тал­ся уди­витель­ной новин­кой — до это­го его не было ни у одно­го серий­но про­изво­димо­го компь­юте­ра (Windows 1.0 появил­ся через два года пос­ле Macintosh и мно­гое у него поза­имс­тво­вал).

Одна из первых версий MacOS
Од­на из пер­вых вер­сий MacOS

Клас­сичес­кая Mac OS активно раз­вивалась до 1996 года, а пос­ледний ее релиз вышел в 2001 году. И если для кон­ца вось­мидеся­тых она счи­талась передо­вой, то в девянос­тые ее архи­тек­тура с уста­рев­шей моделью раз­деления памяти пос­тепен­но ста­ла прег­радой для раз­вития Apple. В качес­тве экс­трен­ной меры руководс­тво ком­пании решило при­обрести стар­тап NeXT, осно­ван­ный ранее вытес­ненным из Apple Сти­вом Джоб­сом.

Mac OS 9 — последний большой релиз «классики»
Mac OS 9 — пос­ледний боль­шой релиз «клас­сики»

Глав­ной раз­работ­кой NeXT была гра­фичес­кая опе­раци­онная сис­тема NeXTSTEP, в осно­ве которой — Unix-образное ядро и окру­жение, прод­винутый гра­фичес­кий дви­жок и набор объ­ектно ори­енти­рован­ных фрей­мвор­ков. Пос­ледний поз­волял раз­работ­чикам лег­ко соз­давать окон­ные при­ложе­ния на прод­винутом по тем вре­менам язы­ке Objective-C. На компь­юте­рах NeXT, к при­меру, был соз­дан про­тотип пер­вого веб‑бра­узе­ра.

NeXTSTEP
NeXTSTEP

Пос­ле того как коман­да раз­работ­чиков NeXT переш­ла в Apple, сов­мес­тны­ми уси­лиями была соз­дана новая сис­тема — Mac OS X. Поз­днее ее пере­име­нова­ли в OS X, а затем в macOS (отдел мар­кетин­га в Apple никог­да не сидит сло­жа руки). Тех­ничес­ки Mac OS X осно­вана на NeXTSTEP, одна­ко ее интерфейс мно­гое почер­пнул из клас­сичес­кой Mac OS.

MacOS X 10.1 Cheetah
MacOS X 10.1 Cheetah

В переход­ный пери­од «макин­тоши» под­держи­вали как клас­сичес­кую Mac OS, так и Mac OS X. С 2002 года все компь­юте­ры Apple ста­ли выходить с пре­дус­танов­ленной Mac OS X, а Mac OS 9 еще нес­коль­ко лет мож­но было запус­кать в режиме сов­мести­мос­ти.

 

Ядро XNU

В осно­ве macOS, как и в осно­ве любой дру­гой ОС, лежит ядро. Оно отве­чает за выделе­ние про­цес­сорно­го вре­мени, управле­ние опе­ратив­ной памятью и кешем, вза­имо­дей­стви­ем с устрой­ства­ми и сетью. В то же вре­мя оно обра­баты­вает сис­темные вызовы при­ложе­ний и обес­печива­ет вза­имо­дей­ствие про­цес­сов.

Сов­ремен­ная macOS работа­ет на ядре XNU, которое приш­ло из NeXTSTEP. За осно­ву его кода в свое вре­мя был взят про­ект Match — ответ­вле­ние от ядра FreeBSD.

XNU озна­чает X is Not Unix, «X — не Unix». Эта рас­шифров­ка — дав­но уте­ряв­ший акту­аль­ность прог­раммист­ский юмор: macOS все же по боль­шому сче­ту счи­тает­ся одной из раз­новид­ностей Unix. Одна­ко XNU не име­ет бинар­ной сов­мести­мос­ти с FreeBSD, то есть прог­раммы для FreeBSD в macOS нель­зя запус­тить без изме­нений и переком­пиляции.

Яд­ро XNU — гиб­ридное. Это зна­чит, что в отли­чие от мик­роядер оно может быть допол­нено рас­ширени­ями, но при этом не явля­ется монолит­ным, как ядро Linux, где все фун­кции соб­раны в один гигант­ский бинар­ный файл.

До macOS 10.15 основным спо­собом рас­ширения ядра были модули kext. Пос­коль­ку «кек­сты» работа­ют в прос­транс­тве ядра, сбои в них могут при­водить к нес­табиль­ной работе компь­юте­ра. К тому же они откры­вали боль­шие воз­можнос­ти для недоб­росовес­тных раз­работ­чиков.

Сей­час «кек­сты» счи­тают­ся уста­рев­шим методом, и со вре­менем он будет отклю­чен. Вмес­то это­го в Apple пред­лага­ют раз­работ­чикам исполь­зовать фрей­мвор­ки DriverKit и SystemExtension, которые поз­воля­ют соз­давать драй­веры и рас­ширения, работа­ющие в прос­транс­тве поль­зовате­ля.

Архитектура macOS
Ар­хитек­тура macOS
 

Darwin

Опе­раци­онная сис­тема — это не толь­ко ядро. Вмес­те с Match в NeXTSTEP, а затем и в Mac OS X переко­чевал набор биб­лиотек и исполня­емых фай­лов, которые вмес­те с XNU обес­печива­ют под­дер­жку POSIX — Portable Operating System Interface, «пор­тиру­емо­го интерфей­са опе­раци­онной сис­темы». Это стан­дарт, которо­му в той или иной мере соот­ветс­тву­ют все Unix-образные опе­раци­онные сис­темы и который обес­печива­ет низ­коуров­невую сов­мести­мость меж­ду ними.

В macOS этот слой называ­ется Darwin и по сути пред­став­ляет собой самос­тоятель­ную опе­раци­онную сис­тему. Сюда не вхо­дят гра­фичес­кая сре­да и биб­лиоте­ки, нуж­ные для работы окон­ных при­ложе­ний, но вхо­дят ядро, драй­веры, сетевой стек, набор сис­темных и поль­зователь­ских ути­лит коман­дной стро­ки, а так­же сис­тема запус­ка служб и при­ложе­ний launchd.

При желании Darwin мож­но уста­новить как самос­тоятель­ную минима­лис­тичную ОС с тек­сто­вым интер­пре­тато­ром команд. Код Darwin с самого начала был открыт, одна­ко со вре­менем в нем появи­лось мно­жес­тво зак­рытых ком­понен­тов, вклю­чая спе­цифич­ные для «маков» драй­веры.

Пос­ледние вер­сии Darwin уже было невоз­можно соб­рать и зас­тавить работать без средств, дос­тупных толь­ко прог­раммис­там Apple. Получи­лось, что пуб­ликация исходни­ков в таком виде ста­ла не нуж­на ни Apple, ни сооб­щес­тву, и ее прос­то прек­ратили. Код XNU тем вре­менем по‑преж­нему дос­тупен на GitHub и про­дол­жает обновлять­ся.

Сей­час силами сооб­щес­тва под­держи­вает­ся про­ект PureDarwin — по‑нас­тояще­му откры­тая реали­зация Darwin.

info

Дол­гое вре­мя сре­ди прод­винутых маково­дов был популя­рен набор ути­лит MacPorts, так­же осно­ван­ный на Darwin, но допол­ненный и рас­ширен­ный сов­ремен­ными вер­сиями прог­рамм для Linux. MacPorts про­дол­жают под­держи­вать, одна­ко сей­час его поч­ти пол­ностью вытес­нил пакет­ный менед­жер brew.

 

Графическая система

Гра­фичес­кий слой в macOS обыч­но называ­ют Quartz, хотя под­разуме­вает­ся под этим набор биб­лиотек Core Graphics. Две его важ­ней­шие час­ти — это Quartz 2D и Quartz Compositor.

 

Quartz 2D

Quartz 2D отве­чает за все, что свя­зано с дву­мер­ной гра­фикой. В его основные задачи вхо­дит отри­сов­ка тек­ста и прев­ращение гра­фичес­ких при­мити­вов, опи­сан­ных в фор­мате PostScript, в рас­тро­вые изоб­ражения, которые затем переда­ются в Quartz Compositor.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии