<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML><HEAD>
<TITLE>New features with Apache 2.0</TITLE>
</HEAD>

<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" 
      VLINK="#000080" ALINK="#FF0000">
<!--#include virtual="header.html" -->
<H1 ALIGN="CENTER">Overview of New Features in Apache 2.0</H1>

<P>Enhancements: <A HREF="#core">Core</A> | <a href="#module">Module</a>

<P><HR>

<H2><A NAME="core">Core Enhancements:</A></H2>

<DL>
<DT><STRONG>Unix Threading</STRONG>
<DD>On Unix systems with POSIX threads support, Apache can now run in a
    hybrid multiprocess, multithreaded mode. This should improve
    scalability. 

<DT><STRONG>New Build System</STRONG>
<DD>The build system has been rewritten from scratch to be based on
    autoconf and libtool. This makes Apache's configuration system more
    similar to that of other packages.

<DT><STRONG>Multiprotocol Support</STRONG>
<DD>Apache now has some of the infrastructure in place to support serving
    multiple protocols. mod_echo has been written as an example.

<DT><STRONG>Better support for non-Unix platforms</STRONG> <DD>Apache
    2.0 is faster and more stable on non-Unix platforms such as BeOS,
    OS/2, and Windows. With the introduction of platform-specific <a
    href="mpm.html">multi-processing modules</a> (MPMs) and the Apache
    Portable Runtime (APR), these platforms are now implemented in their
    native API, avoiding the often buggy and poorly performing
    POSIX-emulation layers.

<DT><STRONG>New Apache API</STRONG>
<DD>The API for modules has changed significantly for 2.0. Many of the
    module-ordering problems from 1.3 should be gone. 2.0 does much of
    this automatically, and module ordering is now done per-hook to
    allow more flexibility. Also, new calls have been added that provide
    additional module capabilities without patching the core Apache server.

<DT><STRONG>IPv6 Support</STRONG></DT>
<DD>On systems where IPv6 is supported by the underlying Apache
    Portable Runtime library, Apache gets IPv6 listening sockets by
    default.  Additionally, the Listen, NameVirtualHost, and
    &lt;VirtualHost&gt; directives support IPv6 numeric address
    strings (e.g., "Listen [fe80::1]:8080").</DD>

<DT><STRONG>Filtering</STRONG></DT>
<DD>Apache modules may now be written as filters which act on the
    stream of content as it is delivered to or from the server.  This
    allows, for example, the output of CGI scripts to be parsed for
    Server Side Include directive by mod_include.</DD>

</DL>

<P><HR>

<H2><A NAME="module">Module Enhancements:</A></H2>

<dl>

<dt><strong>mod_auth_db</strong>
<dd>Now supports Berkely DB 3.0

<dt><strong>mod_auth_digest</strong>
<dd>Includes additional support for session caching across processes 
using shared memory.

<dt><strong>mod_charset_lite</strong> <dd>New module in Apache 2.0.
This experimental module allows for character set translation
or recoding.

<dt><strong>mod_dav</strong>
<dd>New module in Apache 2.0.  This module implements the 
HTTP Distributed Authoring and Versioning (DAV) specification for
posting and maintaining web content.

<dt><strong>mod_file_cache</strong>
<dd>New module in Apache 2.0.  This module includes the functionality
of mod_mmap_static in Apache 1.3, plus adds further caching abilities.

</dl>

<!--#include virtual="footer.html" -->
</BODY>
</HTML>

