Apache Portable Runtime

The Apache Portable Runtime (APR) is a supporting library for the Apache web server. It provides a set of APIs that map to the underlying operating system (OS). Where the OS does not support a particular function, APR will provide an emulation. Thus programmers can use the APR to make a program truly portable across platforms.

APR originally formed a part of Apache HTTP Server, but the Apache Software Foundation spun it off into a separate project. Other applications can use it to achieve platform independence.

Functionality
The range of platform-independent functionality provided by APR includes:
 * Memory allocation and memory pool functionality
 * Atomic operations
 * Dynamic library handling
 * File I/O
 * Command-argument parsing
 * Locking
 * Hash tables and arrays
 * Mmap functionality
 * Network sockets and protocols
 * Thread, process and mutex functionality
 * Shared memory functionality
 * Skip list functionality
 * Time routines
 * User and group ID services

Similar projects

 * GLib – provides similar functionality. It supports many more data structures and OS-independent functions, but fewer IPC-related functions. (GLib lacks local and global locking and shared-memory management.)
 * Netscape Portable Runtime (NSPR) is a cross-platform abstraction library used by the Mozilla project. It is used by another subproject of Mozilla application framework (XPFE) to provide cross-platform graphical user interface (GUI) functionality.
 * Adaptive Communication Environment (ACE) is an object-oriented library written in C++ similar in functionality to APR. It is widely deployed in commercial products.
 * commonc++ is a cross-platform C++ class library for systems programming, with much of the same functionality as APR.
 * POCO is a modern C++ framework similar in concept but more extensive than APR.
 * WxWidgets is an object-oriented cross-platform GUI library that also provides abstraction classes for database communication, IPC and networking functionality.
 * KDE Frameworks – used by KDE SC