En el Mac OS clásico (el sistema operativo original de Apple Macintosh ), las extensiones eran pequeños fragmentos de código que extendían la funcionalidad del sistema. Se ejecutaron inicialmente en el momento de la puesta en marcha y se operaron mediante una variedad de mecanismos, incluido el parcheo de trampas y otras técnicas de modificación de código. Inicialmente un truco de desarrollador de Apple, las extensiones se convirtieron en la forma estándar de proporcionar un sistema operativo modular. Grandes cantidades de servicios importantes del sistema, como las pilas de red TCP / IP (MacTCP y Open Transport) y la compatibilidad con USB y FireWire, eran componentes opcionales implementados como extensiones. La frase "extensión del sistema" más tarde llegó a abarcar también las aplicaciones de fondo sin rostro .
Extensiones generalmente llena el mismo papel que DOS 's terminar y permanecer residente programas, o Unix ' s de los demonios , aunque por un parche en el código del sistema operativo subyacente, que tenían la capacidad de modificar el comportamiento del sistema operativo existente, los otros dos no lo hicieron. [ dudoso ]
El mecanismo INIT
El concepto de extensiones no estaba presente en el software del sistema original de Macintosh, pero el sistema, sin embargo, tenía un mecanismo de parcheo privado que los desarrolladores pronto aprendieron a aprovechar: el cargador INIT. Este código buscaría recursos del sistema de tipo 'INIT' y los cargaría y ejecutaría en el momento del arranque. Los recursos de código tuvieron que ser almacenados directamente en el Mac maletín de Sistema 's tenedor de recursos , lo que significa que sólo era realmente disponible para 'usuarios avanzados' que estarían cómodos usando ResEdit u otro editor de recursos.
Dado que aprovechar este mecanismo era un truco no admitido, y solo se podían cargar 32 INIT de esta manera, Apple respondió brindando una solución más administrada. Inicialmente, esto en sí mismo tenía la forma de un recurso 'INIT' con ID 31 colocado en el archivo del sistema que buscaría más archivos de tipo 'INIT' en la carpeta del sistema , y cargaría y ejecutaría recursos INIT dentro de ellos. (Esta es la razón por la que algunos programadores veteranos de Mac todavía se refieren al mecanismo de carga de extensiones como el "truco INIT 31". [1] Los INIT ahora se pueden instalar simplemente colocando un archivo en la carpeta del sistema, dentro de las capacidades del usuario promedio. A partir del Sistema 7, las extensiones se reubicaron en la carpeta Extensiones dentro de la Carpeta del sistema por conveniencia, y se implementó un mecanismo de enrutamiento automático para que la colocación de una extensión en la Carpeta del sistema mediante la función de arrastrar y soltar colocara el archivo en la subcarpeta correspondiente.
Las extensiones retuvieron el tipo de recurso de 'INIT' durante toda su vida, y el cargador se mejoró gradualmente para buscar estos recursos en numerosos lugares, incluso en las bifurcaciones de recursos de los paneles de control en una variedad de formatos y el Selector .
Extensiones
Los INIT evolucionaron hacia extensiones del sistema, obteniendo protocolos ad hoc adicionales a lo largo del camino, como proporcionar un icono para que se muestre en el momento del arranque (el origen de esto fue 'ShowINIT'). El 'desfile de piezas de rompecabezas e íconos' a través de la pantalla a medida que cada extensión cargada se hizo familiar para todos los usuarios de Mac. La propia Apple finalmente lanzó partes importantes (pero opcionales) del sistema operativo como extensiones, como QuickTime , QuickDraw 3D y muchas otras. Una cantidad sustancial de servicios y controladores en Mac OS, tanto oficiales como de terceros, se proporcionaron como extensiones, lo que permitió reducir el sistema operativo desactivándolos.
Las extensiones del sistema eran una fuente común de inestabilidad en Macintosh, ya que el código de terceros era de calidad variable y, a menudo, parcheaba el sistema de formas que no siempre funcionaban correctamente. Algunas extensiones no funcionaron correctamente juntas o funcionaron solo cuando se cargaron en un orden particular. Además, es posible que diferentes extensiones intenten parchear la misma parte del sistema, lo que podría generar conflictos de extensión y otra inestabilidad. Rastrear estas fuentes de problemas fue otra tarea que la mayoría de los usuarios de Mac encontraron en algún momento. La resolución de problemas de las extensiones de Mac OS podría ser un proceso lento de bisección y prueba y error .
La forma más sencilla de realizar un arranque limpio del sistema operativo era mantener presionada la tecla Mayús: se omitiría la carga de extensiones. System 7.5 agregó el Administrador de extensiones , que permitió al usuario habilitar o deshabilitar rápidamente extensiones particulares, y también definir conjuntos de ellas que funcionarían correctamente juntas. Extensions Manager venía con dos conjuntos básicos de solo lectura: uno que contenía el subconjunto de extensiones necesarias para el funcionamiento básico del sistema operativo y otro que habilitaba todas las extensiones oficiales que se enviaban con el sistema operativo pero deshabilitaba todas las extensiones de terceros.
El orden de carga de las extensiones fue un efecto secundario de la función GetFInfo que utilizó el cargador para enumerar los archivos en la carpeta Extensión. Si bien Apple siempre ha dicho que el orden que resulta de la enumeración de archivos que utilizan esta función no está definido, en los volúmenes HFS esta función enumera los archivos en el orden almacenado en el catálogo HFS. La gente descubrió que cambiar el primer carácter en el nombre del archivo podría cambiar el orden de carga de la extensión, lo que causó problemas cuando Mac OS 8.1 se trasladó a HFS +. Apple terminó teniendo que cambiar el cargador para ordenar los nombres de archivo devueltos por esta función en una tabla, y proporcionó una interfaz para permitir que el software cambiara la tabla. [2]
Paneles de configuración y control
Las extensiones del sistema no tenían interfaz de usuario: no existía un mecanismo estándar mediante el cual el usuario pudiera configurar los servicios proporcionados por una extensión. Las extensiones pudieron alterar la interfaz gráfica (como agregar nuevos menús a la barra de menú) y así aceptar la configuración del usuario, o podrían ir acompañadas de una aplicación para proporcionar la interfaz de configuración.
Con System 7 , los paneles de control se convierten en complementos independientes del Finder en el disco que el usuario puede iniciar. Al insertar el código INIT en un panel de control, fue posible construir híbridos de extensión / panel de control que modificaron el sistema operativo en el momento del arranque y que contenían su propia interfaz de configuración incorporada en la misma forma que cualquier otro panel de control del sistema operativo.
Aplicaciones de fondo sin rostro
MultiFinder y System 7 y versiones posteriores admitían aplicaciones en segundo plano sin rostro similares a los demonios de UNIX o los servicios de Windows , aunque utilizaban la multitarea cooperativa . Los ejemplos incluyen Time Synchronizer ( ajuste del horario de verano y sincronización remota de la hora), Programador de actualizaciones de software y Acciones de carpeta (manejo de eventos de carpeta). Las aplicaciones de fondo sin rostro eran aplicaciones normales con la restricción de que no aparecían en el menú de la aplicación. Las únicas diferencias técnicas entre una aplicación en segundo plano sin rostro y una aplicación normal eran que la marca "Solo fondo" estaba configurada en el SIZE
recurso ' '. Se les prohibió abrir una ventana normal a nivel de aplicación: si lo hicieran, el sistema se congelaría.
Sin embargo, eran libres de abrir ventanas flotantes globales, ya que no podían ganar ni perder el foco. La Control Strip en Mac OS 8 y 9 era un ejemplo de una aplicación de fondo sin rostro que mostraba una ventana flotante global para proporcionar interacción al usuario. El Application Switcher fue otro. Sin embargo, el usuario no se dio cuenta en ningún momento de que Control Strip era un proceso en ejecución; simplemente se presentó como una característica adicional de la interfaz. El sistema simplemente describió las aplicaciones de fondo sin rostro como "aplicaciones del sistema". [ cita requerida ]
Las características del lenguaje en la Arquitectura de secuencias de comandos abierta (y por lo tanto AppleScript ) se implementaron inicialmente como complementos cargables dinámicamente conocidos como "adiciones de secuencias de comandos" u OSAXes. En Mac OS 8 y 9, estos se aumentaron con aplicaciones de fondo sin rostro que se cargaron en segundo plano a pedido. Al igual que con las aplicaciones habituales, se accedía a estas aplicaciones mediante tell
cláusulas: el espacio de nombres global no se actualizaba como era el caso de OSAXes. El sistema operativo no indicó el lanzamiento de dichos procesos ni indicó si se estaban ejecutando o no.
Otras extensiones que no son INIT
Las extensiones de tipo INIT se cargaron en el momento del arranque para actualizar el sistema operativo. De manera confusa, también se podrían colocar varios otros archivos en la carpeta Extensiones, muchos de los cuales no se cargaron en el momento del arranque. Las más notables de ellas fueron las bibliotecas compartidas que comúnmente se colocaban en la carpeta Extensiones para facilitar la ubicación. Las bibliotecas compartidas no se cargaron en el momento del arranque.
Los archivos de tipo INIT no eran el único tipo de extensión del sistema. Otro tipo era scri o extensión de WorldScript. El gestor de arranque BootX Linux se implementó como un scri, simplemente dichos archivos se cargaron muy temprano en el proceso de arranque, antes que todas las demás extensiones. BootX podría mostrar un cuadro de diálogo que ofrece al usuario la posibilidad de terminar de iniciar Mac OS o cargar Linux en su lugar.