Comparing Apples and Oranges - rubygems vs cpan part 3

In part 2 of this series I looked at the "shop window" for rubygems and cpan, and you could see a massive difference in focus both in terms of what was highlighted on the main page and the kind of documentation provided when you looked further (TL;DR is rubygems is frictionless and encouraging with few warnings or rules mentioned up front, while cpan involves poking around fusty old usenet style FAQs full of warnings, expectations and saying to wait for a week or so before you can upload).

So assuming, you've read the documentation (and in the case of uploading to CPAN got yourself a PAUSEID, which according to feedback on part 2 should take 24-56 hours rather weeks), you're ready to build a distribution and upload it.

Ruby and Perl are probably closer in this aspect than many others :

  • They both provide tools to create a new distribution

  • They both provide the command line tools to update and upload a new version of a distribution

This is where we start to where the strength and maturity of CPANs tools come through, although the rubgems site still has a much easier, more encouraging introduction to uploading.

You can build your own gem by hand, manually writing or copying the files and building/installing locally before 'push'ing up to the rubygems repo.

Jeweller provides a nice friendly tool for building ruby gem distributions.

Jeweller isn't included with ruby with ruby so needs to be downloaded and installed, it's not linked or suggested in the gem building documentation either, which is a missed opportunity. It's similar to the venerable 'xs -X' command shipped with perl since the stone age in that it builds your standard package files with default and boilerplate content ready for you to edit.

This starts to take us into an area where perl's CPAN eco-system vibrancy really delivers the goods..

Module::Starter replaced the venerable 'h2xs -x' way of building packages, with an extensible, configurable solution that allows you to customise and standardise your packaging, boilerplate and use templates.

DistZilla is a newer even more modern take on building and releasing CPAN (or "darkpan") packages, using plugins, profiles and providing a range of options from a quick simple command to build a new package to uploading to cpan, etc. Miyagawa took this and bundled up his profile with Dist::Milla providing a great, sensible set of defaults, plugins etc.

So that covers packaging tools, following parts will cover documentation, qa and support, then I plan to take some more samples of uploads and also try and do a briefer comparison to python and node packaging and repos. Hopefully I'll be able to revisit a lot of part 2 once we see the effects of the Lancaster Concensus.

p.s. sorry for the hiatus - nasty illness, new job, poorly kids and "life" got in the way as it does.


Jeweler is obsolete.

Many ruby people use Bundler's gem command (bundle gem foobar) to make a nice boilerplate. It provides rake commands and nice git integration, to make publishing to rubygems effortless.

bundle gem newgem
cd newgem
$EDITOR newgem.gemspecn lib/newgem.rb
git commit -a
rake release

Leave a comment

About hashbangperl

user-pic Geek, Dad, Husband, hacking perl in Cornwall see also my github and linkedin pages