On Tue, Dec 06, 2022 at 06:59:30PM +0100, Tim Düsterhus wrote:
> William,
> 
> On 12/6/22 15:37, William Lallemand wrote:
> > As I already mentionned, I don't really like the "latest" keyword for
> > the OpenSSL version as it prevent us to have reproducible builds.
> > It updates versions without warning, even major ones.
> 
> I agree and also was not really happy with the 'latest' back when it was
> introduced in the first place, but didn't care strongly enough to speak up
> then.

No problem, it's always easier to see what we've missed after it reaches
its limits :-)

> > What I suggest is to stop using "latest" for the "git push" CI, but
> > using it only in a separate CI (once a day/week I don't know). And only
> > use fixed version of the libraries on the CI so builds are not broken by
> > external components. Because in my opinion the "git push" CI is to test
> > our code, not the libraries.
> > 
> 
> I don't even think such a weekly job is necessary [1]. Add an item to the
> release checklist "check if any new SSL versions are available and add them
> to matrix.py" and this should be fine, all SSL versions will then be updated
> every 6 months and can also be updated on demand for important releases.
> It's similar to how I simply rerun the Coccinelle patches from time to time
> to fix whatever crept in since the last release.

I'm seeing a slightly different approach here. We need to keep in mind
that:
  - dev must be as forward-thinking as possible; as such, being aware
    that something is going to break soon is useful, particularly when
    it comes to forthcoming changes in third party dependencies. I.e.
    openssl 3 breakage was reported upfront and that was fortunate
    because a lot of changes were required to adapt to it, long before
    it was even released. So I don't know if the weekly job is the best
    option or not, but right now, watching form time to time how it goes
    with openssl 3.1-dev is useful. Here I'm speaking about a branch, it
    thus means that we're following what significant changes may bother
    us. It's purely integration testing, and we could decide that one
    major upgrade will not be the target for the current version because
    it requires too much work. But if we focus on such a target we should
    be as up-to-date as possible (no need to alarm on past breakage if
    the issue is since fixed). That's where following a -latest from a
    lib can be useful.

  - dev must also tell us if we're going to cause breakage on what we
    expect to support. E.g. once we see that 3.1-dev looks good and we
    decide to enable it, we'll also need to be able to quickly follow it,
    because until it's released, it may revert some changes or change its
    API and cause breakage. It's not like a stable version we can trust,
    and we need to know as well if we finally prefer to give up because
    going back-and-forth indicates a third-party dependency is not stable
    enough for example, or we could mention before the release that it's
    only experimental for now.

  - even when adopting a stable release, we'll suffer from bugs in third
    party dependencies just like we suffer from our own bugs. If OpenSSL
    3.1.0 is released and we decide to follow its stable branch, maybe
    some tests will randomly fail from time to time. And we probably
    don't want to manually change its version every week to follow the
    first post-release fixes that we may need to stabilize the CI. In
    this case again, following the latest from a given branch would be
    useful, but it becomes less critical. Indeed, generally the most
    annoying issues should stabilize during the very first versions, and
    we don't need to care as much about updating the lib once the CI works
    fine again.

  - however, once we release a version, the most important is to make sure
    there are as few moving parts as possible. We should not change any
    dependency automatically for the CI. Triggering the build on the same
    release two weeks apart should execute the same tests, otherwise we
    can think that we broke something during a backport while it's not
    the case (that's in fact how we first noticed the problem).

Thus I think that:
  - for dev, adopting the latest version of a chosen branch (released or
    dev) if possible would be desirable so that we're informed ASAP that
    the branch we're expecting to support is experiencing/causing some
    trouble ;

  - for dev, watching weekly or so the level of support of future versions
    that we have not yet planed to support would help prepare internals
    where needed ;

  - for stable, we'd just stick to the version that was in effect that the
    moment of the release (i.e. the version the tests were run on during
    dev).

And that would make sense considering that a release is nothing more than
freezing changes between dev and stable.

I'm particularly conscious that there may be technical limitations for
the -latest stuff and am not firmly sold on that. I'm just explaining
some principles that should IMHO help us orient our choices when facing
constraints (and I think that what we have right now is already quite
good for -dev, though it could indeed possibly be improved).

Just my two cents,
Willy

Reply via email to