Hi,

The major problem that we are addressing with an independent release cycle
is that the
large majority of our users do not use released versions, neither from ASF
archives nor
from Cargo crates. They use a git hash commit. This is a problem because
our git hashes
are *de facto* releases.

This hints that our development is not stable and we should increase the
cadency
over which we release, even if backward incompatibly.
Doing so mitigates the risks associated with unsigned and unvoted software
that our
processes are aimed to address.
Assuming SemVer, a major version every X months forbids this, as it freezes
the cadency
in both directions (faster or slower).

I do agree that a release that bundles all implementations and ships them
as "this bundle
is guaranteed to be spec-interoperable" is very valuable, should be
preserved, and Rust should be part of it.
It offers strong guarantees of interoperability across implementations at a
specific "code-point"
across implementations.

To address these two requirements, my suggestion is that we continue to
release arrow/apache as is,
but instead of containing every implementation versioned as X, it contains
every implementation with the
latest released version of their API *and* spec-compliant with the latest
apache/arrow (as per integration tests).
I.e. the "code-point" for Rust is a specific version, which maps to a
uniquely identifiable source code.

Note that this helps in both directions: it would also make it easier for
e.g. pyarrow to be major-released less often,
if their maintainers believe that its X.0.0 API can remain stable for some
more time.

> one rationale from our current policy of "everyone releases together" is
that you don't
> have to guess as much whether (for example) Arrow Java 3.0 and Arrow Rust
3.0
> are compatible and using the same format.

I agree that we would lose this. I would document which version
the release refers to. E.g. "this release contains the following releases,
published in
their respective package managers: Java 3.0, pyarrow 3.0, Rust 4.2.1, Julia
2.2.1, and also available at [link to archive]".
This allows people to point to specific versions if they want this
assurance in e.g. a cross-language application, or
in a contract.

Best,
Jorge



On Sat, Apr 10, 2021 at 4:27 AM QP Hou <q...@scribd.com.invalid> wrote:

> On Fri, Apr 9, 2021 at 4:57 PM Weston Pace <weston.p...@gmail.com> wrote:
> > Note, these problems technically exist now with the concept that any
> > language can release a patch at any time.  Also, since Rust isn't
> > directly compiling against other Arrow libs and we are only talking
> > about interoperability it's probably not going to be too big of a
> > deal.  Still, worth giving some thought ahead of time.
>
> It looks like the requirements we have here are:
>
> * Catch integration issues between development trunks between two
> repos as soon as we can
> * Avoid development trunk of a repo from blocking releases of another repo
>
> How about we always run the integration tests against the latest
> releases in both repos by default. On top of that, we run integration
> tests in the Rust repo against nightly Arrow to help catch integration
> issues between development trunks. In the Rust repo, we could enforce
> the rule that a Rust release will only be cut if the release candidate
> passes the integration tests for both the latest released and nightly
> Arrow code base.
>
> This way, we will still be able to catch integration issues between
> development code trunks on a daily basis. It would be Rust developers'
> responsibility to report these integration errors back to the main
> repo.
>
> From the main Arrow repo's point of view, there is less work since it
> only needs to care about the last stable Rust release.
>
> From the Rust repo's point of view, we are effectively trading extra
> maintenance burden for more release flexibility.
>
> Thanks,
> QP
>

Reply via email to