From: Markus Armbruster <armbru@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: qemu-devel <qemu-devel@nongnu.org>,
"Daniel Berrangé" <berrange@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Akihiko Odaki" <akihiko.odaki@daynix.com>
Subject: Re: Build platform guarantees, docs, tests, and snakes in the garden
Date: Tue, 17 Jun 2025 14:34:14 +0200 [thread overview]
Message-ID: <87sejytum1.fsf@pond.sub.org> (raw)
In-Reply-To: <CAFn=p-YuqzXvWF-cGLUc0LVVMe2Rinx9+LOjvpHRY-vRrPyJow@mail.gmail.com> (John Snow's message of "Thu, 5 Jun 2025 15:35:04 -0400")
John Snow <jsnow@redhat.com> writes:
> Hi, I've long been a little confused about the specifics of our build
> platform guarantee and how it applies to documentation and testing.
"Guarantee" feels too strong. See below.
> My *current* understanding is that our build platform guarantee applies to
> both unit tests and building documentation, but that this requirement may
> not be as absolute as I imagine it.
>
> The way I have endeavored to manage the Python tooling in our tree so far
> is to preserve, without fail, our ability to perform fully offline builds
> on all supported platforms (provided that the right distro repo packages
> are available).
Relevant part of docs/about/build-platforms.rst:
Some build dependencies may follow less conservative rules:
Python runtime
Distributions with long-term support often provide multiple versions
of the Python runtime. While QEMU will initially aim to support the
distribution's default runtime, it may later increase its minimum version
to any newer python that is available as an option from the vendor.
In this case, it will be necessary to use the ``--python`` command line
option of the ``configure`` script to point QEMU to a supported
version of the Python runtime.
As of QEMU |version|, the minimum supported version of Python is 3.9.
Python build dependencies
Some of QEMU's build dependencies are written in Python. Usually these
are only packaged by distributions for the default Python runtime.
If QEMU bumps its minimum Python version and a non-default runtime is
required, it may be necessary to fetch python modules from the Python
Package Index (PyPI) via ``pip``, in order to build QEMU.
We "initially aim to support the distribution's default runtime". Once
we don't, fetching from PyPI "may be necessary". This seems to imply
that such fetching will be necessary when we use the default runtime.
I read "aim" as "make an effort". This isn't exactly a "guarantee".
It's much, much weaker than "to preserve, without fail, our ability to
perform fully offline builds on all supported platforms".
Keeping fully offline builds working is certainly desirable, but not
regardless of cost.
> The Python virtual environment created at configure time
> bends over backwards to use system packages *whenever possible*, and the
> list of exceptions - notably Meson itself - uses vendored packages only in
> very specific cases where it is possible to vendor such packages. Fetching
> packages from PyPI is generally offered only as a convenience for developer
> workstations to, in general, save developers from having to know anything
> about Python. (I think I've done a good job there, to be honest!)
You have: few people have noticed your work.
> (Notably: Meson is pure python and has no dependencies, so it is possible
> to vendor it for offline builds. Tools like Sphinx, however, have many
> dependencies and are not so easily vendored. Thus, we have created a
> tenuous arrangement where we are allowed to use versions of Meson that
> otherwise would break our build platform guarantee.)
>
> Lately, we've had some issues with the wide range of Sphinx versions we
> support presenting various cross-platform difficulties. In particular,
> Akihiko Odaki has sent patches to bump our Sphinx version to at least
> 6.2.1, because platforms with Python 3.13.1 can no longer run Sphinx 3.x at
> all, so having that be our "default install version" causes issues on newer
> platforms.
>
> However, if we take as iron-clad our commitment to the build platform
> promise -- *and* guarantee offline/tarball builds as well -- then Debian 12
I do not think such a commitment exists; see my reading of
build-platforms.rst above.
Even if it did, treating it as iron-clad would be foolish. We need to
consider cost vs. reward, always.
> (as an example) only offers Sphinx 5.3.0 and not newer unless we allow
> internet access to fetch Sphinx 6.2.1. This is not a problem for developer
> workstations at all, but I am unclear on what problems this may cause for
> tarball releases and downstream offline/isolated/reproducible builds, if
> any.
>
> In this case, we can (probably) "fix" the issue by continuing to allow
> older Sphinx while preferring a newer Sphinx version when it is missing,
> but then we lose the ability to make code cleanups and drop a lot of
> back-compat crud. If memory serves, there were other issues recently where
> older versions of Sphinx behaved differently from newer versions, causing
> intermittent failures that were hard to track down.
>
> What I'd like to know is: what precisely are our options in this scenario?
> Do we consider it acceptable for some platforms to be unable to build docs
> offline? How highly do we value the ability to locally build docs for any
> given release?
I believe the value of fully offline builds goes down as the build
platform ages.
Initially, the distribution will (hopefully!) want to package the then
current version of QEMU. We want to make that easy. Enabling fully
offline builds are part of that.
Perhaps the distribution later wants to package / build newer versions
of QEMU fully offline on the now aged release. I'd expect this to
happen less and less as the distribution ages. Making it easy is still
desirable, but worth less and less trouble to us.
> Before I throw my weight behind any given option, I just want to know what
> we consider our non-negotiable obligations to be.
In my opinion: none. We should consider the tradeoffs, and make
pragmatic decisions.
next prev parent reply other threads:[~2025-06-17 16:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-05 19:35 Build platform guarantees, docs, tests, and snakes in the garden John Snow
2025-06-13 5:21 ` Akihiko Odaki
2025-06-17 12:34 ` Markus Armbruster [this message]
2025-06-18 7:53 ` Paolo Bonzini
2025-06-24 6:45 ` Markus Armbruster
2025-06-25 20:42 ` John Snow
2025-06-26 6:23 ` Markus Armbruster
2025-07-02 19:24 ` Paolo Bonzini
2025-07-02 19:24 ` Paolo Bonzini
2025-07-03 8:57 ` Markus Armbruster
2025-07-07 9:10 ` Daniel P. Berrangé
2025-07-09 18:39 ` John Snow
2025-07-09 19:40 ` Paolo Bonzini
2025-07-09 20:26 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sejytum1.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=akihiko.odaki@daynix.com \
--cc=berrange@redhat.com \
--cc=jsnow@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.