On 3/7/2011 1:34 PM, John M. Gamble wrote:
Well ... this raises a question. Whither Module::Build?
Is its future simply to be the precursor to Dist::Zilla? Or to be wrapped
up as a Dist::Zilla::Simple?
First, a little background. The makefile created by ExtUtils::MakeMaker
contains a number of targets that can be classified into 2 categories.
First, there are the ones used by people installing modules from CPAN:
primarily "make && make test && make install". We can call this the
Second, there are the targets used only by people writing modules, like
"make dist", "make manifest", generating META.yml (and now META.json).
We can call this the "authoring" role.
When Module::Build was conceived as a pure-Perl MakeMaker replacement,
it also implemented both roles. But if you think about it, there's no
particular reason that the same tool has to fill both roles, and good
reasons why there should be a separate tool for each role.
A tool implementing the "installing" role has to have minimal
requirements, because they'll have to be installed on every system that
uses a module that uses that installer. It needs to be able to run on
pretty much every system that can run Perl, including systems that only
have older versions of Perl. It needs to be as bulletproof as possible,
because it'll be used by people who are just starting to learn Perl.
An "authoring" tool, on the other hand, will only be used by people who
are writing modules. As a result, it can assume a greater familiarity
with Perl. It can have heavy prerequisites, like Moose, which makes it
easier to implement more complex features, like rewriting POD, version
control integration, uploading to CPAN, etc.
Dist::Zilla is the first attempt to separate the authoring role from the
installing role that's achieved significant traction. As such, it will
never replace the "installing" side of MakeMaker or MB. There's been
some talk about an "Install::Zilla" to implement the installing role,
but AFAIK nobody's started working on that yet.
I'd like to see MB work towards separating the two roles internally,
with the goal of developing an install-only tool. Here's a possible
Module-Installer would be a new dist containing the "installing" parts
of MB. Ideally, you could convert a Build.PL to use Module::Installer
by just doing s/Module::Build/Module::Installer/g.
Module-Build would become a legacy dist containing the "authoring" parts
of MB for backwards compatibility. It would depend on
Module::Installer; Module::Build would become just an empty subclass of
If people want to continue developing the authoring side of MB, it could
become a third distribution, say Dist-Builder. The reason for a new
dist would be to allow it to gain prerequisites without influencing
modules that are depending on MB for its installing role.