Mac OS 9
Krátce o historii
Operační systémy Mac OS 7, 8 a 9 jsou v základu takřka totožné. Oproti předchozím verzím systému to už byly plně 32bitové (System 6 byl částečně 32bitový) a Finder byl plně nahrazen MultiFinderem, čímž se Macům dostalo pořádné podpory alespoň základního kooperativního multitaskingu. System 7 vyšel v roce 1991 a na svou dobu byl skutečným výkvětem technologie. Udržel se jako hlavní systém platformy Macintosh po dobu šesti let a teprve v roce 1997 byl nahrazen Mac OS 8, což byl také první operační systém od Applu se slovem Mac v názvu. Mac OS 8 se velmi podobá svému předchůdci, ale byly do něj začleněny některé technologie Coplandu. Ve verzi 8.1 přibyla také podpora Carbonu, který se na platformě Mac používá dodnes. Mac OS 8.5 konečně vypustil podporu starých Motorola procesorů a běžel už jen na PowerPC. Na konci svého vývoje Mac OS 8.6 konečně představil multitasking na úrovni kernelu (ale nebyla to žádná sláva). Mac OS 9, který nás bude zajímat především, byl představen v roce 1998, kdy už měl Apple jasné plány pro přechod na Mac OS X – jeho hlavním úkolem tedy bylo připravit platformu Macintosh k tomuto přechodu.
Mac OS 9 obsahoval kromě již zmíněného Carbonu i podporu více procesorů, filesystem HFS+ (zatím stále včetně tzv. forků) a další technologie použité v Mac OS X. Po vydání prvních verzí desítky byl OS 9 upraven tak, aby mohl běžet v tzv. Classic módu, někdy zvaném Blue Box.
Classic
Aby byla udržena kompatibilita s předchozími verzemi Mac OS, je v Mac OS X zahrnuta vrstva Classic, která při svém spuštění načte do paměti jádro Mac OS 9 včetně všech služeb a rozšíření (obvykle tak 50 MB) a skryje se na pozadí jako daemon. Pokud běží Classic, je možné spouštět aplikace určené pro starší systémy, ba i dokonce pro starší Motorola procesory. Takové aplikace sice běží ve stejném prostoru jako ostatní programy, funguje mezi nimi i Drag&Drop a jiná spolupráce, ale nejsou integrovány do zobrazovacího systému Mac OS X. Ke svému vykreslování použají staré služby Mac OS 9 jako QuickDraw, a vypadají tedy jinak než nativní aplikace a nejsou zahrnuty do efektů týkajících se jenom Quartzu (minimalizace, Exposé).
Carbon
Carbon byl poprvé představen s vydáním Mac OS 9 a byl později backportován až do Mac OS 8.1. Jedná se o rozšiřitelný a univerzální C a C++ framework, jehož úkolem původně bylo tvořit jakýsi most mezi starým a novým Mac OS, ale který se později rozrostl a stal se plnohodnotným toolkitem. Dnes tedy najdete v zásadě dva druhy programů psaných pro Carbon: HydroCarbon aplikace, které jsou funkční na obou systémech a teoreticky jsou k nerozeznání od nativních programů toho kterého systému, a normální programy psané pro OS X, které používají Carbon jenom jako jednu z knihoven a využívají i ostatních služeb systému. Klasickým příkladem HydroCarbon aplikace je například oficiální ICQ klient pro Mac OS.
Carbon API je velmi rozsáhlé a poskytuje kompletní přístup k drtivé většině komponent Mac OS X, včetně OpenGL, služeb kernelu a BSD API/ABI. Je také možné tvořit smíchané aplikace napsané částečně v Cocoa a částečně v Carbonu, ale takový přístup není příliš častý. Hodilo by se také zmínit, že kód napsaný pro Carbon se nedá snadno přenést na žádný jiný systém než Mac OS, a chcete-li tedy psát multiplatformní aplikace, pravděpodobně zvolíte jinou knihovnu.
X11
Mac OS X v základu obsahuje také plně funkční implementaci X Window Systemu, a to ve verzi korespondující s XFree86 4.4. Původní X11 server byl však programátory Applu značně upraven, tak, aby co nejlépe zapadl do pracovního prostředí Mac OS X. Z pohledu aplikace se applovský X server chová úplně stejně jako jeho linuxový bratranec, ale volání programu si vykládá po svém. Pro uživatele je asi nejmarkatnější začlenění X serverem spravovaných oken do systému Quartz, z čehož plyne plná podpora Drag&Drop, všechny pokročilé efekty jako vektorové prvky, podpora Exposé a podobně. Ze systémového hlediska je zase zajímavý způsob správy procesů a možnost běhu v režimu s kořenovým oknem, tedy tak, jak jsme zvyklí z Linuxu. V takovém režimu je možné na Mac OS X provozovat například kompletně celé KDE.
Zatímco Mac OS X samotný žádné X11 aplikace pochopitelně neobsahuje, prakticky celý repertoár Open Source aplikací dostupných na GNU systémech je pro uživatele Mac OS X k dostání v online repositáři projektu Fink, který umožňuje nejen snadnou instalaci a kompilaci programů ze světa Open Source, ale má navíc pěkné klikací rozhraní a udržuje krok s vývojem na obou stranách. Pro běžnější uživatele však osobně Fink příliš nedoporučuji; jednak k mnoha programům existuje nativní port (dokonce i OpenOffice.org budou mít nativní port ve verzi 2.0), jednak se mohou objemy stahovaných a instalovaných dat snadno vyšplhat do astronomických hodnot. Nikdy byste nevěřili, jak velké může být například takové KDE. :)
Správa procesů
Když už jsme si představili všechna hlavní nízko i vysokoúrovňová programová prostředí v Mac OS X, měli bychom si také něco říct o tom, jak se systém vypořádává s takovým množstvím programů z tolika různých zdrojů. Nebude zde řeč o multitaskingu ani o správě virtuální paměti, ale o struktuře stromu procesů z pohledu userspace. I v tom nejjednodušším případě, kdy nám běží jenom nativní aplikace, se musí systém vypořádat s několika nesrovnalostmi ve správě procesů, z nichž mnohé začínají už hluboko v kernelu. Především Mach používá task, který obsahuje jedno nebo více vláken, zatímco BSD kernel používá procesy a k jejich identifikaci má PID (jako v Linuxu). Tento rozdíl je vyřešen abstrakcí na úrovni jádra a uživatel o něm nemusí vůbec vědět, ale na vyšší úrovni přibude další konflikt, a tím je knihovna Carbon. Jak už bylo řečeno, Carbon obsahuje stará API, z nichž mnohá se datují až do dob Mac OS 8; je tedy jenom logické, že knihovna fungující na dvou diametrálně odlišných systémech ma vlastní mechanismus identifikace procesů zvaný Carbon Process Manager. Identifikační označení se nazývá PSN (Process Serial Number) a je tvořeno šesti nebo sedmimístným dekadickým číslem. Z důvodů víceméně historických tedy všechny aplikace používající Carbon mají takové číslo, které se zobrazuje společně s PID ve výpisu z příkazu ps. Běží-li například oficiální ICQ klient (HydroCarbon aplikace), příkaz ps -axw | grep icq
odhalí toto:
Atris:~ adam$ ps -axw | grep icq
834 ?? S 0:03.81 /Applications/Web, Mail & IM/ICQ 3.4 /Applications/Web, Mail & IM/ICQ 3.4 -psn_0_4063233
Pomocí některých funkcí knihovny Carbon lze z PSN získat korespondující PID a naopak, je ale důležité si uvědomit, že za jedním PSN se může skrývat více PID (vzácný případ) a za jedním PID více PSN (to už je častější). Navíc ne všechny procesy v Mac OS X mají PSN. Běží-li například prostředí Classic, vícero programů v něm běží pod jedním BSD procesem. A pokud vám připadá, že je toho zmatku málo, představte si, že ještě běží několik X11 aplikací, které jsou obaleny procesy applet hiearchicky řazenými pod instanci X serveru, a uprostřed toho ještě několik Java appletů, všechny pod jedním BSD procesem. Samozřejmě situace vypadá horší, než ve skutečnosti je. Java běží pod jedním procesem na všech systémech, řešení X11, i když není hezké, dává smysl a Classic nejspíš jinak vyřešit nešel, ale i přestože můžete PSN ve většině případů prostě ignorovat, přidává do systému jistý matoucí element, kterému možná bylo lepší se vyhnout.
Tímto dílem jsme probrali prakticky všechny důležité frameworky a prostředí a příště se můžeme podívat na multimediální komponenty systému. Dostane se na zvukový podsystém CoreAudio, na grafické API CoreImage&CoreVideo a také na framework QuickTime, těšte se příští týden!