Hardware Abstraction Layer
ISA、EISA、PCI、PCI-Eなど、複数のアーキテクチャで使われているI/Oバスも抽象化されており、デバイスドライバも最小限の修正だけで移植可能である。
HALの極端な例として、System/38やAS/400のアーキテクチャがある。これらシステム上のコンパイラの多くは抽象化された機械語コードを生成する。Licensed Internal Code (LIC) はそれを動作中のシステムのプロセッサ用コードに変換し実行させる。LIC層より上のアプリケーションやOSのコードはSystem/38からAS/400に移行する際に全く修正も再コンパイルも不要だった(System/38とAS/400では少なくとも3種類の全く異なるプロセッサが使われている)。
HALは、カーネルの代わりにハードウェアと直接やり取りするものであるため、そのインタフェースはOSのAPIよりも下位に存在する。したがって、HALの処理にかかる時間はAPI(システムコール)にかかる時間よりも短くなければならない。
HALが定義されたOSは各種ハードウェアに容易に移植可能である。これは非常に様々なプラットフォーム上で動作することを要求される組み込みシステムでは特に重要である。
Windows向けのマルチメディア処理用APIであるDirectXにも、HALに対応したコンポーネントがいくつか存在する。
リアルタイム3次元コンピュータグラフィックスAPIであるDirect3Dには、ビデオカードなどのグラフィックスハードウェア (GPU) を抽象化するためのHALデバイスが用意されている。ベンダー間の差異を吸収する層であるHALデバイスを利用することにより、ベンダー共通のDirect3D APIを用いてハードウェアの機能にアクセスできる。
なお、DirectDrawにはドライバーをユーザーモードでエミュレーションするためのHardware Emulation Layer (HEL) が用意されていた。
DirectSoundにもサウンドカードのハードウェア支援を利用するHALが用意されていたが、Windows Vista以降はソフトウェアエミュレーションに置き換えられた。