„Wszystko już było” czyli zanim nienawistnicy i zwolennicy przejścia na ARM zaczną „wytaczać” swoje argumenty sprawdźmy jak z tym kiedyś bywało.

W drugiej części napisałem o moich nadziejach i obawach w związku z domniemaną zmianą architektury procesorów jakie Apple być może zastosuje w swoich komputerach.

Wszystko już było!

Wielu z Was poznało komputery Apple gdy ich sprzętowym „sercem” stały się procesory Intela. Niektórzy wiedzą, że kiedyś sercem komputerów Apple były procesory PowerPC ale raczej niewielu sobie przypomina, że przed PowerPC były jeszcze inne: Motoroli.

Przejście pierwsze

Gdy pojawił się Macintosh (a wcześniej Lisa [1983]) najciekawszym dostępnym procesorem była Motorola 68000 udostępniona w 1979 roku. Taka sama jak w Amigach i Atari ST już później. Był to jak na tamte czasy ultranowoczesny procesor 32–bitowy. Szynę danych miał 16 bitową ale wszystkie rejestry 32 bitowe. Szyna adresowa była ograniczona do 24 (23) bitów co pozwalało na adresowanie do 16 MB pamięci RAM (we wczesnych latach 80. XX w. była to wielkość ogromna). Wybór rodziny procesorów (Motorola nie była pierwszym rozważanym do użycia w Macintoshach układem) był bardzo mądry i wystarczył na wiele bo aż 10 lat. Ostatnim z używanych w Macintoshach procesorów tej linii był 68xx040.

Niestety na początku lat 90 XX w. Motorola podała, że ostatnim planowanym procesorem serii 68xxxx będzie 68060 co postawiło Apple przed koniecznością wyboru następny. Rozważane było użycie Motoroli M88000 (RISC) jednak wybrano wspólne dzieło IBM, Motoroli (z pewnym udziałem Apple). PowerPC były oparte w dużej mierze na architekturze Power stosowanej w „dużych” komputerach IBM. Firmom udało się „zminiaturyzować”, przerobić i dostosować do wymagań komputerów osobistych tą architekturę, wynikiem czego były bardzo nowoczesne i szybkie układy RISC (choć moim zdaniem nie do końca RISC bo listę rozkazów miały raczej pokaźną). Decyzja decyzją, ultranowoczesne procesory OK ale co ze zgodnością?

Dobrze pamiętam jak na jednym ze spotkań sprzedawców w SADzie (jakoś w 1993 roku) „w tajemnicy” powiedziano nam, że Apple z innymi firmami (ponoć IBM) pracuje nad nowymi procesorami do komputerów. Wtedy brzmiało to trochę jak herezja (zwłaszcza ten IBM) ;-)

Oczywiście procesory PowerPC nie były zgodne z M68xxxx i coś z tym fantem Apple musiał zrobić. Poradził sobie z problemem wzorcowo! W systemach przeznaczonych dla Macintoshy z PowerPC czyli od System 7.1.2, Apple wbudował bardzo sprawny emulator Motoroli 68xxxx. Emulator w połączeniu ze sprytnie napisanym Systemem pozwalał na uruchamianie prawie wszystkich programów opracowanych za czasów Motoroli i to z prędkością zazwyczaj większą niż na oryginalnych procesorach. Ponieważ wywołania funkcji systemowych w klasycznych systemach Apple odbywało się na zasadzie „Pułapek” (Trap), System mógł bardzo sprawnie przełączać się między emulowanym kodem Motoroli, a funkcjami Systemu napisanymi już dla PowerPC (co dodatkowo zwiększało prędkość pracy „starych” programów. Emulacja z kolejnymi wersjami systemu była dopracowywana (z czasem wprowadzono rekompilację). Z ciekawostek: emulator był tak sprawny, że na początku tylko niewielkie części systemu były przepisane dla PowerPC! Jeszcze ostatnie wersje systemów klasycznych miały w sobie spore części kodu Motoroli, a wielu programistów nie przepisywało całego programu dla PowerPC, a jedynie najbardziej procesożerne jego fragmenty.

Apple wprowadzał do oferty nowe komputery na Motoroli i na PowerPC jednocześnie jeszcze przez dwa lata (1994-1995). Najwyższym systemem od Apple przeznaczonym na komputery z Motorolą był Mac OS 8.1 z 1998 roku (czyli 3 lata po wprowadzeniu ostatniego modelu Maczka z Motorolą do oferty).

Dobrze pamiętam i wspominam ten okres bo to właśnie wtedy na poważnie zaczęła się moja przygoda z Apple (o czym napisałem tu: Moje Pierwsze Macintoshe (retro-kącik)

Procesory PowerPC były zadowalające do początków dominacji komputerów przenośnych czyli wystarczyły na 12 lat (1994-2006).

Wnętrze komputera PowerMac G3 Wnętrze komputera PowerMac G3
fot. własna

Przejście jeden i pół

Musimy zaznaczyć, że za panowania PowerPC w Apple miała miejsce kolejna rewolucja. Na przełomie wieków nastąpiła zmiana z przestarzałych już w tym czasie systemów klasycznych na ultranowoczesne oparte na NeXT Step (tak, tym od komputerów Jobsa NeXT) i UNIX (BSD). To też nie było łatwe. A nawet dla użytkowników i programistów trudniejsze. Co prawda programiści dostali od Apple nową platformę SDK zwaną Carbon, która była wspólna dla systemów klasycznych i „Dziesiątek” lecz pracy i tak mieli sporo. Głównym SDK w systemie OS X jest Cocoa i pod nią docelowo programy miały być „przepisane” lub napisane od nowa.

Nawet teraz w 10.10 Yosemite używam programu napisanego jeszcze w API Carbona… jest nim FileMaker 9.

Użytkownicy dostali możliwość uruchamiania w systemach „X” klasycznego środowiska aby zachować zgodność se starymi programami. Wyglądało to dość ciekawie, bo na ekranie mieszał się nowoczesny landrynkowo-glutowaty interfejs programów dla „X” ze staroświeckim kanciastym interfejsem programów „klasycznych”. Dodatkowo przy zmianie aplikacji zmieniało się menu i wiele funkcji. Ale programy działały. Tym które jednak stawiały opór dano kolejną szansę. Tą szansą było uruchomienie komputera pod pełną kontrolą systemu klasycznego (Mac OS 9.x). Wyglądało to jak teraz Boot Camp dla Windows. System zmieniało się po restarcie komputera. Ostatnim Macintoshem jaki mógł być uruchamiany z systemu klasycznego był bodaj Power Macintosh G4 (Quicksilver) z 2002.

Przejście drugie

PowerPC zaczął sprawiać problemy gdy Applowi nie udało się wymusić na IBM opracowania energooszczędnej wersji PowerPC G5. W komputerach biurkowych G5 (iMac G5 i PowerMac G5) dawał znaczny przyrost prędkości pracy. PowerPC G4 stosowany w MacBookach i iBookach zauważalnie odstawał wydajnością (ale zużywał znacznie mniej prądu od potężnych G5).

PowerBook G3 PowerBook G3 (czarne) 
fot. własna

Plotki o przejściu na procesory Intela pojawiały się co jakoś czas lecz od razu były traktowane jak herezja. Nasiliły się po wypuszczeniu przez Apple dostępnego publicznie systemu Darwin (coś jak jądro OS X ale bez środowiska graficznego i UI) w wersji na procesory Intela. Jednak dopiero na wiosnę 2005 roku natężenie plotek zaczęło budzić moje obawy… i stało się. 6 czerwca 2005 podczas WWDC Jobs potwierdził, że od kilku lat w ukryciu (bardzo dobrym zresztą) pracowali nad wersją Mac OS X na procesory Intela i, że z początkiem 2006 roku wprowadzają pierwsze komputery z tymi procesorami. Oczywiście były to MacBook Pro (już nie PowerBook). Zaraz po konferencji wybrani deweloperzy mogli wypożyczyć od Apple (za opłatą ~1000$) prototypowe komputery na Intelu z wczesną wersją systemu Mac OS X 10.4(?). Jako firmę pokazującą jak łatwo jest „przerobić” swoje obecne programy na wersje Intelowe wybrano Wolfram i ich Mathematica. Ponoć przeróbka zajęła im „kilka godzin”, a efekt pracy w postaci szybkości działania przerósł oczekiwania. Oczywiście łatwo mieli tylko programiści używający do „deweloperki” XCode od Apple. Inni musieli najpierw przenieść swoje projekty do środowiska XCode. Sama zamiana architektury nie była już tak prosta jak przejście z Motoroli na PowerPC. Wtedy przejście przebiegało pomiędzy starszą lecz uporządkowaną platformą na nowszą też poukładaną. Teraz należało przejść z uporządkowanego, nowoczesnego PowerPC na szybką lecz ciągnącą garba zaszłości platformę Intela (uzasadnienie mojej opinii o Intelu znajdziecie w następnej części już niebawem). Problem sprawiać mogło przekazywanie wartości do funkcji przez stos, a nie przez rejestry jak w PowerPC (PPC mają znacznie więcej identycznych rejestrów niż Intele). Przekazywanie przez stos umożliwia również ataki hackerskie zwane „przepełnieniem stosu” przed którymi na Intelu trzeba się programowo i sprzętowo zabezpieczać. Kolejny problem to odwrotna kolejność bitowa stosowana w obu rodzinach procesorów do komunikacji z pamięcią i zapisywania danych. Nowoczesne architektury Motoroli i PowerPC zapisują dane zaczynając od bardziej znaczącego bajtu (tak jak my podczas zapisywania liczb), a „zacofane” Intele zapisują najpierw mniej znaczący bajt. Coś jak Niemcy: 21 – einundzwanzig (jeden i dwadzieścia) ;-) Dla ścisłości: PowerPC od G4 i ARM od wersji 3 potrafią pracować w obu trybach.

OK, ale te problemy dotyczyły programistów. Co z użytkownikami? Apple i tym razem zadbał aby w systemie znalazła się możliwość uruchamiania aplikacji napisanych dla PowerPC na Intelu. Za tą funkcjonalność odpowiadała Rosseta. Podczas WWDC 2005 Jobs prezentował jak żwawo pracuje Photoshop dla PPC na „Intelowym” Maczku właśnie dzięki Rossecie.

Rosetta. The most amazing software you'll never see Rosetta. Najbardziej niesamowite oprogramowanie, którego nigdy nie zobaczysz. 

Zdjęcia pochodzą z zapomnianych stron na serwerze Apple dla Azji. Sami zobaczcie: Rosseta

Nie był to tak głęboko w systemie zagrzebany emulator jak ten dla Motoroli na PowerPC ale nie musiał. Cały system był w pełni skompilowany na procesory Intela. Jednak wszelkie rozszerzenia systemu czy aplikacje dodające własne tablice kontrolne musiały być robione w wersji dla tych nowych procesorów. Rosseta dynamicznie konwertowała kod PowerPC i potrafiła go „magazynować” w celu późniejszego użycia już bez ponownej translacji. Większość programów dla PowerPC na Intelowych Maczkach za pierwszym razem uruchamiała się wolniej aby już przy kolejnych uruchomieniach pracować zauważalnie szybciej. Ostatnią wersją OS X, która mogła uruchamiać aplikacje dla PowerPC była 10.6 (Rossetę należało w nim doinstalować). Od 10.7 nie mamy już możliwości uruchamiania programów dla PowerPC i chyba nikomu z Was już to nie przeszkadza.

Warto jeszcze nadmienić, że ostatnim systemem dla procesorów PowerPC był Mac OS X 10.5 udostępniony pod koniec 2007 roku, a pierwszy niedziałający na PowerPC to 10.6 z połowy 2009 roku

I to tyle tytułem wstępu. Niebawem w drugiej części pozwolę sobie opisać moje obawy i nadzieje związane z ewentualnym przejściem Apple na procesory o architekturze ARM.