В классической Mac OS (оригинал Apple Операционная система Macintosh ), расширения были небольшими фрагментами кода, расширяющими функциональность системы. Первоначально они запускались при запуске и управлялись различными механизмами, включая trap patching и другие методы модификации кода. Изначально разработанные компанией Apple, расширения стали стандартным способом создания модульной операционной системы. Большое количество важных системных служб, таких как сетевые стеки TCP / IP (MacTCP и Open Transport), а также поддержка USB и FireWire, были дополнительными компонентами, реализованными как расширения. Выражение «расширение системы» позже стало также включать безликие фоновые приложения.
Расширения обычно выполняли ту же роль, что и программы DOS и остаются резидентными или демоны Unix , хотя, исправляя базовый код ОС, они имели возможность изменять существующее поведение ОС, два других - нет.
Концепция расширений не присутствовала в исходном системном программном обеспечении Macintosh, но система, тем не менее, имела частный механизм исправления, которым разработчики вскоре научились пользоваться - загрузчик INIT. Этот код будет искать системные ресурсы типа INIT, а также загружать и запускать их во время загрузки. Ресурсы кода должны были храниться непосредственно в ветке ресурсов Mac System Suitcase, а это означало, что он действительно был доступен только «опытным пользователям», которым удобно пользоваться ResEdit. или другой редактор ресурсов.
Поскольку использование этого механизма было неподдерживаемым взломом и таким образом можно было загрузить только 32 INIT, Apple ответила, предоставив более управляемое решение. Первоначально это само по себе было в форме ресурса INIT с идентификатором 31, помещенного в системный файл, который будет искать дополнительные файлы типа INIT в системной папке, а также загружать и запускать ресурсы INIT внутри их. (Вот почему некоторые опытные программисты Mac до сих пор называют механизм загрузки расширений "уловкой INIT 31". Теперь INITs можно было установить, просто поместив файл в системную папку, что вполне доступно среднему пользователю. Начиная с System 7, расширения были перемещены в папку Extensions внутри системной папки для удобства, и был реализован механизм автоматической маршрутизации, так что размещение расширения в системной папке с помощью перетаскивания фактически помещало файл в папку соответствующая вложенная папка.
Расширения сохраняли тип ресурса 'INIT' на протяжении всего своего жизненного цикла, и загрузчик постепенно улучшался для поиска этих ресурсов во многих местах, в том числе в ответвлениях ресурсов панелей управления в различных форматах а Chooser.
INIT превратились в системные расширения, получив дополнительные специальные протоколы, например, добавив значок для отображения во время загрузки ( происхождение этого w как ShowINIT). «Парад частей головоломки и значков» на экране при загрузке каждого расширения стал знаком всем пользователям Mac. Сами Apple в конечном итоге выпустила основные (но необязательные) части операционной системы в виде расширений, такие как QuickTime, QuickDraw 3D и многие другие. Существенное количество сервисов и драйверов в Mac OS - как официальных, так и сторонних - было предоставлено в виде расширений, что позволяло урезать ОС путем их отключения.
Системные расширения были обычным источником нестабильности на Macintosh, поскольку сторонний код имел переменное качество и часто исправлял систему способами, которые не всегда работали правильно. Некоторые расширения не работали должным образом вместе или работали только при загрузке в определенном порядке. Кроме того, разные расширения могут пытаться исправить одну и ту же часть системы, что может привести к конфликтам расширений и другой нестабильности. Выявление этих источников проблем было еще одной задачей, с которой в какой-то момент столкнулось большинство пользователей Mac. Устранение неполадок с расширениями Mac OS могло быть длительным процессом деления пополам и проб и ошибок.
. Самый простой способ чистой загрузки операционной системы - удерживать клавишу Shift: загрузка расширений быть обойденным. Система 7.5 добавила Менеджер расширений, который позволял пользователю быстро включать или отключать определенные расширения, а также определять их наборы, которые будут правильно работать вместе. Extensions Manager поставлялся с двумя предоставленными базовыми наборами только для чтения: один содержал подмножество расширений, необходимых для базовой работы ОС, а другой включал все официальные расширения, поставляемые с ОС, но отключал все сторонние расширения.
Порядок загрузки расширений был побочным эффектом функции GetFInfo, которая использовалась загрузчиком для перечисления файлов в папке Extension. Хотя Apple всегда заявляла, что порядок, который возникает в результате перечисления файлов с помощью этой функции, не определен, на томах HFS эта функция перечисляет файлы в порядке, хранящемся в каталоге HFS. Люди выяснили, что изменение первого символа в имени файла может изменить порядок загрузки расширений, что вызвало проблемы, когда Mac OS 8.1 перешла на HFS +. В итоге Apple пришлось изменить загрузчик для сортировки имен файлов, возвращаемых этой функцией, в таблицу и предоставил интерфейс, позволяющий программному обеспечению изменять таблицу.
Расширения системы не имел пользовательского интерфейса: не было стандартного механизма, с помощью которого пользователь мог бы настраивать услуги, предоставляемые расширением. Расширения могли изменять графический интерфейс (например, добавлять новые меню в строку меню) и, таким образом, принимать пользовательскую конфигурацию, или они могли сопровождаться приложением для предоставления интерфейса конфигурации.
В System 7, панели управления становятся отдельными плагинами Finder на диске, которые может запускать пользователь. Путем вставки кода INIT в панель управления стало возможным создавать гибриды расширений и панелей управления, которые изменяли операционную систему во время загрузки и содержали свой собственный встроенный интерфейс конфигурации в той же форме, что и любая другая панель управления операционной системы.
MultiFinder и System 7 и более поздние версии поддерживали безликие фоновые приложения, аналогичные демонам UNIX или Windows Services, хотя и с использованием совместной многозадачности. Примеры включали синхронизатор времени (переход на летнее время и удаленная синхронизация времени), планировщик обновлений программного обеспечения и действия с папками (обработка событий папки). Безликие фоновые приложения были обычными приложениями с ограничением, что они не отображались в меню приложений. Единственные технические различия между безликим фоновым приложением и обычным приложением заключались в том, что в ресурсе «SIZE
» был установлен флаг «Только фон». Им было запрещено открывать обычное окно уровня приложения: в противном случае система зависала бы.
Однако они могли открывать глобальные плавающие окна, поскольку они не могли ни получить, ни потерять фокус. Полоса управления в Mac OS 8 и 9 была примером безликого фонового приложения, которое отображало глобальное плавающее окно для взаимодействия с пользователем. Переключатель приложений был другим. Однако пользователь никогда не знал, что контрольная полоса является запущенным процессом; это было просто представлено как дополнительная функция интерфейса. Система просто описывала безликие фоновые приложения как «системные приложения».
Языковые функции в архитектуре открытых сценариев (и, следовательно, AppleScript ) изначально были реализованы как динамически загружаемые плагины, известные как «скриптовые дополнения» или OSAXes. В Mac OS 8 и 9 они были дополнены безликими фоновыми приложениями, которые загружались в фоновом режиме по запросу. Как и в случае с обычными приложениями, доступ к этим приложениям осуществлялся с помощью предложений tell
: глобальное пространство имен не обновлялось, как в случае с OSAX. Операционная система не показывала запуск таких процессов и не указывала, запущены они или нет.
расширения типа INIT были загружены во время загрузки для обновления операционной системы. Как ни странно, в папку Extensions можно было поместить и другие файлы, многие из которых не были загружены во время загрузки. Наиболее заметными из них были разделяемые библиотеки, которые обычно помещались в папку Extensions для облегчения поиска. Общие библиотеки не загружались во время загрузки.
Файлы типа INIT не были единственным типом расширения системы. Другой тип - scri или расширение WorldScript. Загрузчик BootX Linux был реализован как scri, просто такие файлы загружались очень рано в процессе загрузки, раньше всех других расширений. Затем BootX может отобразить диалоговое окно, предлагающее пользователю завершить загрузку Mac OS или вместо этого загрузить Linux.