HAL (ソフトウェア)

HAL（ハル）は デーモン型のHardware Abstract Layerの一種であり、デスクトップアプリケーションがハードウェア情報に容易にアクセスできるようにすることでバスやデバイスの種類に寄らずに各種デバイスを利用できるようにするオープンソースプロジェクトである。これにより、GUIが一貫した形式で全てのリソースをユーザーに提示できる。
例えば、HAL はリムーバブルメディアドライブの情報を収集し、メディアの出し入れをユーザーのデスクトップ環境に通知する。
従来、デスクトップアプリケーションであってもハードウェアへのアクセスは直接カーネルを使って行うしかなかった。しかし、カーネルはデバイスについて全てを知っているわけではないため、この方式では正確さに難点があり、かつ面倒だった。例えば、MP3プレイヤーやデジタルカメラなどはユーザインタフェースでは単なるハードディスクとして示されることがあった。従って、システムに接続されている周辺機器を一覧するようなデスクトップのユーザインタフェースはほとんどなかった。
HAL を使うと、ハードウェアの種類毎の重要な情報が一貫した形式で利用可能となる。新たなデバイスが追加されたとき、追加されたデバイスの種類などの情報を伴って非同期シグナルがシステムのメッセージバス上にブロードキャストされる。このメッセージバスに接続しておくことで、デスクトップアプリケーションが新たなハードウェアを見つけることが可能となる。システムレベルのスクリプトでデバイスを設定することもできる。事実上、HAL はプラグアンドプレイを可能とする。
HAL デーモンはデバイスのリストを実際のハードウェアの状態に合わせて維持する。各デバイスの状態は事前に定義されたキーと値の組で表される。各デバイスオブジェクトの識別には Unique Device Identifier (UDI) という識別子が使われる。キーと値のペアには型があり、HAL の仕様で定義されている。従って、HAL のユーザーはそれらの意味を知ることができる。
移行.
HALはすでに旧態化しており、現在は単にメンテナンスのみが行われている。HALの機能はDeviceKitやudev等に移行している。