Rozszerzenie (MacOS)
W klasycznym systemie Mac OS (oryginalny system operacyjny Apple Macintosh ) rozszerzenia były małymi fragmentami kodu, które rozszerzały funkcjonalność systemu. Były uruchamiane początkowo w czasie uruchamiania i obsługiwane przez różne mechanizmy, w tym łatanie pułapek i inne techniki modyfikowania kodu. Początkowo hack deweloperski Apple, rozszerzenia stały się standardowym sposobem zapewnienia modułowego systemu operacyjnego. Duże ilości ważnych usług systemowych, takich jak stosy sieciowe TCP/IP (MacTCP i Open Transport) oraz obsługa USB i FireWire, były komponentami opcjonalnymi zaimplementowanymi jako rozszerzenia. Wyrażenie „rozszerzenie systemu” zaczęło później obejmować również aplikacje działające w tle bez twarzy .
Rozszerzenia generalnie pełniły tę samą rolę, co programy rezydentne DOS -a typu „zakończ i pozostań ” lub demony systemu Unix , chociaż poprzez łatanie podstawowego kodu systemu operacyjnego miały one możliwość modyfikowania istniejącego zachowania systemu operacyjnego, a pozostałe dwa nie. [ wątpliwe ]
Mechanizm INIT
Koncepcja rozszerzeń nie była obecna w oryginalnym oprogramowaniu systemu Macintosh, ale mimo to system miał prywatny mechanizm łatania, z którego programiści szybko nauczyli się korzystać - program ładujący INIT. Ten kod wyszuka zasoby systemowe typu „INIT”, a następnie załaduje je i uruchomi w czasie rozruchu. Zasoby kodu musiały być przechowywane bezpośrednio w widełkach zasobów walizki systemu Mac , co oznaczało, że były naprawdę dostępne tylko dla „zaawansowanych użytkowników”, którzy mogliby wygodnie korzystać z ResEdit lub innego edytora zasobów.
Ponieważ wykorzystanie tego mechanizmu było nieobsługiwanym włamaniem i w ten sposób można było załadować tylko 32 INIT-y, firma Apple odpowiedziała, udostępniając lepiej zarządzane rozwiązanie. Początkowo samo to miało postać zasobu „INIT” o identyfikatorze 31 umieszczonego w pliku systemowym, który szukałby dalszych plików typu „INIT” w folderze systemowym oraz ładował i uruchamiał w nich zasoby INIT. (To dlatego niektórzy doświadczeni programiści komputerów Mac nadal określają mechanizm ładowania rozszerzeń jako „sztuczkę INIT 31”. INIT-y można teraz instalować po prostu umieszczając plik w folderze systemowym, co mieści się w granicach możliwości przeciętnego użytkownika. 7, rozszerzenia zostały przeniesione do folderu Rozszerzenia w folderze systemowym dla wygody i zaimplementowano mechanizm automatycznego kierowania, dzięki czemu umieszczenie rozszerzenia w folderze systemowym poprzez przeciąganie i upuszczanie faktycznie umieszcza plik w odpowiednim podfolderze.
Rozszerzenia zachowywały typ zasobów „INIT” przez cały okres ich istnienia, a program ładujący był stopniowo ulepszany, aby wyszukiwać te zasoby w wielu miejscach, w tym w rozwidleniach zasobów paneli kontrolnych w różnych formatach oraz w Wybieraczu .
Rozszerzenia
po drodze dodatkowe protokoły ad hoc , takie jak dostarczanie ikony wyświetlanej podczas uruchamiania (początkiem tego było „ShowINIT”). „Parada puzzli i ikon” na ekranie podczas ładowania każdego rozszerzenia stała się znana wszystkim użytkownikom komputerów Mac. Firma Apple ostatecznie wydała główne (ale opcjonalne) elementy systemu operacyjnego jako rozszerzenia, takie jak QuickTime , QuickDraw 3D i wiele innych. Znaczna liczba usług i sterowników w systemie Mac OS - zarówno oficjalnych, jak i innych firm - była dostarczana jako rozszerzenia, co pozwalało na ograniczenie systemu operacyjnego poprzez ich wyłączenie.
Rozszerzenia systemowe były częstym źródłem niestabilności na komputerach Macintosh, ponieważ kod innych firm miał różną jakość i często łatał system w sposób, który nie zawsze działał poprawnie. Niektóre rozszerzenia nie działały poprawnie razem lub działały tylko po załadowaniu w określonej kolejności. Ponadto różne rozszerzenia mogą próbować załatać tę samą część systemu, co może prowadzić do konfliktów rozszerzeń i innych niestabilności. Wyśledzenie tych źródeł problemów było kolejnym zadaniem, z którym spotkała się większość użytkowników komputerów Mac. Rozwiązywanie problemów z rozszerzeniami systemu Mac OS może być czasochłonnym procesem dzielenia na pół oraz prób i błędów .
Najprostszym sposobem czystego rozruchu systemu operacyjnego było przytrzymanie klawisza Shift: ładowanie rozszerzeń zostałoby pominięte. System 7.5 dodał Menedżera rozszerzeń , który umożliwiał użytkownikowi szybkie włączanie i wyłączanie poszczególnych rozszerzeń, a także definiowanie ich zestawów, które będą ze sobą poprawnie współpracować. Menedżer rozszerzeń był dostarczany z dwoma zestawami podstawowymi tylko do odczytu: jednym, który zawierał podzbiór rozszerzeń potrzebnych do podstawowej obsługi systemu operacyjnego, oraz drugim, który włączał wszystkie oficjalne rozszerzenia dostarczane z systemem operacyjnym, ale wyłączał wszystkie rozszerzenia innych firm.
Kolejność ładowania rozszerzeń była efektem ubocznym funkcji GetFInfo, która była używana przez program ładujący do wyliczania plików w folderze Rozszerzenia. Podczas gdy firma Apple zawsze twierdziła, że kolejność wynikająca z wyliczania plików za pomocą tej funkcji jest niezdefiniowana, na woluminach HFS ta funkcja wyliczała pliki w kolejności przechowywanej w katalogu HFS. Ludzie zorientowali się, że zmiana pierwszego znaku w nazwie pliku może zmienić kolejność ładowania rozszerzeń, co spowodowało problemy, gdy system Mac OS 8.1 został przeniesiony do HFS+. Skończyło się na tym, że Apple musiał zmienić program ładujący, aby posortować nazwy plików zwracane przez tę funkcję w tabeli, i udostępnił interfejs umożliwiający oprogramowaniu zmianę tabeli.
Panele konfiguracyjne i sterujące
Rozszerzenia systemowe nie miały interfejsu użytkownika: nie było standardowego mechanizmu, za pomocą którego użytkownik mógłby konfigurować usługi świadczone przez rozszerzenie. Rozszerzenia mogły zmieniać interfejs graficzny (np. dodawać nowe menu do paska menu), a tym samym akceptować konfigurację użytkownika, lub mogła im towarzyszyć aplikacja zapewniająca interfejs konfiguracyjny.
W Systemie 7 panele kontrolne stają się oddzielnymi wtyczkami Findera na dysku, które mogą być uruchamiane przez użytkownika. Dzięki wstawieniu kodu INIT do panelu sterowania stało się możliwe zbudowanie hybrydy rozszerzenia/panelu sterowania, które modyfikowały system operacyjny podczas uruchamiania i zawierały własny wbudowany interfejs konfiguracyjny w takiej samej formie, jak każdy inny panel sterowania systemu operacyjnego.
Beztwarzowe aplikacje działające w tle
MultiFinder i System 7 oraz nowsze wersje obsługiwały beztwarzowe aplikacje działające w tle , podobne do demonów systemu UNIX lub usług systemu Windows , chociaż korzystały z wielozadaniowości opartej na współpracy . Przykłady obejmowały Synchronizator czasu ( czasu letniego i zdalna synchronizacja czasu), Harmonogram aktualizacji oprogramowania i Akcje folderów (obsługa zdarzeń w folderze). Beztwarzowe aplikacje działające w tle były zwykłymi aplikacjami z zastrzeżeniem, że nie pojawiały się w menu aplikacji. ROZMIAR
” ustawiono flagę „Tylko tło” . Nie wolno im było otwierać normalnego okna na poziomie aplikacji: gdyby to zrobili, system by się zawiesił.
Mogli jednak swobodnie otwierać globalne pływające okna, ponieważ nie mogły one ani zyskać, ani stracić ostrości. Pasek kontrolny w systemach Mac OS 8 i 9 był przykładem aplikacji działającej w tle bez twarzy, która wyświetlała globalne pływające okno, aby zapewnić interakcję użytkownika. Przełącznik aplikacji był inny. Jednak użytkownik w żadnym momencie nie był świadomy, że pasek kontrolny był uruchomionym procesem; została po prostu przedstawiona jako dodatkowa funkcja interfejsu. System po prostu opisał aplikacje działające w tle bez twarzy jako „aplikacje systemowe”. [ potrzebne źródło ]
Funkcje językowe w Open Scripting Architecture (a tym samym AppleScript ) zostały początkowo zaimplementowane jako dynamicznie ładowane wtyczki znane jako „dodatki do skryptów” lub OSAX. W systemach Mac OS 8 i 9 zostały one rozszerzone przez beztwarzowe aplikacje działające w tle, które były ładowane w tle na żądanie. Podobnie jak w przypadku zwykłych aplikacji, dostęp do tych aplikacji uzyskiwano za pomocą tell
: globalna przestrzeń nazw nie była aktualizowana, jak w przypadku OSAX. System operacyjny nie wskazywał uruchomienia takich procesów ani nie wskazywał, czy są uruchomione.
Inne rozszerzenia inne niż INIT
Rozszerzenia typu INIT zostały załadowane podczas uruchamiania w celu aktualizacji systemu operacyjnego. Co mylące, w folderze Rozszerzenia można było również umieścić różne inne pliki, z których wiele nie zostało załadowanych podczas uruchamiania. Najbardziej godnymi uwagi z nich były biblioteki współdzielone , które były zwykle umieszczane w folderze Rozszerzenia w celu ułatwienia lokalizacji. Biblioteki współdzielone nie zostały załadowane podczas uruchamiania.
Pliki typu INIT nie były jedynym typem rozszerzenia systemu. Innym typem było scri , czyli rozszerzenie WorldScript. Program BootX Linux został zaimplementowany jako scri , po prostu takie pliki były ładowane na bardzo wczesnym etapie procesu rozruchu, przed wszystkimi innymi rozszerzeniami. BootX może następnie wyświetlić okno dialogowe oferujące użytkownikowi dokończenie uruchamiania systemu Mac OS lub zamiast tego załadowanie Linuksa.