Articulo de referencia

HAL (software)

HAL ( Hardware Abstraction Layer o más bien Hardware Annotation Library ) es un subsistema de software para sistemas operativos tipo UNIX que proporciona abstracción de hardware...

HAL ( Hardware Abstraction Layer o más bien Hardware Annotation Library ) es un subsistema de software para sistemas operativos tipo UNIX que proporciona abstracción de hardware .

HAL está actualmente obsoleto en la mayoría de las distribuciones de Linux y en FreeBSD. Su funcionalidad se está integrando en udev en Linux desde 2008-2010 y en devd en FreeBSD. Anteriormente, HAL se basaba en udev.

Algunos otros sistemas operativos que no tienen una alternativa como udev o devd todavía usan HAL.

El propósito de la capa de abstracción de hardware era permitir que las aplicaciones de escritorio descubrieran y utilizaran el hardware del sistema anfitrión a través de una API simple, portátil y abstracta , independientemente del tipo de hardware subyacente. [ 1 ]

HAL para el sistema operativo Linux fue concebido originalmente por Havoc Pennington . Se convirtió en un proyecto de freedesktop.org y fue una parte fundamental del conjunto de software de los entornos de escritorio GNOME y KDE . Es software libre , con doble licencia: la Licencia Pública General de GNU y la Licencia Libre Académica . [ 2 ]

HAL no guarda relación con el concepto de HAL del kernel de Windows NT , que gestiona algunas funcionalidades básicas específicas de la plataforma dentro del kernel, como el enrutamiento de interrupciones.

Razón fundamental

Tradicionalmente, el núcleo del sistema operativo se encargaba de proporcionar una interfaz abstracta al hardware en el que se ejecutaba el sistema. Las aplicaciones utilizaban la interfaz de llamadas al sistema o realizaban operaciones de entrada/salida de archivos en los nodos de los dispositivos para comunicarse con el hardware a través de estas abstracciones. Esto era suficiente para el hardware sencillo de los primeros ordenadores de escritorio.

Sin embargo, el hardware informático ha aumentado en complejidad y las abstracciones proporcionadas por los núcleos Unix no han seguido el ritmo de la creciente cantidad de tipos de dispositivos y periféricos que ahora son comunes tanto en servidores como en ordenadores de escritorio. La mayoría de los buses modernos también son compatibles con la conexión en caliente y pueden tener topologías complejas . Como resultado, los dispositivos se descubren o cambian de estado de maneras que pueden ser difíciles de rastrear a través de la interfaz de llamadas al sistema o la comunicación entre procesos (IPC) de Unix. La complejidad de hacerlo obliga a los desarrolladores de aplicaciones a reimplementar la lógica de soporte del hardware. [ 1 ]

Algunos dispositivos también requieren programas auxiliares con privilegios para prepararlos para su uso. Estos a menudo deben invocarse de maneras que pueden ser difíciles de expresar con el modelo de permisos de Unix (por ejemplo, permitir que los usuarios se unan a redes inalámbricas solo si han iniciado sesión en la consola de video). [ 1 ] Los desarrolladores de aplicaciones recurren al uso de binarios setuid o ejecutan demonios de servicio para proporcionar su propio control de acceso y separación de privilegios, lo que potencialmente introduce vulnerabilidades de seguridad en cada caso.

Diseño

HAL es un único demonio responsable de descubrir, enumerar y gestionar el acceso a la mayor parte del hardware del ordenador anfitrión. Las aplicaciones se comunican con HAL mediante el mecanismo IPC de D-Bus , que abstrae el hardware tras un mecanismo RPC basado en objetos .

Cada dispositivo de hardware lógico se representa como un objeto D-Bus, y su dirección de bus se utiliza como identificador único. Los dispositivos incluyen abstracciones como particiones de disco y redes inalámbricas visibles. La funcionalidad del dispositivo se expone a través de interfaces D-Bus , y se accede a su estado mediante propiedades , un conjunto de pares clave-valor.

HAL transmite eventos de hardware como señales en estos objetos; las aplicaciones pueden escuchar las señales y reaccionar a los eventos de hardware que indican, como cuando se conecta una cámara digital , se inicia la rotación de un disco óptico o se cierra la tapa de una computadora portátil. [ 3 ] [ 4 ]

Implementaciones y obsolescencia

En Linux, HAL utiliza /sysun sistema de archivos virtual ( para sistemas Linux ) para detectar el hardware y escuchar los eventos de conexión en caliente del kernel . Algunas distribuciones de Linux también proporcionan una regla de udev para permitir que el demonio udev notifique a HAL cuando aparecen nuevos nodos de dispositivo.

Obsoleto

A partir de 2011, distribuciones de Linux como Ubuntu , [ 5 ] Debian , [ 6 ] y Fedora y en FreeBSD, [ 7 ] y proyectos como KDE, [ 8 ] GNOME y X.org están en proceso de descontinuar HAL ya que se ha "convertido en un gran desastre monolítico imposible de mantener". [ 5 ] El proceso está en gran parte completo, pero aún se utiliza HAL en cierta medida: Debian squeeze (febrero de 2011) y Ubuntu versión 10.04 eliminan HAL del sistema básico y del proceso de arranque. [ 9 ] En Linux, está en proceso de ser fusionado en udev (udev principal, libudev y udev-extras) y en la funcionalidad existente de udev y del kernel. El reemplazo para sistemas que no son Linux como FreeBSD es devd.

Inicialmente, se planeó un nuevo demonio, DeviceKit, para reemplazar ciertos aspectos de HAL, pero en marzo de 2009, DeviceKit quedó obsoleto en favor de agregar el mismo código a udev como el paquete udev-extras , y algunas funciones ahora se han trasladado a udev propiamente dicho.

Véase también

Referencias

  1. 1 2 3 Pennington, Havoc (10 de julio de 2003), Cómo hacer que el hardware simplemente funcione
  2. Texto de la licencia del código fuente de HAL : HAL se le otorga bajo la Licencia Académica Gratuita versión 2.1 o la Licencia Pública General GNU versión 2, según su elección.
  3. Zeuthen, David (1 de noviembre de 2009), Especificación HAL 0.5.14 , freedesktop.org , consultado el 15 de enero de 2017
  4. "hal: doc/spec" . 16 de marzo de 2010. Consultado el 15 de enero de 2017 .
  5. 1 2 Halsectomy , ubuntu.com , 10-05-2013 , consultado el 15-01-2017
  6. "HALRemoval" . debian.org . 28-06-2011 . Consultado el 15-01-2017 .
  7. "Features/HalRemoval" . Proyecto Fedora . 9 de enero de 2012. Consultado el 15 de enero de 2017 .
  8. «Revisión 1206281: Funciones en KDE Base» . KDE . 2010-12-19 . Consultado el 15 de enero de 2017 .
  9. "Descripción técnica: Eliminación de HAL" . ubuntu.com. 17 de mayo de 2010. Consultado el 15 de enero de 2017 .
  • HAL - Capa de abstracción de hardware