This is a project to gather together people’s experiences with porting Ruby C extensions to Ruby 1.9.1 from earlier versions, but especially 1.8.6 and 1.8.7.

The Plan (such as it is)

It’s still a work in progress, but here’s how I’m thinking I’d like to structure it:

  1. A general introduction page which provides links to the other sections (index.textile).
  2. A section (troubleshooting.textile) that has a list of errors one is likely to encounter, both at compile time and at runtime, along with suggestions for how to solve them.
  3. A section (compatibility.textile) that has suggestions for how to make your extension run under 1.8 and 1.9.

Where applicable, it’d be excellent to include a ruby -pi -e-style command that can fix things for you.

Porting Tools

I’ve also started working on an experimental porting tool (lib/porttool.rb) that might someday be functional enough to do some of the work described in this guide for you. It’s currently very much a work in progress.


This project is tracked in Mercurial, and hosted by the good folks at Bitbucket. Feel free to fork away there if you think you might want to help out.

If you wish to contribute your own experiences, you can either send me an email with your suggestions (please include examples if possible), or you can send me a pull request.

If you contribute directly, please include a change that adds your name to the Contributors section of index.textile if you’re not already listed there. Unless you’re shy, in which case make up an exotic-sounding alias and include that.