The second powerful change to Apache 2.0 on Windows was the introduction of APR. Designed for the same reasons as the Mozilla Project’s NSPR library, the Apache Portable Runtime (or Portability Runtime) library allows Apache’s core code to treat every platform the same way. The vast majority of the code inside of Apache HTTP server remains the same for every platform. No longer does the Unix version differ from Windows, NetWare, OS/2, and other obscure platforms’ code. In the core HTTP server, all code is the same, and everyone shares the same bugs. Thus, everyone benefits when bugs are quickly identified and fixed.
APR itself deals will the differences between files, locking, TCP/IP sockets, processes, threads, and the many more distinctions between platforms. APR has been adopted by several projects that aren’t under the umbrella of the Apache Software Foundation, including the Subversion project (which extends the WebDAV protocol for version control, the V at the end of DAV.) Other projects that plan on using APR are under way, and it has even received a nod of approval from Rob McCool (the original author of the NCSA server, which makes him the grandpappy of the Apache server).
Each version of Windows has introduced new features that improve the programmer’s application programming interface. Examples include file system features and TCP/IP sockets. APR helps Apache leverage these features by having them rely on these APR library abstractions when the particular platform supports the feature but choosing slower means to handle the request (although just as functional) when running on a platform that doesn’t provide support (such as an older version of Windows.)
As more projects adopt APR, platform-specific functions are tested and exercised in ways the Apache project authors never imagined. This benefits APR by shaking out platform-specific bugs that have no effect in the Apache Web server today, but that could easily be uncovered with future changes to Apache.