This is mod_perl version 2.0

*** Prerequisites ***

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

  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,
  EXCEPT THAT Perl 5.22.x is currently not supported due to the problem
  reported in https://rt.cpan.org/Ticket/Display.html?id=101962
  We hope to address that in the next release (2.0.10).

  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.

Four test scripts are currently known to fail with Apache 2.4.x on Windows:

  t/protocol/echo_block.t (Fails tests 2-3)
  t/protocol/echo_nonblock.t (Fails test 2)
  t/protocol/echo_timeout.t (Fails tests 2-5)
  t/protocol/pseudo_http.t (Fails tests 3-8 and 11-13)

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