Журнал LinuxFormat - перейти на главную

LXF164:Darwin:Вид про­ис­хо­ж­де­ния

Материал из Linuxformat
Версия от 01:19, 31 октября 2018; Olkol (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


Альтернатива Linux

Содержание

Darwin: Вид про­ис­хо­ж­де­ния

Сво­бод­ная ОС от не­сво­бод­ной ком­па­нии? Нет, Ро­ман Яры­жен­ко во­все не шу­тит!

(thumbnail)
Наш эксперт. Ро­ма­на Яры­жен­ко хле­бом не кор­ми – дай по­про­бо­вать ка­кую-ни­будь эк­зо­ти­че­скую (и не очень) ОС. Же­ла­тель­но от­кры­тую

Darwin – это не тот, ко­то­рый вы­ду­мал тео­рию эво­лю­ции, а тот, на ко­то­ром осно­ва­на про­прие­тар­ная Mac OS X. Чи­та­те­ли, воз­мож­но, уди­вят­ся: с че­го это LXF рас­ска­зы­ва­ет о про­прие­тар­ной ОС? За­гвозд­ка тут в том, что Darwin как раз-та­ки сво­бод­ная и от­кры­тая ОС – при­чем в пол­ном со­от­вет­ст­вии со смыс­лом, вкла­ды­вае­мым в эти сло­ва FSF и OSI.

Ιστορία

По­ла­гаю, что ис­то­рию Darwin на­до на­чать с ухо­да Сти­ва Джоб­са из Apple. Мы не мо­жем знать точ­но, из-за че­го он ушел, но ито­гом ста­ло то, что он пе­ре­манил в но­вую фир­му некое­го Ави Те­ва­ня­на [Avie Tevanian], ко­то­рый ра­бо­тал над мик­ро­ядром Mach и был одним из его основ­ных раз­ра­бот­чи­ков (кон­цеп­ция Mach раз­ра­бо­та­на в Универ­си­те­те Карнеги-Мел­ло­на). Пе­ре­манил его Джобс, конеч­но, не про­сто так, а для раз­ра­бот­ки ОС, ко­то­рая в дальней­шем по­лу­чит на­звание NeXTStep.


Для раз­ра­бот­ки но­вой ОС бы­ло ре­ше­но ис­поль­зо­вать объ­ект­но-ори­ен­ти­ро­ван­ные тех­но­ло­гии. Не­ве­до­мо по­че­му был вы­бран Objective-C, а не C++. Не­ко­то­рые ис­точники по­ка­зы­ва­ют, что C++ к мо­мен­ту на­ча­ла ра­бо­ты над NeXTStep еще не был соз­дан, но они всту­па­ют в про­ти­во­ре­чие с дру­ги­ми ис­точника­ми, по­это­му мож­но пред­по­ло­жить, что но­во­яв­лен­ная ком­пания про­сто вы­бра­ла тот язык, ко­то­рый стар­ше и боль­ше по­хож на C – основ­ной язык раз­ра­бот­ки ОС то­го вре­мени. NeXT Computers ли­цен­зи­ро­ва­ла Obj-C в 1988.

Язык этот на тот мо­мент был до­воль­но «про­дви­ну­тым» – он, на­при­мер, вклю­чал ООП (при­чем ООП реа­ли­зо­ва­но че­рез со­об­щения, как в SmallTalk, несколь­ко непо­хо­же на то, к че­му мы при­вык­ли сей­час), ди­на­ми­че­скую ти­пи­за­цию, а в со­вре­мен­ной вер­сии еще и сбор му­со­ра.

Яд­ро же NeXTStep бы­ло гиб­рид­ным (несмот­ря на то, что неко­то­рые ис­точники на­зы­ва­ют дан­ную ОС мик­ро­ядер­ной, это не так) и на­пи­сан­ным на чис­том C. Раз­ра­бот­чи­ки взя­ли луч­шие чер­ты мик­ро­яд­ра Mach, та­кие как мо­дуль­ную ар­хи­тек­ту­ру и яд­ра BSD (ско­рость и се­те­вой стек).

Чарльз Дар­вин: во­круг све­та

Рас­смат­ри­вать уста­нов­ку бу­дем на при­ме­ре VMWare Server 1.0 – у ав­то­ра от­сут­ст­ву­ет про­цес­сор с вир­туа­ли­за­ци­ей, а без нее мно­гие со­вре­мен­ные вир­ту­аль­ные ма­ши­ны ра­бо­та­ют очень мед­лен­но. Тип вир­ту­аль­ной ма­ши­ны – FreeBSD, же­ст­кий диск IDE; ука­зы­ва­ем ISO-об­раз, за­гру­жа­ем­ся с него... по­еха­ли!

� Шаг 1 Вы­би­ра­ем же­ст­кий диск для уста­нов­ки. С этим, ду­ма­ет­ся, про­блем не возникнет ни у ко­го.

� Шаг 2 Вы­бор ти­па раз­мет­ки же­ст­ко­го дис­ка. Тут мы, как это ни стран­но, вы­би­ра­ем руч­ную, ибо ав­то­ма­ти­че­­ская, сколь­ко ни пы­та­лись, не хо­те­ла ра­бо­тать. Нас вы­бро­сит в fdisk. На­би­ра­ем auto hfs (ав­то­ма­ти­че­­ская раз­мет­ка дис­ка с одним раз­де­лом HFS+) и... ско­рее все­го, по­лу­ча­ем ошиб­ку ви­да “malloc:*** Deallocation of a pointer not malloced...”. Еще раз на­би­ра­ем auto hfs – те­перь уже это­го со­об­щения не бу­дет. За­пи­сы­ва­ем MBR ко­ман­дой w, за­тем вы­хо­дим из fdisk – quit. Те­перь нас по­про­сят вы­брать корневой раз­дел – че­ст­но го­во­ря, непо­нят­но, за­чем на­до вво­дить его це­ли­ком, когда мож­но бы­ло бы вы­би­рать из имею­щих­ся пу­тем на­жа­тия со­от­вет­ст­вую­щей циф­ры – но это уже во­прос к раз­ра­бот­чи­кам про­грам­мы уста­нов­ки. За­бе­гая впе­ред, ска­жем, что это да­ле­ко не един­ст­вен­ная ошиб­ка в ней. Да­лее у нас по­про­сят под­твер­дить: дей­ст­ви­тель­но ли мы хо­тим со­вер­шить «чис­тую» уста­нов­ку? От­ве­ча­ем – и сно­ва во­прос: имя то­ма; здесь мож­но на­пи­сать что угод­но. По­сле от­ве­та, как во­дит­ся, жмем <Enter>. Оба-на! Пи­шет “error: nknown filesystem type”. Ухо­дим на пе­ре­за­груз­ку – за­но­во с об­раза. За­ме­ча­ем, что на пер­вом эта­пе поя­вил­ся пункт 3 – “Use existing partition”. Его и вы­би­ра­ем. Опять по­про­сят ука­зать корневой раз­дел. По­сле это­го бу­дет во­прос: ка­кой тип фай­ло­вой сис­те­мы ис­поль­зо­вать? Во­прос этот вы­гля­дит, по мень­шей ме­ре, стран­ным – есть же таб­ли­ца раз­де­лов, от­ту­да и бе­ри­те – но те­перь хо­тя бы по­нят­на при­чи­на пе­ре­за­груз­ки: уста­но­воч­ная про­грам­ма (скрипт?) по­пы­та­лась под­мон­ти­ро­вать раз­дел без ФС, и, ес­те­ст­вен­но, вы­лез­ла вы­ше­ука­зан­ная ошиб­ка. С нас сно­ва спро­сят под­твер­ждение и имя то­ма – ес­ли нам еще не на­дое­ло, от­ве­ча­ем на них, и – ура! – на­ча­лось ко­пи­ро­вание фай­лов. Это мо­жет за­нять несколь­ко мин... ой. Жур­нал-то про *nix, за­чем здесь по­вто­рять со­об­щение Windows? Но, как бы то ни бы­ло, это до­воль­но дли­тель­ный про­цесс, и во вре­мя него мож­но, к при­ме­ру, съесть пи­рож­ное.


� Шаг 3 Ко­пи­ро­вание за­вер­ше­но. Нас спро­сят па­роль root (два­ж­ды – в этом смыс­ле все нор­маль­но), по­том спро­сят имя до­ме­на, а за­тем вы­бор из 3 пунк­тов: соз­дать но­во­го поль­зо­ва­те­ля, пе­ре­за­гру­зить­ся и обо­лоч­ка. Ну, поль­зо­ва­те­ля мож­но соз­дать и по­том, обо­лоч­ка по­ро­ж­да­ет­ся глюч­ная, по­это­му вы­би­ра­ем пункт 2 – Reboot. Пе­ре­за­гру­жа­ем­ся... и су­до­рож­но вспо­ми­на­ем, был ли во­прос про за­груз­чик. Вы­яс­ня­ет­ся, что не бы­ло. Да-да! Его на­до ста­вить руч­ка­ми.

� Шаг 4 Сно­ва за­гру­жа­ем­ся с об­раза. Толь­ко те­перь необ­хо­ди­мо ра­бо­тать в обо­лоч­ке, по­это­му на­би­ра­ем shell.Во­шли.На­би­ра­ем пер­вую ко­ман­ду –

fdisk -f /usr/standalone/i386/boot0 -u -y /dev/rdisk0

Что эта ко­ман­да де­ла­ет? Де­ла­ет она сле­дую­щее: ста­вит пер­вую часть за­груз­чи­ка в MBR (без таб­ли­цы раз­де­лов – оп­ция -u) без за­про­са под­твер­ждения – оп­ция -y.

� Шаг 6 По­сле этой ко­ман­ды да­ем ко­ман­ду

dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1

для ус­та­нов­ки за­гру­зоч­но­го сек­то­ра раз­де­ла HFS+.

� Шаг 7 Мон­ти­ру­ем раз­дел –

mount_hfs /dev/disk0s1 /mnt

и ко­пи­ру­ем файл –

cp /usr/standalone/i386/boot /mnt/

(соб­ст­вен­но, сам за­груз­чик). От­мон­ти­ру­ем – umount /mnt – и пе­ре­за­гру­зим­мся – shutdown -r now. Ус­та­нов­ка за­вер­ше­на.

Пер­вое зна­ком­ст­во

За­груз­ка мо­жет пой­ти нор­маль­но, а мо­жет и за­вис­нуть (“Still waiting for root device”) – мы не смог­ли вы­яснить, с чем это свя­за­но. Во вто­ром слу­чае сле­ду­ет пе­ре­за­гру­зить­ся – иногда несколь­ко раз. По­сле успеш­ной за­груз­ки ви­дим при­гла­шение вхо­да в сис­те­му и ошиб­ки нена­строе­но­го mDNSResponder. Пе­ре­во­дим стро­ку и вхо­дим как root. Для на­ча­ла хо­те­лось бы по­ре­ко­мен­до­вать ском­пи­ли­ро­вать ста­рый до­б­рый MC – конеч­но, мож­но обой­тись и без него, но с ним удобнее.

С ком­пи­ля­ци­ей при­дет­ся по­во­зить­ся: необ­хо­ди­мо ма­ло то­го что ска­чать как соб­ст­вен­но MC, так и все необ­хо­ди­мые за­ви­си­мо­сти, но еще и пе­ре­дать их на вир­ту­аль­ную ма­ши­ну. А ка­ким об­ра­зом? Сеть-то не на­строе­на. Един­ст­вен­ный бо­лее-менее доступ­ный путь – ис­поль­зо­вать ISO-об­раз.

По­сле то­го, как соз­да­дим и под­мон­ти­ру­ем об­раз дис­ка (на вся­кий слу­чай – по­ря­док дей­ст­вий: в ка­та­ло­ге /Volumes соз­дать пап­ку cdrom, по­том смон­ти­ро­вать диск ко­ман­дой mount_cd9660 /dev/disk1s0 /Volumes/cdrom. Ес­те­ст­вен­но, об­раз уже дол­жен быть под­го­тов­лен для ис­поль­зо­вания в вир­ту­аль­ной ма­шине. Спе­ци­фи­ка Darwin...), необ­хо­ди­мо ско­пи­ро­вать все фай­лы в до­машний ка­та­лог. Ко­ман­да ко­пи­ро­вания стан­дарт­ная; един­ст­вен­ное, что на­до от­ме­тить – Darwin стран­но ото­бра­жа­ет фай­лы на ISO9660, по­это­му ко­пи­ро­вать луч­ше по мас­ке, а раз­ар­хи­ви­ро­вать с ис­поль­зо­ванием ав­то­до­полнения по кла­ви­ше <Tab>, бла­го оно име­ет­ся.

Да! Пе­ред на­ча­лом ком­пи­ля­ции вы­полните сле­дую­щие ко­ман­ды:

export MACOSX_DEPLOYMENT_TARGET=10.4

– ус­та­нав­ли­ва­ет ми­ни­маль­ную вер­сию ОС;

export PATH=$PATH:/usr/local/bin

– по­нят­но что;

export LIBDIR=/usr/local/lib

– то­же по­нят­но, но для тех, ко­му не­по­нят­но – ука­зы­ва­ет­ся путь, ку­да при ком­пи­ля­ции бу­дут скла­ды­вать­ся биб­лио­те­ки.

Соб­ст­вен­но ком­пи­ля­ция за­ви­си­мо­стей про­ис­хо­дит дол­го и нуд­но – рас­па­ков­ка (tar xzvf имя_ар­хи­ва), пе­ре­ход в ка­та­лог, configure, make, make install, рас­па­ков­ка, пе­ре­ход в ка­та­лог... важ­но лишь, в ка­ком по­ряд­ке – а он сле­дую­щий: pcre, pkg-config, gettext, slang и, на­конец, glib.

За­ви­си­мо­сти ском­пи­ли­ро­ва­лись – пе­ре­хо­дим к соб­ст­вен­но mc. Тут дей­ст­ву­ем поч­ти так же – но configure необ­хо­ди­мо вы­полнить с оп­ци­ей --with-screen=slang. И по­сле вы­полнения make install бу­дет нам сча­стье – ском­пи­ли­ро­ван­ный mc под Darwin

Но сча­стье ред­ко бы­ва­ет пол­ным – по неиз­вест­ным при­чи­нам в тек­сто­вом ре­жи­ме в ОС от Apple не ра­бо­та­ют функ­цио­наль­ные кла­ви­ши. По слу­хам, они ра­бо­та­ют в гра­фи­че­­ском тер­ми­на­ле – но ком­пи­ля­ция X-сер­ве­ра и ка­ко­го-ли­бо окон­но­го менед­же­ра вы­хо­дит за рам­ки этой ста­тьи. А что же де­лать с функ­цио­наль­ны­ми кла­ви­ша­ми? При­дет­ся ис­поль­зо­вать фо­кус – вме­сто функ­цио­наль­ных кла­виш <F1> – <F10> mc по­зво­ля­ет ис­поль­зо­вать ком­би­на­цию <Esc> + циф­ра от 1 до 0. Не са­мый удоб­ный спо­соб, да, но с этим ниче­го не по­де­ла­ешь.

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

» Ка­та­лог /.Trashes как раз и яв­ля­ет­ся за­глуш­кой – в Mac OS X он вы­пол­ня­ет функ­цию кор­зи­ны для су­пер­поль­зо­ва­те­ля.

» Ка­та­лог /.vol – за­га­доч­ный ка­та­лог, где на­хо­дит­ся еще один (или бо­лее) ка­та­лог с циф­ро­вым именем. Но ес­ли по­смот­реть вы­вод ко­ман­ды mount, ста­но­вит­ся по­нят­ным, что к оно­му ка­та­ло­гу под­мон­ти­ро­ва­на псев­до­фай­ло­вая сис­те­ма volfs, на­зна­чение ко­то­рой из на­звания, впро­чем, не ста­но­вит­ся менее за­га­доч­ным. Дан­ная фай­ло­вая сис­те­ма пред­на­зна­че­на для досту­па к фай­лам не по имени, а по inode. Это бы­ло необ­хо­ди­мо для сты­ков­ки POSIX и Carbon API, ко­то­рый ныне (2012 год) счи­та­ет­ся уже уста­рев­шим, но в вер­сии Mac OS X, осно­ван­ной на опи­сы­вае­мом в дан­ном раз­де­ле Darwin 8.0.1, был вполне се­бе жи­вым.

» /AppleInternal – со­дер­жит неко­то­рые за­го­ло­воч­ные фай­лы.

» /Applications – опять же, пред­на­зна­чен для OS X. Ту­да обыч­но уста­нав­ли­ва­ют­ся несис­тем­ные при­ло­жения c GUI, раз­ра­бо­тан­ные спе­ци­аль­но для ОС от Apple. Ин­те­рес­но, что в Darwin при­сут­ст­ву­ет од­но та­кое при­ло­жение, хо­тя GUI там и в по­мине нет – со­от­вет­ст­вен­но, да­же и пы­тать­ся его за­пустить не сто­ит.

» /Developer со­дер­жит до­ку­мен­та­цию, при­ме­ры ис­ход­ных ко­дов и шаб­ло­ны про­ек­тов мо­ду­лей яд­ра и рас­ши­рений яд­ра – разница ме­ж­ду ними бу­дет по­яснена чуть поз­же.

» /Library со­дер­жит неко­то­рые важ­ные кон­фи­гу­ра­ци­он­ные фай­лы – в ча­ст­но­сти, файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist, необ­хо­ди­мый для за­груз­чи­ка, и неко­то­рые ло­ги.

» /Network – по всей ви­ди­мо­сти, слу­жит для мон­ти­ро­вания се­те­вых фай­ло­вых сис­тем.

» /System со­дер­жит под­ка­та­лог Library, бли­жай­шим ана­ло­гом ко­то­ро­го в Linux яв­ля­ет­ся /lib. В нем при­сут­ст­ву­ют фрейм­вор­ки при­ло­жений, мо­ду­ли и рас­ши­рения яд­ра, мо­ду­ли Perl...

» /Users со­дер­жит до­машние ка­та­ло­ги поль­зо­ва­те­лей и в этом смыс­ле со­вер­шен­но иден­ти­чен /home.

» /Volumes ана­ло­ги­чен /mnt и /media. Ка­та­ло­ги, соз­дан­ные в нем поль­зо­ва­те­лем, су­ще­ст­ву­ют до сле­дую­щей пе­ре­за­груз­ки – уч­ти­те это, когда бу­де­те в сле­дую­щий раз мон­ти­ро­вать ком­пакт-диск.

» /bin, /dev, /sbin, /usr, /opt – объ­яс­нять не бу­дем, и так все по­нят­но. А вот ка­та­ло­ги /etc, /tmp и /var на са­мом де­ле яв­ля­ют­ся сим­во­ли­че­­ски­­ми ссыл­ка­ми на со­от­вет­ст­вую­щие ка­та­ло­ги в /private.

Ес­ли уж за­гля­ну­ли в ка­та­лог /etc, да­вай­те в фай­ле profile ис­пра­вим пе­ре­мен­ную PATH, до­ба­вив в чис­ло пу­тей /usr/local/bin, и до­ба­вим пе­ре­мен­ные LIBDIR и MACOSX_DEPLOYMENT_TARGET (зна­чения см. ранее) – на слу­чай, ес­ли чи­та­те­лю за­хо­чет­ся по­уп­раж­нять­ся в ком­пи­ля­ции че­го-ли­бо POSIX-со­вмес­ти­мо­го. В прин­ци­пе, мож­но да­же по­пы­тать­ся ском­пи­ли­ро­вать све­жие вер­сии яд­ра и ба­зо­вых ути­лит, бу­де чи­та­тель ока­жет­ся же­ст­ким из­вра­щен­цем – ав­тор этих строк не ри­ск­нул по­ста­вить по­доб­ный экс­пе­ри­мент.

Ар­хи­тек­тур­ные осо­бен­но­сти

Как и древние рим­ляне, начнем с яй­ца – то есть с яд­ра. Яд­ро у ОС от Apple, как уже сказано, осно­ва­но на мик­ро­яд­ре Mach. Но «осно­ва­но на мик­ро­яд­ре» во­все не оз­на­ча­ет, что ар­хи­тек­ту­ра мик­ро­ядер­ная: ар­хи­тек­ту­ра гиб­рид­ная, и услов­но со­сто­ит из трех сло­ев.

» В са­мом низу яд­ра ле­жит слой Mach, ко­то­рый от­ве­ча­ет за HAL (не сто­ит ис­кать дан­но­го тер­ми­на в до­ку­мен­та­ции, мы его ис­поль­зу­ем для уп­ро­щения), управ­ление про­цес­со­ра­ми, вы­тес­няю­щую мно­го­за­дач­ность, управ­ление па­мя­тью, внут­ри­ядер­ный IPC, под­держ­ку «мяг­ко­го» ре­аль­но­го вре­мени и, на­конец, за от­лад­ку яд­ра – в ка­че­­ст­ве от­лад­чи­ка на от­ла­жи­ваю­щей ма­шине ис­поль­зу­ет­ся GDB.

» Слой BSD ле­жит вы­ше и вклю­ча­ет реа­ли­за­цию про­цес­сов и сиг­на­лов, ба­зо­вую мо­дель безо­пас­но­сти, API POSIX, сис­тем­ные вы­зо­вы, под­держ­ку се­ти и мно­гое дру­гое.

» Слой I/O Kit – это фрейм­ворк, по­зво­ляю­щий раз­ра­бот­чи­кам ис­поль­зо­вать ог­раничен­ный на­бор воз­мож­но­стей C++ для объ­ект­но-ори­ен­ти­ро­ван­но­го про­грам­ми­ро­вания драй­ве­ров.

В прин­ци­пе, эти слои не на­столь­ко чет­ко раз­де­ле­ны, по­это­му неко­то­рые мо­гут еще что-то вы­де­лить, а неко­то­рые, на­обо­рот, пред­поч­тут что-то уб­рать; но об­щая кар­ти­на та­ко­ва.

Xnu (так на­зы­ва­ет­ся это яд­ро; рас­шиф­ро­вы­ва­ет­ся же эта аб­бре­виа­ту­ра как... да-да, Xnu is not Unix – Стол­лме­ну впо­ру об­ви­нять Apple в пла­гиа­те) по­зво­ля­ет под­клю­чать к се­бе рас­ши­рения – так на­зы­вае­мые kernel extensions, в един­ст­вен­ном чис­ле kext. Рас­ши­рения мо­гут со­сто­ять из од­но­го или бо­лее мо­ду­лей яд­ра. Мо­дуль яд­ра (Kmod) яв­ля­ет­ся минималь­ной единицей ко­да, ко­то­рую мож­но за­гру­зить в яд­ро.

В Darwin ис­поль­зу­ет­ся фор­мат ис­пол­няе­мых фай­лов Mach-O и под­дер­жи­ва­ет­ся тех­но­ло­гия, осно­ван­ная на нем – муль­ти­ар­хи­тек­тур­ные ис­пол­няе­мые фай­лы. От­ме­тим, что Apple при­ме­ня­ла ее для пе­ре­но­са OS X с ар­хи­тек­ту­ры PowerPC на Intel.

Те­перь рас­смот­рим та­кие спе­ци­фи­че­­ские осо­бен­но­сти Darwin, как «па­ке­ты [bundles]» и фрейм­вор­ки (при­ме­чание: здесь и да­лее речь мо­жет пой­ти о ве­щах, ко­то­рые не под­дер­жи­ва­ют­ся в вер­сии Darwin 8.0.1 – сия вер­сия 2005 го­да, а сей­час уже, по­чи­тай, 2012 за­кан­чи­ва­ет­ся ско­ро). «Па­ке­том» в дан­ном кон­тек­сте на­зы­ва­ет­ся на­бор свя­зан­ных ре­сур­сов, в чис­ло ко­то­рых мо­гут вхо­дить испол­няе­мые фай­лы, изо­бра­жения, ау­дио, за­го­ло­воч­ные фай­лы и да­же дру­гие па­ке­ты. Яс­ное де­ло, что та­кой «па­кет» – по­ня­тие аб­ст­ракт­ное, а по­се­му при­ве­дем кон­крет­ный при­мер – фрейм­ворк. Фрейм­ворк – на­бор, со­стоя­щий из од­ной или бо­лее ди­на­ми­че­­ских биб­лио­тек с за­го­ло­воч­ны­ми фай­ла­ми, до­ку­мен­та­ци­ей, ло­ка­ли­за­ци­ей и со­пут­ст­вую­щи­ми про­грам­ма­ми для об­лег­чения ра­бо­ты. Да­вай­те рас­смот­рим неко­то­рые фрейм­вор­ки, вхо­дя­щие в со­став ОС от Apple.

Уже упо­ми­нав­ший­ся ранее I/O Kit – фрейм­ворк, со­стоя­ший из двух час­тей: ре­жи­ма поль­зо­ва­те­ля и ре­жи­ма яд­ра. Часть поль­зо­ва­тель­ско­го ре­жи­ма от­ве­ча­ет за про­стой доступ к обо­ру­до­ванию из при­ло­жений, а часть ре­жи­ма яд­ра – за ба­зо­вую ие­рар­хию клас­сов и под­держ­ку C++. Мы уже от­ме­ча­ли, что C++ в I/O Kit несколь­ко ог­раничен. За­клю­ча­ет­ся это в от­сут­ст­вии та­ких ве­щей, как шаб­ло­ны, ис­клю­чения, RTTI и мно­же­ст­венн­ное на­сле­до­вание. Тем не менее, это нис­коль­ко не ме­ша­ет раз­ра­бот­чи­кам пи­сать драй­ве­ры.

CoreFoundation – фрейм­ворк, обес­пе­чи­ваю­щий ба­зо­вые воз­мож­но­сти для про­грамм, на­пи­сан­ных на Objective-C, та­кие как раз­бор XML-фай­лов, доступ к ре­сур­сам че­рез URL, управ­ление спи­ска­ми свойств и мно­гие дру­гие.

Для об­лег­чения ра­бо­ты с се­тью пред­на­зна­чен фрейм­ворк CFNetwork. Он де­ла­ет удоб­ной ра­бо­ту с со­ке­та­ми, соз­дание SSL/TLS-со­единений, раз­ре­шение имен... Раз­ра­бот­чик же­ла­ет ра­бо­тать с HTTP или FTP? Ни­ка­ких про­блем – за это так­же от­ве­ча­ет дан­ный фрейм­ворк.

Нель­зя не упо­мя­нуть и о фай­ло­вой сис­те­ме HFS+. Осо­бен­но­стя­ми она по со­вре­мен­ным мер­кам не от­ли­ча­ет­ся (раз­ве что под­держ­ка лю­бых сим­во­лов Юнико­да в имени фай­ла, за ис­клю­чением сим­во­ла NUL), но все же пе­ре­чис­лим ее воз­мож­но­сти. Это жур­на­ли­ро­вание, B-де­ре­вья для эф­фек­тив­но­го по­ис­ка фай­лов, про­зрач­ное сжа­тие...

А как об­сто­ят де­ла с безо­пас­но­стью? О, с безо­пас­но­стью все хо­ро­шо, не со­мневай­тесь! Вот неко­то­рые воз­мож­но­сти и тех­но­ло­гии, так или ина­че от­но­ся­щие­ся к ней:

» ASLR Тех­но­ло­гия, раз­ме­щаю­щая в ОЗУ неко­то­рые кри­тич­но важ­ные сис­тем­ные дан­ные слу­чай­ным об­ра­зом. Это серьезно ослож­ня­ет экс­плуа­та­цию ря­да атак, тре­бую­щих знания их рас­по­ло­жения.

» NX-бит За­пре­ща­ет вы­полнение ко­да в сте­ке и в ку­че.

» Пра­ва досту­па Стан­дарт­ная мо­дель Unix.

» ACL Рас­ши­рен­ная сис­те­ма прав досту­па; по­зво­ля­ет ин­ди­ви­ду­аль­но для ка­ж­до­го поль­зо­ва­те­ля на­зна­чать пра­ва досту­па к фай­лам.

» Kauth Ман­дат­ная сис­те­ма кон­тро­ля досту­па; ана­ло­гич­на SELinux.

» Ау­дит.

» Шиф­ро­вание раз­де­ла под­кач­ки.

» IPSec Его реа­ли­за­цию, как, впро­чем, и в Linux,ста­щи­ли из FreeBSD.

» Под­пи­сы­вание ис­пол­няе­мых фай­лов Воз­мож­но тео­ре­ти­че­­ски.

Не­объ­ят­ное объ­ять нель­зя – nemo omnia potest scire – но ав­тор и не ста­вил та­кой це­ли, он ста­вил цель за­ин­те­ре­со­вать чи­та­те­ля. Хо­те­лось бы на­де­ять­ся, что у него это по­лу­чи­лось.

Ито­ги

Впе­чат­ление о дан­ной ОС сло­жи­лись неод­но­знач­ные: с од­ной сто­ро­ны, ин­те­рес­но по­смот­реть на внут­рен­но­сти ком­мер­че­­ской ОС от Apple, а с дру­гой... Darwin яв­но не яв­ля­ет­ся сис­те­мой для на­столь­но­го ис­поль­зо­вания. Пред­принима­лись по­пыт­ки соз­дать ди­ст­ри­бу­тив на осно­ве этой ОС, но осо­бо­го успе­ха они не по­лу­чи­ли. Мо­жет быть, вый­дет у ко­го-нибудь из на­ших чи­та­те­лей?.. |

YaryzhenkoRoman.psd

Что нам на­до

Па­ке­ты, не­об­хо­ди­мые для ком­пи­ля­ции MC вер­сии 4.6.1:

» Pkg-config 0.25

» Gettext 0.18.1.1

» Glib 2.6.4

» slang 2.1.4

» pcre 8.20

Ссыл­ки по те­ме

» http://www.gnu.org/philosophy/apsl.html » http://www.opensource.org/licenses/alphabetical » http://lowendmac.com/orchard/05/next-computer-history.html » http://www.hitmill.com/programming/cpp/cppHistory.html » http://www.techotopia.com/index.php/The_History_of_Objective-C » http://osxbook.com/book/bonus/ancient/whatismacosx/history.html » http://www.osnews.com/story/3757/Introduction_and_History_of_Darwin/ page2/ » http://www.morphosppc.com/article/darwin-operating-system-history » http://www.insanelymac.com/forum/lofiversion/index.php/t57650.html » http://www.insanelywind.com/msiarchive/viewtopic.php?f=32&t=11459 » http://opensource.apple.com/source/boot/boot-132/i386/boot2/boot.c » http://hints.macworld.com/comment.php?mode=view&cid=30815 » http://superuser.com/questions/163941/what-is-the-vol-directory-for » https://developer.apple.com/library//mac/documentation/DeviceDrivers/ Conceptual/WritingDeviceDriver/Glossary/Glossary.html

Персональные инструменты
купить
подписаться
Яндекс.Метрика