Please stop whining.
Recently, there was a thread on Perlmonks which included the quote, “the dependency chain on Moose and MooseX is *long*.”
What is “long” here? Moose really doesn’t have that many dependencies. Also, conflating Moose with a bunch of Moose extensions is just weird.
Chris Prather then wrote a blog post explaining why Moose has each dependency. That was nice of him, but I’m not sure addressing the whiners like this is worthwhile. Moose’s dependencies need no justification. We Moose authors thought we needed them, so we used them. End of story.
I really don’t understand why people complain about dependencies. CPAN is what makes Perl great. It certainly isn’t the Perl 5 language itself, which is getting a bit long in the tooth. Without Moose, Catalyst, DateTime, DBIC, etc. how interesting would Perl 5 be compared to its numerous competitors? If you want a brilliant language where you can write everything from scratch, I suggest Haskell.
If you’re going to use Perl, you need to figure out how you will handle dependencies for your applications. There are a lot of options for managing them, including:
- Writing everything from scratch instead.
- Copying modules wholesale into your source tree.
- Copying tarballs into your source tree, and installing them as part of your build process.
- Using/making packages for your system of each dependency.
- Maintaining a local CPAN and installing from it.
- Installing things from CPAN directly and hoping nothing breaks.
- Some combination of the above.
These are all possible solutions (though the first is for idiots). Whining to module authors that they have “too many” dependencies is not a solution.
As an aside, at what point would the whiners stop whining? If Moose had half as many deps, would the whining end? I doubt it.
I will offer one sop to the whiners. If you as a module author are depending on a module, I hope you’re willing to help maintain that dependency. That means passing on bug reports (people will report a dependency’s bugs to you), writing patches, and generally helping keep your dependency chain installable.