From: John Snow <jsnow@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>,
"Andrea Bolognani" <abologna@redhat.com>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Ben Widawsky" <ben@bwidawsk.net>,
"Vladimir Sementsov-Ogievskiy" <vsementsov@virtuozzo.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
qemu-block@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
qemu-devel@nongnu.org,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Rohit Shinde" <rohit.shinde12194@gmail.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>, "Fam Zheng" <fam@euphon.net>,
"Max Reitz" <mreitz@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [PATCH v2 03/15] python: add VERSION file
Date: Mon, 19 Oct 2020 12:13:33 -0400 [thread overview]
Message-ID: <355ca901-2586-b0d0-5973-ad4c8aa2e696@redhat.com> (raw)
In-Reply-To: <20201019100207.GD236912@redhat.com>
On 10/19/20 6:02 AM, Daniel P. Berrangé wrote:
> On Mon, Oct 19, 2020 at 11:45:09AM +0200, Andrea Bolognani wrote:
>> On Wed, 2020-10-14 at 10:29 -0400, John Snow wrote:
>>> Python infrastructure as it exists today is not capable reliably of
>>> single-sourcing a package version from a parent directory. The authors
>>> of pip are working to correct this, but as of today this is not possible
>>> to my knowledge.
>>>
>>> The problem is that when using pip to build and install a python
>>> package, it copies files over to a temporary directory and performs its
>>> build there. This loses access to any information in the parent
>>> directory, including git itself.
>>>
>>> Further, Python versions have a standard (PEP 440) that may or may not
>>> follow QEMU's versioning. In general, it does; but naturally QEMU does
>>> not follow PEP 440. To avoid any automatically-generated conflict, a
>>> manual version file is preferred.
>>>
>>>
>>> I am proposing:
>>>
>>> - Python core tooling synchronizes with the QEMU version directly
>>> (5.2.0, 5.1.1, 5.3.0, etc.)
>>>
>>> - In the event that a Python package needs to be updated independently
>>> of the QEMU version, a pre-release alpha version should be preferred,
>>> but *only* after inclusion to the qemu development or stable branches.
>>>
>>> e.g. 5.2.0a1, 5.2.0a2, and so on should be preferred prior to 5.2.0's
>>> release.
>>>
>>> - The Python core tooling makes absolutely no version compatibility
>>> checks or constraints. It *may* work with releases of QEMU from the
>>> past or future, but it is not required to.
>>>
>>> i.e., "qemu.core" will always remain in lock-step with QEMU.
>>>
>>> - We reserve the right to split out e.g. qemu.core.qmp to qemu.qmp
>>> and begin indepedently versioning such a package separately from the
>>> QEMU version it accompanies.
>>
>> I think this need to be considered very carefully.
>>
>> I'm not overly familiar with the Python ecosystem but it would appear
>> that, despite PEP 440 not mandating this, many (most?) of the
>> packages uploaded to PyPi are using semantic versioning.
>
> https://packaging.python.org/guides/distributing-packages-using-setuptools/#choosing-a-versioning-scheme
>
> Semver is the recommended approach, but they explicitly list date
> based versioning as a valid alternative
>
> "Semantic versioning is not a suitable choice for all projects,
> such as those with a regular time based release cadence and a
> deprecation process that provides warnings for a number of
> releases prior to removal of a feature."
>
> That paragraph describes QEMU's scenario.
>
> NB, historically we've made arbitrary changes to the python code
> since it was not considered public API. If we make it official
> public API, then we would actually need to start following our
> deprecation process for the python code too.
>
I think our deprecation process is not tightly compatible with how
Python programmers at-large expect packages to work. Semver is more or
less the norm, despite the fact that it isn't explicitly required.
setting requirements in requirements.txt, setup.[cfg|py], Pipfile, etc
often hinge on a major version, e.g.
qemu >= 5.0
qemu >= 3.0, < 6.0
would both be common forms of describing a requirement.
Pinning specific versions is considered bad form, but in the context of
releasing a package, I often see maintainers hedging their bets and
preventing upgrades across a major version line.
For that reason I am a little weary of adopting the deprecation policy
as it exists in QEMU directly, and would propose a modification for my
purposes here:
- Features must be marked as deprecated
- They must remain in a deprecated state for [at least] 2 releases
- Deprecated features may not be removed until a major version change.
In practice, this modification is a change from "2 releases" to "at
least 2".
However, I didn't intend to pay any mind to the deprecation policy
"yet", as I have the package metadata listing the package status as
"Alpha", see below:
>> With that in mind, I think it would be unwise for qemu.* not to do
>> the same; in particular, using a version number that's not <1.0.0 for
>> a package that is very much in flux will almost certainly break
>> people's expectations, and is also not something that you can easily
>> take back at a later time.
>
> I don't think it is that big a deal, and there is clear benefit to
> having the python code version match the QEMU version that it is
> the companioon to.
>
Do you think it's fine if I start versioning at, say, "0.5.2", I could
ignore a deprecation policy for now? I have a lot of changes I want to
make and expect a lot of breaking changes very quickly.
I just wanted to try -- somehow -- to conjure up a relationship to the
QEMU package it's designed to work with.
> Ultimately the versioning scheme just impacts on the version string
> conditionals people list for their dependancies. Apps consuming QEMU
> can handle any of the version schemes without much difference.
>
> Regards,
> Daniel
>
Thanks for your input. This is the trickiest part of the process for me.
I believe there is value in distributing these tools for other
developers to help them prototype and experiment with new features, but
realize it's a tightrope walk because we're flying dangerously close to
providing a management utility that needs to care about cross-version
compatibility and so on.
I have no interest in providing stringent cross-version compatibility,
but at the same time, libraries like QMP are not really at risk of
changing all that much, actually. It will *probably* work for most QEMU
versions.
I have some further patches where I clean up the scripts in
./scripts/qmp and move them to ./python/qemu/qmp -- and that work is
making me consider a rework to this series. I think that rework matches
the spirit of an earlier suggestion of yours:
- move ./python/qemu/core/qmp.py to ./python/qemu/qmp/qmp.py
- (in a follow-up series) move ./scripts/qmp/* to ./python/qemu/qmp/*
- rename ./python/qemu/core/ to ./python/qemu/machine
(move accel.py, machine.py and qtest.py to a 'machine' pkg.)
In effect, we'd then have:
qemu.machine -- primarily a test interface for QEMU instances
qemu.qmp -- fairly ageless QMP tools/lib for talking to QEMU
and the different levels of support and "use at your own risk" become
slightly more clear between the two packages.
--js
next prev parent reply other threads:[~2020-10-19 16:16 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-14 14:29 [PATCH v2 00/15] python: create installable package John Snow
2020-10-14 14:29 ` [PATCH v2 01/15] python: create qemu.core package John Snow
2020-10-14 18:03 ` Philippe Mathieu-Daudé
2020-10-14 14:29 ` [PATCH v2 02/15] python: add qemu package installer John Snow
2020-10-14 14:29 ` [PATCH v2 03/15] python: add VERSION file John Snow
2020-10-14 16:03 ` John Snow
2020-10-19 9:45 ` Andrea Bolognani
2020-10-19 10:02 ` Daniel P. Berrangé
2020-10-19 16:13 ` John Snow [this message]
2020-10-20 8:52 ` Andrea Bolognani
2020-10-20 9:06 ` Daniel P. Berrangé
2020-10-20 9:14 ` Andrea Bolognani
2020-10-14 14:29 ` [PATCH v2 04/15] python: add directory structure README.rst files John Snow
2020-10-14 18:05 ` Philippe Mathieu-Daudé
2020-10-14 20:51 ` John Snow
2020-10-14 14:29 ` [PATCH v2 05/15] python: Add pipenv support John Snow
2020-10-14 14:29 ` [PATCH v2 06/15] python: add pylint exceptions to __init__.py John Snow
2020-10-14 14:29 ` [PATCH v2 07/15] python: move pylintrc into setup.cfg John Snow
2020-10-14 14:29 ` [PATCH v2 08/15] python: add pylint to pipenv John Snow
2020-10-14 14:29 ` [PATCH v2 09/15] python: move flake8 config to setup.cfg John Snow
2020-10-14 14:29 ` [PATCH v2 10/15] python: Add flake8 to pipenv John Snow
2020-10-14 14:29 ` [PATCH v2 11/15] python: move mypy.ini into setup.cfg John Snow
2020-10-14 14:29 ` [PATCH v2 12/15] python: add mypy to pipenv John Snow
2020-10-14 14:29 ` [PATCH v2 13/15] python: move .isort.cfg into setup.cfg John Snow
2020-10-14 18:08 ` Philippe Mathieu-Daudé
2020-10-14 14:29 ` [PATCH v2 14/15] python/qemu: add isort to pipenv John Snow
2020-10-14 14:29 ` [PATCH v2 15/15] python/qemu: add qemu package itself " 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=355ca901-2586-b0d0-5973-ad4c8aa2e696@redhat.com \
--to=jsnow@redhat.com \
--cc=abologna@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=ben@bwidawsk.net \
--cc=berrange@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=fam@euphon.net \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rohit.shinde12194@gmail.com \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
--cc=wainersm@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).