[libvirt] Switch to a time based version number rule
John Ferlan
jferlan at redhat.com
Mon Jun 13 15:12:34 UTC 2016
On 06/13/2016 08:56 AM, Daniel P. Berrange wrote:
> Currently libvirt uses a 3 digit version number, except when it uses
> a 4 digit version number. We have the following rules
>
> - major - no one has any clue about when we should bump this
> - minor - bump this when some "significant"[*] features appear
> - micro - bump this on each new release
> - extra - bump this for stable branch releases
>
> [*] for a definition of "significant" that no one knows
>
> Now consider our actual requirements
>
> - A number that increments on each monthly release
> - A number that can be incremented for stable branch releases
>
> Ok, the micro + extra digits deal with our two actual requirements, so
> one may ask what is the point of the major + minor digits ?
>
> In 11 years of libvirt development we've only bumped the major digit
> once, and we didn't have any real reason why we chose to the bump the
> major digit, instead of continuing to bump the minor digit. It just
> felt like we ought to have a 1.0 release after 7+ years. Our decisions
> about when to bump the minor digit have not been that much less arbitray.
> We just look at what features are around and randomly decide if any feel
> "big enough" to justify a minor digit bump.
>
For "some" major release changes have other implications. Perhaps ABI or
RPC compatibility (or some other inter-operability concern). It'd be
"hard" to add some feature in say February that would historically
require the "need" for a major version bump and be forced to wait until
the following January to get that feature in. Or conversely keep track
that version M.1 or M.2 introduced some incompatibility. I have no hard
examples, just trying to consider history of other projects I've been
involved in.
Then there's the migration issue - would we need come up with thoughts
and policy around how to handle what can migrate to something else (or
how many versions back we'd "restore" some saved object/domain). BTW:
This version stuff becomes more complicated for downstream releases that
can have longer cycles between minor releases. Consider RHEL ~6 month
cycles - that means perhaps RHEL 7.4 and 7.6 could use drastically
different libvirt version numbers (which hopefully wouldn't have some
other incompatible change).
Beyond that for certain enterprise corporations, using a "Major.0" is
not allowed because "historically" in the industry a major.0 release
comes with issues and has "compatibility implications". For one OS I
worked on in the past, we specifically chose to make a release "7.1"
instead of "7.0" for that very reason! We did create a 7.0 release, but
it was *purely* an advanced development and limited release (highly
controlled). For that release we had to be compatible with a 5.n release
as well (there was also a couple of 6.n releases). Again the mindset
being Major version number change implies major changes.
>
> Way back in the early days of libvirt, we had exactly this kind of
> mess when deciding /when/ to actually make releases. Sometimes we'd
> release after a month, sometimes after 3 months, completely arbitrarily
> based on whether the chances felt "big enough" to justify a release.
>
> Feature based release schedules are insanity and so we wised up and
> adopted the time base release schedule where we release monthly (except
> over xmas/new year period).
>
>
> I venture to suggest that the reasons for switching from feature to
> time based release schedules, also apply to version numbers. IOW we
> should switch to a time based version number change rule, instead of
> a feature based version number change rule.
>
>
> So what I'm suggesting is that we adopt the following rule
>
> - major: bumped for the first release of each year
> - minor: bumped for every major release
> - micro: bumped for stable branch releases
>
>
> Rather than wait until next January to adopt this rule, I'd suggest we
> pretend that it is January now, and thus switch our next version number
> to be 2.0.0, and jump to 3.0.0 in January 2017.
Not against being avant garde with respect to our numbering (after all
it's generally just a number).
If we were to go this way, then I believe we should just start with the
July release being "2.5.0". That way we don't have to "think harder"
down the road.
John
>
> IOW, over the next 2 years we'll do the following releases off master:
>
> - Jul 1, 2016 - 2.0.0
> - Aug 1, 2016 - 2.1.0
> - Sep 1, 2016 - 2.2.0
> - Oct 1, 2016 - 2.3.0
> - Nov 1, 2016 - 2.4.0
> - Dec 1, 2016 - 2.5.0
>
> - Jan 15, 2017 - 3.0.0
> - Mar 1, 2017 - 3.1.0
> - Apr 1, 2017 - 3.2.0
> - May 1, 2017 - 3.3.0
> - Jun 1, 2017 - 3.4.0
> - Jul 1, 2017 - 3.5.0
> - Aug 1, 2017 - 3.6.0
> - Sep 1, 2017 - 3.7.0
> - Oct 1, 2017 - 3.8.0
> - Nov 1, 2017 - 3.9.0
> - Dec 1, 2017 - 3.10.0
>
> - Jan 15, 2018 - 4.0.0
> - Mar 1, 2018 - 4.1.0
> - Apr 1, 2018 - 4.2.0
> - ....
>
>
> The stable release branch naming would just use the first major + minor
> digit in its name.. eg the stable branch for 2.3.0 would use v2.3-maint
> and do stable releases 2.3.1, 2.3.2, 2.3.3, etc.
>
> Regards,
> Daniel
>
More information about the libvir-list
mailing list