Ruby version policy changes starting with Ruby 2.1.0

We’ve decided to change the Ruby versioning policy to a more Semantic Versioning type starting with the release of Ruby 2.1.0.

In order to provide a more well defined and properly utilized versioning scheme for Ruby, we’ve decided to gradually switch to the following policy.

Policy Changes

This policy is based off a proposal by ruby-lang.org system administrator Hiroshi Shibata (@hsbt).

Version Schema

  • MAJOR: increased when incompatible change which can’t be released in MINOR
    • Reserved for special events
  • MINOR: increased every christmas, may be API incompatible
  • TEENY: security or bug fix which maintains API compatibility
    • May be increased more than 10 (such as 2.1.11), and will be released every 2-3 months.
  • PATCH: number of commits since last MINOR release (will be reset at 0 when releasing MINOR)

Branching Schema

We will continue to maintain the following branches:

  • trunk
  • ruby_{MAJOR}_{MINOR}_{TEENY}

API Compatibility

The following traits can be marked as an incompatible change, requiring an increase in the MINOR version:

  • Removal of C-level api features
  • Backwards incompatible changes or additions

ABI Compatibility

ABI will comply with the following scheme: {MAJOR}.{MINOR}.0

We will give our best effort to keep ABI compatibility within the same MINOR level releases, so TEENY will be fixed at 0.

References

To read up more on this proposal please see the following links:

Thank you!

I’d like to personally thank everyone who contributed to this discussion. Each step we take is closer to a more stable and effective Ruby.