하드웨어 추상화 계층(Hardware Abstraction Layer)이란, 말 그대로 보자면 하드웨어를 사용하기 위한 abstraction layer이다. 이는 하드웨어의 구체적인 특징 및 복잡한 내부 구조를 감추고, 깔끔하고 일관성 있는 인터페이스를 제공한다. 기반이 되는 하드웨어의 종류에 관계없이 단순, portable하고 추상화된 API를 통해 응용 프로그램들이 호스트 시스템의 컴퓨터 하드웨어를 발견하고 사용할 수 있게 하는 것이다.
이전에는 hardware가 다양하지 않았기에 direct로 구현해도 대부분 커버 가능한 수준이었다. 그러나, 기술의 발전에 따라 다양한 하드웨어가 생겨나며 OS 측에서 direct로 구현하면 하드웨어가 변경될 때 마다 새로 구현해줘야 하는 번거로움이 생겨났다. 따라서 HAL이라는 개념이 등장하게 되었는데, 이는 OS 쪽이 아닌 하드웨어의 공급 업체에서 구현해야 하는 표준 인터페이스를 정의하며 OS에서 하위 수준의 드라이버 구현을 고려하지 않아도 되게 해주는 시스템이다. Driver(하드웨어)는 바뀌어도 APP쪽에서 사용하는 API는 그대로 사용하는 것이다. 따라서 하드웨어의 변경에 따라 APP단이 변경되지 않고, 상위 수준 시스템을 수정하거나, 시스템에 영향을 주지 않고도 하드웨어 관련 기능을 구현할 수 있다. 다시 한번 강조하자면, OS가 아닌 하드웨어 공급업체에서 제품에서 제공하는 특정 하드웨어에 상응하는 HAL 및 드라이버를 구현하도록 한다.
예를 들어보자. Word 프로그램에서 작성한 글을 복사기로 프린트하려고 한다. 이때, HAL이 없다면 하드웨어에 맞춰 프로그램들을 수정해야 할 필요가 있다. 그러나, HAL을 이용한다면 복잡한 과정 없이 프린터기 변경을 손쉽게 할 수 있다. - 호환성