Кіріспе

Классикалық Mac OS (алғашқы Apple Macintosh операциялық жүйесі) кеңейтулер жүйенің мүмкіндіктерін кеңейтетін шағын код бөліктері болды. Олар жүйе іске қосылғанда бастапқыда орындалды және түрлі механизмдер арқылы жұмыс істеді, соның ішінде кодты түзету (trap patching) және басқа да кодты өзгерту техникалары. Бастапқыда Apple әзірлеушілерінің тәжірибесі болған кеңейтулер модульдік операциялық жүйені ұсынудың стандартты тәсіліне айналды. TCP/IP желілік стектері (MacTCP және Open Transport) және USB және FireWire қолдауы сияқты маңызды жүйелік қызметтердің көп бөлігі кеңейтулер ретінде жүзеге асырылған қосымша компоненттер болды. "Жүйелік кеңейту" термині кейіннен фондық процестерді де қамтуға бастады. Кеңейтулер, әдетте DOS-тың тоқтату және тұрақты резиденттік бағдарламаларымен немесе Unix-тың демонды бағдарламаларымен бірдей рөл атқарды, бірақ негізгі операциялық жүйе кодын өзгерту арқылы, олар қолданыстағы операциялық жүйенің әрекетін өзгертуге қабілетті болды, ал қалған екеуі мұндай мүмкіндікке ие емес еді.

INIT тетігі

Кеңейтулер тұжырымы Macintosh жүйесінің бастапқы бағдарламалық жасақтамасында болған жоқ, бірақ жүйеде жеке түзету механизмі болды, сонымен бірге әзірлеушілер INIT жүктеушісін пайдалануды үйренді. Бұл код "INIT" типіндегі жүйелік ресурстарды іздеп, жүктеу және жүйе қосылғанда оларды іске қосатын. Код ресурстары Mac System suitcase-тің ресурс бөлімінде тікелей сақталуы керек еді, яғни ол тек ResEdit немесе басқа ресурс редакторын пайдалануға дағдылы "күшті пайдаланушыларға" ғана қолжетімді болды. Бұл механизмді пайдалану қолдау көрсетілмейтін хакерлік әрекет болғандықтан және осылай тек 32 INIT жүктеуге болатындықтан, Apple компаниясы жауап ретінде басқарылатын шешім ұсынды. Бастапқыда бұл жүйелік файлда ID 31 нөмірімен орналасқан "INIT" типті ресурс болды, ол жүйелік папкадағы "INIT" типіндегі қосымша файлдарды іздеп, олардың ішіндегі INIT ресурстарын жүктеп, іске қосатын. (Осы себепті кейбір тәжірибелі Mac бағдарламашылары кеңейтулерді жүктеу механизмін "INIT 31 амалы" деп атайды. INIT енді жүйелік папкаға файлды орналастыру арқылы орнатылуы мүмкін болды, бұл орташа пайдаланушының мүмкіндіктері шегінде. System 7 нұсқасынан бастап кеңейтулер ыңғайлы болу үшін жүйелік папкадағы "Extensions" папкасына көшірілді, сондай-ақ автоматты бағыттау механизмі енгізілді, сондықтан кеңейтуді жүйелік папкаға сүйреп тастау арқылы файл тиісті қосалқы папкаға орналастырылатын. Кеңейтулер өмір бойы "INIT" ресурс типін сақтап келді, ал жүктеуші осы ресурстарды көптеген орындарда іздеу үшін біртіндеп жаңартылды, соның ішінде әртүрлі форматтағы басқару панельдерінің ресурс бөлімдерінде және Chooser-де.

Ұзартулар

INIT жүйелік кеңейтулерге айналды, соның ішінде қосымша арнайы хаттамалар пайда болды, мысалы, жүктелу кезінде көрсетілетін белгішені беру (оның бастауы "ShowINIT" болған). Әрбір кеңейту жүктеліп жатқанда экрандағы «бөлшектер мен белгішелер шеруі» барлық Mac пайдаланушыларына таныс болды. Apple өзі де операциялық жүйенің маңызды (бірақ қосымша) бөліктерін кеңейтулер ретінде шығарды, мысалы QuickTime, QuickDraw 3D және тағы да басқалары. Mac OS-тегі көптеген қызметтер мен драйверлер – ресми және үшінші тараптан – кеңейтулер түрінде ұсынылды, бұл оларды өшіру арқылы жүйенің көлемін кішірейте беруге мүмкіндік берді. Жүйелік кеңейтулер Macintosh-та тұрақсыздыққа себеп болатын жиі кездесетін мәселе болды, себебі үшінші тараптың кодының сапасы әртүрлі болды және олар жүйені дұрыс жұмыс істемейтін тәсілдермен өзгертуге тырысты. Кейбір кеңейтулер бір-бірімен үйлесімсіз жұмыс істеді немесе тек белгілі бір ретпен жүктелгенде ғана жұмыс істеді. Сонымен қатар, әртүрлі кеңейтулер жүйенің бір бөлігін өзгертуге тырысуы мүмкін, бұл кеңейтулердің қақтығысына және басқа тұрақсыздықтарға әкелуі мүмкін. Бұл мәселелерді анықтау – көптеген Mac пайдаланушылары кездесетін тағы бір қиындық болды. Mac OS кеңейтулерін жөндеу – уақытты көп алатын, екіге бөліп, сынақтар мен қателер арқылы іздеу процесі болуы мүмкін. Жүйені таза күйінде жүктеудің ең оңай жолы – Shift пернесін басып тұру: кеңейтулерді жүктеу процесі өткіріліп тасталады. System 7.5 кеңейтулерді басқарушыны (Extensions Manager) қосты, ол пайдаланушыға белгілі бір кеңейтулерді жылдам қосуға немесе өшіруге, сондай-ақ бір-бірімен дұрыс жұмыс істейтін жиынтықтарды анықтауға мүмкіндік берді. Extensions Manager екі оқуға арналған базалық жиынтықпен бірге келді: біреуі жүйенің негізгі жұмысы үшін қажетті кеңейтулердің кіші жиынтығын қамтиды, ал екіншісі жүйемен бірге келген барлық ресми кеңейтулерді қосты, бірақ барлық үшінші тарап кеңейтулерін өшірді. Кеңейтулерді жүктеу реті – GetFInfo функциясының жанама салдары болды, жүктеуші осы функцияны Кеңейтулер бумасындағы файлдарды санау үшін пайдаланды. Apple әрқашан осы функцияны пайдаланып файлдарды санау нәтижесіндегі рет анықталмаған десе де, HFS томдарында бұл функция HFS каталогында сақталған ретпен файлдарды санады. Адамдар файл атауының бірінші таңбасын өзгерту кеңейтулерді жүктеу ретін өзгерте алатынын анықтады, бұл Mac OS 8.1 HFS+ жүйесіне көшкенде қиындықтар тудырды. Apple осы функциямен қайтарылған файл атауларын кестеге сұрыптау үшін жүктеушіні өзгертуге мәжбүр болды және бағдарламалық жасақтамаға кестені өзгертуге мүмкіндік беретін интерфейс ұсынды.

Конфигурация және басқару панельдері

Жүйелік кеңейтулерде пайдаланушы интерфейсі болмады: кеңейтумен ұсынылатын қызметтерді пайдаланушы баптауға арналған стандартты механизм жоқ еді. Кеңейтулер графикалық интерфейсті өзгерте алатын (мысалы, мәзір жолағына жаңа мәзірлер қосу арқылы) және осылайша пайдаланушы конфигурациясын қабылдай алатын, немесе конфигурациялық интерфейсті ұсынатын қосымшамен бірге келе алатын. System 7-мен бірге басқару панельдері дискідегі жеке Finder плагиндеріне айналды, оларды пайдаланушы іске қоса алатын. Басқару панеліне INIT кодын енгізу арқылы, жүктелу кезінде операциялық жүйені өзгертетін және кез келген басқа операциялық жүйенің басқару панелі сияқты өз құрамында конфигурациялық интерфейсі бар кеңейту/басқару панелі гибридтерін жасау мүмкін болды.

Бетсіз фонды қолдану

MultiFinder және System 7 және одан кейінгі нұсқалары UNIX даемондары немесе Windows қызметтері сияқты интерфейсі жоқ аядағы қолданбаларды қолдады, бірақ кооперативтік көп тапсырмалылықты пайдаланды. Мысалдарға Time Synchronizer (күндізгі уақытты түзету және қашықтан уақытты синхрондау), Бағдарламалық жасақтаманы жаңарту кестесі және Папка әрекеттері (папка оқиғаларын өңдеу) кіреді. Интерфейсі жоқ аядағы қолданбалар – бұл қолданбалар мәзірде көрсетілмейтін шектеумен бірге, әдеттегі қолданбалар болатын. Интерфейсі жоқ аядағы қолданба мен әдеттегі қолданба арасындағы жалғыз техникалық айырмашылық – 'SIZE' ресурсының ішіндегі "тек аяда" деген белгі қойылған. Оларға әдеттегі қолданба деңгейіндегі терезені ашуға тыйым салынған: егер олар мұны істесе, жүйе тоңып қалатын. Дегенмен, олар назарды ала да, жоғалта да алмайтын жаһандық қалқымалы терезелерді ашуға құқылы болды. Mac OS 8 және 9-дағы Control Strip – пайдаланушымен өзара әрекеттесуді қамтамасыз ету үшін жаһандық қалқымалы терезені көрсеткен интерфейсі жоқ аядағы қолданбаның мысалы еді. Қолданбаларды ауыстыру да сондай болатын. Алайда, пайдаланушы Control Strip-тің жұмыс істеп тұрған процесс екенін білмеді; ол жай ғана қосымша интерфейс мүмкіндігі ретінде ұсынылды. Жүйе интерфейсі жоқ аядағы қолданбаларды жай ғана "жүйелік қолданбалар" деп сипаттады. Ашық скрипт архитектурасындағы (және демек AppleScript) тілдік мүмкіндіктер бастапқыда "скрипт қосымшалары" немесе OSAXes деп аталатын динамикалық түрде жүктелетін плагиндер ретінде жүзеге асырылды. Mac OS 8 және 9-да бұларға қажет болғанда аяда жүктелетін интерфейсі жоқ қолданбалар қосылды. Әдеттегі қолданбалар сияқты, осы қолданбаларға tell операторларын пайдаланып қол жеткізілді: OSAXes-тегідей жаһандық атау кеңістігі жаңартылмады. Операциялық жүйе мұндай процестердің іске қосылғанын немесе олардың жұмыс істеп жатқанын көрсетпеді.

INIT-тен тыс басқа кеңейтулер

INIT типті кеңейтулер операциялық жүйені жаңарту үшін жүктелу кезінде жүктелді. Ұқсас жағдайларда, Extensions папкасына басқа да файлдар орналастырылуы мүмкін еді, олардың көпшілігі жүктелу кезінде жүктелмейтін. Олардың ең маңыздысы – оңай іздеу үшін Extensions папкасына жиі орналастырылатын ортақ кітапханалар. Ортақ кітапханалар жүктелу кезінде жүктелмейтін. INIT типті файлдар ғана жүйелік кеңейту емес. Тағы бір түрі – scri, немесе WorldScript кеңейтімі. BootX Linux жүктеуіші scri ретінде іске асырылды, себебі мұндай файлдар жүктелу процесінің өте басында, басқа кеңейтулерге дейін жүктеледі. BootX содан кейін пайдаланушыға Mac OS жүктеуді аяқтауға немесе Linux жүктеуге рұқсат беру үшін диалог көрсетуге мүмкіндік берді.