The ChibiOS/RT microkernel supports:
All system objects, such as threads, semaphores, timers, etc., can be created and deleted at runtime. There is no upper limit except for the available memory. In order to increase system reliability, the kernel architecture is entirely static, a memory allocator is not required (but is available as an option), and there are no data structures with upper size limits like tables or arrays. The system APIs are designed to not have error conditions such as error codes or exceptions.
The HAL component is meant to be an abstraction layer between the application and the underlying micro-controller hardware.
HAL offers an high level API for accessing common MCU peripheral like GPIO, ADC, SPI and so on and also take care of clocks-related and board-level initializations.
This component is only released only under Apache License 2.0 and is 100% free also for commercial use.