Apache 2.0 STATUS:
Last modified at [$Date: 1999/12/22 06:20:11 $]

Release:

    Vague plan, assuming more features aren't demanded for the 2.0 release
    2.0a1/b1: January 2000
    2.0     : later in 2000

RELEASE SHOWSTOPPERS:

    * Complete HAVE_SENDFILE work. Need to add iovec head and tail pointers to 
      the iol sendfile API and make it work under Unix.
        Status: Bill <stoddard@raleigh.ibm.com> is working on this

    * Pipes to CGI scripts are not being timed out
        Status: code has been added to APR to support timing out pipes.
                This needs to be used in Apache now.

    * Put back resource limit code

    * Port mod_rewrite
        Status: Paul Reder <rederpj@raleigh.ibm.com> is working on this.

    * suEXEC doesn't work
        Status: Manoj has posted an patch to fix this.
        <19991103003605.A20612@samosa.mindspring.com>

    * Windows NT port isn't done
        Status: Bill  <stoddard@raleigh.ibm.com> is working on MPM and APR. 
	Remaining work:
        1. Add back ability to run Apache as a service
        2. Fix Win9* specific code in the winnt MPM
        3. Test access logging with multiple threads. Will the native file I/O 
           calls serialize automagically like the CRT calls or do we need to
           add region locking each time we write to the access/error logs?
        4. Fix the DOS hole in AcceptEx (need to time out connections over
           which data is never sent).

    * Current 2.0 code is not tested on many Unix platforms. Make 2.0
      work on most, if not all the systems 1.3 did
        Status: Autoconf and APR will get us most of the way there.

    * The module API is a weird combination of the old table and the new
      hook system. Switch completely to the new hook system
        Status: Ben Laurie is working on this.

    * Modules.  Which modules do not work yet, can we get a list?

    * We need a thread-safe resolver, at least on Unix.
        Status: The best known candidate would be something from BIND
        (v8 or v9?) The only other option would be to mutex all the
        resolver calls,

RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:

    * Clean the code.  There are a lot of places we used APR but didn't 
      remove the hacks that were required for the cross-platform code in
      1.3.  We need to make the code look like APR was supposed to be there. 

    * Go throught the Bug DB and research the bugs marked "suspended".  People
      were told these would be considered for inclusion in Apache 2.0, it 
      would be nice to actually do so.

    * Win32: Migrate the MPM over to use APR thread/process calls. This
      would eliminate some code in the Win32 branch that essentially
      duplicates what is in APR.
        Status: Bill <stoddard@raleigh.ibm.com> is working on this.

    * Move I/O layering into APR.

    * There are still a number of places in the code where we are
      loosing error status (i.e. throwing away the error returned by a
      system call and replacing it with a generic error code)

    * APRize the stat function. CRT stat() is about 30% slower on Windows than
      the equivalent native Windows call. The APR call should return the Unix
      style stat structure, just to keep it familier.

    * Implement reliable piped logs on Windows
        Status: Bill <stoddard@raleigh.ibm.com> has prototype code (not
        reliable) in 1.3.  Should be much cleaner with APR in 2.0.

    * Switch to autoconf, et al. for configuration.
        Status: Manoj has placed an initial version into the 2.0
        repository. Todos include:
          
          - "make install" should work
          - a tool to simplfy third-party module building should be
            written. Something like apxs
          - Add a lot more checks to satisfy the various platforms, e.g.
            for threading

    * Use APR to get rid of more platform dependancies.
        Status: Ryan Bloom <rbb@raleigh.ibm.com> is working on this.

    * The connection status table is not very efficient. Also, very few stats
      are exported to the connection status table (easy to fix), and mod_status
      is ugly.

Other bugs that need fixing:

    * MaxRequestsPerChild measures connections, not requests.
        Until someone has a better way, we'll probably just rename it
        "MaxConnectionsPerChild".
    
    * Regex containers don't work in an intutive way
        Status: No one has come up with an efficient way to fix this
        behavior. Dean has suggested getting rid of regex containers
        completely.

    * SIGSEGV on Linux (glibc 2.1.2) isn't caught properly by a
      sigwaiting thread. We need to work around this, perhaps unless
      there is hope soon for a fixed glibc.

Other features that need writing:

    * Finish infrastructure in core for async MPMs
        Status: ?

    * TODO in source -- just do an egrep on "TODO" and see what's there

    * Work on other MPMs. Possible MPMs discussed or in progress include:

      - Dean Gaudet's async MPM
          Status: dean is unlikely to begin work on this any time soon...
	    has lots of ideas he'll share with folks willing to begin
	    tackling the issues.  this is apache 2.1 material.

      - Zach Brown's <zab@zabbo.net> Linux siginfo MPM
          Status: ?

Documentation that needs writing:

    * The concept of MPMs, especially if we ship more than one MPM for a
      given platform

    * New directives in the various MPMs

    * API documentation
        Status: Ben Laurie has written some hooks documentation
        (apache-2.0/htdocs/hooks.html)

    * Changes since 1.3.9 can be more easily seen in the commitlog file
         dev.apache.org:/home/cvs/CVSROOT/commitlogs/apache-2.0
      which includes some of Roy's comments when the changes were
      committed in rough change-sets by purpose.  Note that the commitlog
      does not show the contents of new files until later.

Available Patches:

   * Mike Abbott's <mja@trudge.engr.sgi.com> patches to improve
     performance
       Status: These were written for 1.3, and are awaiting a port to
       2.0

Open issues:

   * What do we do about mod_proxy?

   * Which MPMs will be included with Apache 2.0?

   * Is conf/highperformance.conf-dist obsolete?  It looks obsolete.

