HAL is designed to work with their code generator across product families. It suffers from design mistakes that can't be fixed. Their LL library provides a lower degree of abstraction while still affording ease of migration and is harder for them to screw up.