Acronym for Hardware Abstraction Layer.

Used in most operating systems to enable device drivers etc to be written more easily.

Under Linux there is a HAL daemon that allows easy userspace device management with UDev and D-BUS.

Clarification: Who Does What

  • D-BUS is purely a channel for communication between different processes. It can be used for lots of purposes besides keeping track of system hardware.
  • The job of HAL is to act as a dynamic central repository of information about the current hardware configuration. The structure of this repository is quite open-ended; in particular it is possible to attach any additional attributes you like to objects, by setting up appropriate rules in the HAL configuration. Other processes can register their interest with HAL, so that they get notifications (via D-BUS) of any configuration changes.
  • The job of udev is to maintain entries in the /dev directory, nothing more. As hardware is added, the appropriate device special files are created; as the hardware is removed, those files are deleted. What is done with those entries (e.g. automounting of removable drives) has to be handled elsewhere. You can customize the behaviour of udev by writing rules, so that, for instance, your USB flash drive always gets the same device name assigned, regardless of what other USB devices might or might be already plugged in.

Note that udev is part of the Linux kernel project, while HAL and D-BUS are not. Thus, udev knows nothing about HAL or D-BUS.

I think (but am not sure) that, in current Linux kernel versions, HAL and udev actually operate in parallel, independently of each other; they both receive notifications about hardware changes from the kernel, and perform their own individual actions in response.