Apache 2.0 STATUS:
Last modified at [$Date: 2000/03/08 21:36:39 $]

Release:

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

ALPHA SHOWSTOPPERS:
    * New BugDB

    * Tag the tree

RELEASE SHOWSTOPPERS:
    * Fix SAFEREAD

    * Fix lingering close
        Status:

    * MPMs should have responsibility for closing sockets and
        registering the socket cleanup. Stop registering multiple
        cleanups for each socket. Move socket close code out of
        http_connection.c and into the MPMs.
	Status:

    * Reliable piped logs look broken everywhere. Each MPM includes essentially
	identical code to ap_register_other_child(), etc. Most of this code can
	be moved out of the MPMs and into some common file (http_core.c?).
	Dean says presumably you mean an os-specific file?

    * DSO hooks registered during the preflight call to ap_read_config
	are not 'unregistered' during the preflight clean-up. Thus, when 
	Apache comes up, the hook tables contain two entries for each DSO hook,
	one of which is bogus, leftover from the preflight. 

    * 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

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

    * Win32: Enable the Windows MPM to honor max_requests_per_child
        Status: Bill will fix this.

    * Win32: Fix Win9* specific code in the winnt MPM
	Status:

    * Win32: 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 access the logs?
	Status: 

    * Win32:  Smoke test all ported modules to make sure they work 
	correctly under Windows.
	Status: 

    * 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:

    * "make distclean" leaves (at least these) turds:
	lib/.deps
	lib/apr/.deps
	lib/apr/shmem/unix/mm/config.log
	lib/apr/shmem/unix/mm/mm_conf.h
	lib/apr/shmem/unix/mm/libtool
	lib/apr/shmem/unix/mm/config.status
	lib/apr/shmem/unix/mm/Makefile
	lib/apr/shmem/unix/mm/mm-config
	main/a
	modules/.deps
	modules/mpm/.deps
	os/.deps

    * apaci permissions problem:
	cvs checkout apache-2.0
	cd apache-2.0/src
	./configure
	edit some Makefile.in
	./config.status
	now apaci is no longer executable and future makes fail

    * the top-level configure.in appears to use $USE_MAINTAINER_MODE = yes
	to set -Wall/etc. flags, and the APR configure.in appears to use
	--with-debug.  both seem like more of a hardwired pain compaired
	to the pre-2.0 method of setting EXTRA_CFLAGS.

    * Win32: Reuse accept socket after transmitfile/close
	This is not a bug, but would be nice to get this feature in 
	before ship.

    * Win32: Enable the winnt MPM to use the new scoreboard API

    * Win32: Non-blocking CGI pipes

    * Win32: Graceful restart of a service is broken (code does shutdown then start)

    * Dynamically loadable MPMs
      Enable users of the binary distributions of Apache to be able to 
      dynamically load the MPM.

      Dean says this probably isn't a good idea.  For example consider
      -lpthread, you couldn't have the same core run with pthreads,
      prefork, and gnu pth without a lot of headaches is my guess.

    * Platforms that do not support fork (primarily Win32 and AS/400)
      Consider introducing HAVE_FORK feature macro. Architect start-up code
      that avoids initializing all the modules in the parent process on
      platforms that do not support fork.

    * 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)

    * Win32: 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: post 2.0

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

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.

