We’ve decided to move to a Semantic Versioning-type
policy 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 maintain the following branches:

  • trunk
  • ruby_{MAJOR}_{MINOR}

The ruby_{MAJOR}_{MINOR} branch will be maintained across TEENY releases.
We will use tags for each release.

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.


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.

Posted by zzak on 21 Dec 2013

Read more at the source