Udev
udevはグレッグ・クロー=ハートマン(Greg Kroah-Hartman)とケイ・シェバース(Kay Sievers)によって開発され、その他多くの貢献者、中でもDan Stekloffによる多くの貢献が含まれている。
かつて、Linuxシステムにおけるudevは通常、よりデバイス固有の処理を実行する目的で、ソケット経由でHALへイベントを送信する方法を採用していた(以前はDeviceKit(英語版)へもイベント送信可能であった)。例えば、HALはD-Bus IPCによるブロードキャストメッセージを関連するすべてのプロセスに送信することで、新しいハードウェアが装着されたことをシステムで稼働中の他のソフトウェアに通知する。この方法により、GNOMEやKDEのようなデスクトップ環境では、システムに新たにUSBフラッシュドライブやSDカードを装着すると、ファイルブラウズのためのソフトウェアが自動的に起動し、デバイスに存在するファイルをオープンすることができた。
2011年中盤頃から、とりわけKDE、GNOME、Xfce各デスクトップ環境を採用しているLinuxディストリビューションはHALの採用を段階的に廃止しD-Busとの連携のみとなっている。以前から存在したHALの機能はudev自身への統合を進めており、一部は"udisks"や"upower"など別のソフトウェアに分離されている。
/devディレクトリに静的にデバイスノードを作成する伝統的なUNIXシステムとは違い、Linuxのudevは実際にシステムに接続されているデバイスのノードのみを動的に供給する。devfsもかつて似たような機能を提供していたが、udevの支持者はdevfsよりも実装で優れているいくつかの理由に言及している:
udevはあらゆるものに依存しない、例えばシステムに接続された順番などに依存しない永続的なデバイス名をサポートする。 デフォルトでは、記憶装置は永続的なデバイスファイル名で準備される。ハードディスクのいずれも、ファイルシステム固有のIDで識別され、さらにディスクの名称と接続されているハードウェア上の物理的な位置(ATAなどにおけるプライマリ/セカンダリ・マスタ/スレーブの違いなど)で認識される。
devfsがカーネル空間で実行されるのとは対照的に、udevの処理はユーザー空間で完結している。1つの結果として、udevはカーネルの外に命名規則を移動し、デバイスノードが生成される前に、デバイスの特性からデバイス名を構成するため、ある種のプログラムを走らせる。