This is mod_perl version 2.0

*** Prerequisites ***

Apache:
  Dynamic mod_perl (DSO):    Apache 2.0.47 - 2.4.41.
  Static mod_perl:           Apache 2.0.51 - 2.4.41.

  Newer Apache versions may work with this version of mod_perl.  If
  not, the svn version likely will, which can be obtained from:
  http://perl.apache.org/download/source.html#Development_mod_perl_2_0_Source_Distribution

Perl: 
  Any stable version of Perl currently in support by the Perl community,
  as described in recent Perl distributions' "perlpolicy.pod" document.

  Newer Perl versions may work with this version of mod_perl.  If not,
  the svn version likely will (see above).

  Many older Perl versions also work with this version of mod_perl:
  Perls back to version 5.8.2 (and possibly earlier in some build
  configurations) are currently believed to work, but this is not
  guaranteed to be the case, either now or in the future.

*** Status ***

mod_perl is currently considered stable.

There is currently a known test failure on Windows when using Perls built
with the PERL_IMPLICIT_SYS build option enabled (which it is by default):

  t/modperl/env.t (Fails many tests)

Various other tests are also known to fail in certain configurations,
including but not limited to:

  t/compat/request.t (Exits after test 12)
  t/filter/in_bbs_inject_header.t (Fails tests 22, 26 and 30)
  t/modperl/setupenv.t (Fails tests 8, 22, 29, 36, 50 and 57)
  t/preconnection/note.t (Fails test 1)

*** Documentation ***

Documentation can be found in the docs/ directory. Currently they
don't get installed on 'make install'. Certain API documentation can
be found in docs/api/.  The online version is at
http://perl.apache.org/docs/2.0/.

*** Todo ***

mod_perl-2.0 is not 100% feature complete with the 1.xx version.
See the files in the todo/ directory for what remains to be done. Some
of those features will be implemented after 2.0 is released. The goal
is to empty the file todo/release and document/test/verify the API
that's going to be supported by 2.0. More API will be supported post
2.0 release.

*** Support ***

For comments, questions, bug-reports, etc., join the mod_perl users
list by sending mail to modperl-subscribe@perl.apache.org.

When reporting bugs please follow the instructions at:
http://perl.apache.org/docs/2.0/user/help/help.html#Reporting_Problems

For announcements join the mod_perl announce list by sending mail to
announce-subscribe@perl.apache.org.

*** Developers ***

Development discussion takes place on dev (at) perl.apache.org

*** Authors ***

mod_perl-2.0 was designed and written by Doug MacEachern, with
contributions from many others (see Changes files).
