The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.
To give a brief overview, the primary core subsystems of APR 1.x include the following:
- atomic operations
- dynamic shared object loading
- file I/O
- locks (mutexes, condition variables, etc.)
- memory management (high performance allocators)
- memory-mapped files
- multicast sockets
- network I/O
- shared memory
- thread and process management
- various data structures (tables, hashes, priority queues, etc.)