This is mod_perl version 2.0

*** Prerequisites ***

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

  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.

The following test failures are known (see CPAN RT #118919):

  t/filter/in_bbs_inject_header.t (Fails tests 22, 26 and 30)

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 on
Windows, including but not limited to:

  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.

Bugs can also be reported at:
https://rt.cpan.org/Dist/Display.html?Name=mod_perl
which can be accessed from the "Issues" link in the left-hand menu on
the metacpan.org page, https://metacpan.org/pod/mod_perl2 .
(Note: You will need to log in to https://rt.cpan.org in order to get
the "Report a new bug" button on the bug tracker page.)

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