10

I started using Dist::Zilla several months ago. However, at YAPC::NA someone mentioned that they use ShipIt instead. Then today I noticed a .shipit file in miyagawa's cpanminus directory on github, so I decided to look into it some more...

My initial impression is that ShipIt has a subset of what is available with Dist::Zilla, but I don't want to jump to conclusions. So, for those who have had experience with both, what are the strengths/weaknesses of ShipIt vs Dist::Zilla?

crossposted at perlmonks

Kent Fredric
  • 56,416
  • 14
  • 107
  • 150
Christopher Bottoms
  • 11,218
  • 8
  • 50
  • 99
  • possible duplicate of [Which framework should I use to write modules?](http://stackoverflow.com/questions/73889/which-framework-should-i-use-to-write-modules); see also [What's the best system for installing a Perl web app?](http://stackoverflow.com/questions/143680/whats-the-best-system-for-installing-a-perl-web-app), and [Should I use Module::Install or Module::Build?](http://stackoverflow.com/questions/369209/should-i-use-moduleinstall-or-modulebuild) – Ether Aug 04 '10 at 21:56
  • 3
    Not voting to close as none of those links (or SO in general) seem to cover ShipIt – Eric Strom Aug 04 '10 at 22:10
  • 2
    @Eric: if the question is the same, then the answers should be updated to include ShipIt. I know nothing about it, so I'd welcome a comparison of it against the other well-known packaging engines. – Ether Aug 04 '10 at 22:36
  • 2
    @Ether: I don't believe that the proposed duplicates are the same. The first link is a broad recommendation link. The second link has nothing to do with this particular question The third link is a comparison question, but not for either of the above mentioned Module Builders. They are specifically asking for a comparison between 2 specific Module Builders. – J.J. Aug 04 '10 at 22:45
  • The first link above *should* include Shipit, so I think this question should be merged into that one, rather than having comparisons between various distribution systems scattered across multiple posts. – Ether Aug 09 '10 at 16:15

2 Answers2

7

I'm the author of Dist::Zilla.

I evaluated ShipIt pretty extensively before choosing to go ahead and write Dist::Zilla, and initially they covered almost exactly the same problem space: doing all the boring grunt work of building and uploading a CPAN distribution. All of the features that Dist::Zilla now has beyond ShipIt are later additions, more or less.

If you only need the features of ShipIt, I still advise you to strongly consider Dist::Zilla, for one very simple reason: hackability. If I had been able to not write something new, I would've used ShipIt, but I found it to be underdocumented and difficult to extend. Its plugins were not generic enough and the core behavior made too many assumptions about how you'd like to work.

Dist::Zilla was inspired specifically by this problem: it turned everything into a plugin, and every plugin was given a very, very small interface so that its assumptions would be forcibly limited.

One benefit of ShipIt over Dist::Zilla is that ShipIt has (to the best of my knowledge) no plugins that will alter the way you actually write your code. This means your documentation will still look the same, you will still have a Makefile.PL, and so on. Some hackers don't like that so many DZ-based dists fundamentally change the assumptions of how to test and build CPAN code from its source repository. ShipIt will never change that.

It's possible to avoid using any such plugins with Dist::Zilla, but in general my experience is that people do use them, almost always, in one form or another.

rjbs
  • 1,327
  • 11
  • 18
4

As far as I can tell, my initial impressions were correct.

ShipIt provides functionality for releasing distributions:

  • keeping track of version numbers
  • integrating with version control
  • uploading to CPAN
  • displaying the changelog file in an editor so that you can edit it before release.


Dist::Zilla, by default, provides the ability to upload distributions to CPAN with a single command (i.e. dzil release). Dist::Zilla also has functionality for creating new distributions (i.e. dzil new My::New::Module). It also automatically generates so many of the files that I used to have to maintain by hand.

Using plugins, Dist::Zilla seems able to provide most, if not all, of the functionality available with ShipIt. It is also relatively easy to add brand new features using plugins.

Christopher Bottoms
  • 11,218
  • 8
  • 50
  • 99