Basis use-case is re-initialization of anything, that must be unique
per-child, but is initialized in parent process.
Example - rand must be re-seeded after each fork, if you have had to
seed it in parent process (during plugin initialization, for example, or
it is seeded in some of third-party use'ed modules).
About tying to engine type... It's a case that occurs only in
perl-forking engines. Engine::CGI, Engine::FCGI are free of such cases,
so if init_child is realized in app - it simply will not be used. I'm
not sure about Engine::Apache* - never tried it, but it compiles and
imports all once in parent process, so probably it needs the same feature.
In any case - init_child is not necessary to be called to run
application - it should only be used for reinits in forked children. If
engine is forking and supports it - it will work clearly, if not forking
- it will work the same way, if forking and not supporting - looks like
such app shouldn't use it :). It's not that I like such situation, but
lack of child_init_hook ( or something similar ) is worser imho.