Од­на из важ­ных вех в исто­рии Apple — переход от клас­сичес­кой Mac OS 9 к Unix-подоб­ной OS X, озна­чав­ший не прос­то кар­диналь­ную сме­ну прог­рам­мной архи­тек­туры, а гло­баль­ное изме­нение филосо­фии ОС. В моей кол­лекции вин­тажных ноут­буков есть экзем­пляр с той самой девятой «макосью» на бор­ту — iBook G3. Дей­стви­тель­но, сто­ило купить этот компь­ютер, что­бы понять при­чину, по которой в Apple решили отка­зать­ся от сво­ей клас­сичес­кой опе­раци­онки в поль­зу ОС с прин­ципи­аль­но новой кон­цепци­ей.

Мой 12-дюй­мовый iBook сошел с кон­вей­ера в 2002 году, и для это­го года машина была весь­ма прод­винутой в тех­ничес­ком отно­шении. Здесь име­ется при­вод ComboDrive, под­держи­вающий чте­ние и запись ком­пакт‑дис­ков на ско­рос­ти до 16x, встро­енный модем (56 Kбит/с), порт Ethernet, пара разъ­емов USB 1.1. В наличии есть даже бес­про­вод­ной адап­тер Apple Air Port стан­дарта 802.11b c мак­сималь­ной ско­ростью переда­чи дан­ных до 11 Мбит/с.

В осно­ве это­го iBook лежит про­цес­сор PowerPC 750FX G3 с так­товой час­тотой 800 МГц, осна­щен­ный кеш‑памятью пер­вого уров­ня объ­емом 64 Кбайт и кешем вто­рого уров­ня на 512 Кбайт, интегри­рован­ным в сам чип. Объ­ем опе­ратив­ной памяти сос­тавля­ет 256 Мбайт SDRAM PC133 (333 МГц), из которых полови­на рас­паяна на пла­те, а вто­рая полови­на уста­нов­лена в единс­твен­ный слот рас­ширения. Мак­сималь­но воз­можный объ­ем ОЗУ — 640 Мбайт. За гра­фику отве­чает виде­окар­та ATI Mobility Radeon 7500 с интерфей­сом AGP 2x и собс­твен­ными 32 Мбайт виде­опа­мяти SDRAM. Для ноут­бука 2002 года наличие дис­крет­ного GPU — весь­ма дос­той­ный уро­вень.

Мой iBook G3
Мой iBook G3

Это — ноут­бук «ста­рой шко­лы», родом из той эпо­хи, ког­да кор­пус откры­вал­ся без исполь­зования тем­ной магии, а батарею (литий‑ион­ный акку­муля­тор на 47 Вт · ч) мож­но было вытащить при­мер­но за секун­ду. Эпо­хи, где за акку­рат­ным дизай­ном компь­юте­ра сто­яла инже­нер­ная логика, а не эсте­тика, про­дик­тован­ная спе­циалис­тами по мар­кетин­гу.

Мне этот ноут­бук дос­тался с нап­рочь уби­тым жес­тким дис­ком, который отча­янно про­сил­ся на свал­ку. Никаких CD с соф­том в ком­плек­те, понят­ное дело, тоже не име­лось. Бла­го в конс­трук­ции компь­юте­ра исполь­зовались стан­дар­тные IDE-вин­честе­ры форм‑фак­тора 2,5 дюй­ма, а такого доб­ра в моих стра­теги­чес­ких запасах хра­нит­ся в избытке.

Сра­зу пос­ле замены жес­тко­го дис­ка начал­ся увле­катель­ный квест по уста­нов­ке на него опе­раци­онной сис­темы. Этот iBook был одним из пер­вых ноут­буков от Apple, пос­тавляв­шихся покупа­телям с пре­дус­танов­ленной OS X 10.1.4, которая на про­цес­соре G3 с име­ющим­ся в наличии объ­емом опе­ратив­ки жут­ко тор­мозила, да и в целом выг­лядела доволь­но сырой. Но по желанию мож­но было отка­тить­ся на Mac OS 9.2.2 — самую пос­леднюю редак­цию клас­сичес­кой «макоси», вышед­шую в кон­це 2001 года. Подумав, что на OS X я могу вдо­воль полюбо­вать­ся и на сов­ремен­ном мак­буке, я решил обра­тить­ся к клас­сике.

В отли­чие от сов­ремен­ных вер­сий эппловской опе­раци­онки, которая уме­ет опре­делять обо­рудо­вание ком­па и авто­мати­чес­ки подс­тра­ивать­ся под име­ющееся в наличии железо, дис­три­бути­вы клас­сичес­кой Mac OS заранее ском­пилиро­ваны под одну кон­крет­ную аппа­рат­ную кон­фигура­цию. То есть дис­три­бутив изна­чаль­но соб­ран стро­го для опре­делен­ной модели компь­юте­ра, и на дру­гую машину он либо не вста­нет сов­сем, либо выдаст неп­равиль­ное экранное раз­решение, которое затем невоз­можно будет изме­нить, либо не под­цепит что‑либо из обо­рудо­вания. В общем, нор­маль­но работать такая сис­тема не будет. Я переп­робовал с десяток раз­ных дис­три­бути­вов Mac OS 9 и испортил кучу записы­ваемых ком­пакт‑дис­ков, преж­де чем подоб­рал наконец вер­сию ОС, которая нор­маль­но завелась на моем вин­тажном iBook.

Выбрал неправильный дистрибутив — получи проблемы с экранным разрешением
Выб­рал неп­равиль­ный дис­три­бутив — получи проб­лемы с экранным раз­решени­ем
 

Система приятной наружности

На взгляд сов­ремен­ного поль­зовате­ля Mac OS 9 выг­лядит, конеч­но, нем­ного арха­ично, но это и неуди­витель­но, если учесть, что архи­тек­турная осно­ва этой опе­раци­онки была заложе­на еще в ори­гиналь­ном Macintosh 128K — пер­сонал­ке на базе про­цес­сора Motorola 68000 с 128 Кбайт памяти на бор­ту. Ког­да Macintosh толь­ко появил­ся в 1984 году, он стал пер­вым мас­совым компь­юте­ром с гра­фичес­ким интерфей­сом, управля­емым мышью. Подоб­ный под­ход уже реали­зовы­вал­ся ранее в лабора­тори­ях Xerox PARC, но имен­но Apple смог­ла прев­ратить тех­ничес­кий кон­цепт в рыноч­ный про­дукт.

Так выглядел прототип первого графического интерфейса в исполнении Xerox
Так выг­лядел про­тотип пер­вого гра­фичес­кого интерфей­са в исполне­нии Xerox

Клю­чевой осо­бен­ностью ОС от Apple ста­ло отсутс­твие коман­дной стро­ки: поль­зователь вза­имо­дей­ство­вал с компь­юте­ром исклю­читель­но пос­редс­твом раз­личных эле­мен­тов гра­фичес­кого интерфей­са: окон, меню и знач­ков. Сама опе­раци­онная сис­тема пред­став­ляла собой совокуп­ность Finder (обо­лоч­ки) и Toolbox — набора биб­лиотек с прик­ладной логикой. Собс­твен­но, эти биб­лиоте­ки, пре­дос­тавляв­шие интерфейс к сис­темным фун­кци­ям, и были основным API, дос­тупным при­ложе­ниям. Одна­ко прог­раммис­ты час­то исполь­зовали «неофи­циаль­ные» или пло­хо задоку­мен­тирован­ные вызовы, что делало прог­раммы нес­табиль­ными на новых вер­сиях ОС.

Внут­реннее устрой­ство Mac OS дол­гое вре­мя оста­валось пре­дель­но прос­тым: сис­тема не име­ла ядра в сов­ремен­ном понима­нии — вмес­то это­го исполь­зовал­ся набор управля­ющих модулей, вза­имо­дей­ству­ющих нап­рямую с аппа­рату­рой. Про­цес­сы в клас­сичес­кой Mac OS выпол­нялись в общем адресном прос­транс­тве, без какого‑либо механиз­ма раз­гра­ниче­ния. Это озна­чало, что любая ошиб­ка в одном при­ложе­нии мог­ла обру­шить всю сис­тему.

Ко все­му про­чему до начала девянос­тых Mac OS фак­тичес­ки оста­валась одно­задач­ной: поль­зователь мог работать толь­ко с одним при­ложе­нием, хотя Finder про­дол­жал фун­кци­они­ровать в фоновом режиме. Появив­ший­ся поз­же механизм Cooperative Multitasking поз­волил нес­коль­ким запущен­ным прог­раммам переда­вать управле­ние друг дру­гу — но пол­ноцен­ной мно­гоза­дач­ностью это так и не ста­ло. Mac OS не вме­шива­лась в сам про­цесс перек­лючения задач, не пре­рыва­ла их при­нуди­тель­но и не кон­тро­лиро­вала вре­мя выпол­нения. Управле­ние перек­лючени­ем пол­ностью лежало на самих при­ложе­ниях: каж­дое из них дол­жно было доб­роволь­но выз­вать спе­циаль­ную сис­темную фун­кцию, что­бы усту­пить про­цес­сорное вре­мя дру­гим запущен­ным прог­раммам. Если при­ложе­ние не делало это­го, оно про­дол­жало занимать про­цес­сор, бло­кируя выпол­нение осталь­ных задач и сни­жая отзывчи­вость сис­темы.

Классическая Mac OS версии 6
Клас­сичес­кая Mac OS вер­сии 6

Од­ной из осо­бен­ностей Mac OS было активное исполь­зование рас­ширений — так называ­емых INIT-фай­лов и кон­трол­леров. Это поз­воляло добав­лять в ОС новые воз­можнос­ти — нап­ример, под­дер­жку раз­личных типов фай­лов или устрой­ств. Одна­ко никакой изо­ляции меж­ду рас­ширени­ями не сущес­тво­вало, и час­то два INIT-фай­ла кон­флик­товали друг с дру­гом. Рас­ширения заг­ружались сра­зу пос­ле запус­ка Finder, и пос­ледова­тель­ность ини­циали­зации ока­зыва­ла пря­мое вли­яние на ста­биль­ность работы опе­раци­онки. Иног­да решить проб­лему с зависа­нием сис­темы мож­но было прос­то сме­ной поряд­ка заг­рузки INIT-фай­лов.

Од­ним из таких рас­ширений стал MultiFinder, добав­лявший коопе­ратив­ную мно­гоза­дач­ность меж­ду при­ложе­ниями. Это поз­волило поль­зовате­лям Mac OS работать с нес­коль­кими прог­рамма­ми одновре­мен­но, но с сох­ранени­ем прин­ципа доб­роволь­ной переда­чи управле­ния. Мно­гоза­дач­ность реали­зовы­валась за счет при­оста­нов­ки одно­го при­ложе­ния и вре­мен­ной переда­чи управле­ния дру­гому: поль­зователь вруч­ную перек­лючал фокус меж­ду прог­рамма­ми, щел­кая по их окнам. При этом в фоновом режиме дру­гие при­ложе­ния получа­ли дос­туп к ресур­сам лишь эпи­зоди­чес­ки — в те момен­ты, ког­да активное окно прос­таива­ло. В общем, работа­ла эта мно­гоза­дач­ность с исполь­зовани­ем кос­тылей и под­порок.

 

Смена курса

В 1994 году Apple впер­вые про­дела­ла то, что поз­же успешно пов­торила еще дваж­ды: кар­диналь­но сме­нила аппа­рат­ную плат­форму, отка­зав­шись от про­цес­соров Motorola в поль­зу более совер­шенной архи­тек­туры PowerPC, в раз­работ­ке которой при­нима­ла учас­тие вмес­те с IBM и все той же Motorola. Пер­вый Power Macintosh был пред­став­лен 14 мар­та 1994 года, а за ним под­тянулись и ноут­буки. С перехо­дом на дру­гие про­цес­соры нуж­но было менять и опе­раци­онную сис­тему — и Apple сде­лала это, добавив под­дер­жку PPC в вер­сии Mac OS 7.1.2.

Mac OS 7.1.2
Mac OS 7.1.2

Но изме­нения касались в основном уров­ня тран­сля­ции кода. Mac OS исполь­зовала ме­ханизм Fat Binary (уни­вер­саль­ные бинар­ники), — все при­ложе­ния содер­жали код и для Motorola 680x0, и для PowerPC, а сис­темные биб­лиоте­ки работа­ли в режиме сов­мести­мос­ти с 680x0, что поз­воляло плав­но перей­ти на новую архи­тек­туру без пол­ной перера­бот­ки ОС. В резуль­тате такие прог­раммы мог­ли запус­кать­ся и на ста­рых «маках», и на новых, но объ­ем фай­лов про­пор­циональ­но вырос, да и на быс­тро­дей­ствии при­ложе­ний под­дер­жка сра­зу нес­коль­ких аппа­рат­ных архи­тек­тур в одном бинар­нике ска­зыва­лась не самым луч­шим обра­зом.

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

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

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

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

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