An Introduction to APR 2.0
Christian Gross
Montreal, Canada

Bio: Christian Gross
Author of several books
Conference speaker
Specialization in Internet, and Infrastructure technologies
Windows, UNIX, LINUX server development
Companies worked/consulted for
UBS, TATA, Grammer, National Westminster, Daimler Chrysler, ETSI, ITU, Fame, NCR, etc

Discuss what APR represents
Main points of APR
Go through demos that illustrate the various concepts of APR

APR: Apache Portable Run-time
Mission Statement
The Apache Portable Run-time mission is to provide a library of routines that allows programmers to write a program once and be able to compile it anywhere

Yet another “Portable” Runtime?
Original choices were NSPR, ACE or another library
NSPR not used because of license issues and then too many features not required
ACE used C++, which is useless with Apache
Finally wrote APR, which is a continuation of ap_ work done in Apache 1.3.x

What APR does
Abstracts the OS into a series of Apache related functions
Simpler for porting Apache to other platforms
Solves the following problems
APR Core: contains fundamental portable functions
APR Util: contains functions that are not core, but need to be portable

Core APR
Contains following functionality
Reading and writing of files
Character set conversion
Network communications using sockets
Time management used for Internet type conversions
String management like C++ including natural order management
UNIX Password management routines
Table management routines

Core APR (cont.)
Contains following functionality (cont.)
UUID Internet generation
Filename canonicalization
Random data generation
Global lock management
Threads and process management
Dynamic library loading routines
Memory mapped and shared memory

Managing Data Structures
Cross platform is problematic because not all functionality is supported
Structures look like spaghetti

Incomplete Data Types
Solves problem of managing data structures across platforms
Data type is defined using a “handle”
Data type is managed using a number of routines
Programmer does not have direct access to structure details
But not all of APR is incomplete data type based

APR Status Codes
Used to indicate when things work and do not work
Different types of errors based on the sub-system that causes the error
Operating system native function calling error
Function calling error
APR will provide error codes for OS’s that do not support the native error or maps error codes
Errors codes provided by layered application
Success codes
Can include extra information indicating state

Demos illustrating the various concepts of APR
Available at
Look for Apache APR Demo Code

Where to get APR?
APR is distributed with Apache 2.x
Can get standalone version by going to
There exists an APR mailing list at above mentioned website
Documentation is currently sparse


(Send me email)