Full disclosure before I get started here. Loren and I are friends. I'd like to think that this blog post is mostly unbiased, but I'll let you come to your own conclusions.

Maintaining a piece of core infrastructure for a growing community is hard. Even if the code isn't especially complex, getting the release management issues right and keeping everybody happy is incredibly challenging.

Sometimes, that means making concessions, like continuing to maintain an API you don't like — or code that gets in the way of a refactoring you want to do to make your own life easier. But that's the challenge of maintaining software that tens of thousands of people depend on every day.

On Legacy Code

Did you know that in the linux kernel project, every commit absolutely must build cleanly and run the tests successfully to be accepted? Kernel hackers go to great lengths to make every patch fit these requirements. It's an enormous pain in the ass for the developers, but it means that when something breaks, git-bisect will find it for them.

Going to that much trouble just to be able to use git-bisect is a huge headache for developers. But it's worth it because the linux kernel is an important project that gets used by millions of people.

The problem with RubyGems isn't that the tests don't pass every commit, but that APIs have been disappearing too quickly. It's an important enough project used by enough people that deprecations should be measured in years not months.

The current maintainers of RubyGems don't want to live in that kind of world. They want to move quickly to refactor the codebase, deprecating and removing APIs where it suits them. And who could blame them? I wouldn't want to maintain a huge pile of legacy code either. Most programmers wouldn't.

You'd have to be crazy...

Actually, Loren is just about the only guy I know who isn't bothered by this sort of thing in the slightest. In fact, he seems to enjoy maintaining legacy code. It's a sick pleasure, and I know a little something about sick pleasures...

In all seriousness, a guy who cares about release management as deeply as Loren is one in a million. The fact that he's also an extremely talented engineer makes him one in a hundred million. When he told me a couple of months ago that he'd be willing to maintain RubyGems, I gave him an "are you serious?" look. Turns out, he was.

So, here we've got a ridiculously talented programmer who wants to make all of our lives easier by living with a whole bunch of legacy code for us. It really is a no-brainer.

The RubyGems team should bring Loren on board to run the project. He's more than willing to put in the time and effort, and he's the best person I can imagine for the job. The proof is in the pudding: Loren (and team) have put together a fork of RubyGems (1.3.7) that maintains backwards compatibility, and backports all of the performance improvements made since them.

SlimGems

SlimGems is a really great project with a really horrible name. It's an effort to make a RubyGems with a stable API (the one from 1.3.7), a better code base, and faster gem installs. And there are a lot more exciting plans for the future. Check out Loren's blog post for more info.

More importantly than any of that, though, is how helpful and friendly Loren is when it comes to bug reports and pull requests. He did it with YARD, and now he's doing it with SlimGems. I've never heard anybody give him anything but rave reviews.

Until Loren is an official RubyGems maintainer, I'll be running SlimGems. I moved our 30 our so servers at work over too. If that sounds interesting to you, 'gem install slimgems' is all it takes. Oh, and if you want to revert back to your original RG install, just 'gem uninstall slimgems'. That's just how we roll.

If you have any trouble or feedback, jump in to #slimgems on freenode, or open a GitHub issue, and we'll be happy to help you out.

The Future

Forks are good for communities. They're a great place for new ideas to be proven (think rails/merb). SlimGems has already demonstrated that its goals are possible. They've already achieved many of them. I'm ready to see the code and teams merged. Until then, do yourself a favour and 'gem install slimgems'.