[openssl-project] Release strategy updates & other policies
Richard Levitte
levitte at openssl.org
Tue Sep 25 11:12:56 UTC 2018
In message <98774a3e-d127-dcd9-c835-3b359d69b449 at openssl.org> on Tue, 25 Sep 2018 11:53:48 +0100, Matt Caswell <matt at openssl.org> said:
>
>
> On 25/09/18 11:48, Richard Levitte wrote:
> > In message <dee8621c-7071-4bf3-3ce0-dadaff9df682 at openssl.org> on Tue, 25 Sep 2018 11:30:39 +0100, Matt Caswell <matt at openssl.org> said:
> >
> >>
> >>
> >> On 25/09/18 11:13, Tim Hudson wrote:
> >>> On Tue, Sep 25, 2018 at 8:07 PM Matt Caswell <matt at openssl.org
> >>> <mailto:matt at openssl.org>> wrote:
> >>>
> >>> On 25/09/18 10:58, Tim Hudson wrote:
> >>> > On Tue, Sep 25, 2018 at 7:23 PM Richard Levitte
> >>> <levitte at openssl.org <mailto:levitte at openssl.org>
> >>> > <mailto:levitte at openssl.org <mailto:levitte at openssl.org>>> wrote:
> >>> >
> >>> > So what you suggest (and what I'm leaning toward) means that
> >>> we will
> >>> > change our habits.
> >>> >
> >>> >
> >>> > Adoption of semantic versioning will indeed require us to change our
> >>> > habits in a number of areas - that is the point of having a single
> >>> clear
> >>> > definition of what our version numbers mean.
> >>> >
> >>> > I also do think we need to document a few things like what we mean by
> >>> > bug fix compared to a feature update as there are items which we could
> >>> > argue could either be a PATCH or a MINOR update depending on how we
> >>> > describe such things.
> >>>
> >>> Sometimes we need to add a function in order to fix a bug. How should
> >>> this be handled? e.g. there are 60 functions defined in
> >>> util/libcrypto.num in the current 1.1.0i release that weren't there in
> >>> the original 1.1.0 release.
> >>>
> >>>
> >>>
> >>> In semantic versioning those are MINOR releases. The API has changed in
> >>> a backward compatible manner.
> >>> They cannot be called PATCH releases - those are only for internal
> >>> changes that fix incorrect behaviour.
> >>> If you change the API you are either doing a MINOR or a MAJOR release.
> >>>
> >>> Now I think the flexibility we added during 1.1.0 when the MAJOR change
> >>> was to make APIs opaque was a different context where our API remained
> >>> unstable (in semantic terms) yet we did a release (for other reasons).
> >>> Under semantic versioning, 1.1.0 would have been called 2.0.0 and we
> >>> would have had to batch up the accessor API additions into a 2.1.0
> >>> release and not have those included in any 2.0.X PATCH release.
> >>>
> >>> It is quite a change under semantic versioning in some areas as it
> >>> basically requires the version to reflect API guarantees.
> >>
> >> I don't think we should batch up accessor API additions. Or in fact any
> >> others. We should release them at the right time as we do now. A move to
> >> semantic versioning shouldn't change that. That has implications for the
> >> way we manage branches and support periods/LTS.
> >
> > Most of all, it may mean more frequent MINOR releases.
> >
> >> I suggest that we only create new branches for a MAJOR version number
> >> change. We define the support periods/LTS status relative to the major
> >> version number. For a given supported major version we may update the
> >> MINOR or PATCH number at any time dependent on whether we've added any
> >> new functions or not. What we now think of as a "letter" release could
> >> be either a MINOR or a PATCH release under semantic versioning
> >> (dependent on what we've changed/added). We continue with the same
> >> policy of not adding new features to a stable branch (except where
> >> necessary to fix a bug).
> >
> > You are contradicting yourself. If we only make new branches for
> > MAJOR version number changes, then it will be allowed to add new
> > functionality in them, because that's allowed with a MINOR version
> > number change.
>
> You misunderstand me. Yes, its allowed that we can under semantic
> versioning rules. I'm saying we shouldn't.
You're saying that we should only release new functionality (new APIs)
in MAJOR releases? Mind telling us why?
> > I understand the wish to reduce the number of branches to maintain, we
> > must just make sure we know what we're talking about.
> >
> > If we would start branching MAJOR releases only, then we'll need some
> > kind of policy on what branches are still being developed (i.e new
> > MINOR releases are allowed in that branch) and what branches are in
> > maintenance mode only (i.e. only new PATCH releases allowed).
>
> All branches are in maintenance mode except master. Typically we only do
> PATCH releases for a branch. If we've needed to add a function to a
> branch (e.g. a missing accessor) then we make it a MINOR release.
> Otherwise we don't add new functionality (as now).
"as now" is false, we *do* release new functionality in minor
releases. 1.1.1 was a minor release, even though given an incorrect
version number from a semver point of view.
Had we given 1.1.0 and so on semantically correct version numbers, we
would have versioned like this:
1.1.0 => 2.0.0 (MAJOR release, has API incompatibilities)
1.1.1 => 2.1.0 (MINOR release, supposedly has new compatible API)
Cheers,
Richard
--
Richard Levitte levitte at openssl.org
OpenSSL Project http://www.openssl.org/~levitte/
More information about the openssl-project
mailing list