diff mbox

[v5,1/2,(for,2.10)] docs: document support lifetime for features

Message ID 20170719100802.14094-2-berrange@redhat.com
State New
Headers show

Commit Message

Daniel P. Berrangé July 19, 2017, 10:08 a.m. UTC
There is currently no explicit guidance on the duration of support
for features such as versioned machine types, which have a finite
useful lifespan. Thus apps / users cannot predict how much time
they might be able to use a feature for, before it is removed (if
ever).

This adds a new appendix that lists items which have finite lifecycles,
such as machine types. For items which are generally expected to be
supported indefinitely, it sets out the policy around deprecation
and removal, should it be needed.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 qemu-doc.texi | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

Comments

Thomas Huth July 19, 2017, 11:56 a.m. UTC | #1
On 19.07.2017 12:08, Daniel P. Berrange wrote:
> There is currently no explicit guidance on the duration of support
> for features such as versioned machine types, which have a finite
> useful lifespan. Thus apps / users cannot predict how much time
> they might be able to use a feature for, before it is removed (if
> ever).
> 
> This adds a new appendix that lists items which have finite lifecycles,
> such as machine types. For items which are generally expected to be
> supported indefinitely, it sets out the policy around deprecation
> and removal, should it be needed.
> 
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>  qemu-doc.texi | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
> 
> diff --git a/qemu-doc.texi b/qemu-doc.texi
> index 48af5155c7..200c0f7d0a 100644
> --- a/qemu-doc.texi
> +++ b/qemu-doc.texi
> @@ -38,6 +38,7 @@
>  * QEMU Guest Agent::
>  * QEMU User space emulator::
>  * Implementation notes::
> +* Support lifetime::
>  * License::
>  * Index::
>  @end menu
> @@ -3128,6 +3129,42 @@ Run the emulation in single step mode.
>  
>  @include qemu-tech.texi
>  
> +@node Support lifetime
> +@appendix Support lifetime
> +
> +In general features are intended to be supported indefinitely once
> +introduced into QEMU.
> +
> +In the event that a feature needs to be removed, it will be listed
> +in the ``Deprecated features'' appendix of this document. The feature
> +will remain functional for 2 releases prior to actual removal.
> +
> +Deprecated features may also generate warnings on the console when
> +QEMU starts up, or if activated via a monitor command, however,
> +this is not a mandatory requirement.

Ack for the part above.
I still think we should not auto-remove old machine types blindly, but
take a little bit more care there...

So maybe submit above part now for 2.10, to get that in and thus the
clock running, and then let's discuss the machine type part again
independently for 2.11?

 Thomas

> +Certain features have an inherently finite lifetime, and thus
> +will be removed on a fixed schedule, without following the normal
> +deprecation process. Such features are listed in the sections
> +that follow.
> +
> +@node Machine types
> +@section Machine types
> +
> +For architectures which aim to support live migration compatibility
> +across releases, each release will introduce a new versioned machine
> +type. For example, the 2.8.0 release introduced machine types
> +``pc-i440fx-2.8'' and ``pc-q35-2.8'' for the x86_64/i686 architectures.
> +
> +To allow live migration of a guest running on a 2.8.0 release to a
> +2.9.0, the QEMU 2.9.0 version must support the ``pc-i440fx-2.8'' and
> +``pc-q35-2.8''. To allow users live migrating VMs to skip multiple
> +intermediate releases when upgrading, new releases of QEMU will
> +support machine types from many previous versions.
> +
> +The supported lifetime for versioned machine types is 12 releases,
> +which is equivalent to 4 years worth of previous QEMU releases.
Paolo Bonzini July 24, 2017, 1:49 p.m. UTC | #2
On 19/07/2017 13:56, Thomas Huth wrote:
> +@node Machine types
> +@section Machine types
> +
> +For architectures which aim to support live migration compatibility
> +across releases, each release will introduce a new versioned machine
> +type. For example, the 2.8.0 release introduced machine types
> +``pc-i440fx-2.8'' and ``pc-q35-2.8'' for the x86_64/i686 architectures.
> +
> +To allow live migration of a guest running on a 2.8.0 release to a
> +2.9.0, the QEMU 2.9.0 version must support the ``pc-i440fx-2.8'' and
> +``pc-q35-2.8''. To allow users live migrating VMs to skip multiple
> +intermediate releases when upgrading, new releases of QEMU will
> +support machine types from many previous versions.
> +
> +The supported lifetime for versioned machine types is 12 releases,
> +which is equivalent to 4 years worth of previous QEMU releases.

I think there's still no consensus on this.  The first two paragraphs
should be added to the documentation for -machine in qemu-options.hx,
since "-machine [type=]foo" is currently not documented at all.

Paolo
Daniel P. Berrangé July 24, 2017, 2:11 p.m. UTC | #3
On Mon, Jul 24, 2017 at 03:49:29PM +0200, Paolo Bonzini wrote:
> On 19/07/2017 13:56, Thomas Huth wrote:
> > +@node Machine types
> > +@section Machine types
> > +
> > +For architectures which aim to support live migration compatibility
> > +across releases, each release will introduce a new versioned machine
> > +type. For example, the 2.8.0 release introduced machine types
> > +``pc-i440fx-2.8'' and ``pc-q35-2.8'' for the x86_64/i686 architectures.
> > +
> > +To allow live migration of a guest running on a 2.8.0 release to a
> > +2.9.0, the QEMU 2.9.0 version must support the ``pc-i440fx-2.8'' and
> > +``pc-q35-2.8''. To allow users live migrating VMs to skip multiple
> > +intermediate releases when upgrading, new releases of QEMU will
> > +support machine types from many previous versions.
> > +
> > +The supported lifetime for versioned machine types is 12 releases,
> > +which is equivalent to 4 years worth of previous QEMU releases.
> 
> I think there's still no consensus on this.

Indeed, which is exactly why I sent this patch - we need to come up
with a sensible policy here, so we can stop repeating the same debate
over & over & over each time some proposes a patch to kill off some
random old machine type.

The 12 release / 4 year figure was a fairly arbitrary starting
point to which I'd be hoping to see critical reviewer feedback
on (with possible counterproposals) so we can try to get something
documented, to put an end to the repeated debates in this area
each time someone proposes a patch.

>                                              The first two paragraphs
> should be added to the documentation for -machine in qemu-options.hx,
> since "-machine [type=]foo" is currently not documented at all.

I'll happily send a patch for the docs for qemu-options.hx.

Regards,
Daniel
Paolo Bonzini July 24, 2017, 2:26 p.m. UTC | #4
On 24/07/2017 16:11, Daniel P. Berrange wrote:
>>> +
>>> +The supported lifetime for versioned machine types is 12 releases,
>>> +which is equivalent to 4 years worth of previous QEMU releases.
>> I think there's still no consensus on this.
> 
> Indeed, which is exactly why I sent this patch - we need to come up
> with a sensible policy here, so we can stop repeating the same debate
> over & over & over each time some proposes a patch to kill off some
> random old machine type.
> 
> The 12 release / 4 year figure was a fairly arbitrary starting
> point to which I'd be hoping to see critical reviewer feedback
> on (with possible counterproposals) so we can try to get something
> documented, to put an end to the repeated debates in this area
> each time someone proposes a patch.

I agree.  At the moment, the status is "machine types never die".

We can change it, but I think that we should also make a decision on
whether removing machine types implies removing properties that only
exist for backwards-compatibility reasons.

4 year seems like a long time, but it can actually be pretty taxing for
RHEL.  I'm pretty sure that around RHEL 8.4 (some time between
2020-2022) we'll need a 1.5-ish machine type (2016).

Paolo

>>                                              The first two paragraphs
>> should be added to the documentation for -machine in qemu-options.hx,
>> since "-machine [type=]foo" is currently not documented at all.
> I'll happily send a patch for the docs for qemu-options.hx.
Daniel P. Berrangé July 24, 2017, 2:47 p.m. UTC | #5
On Mon, Jul 24, 2017 at 04:26:24PM +0200, Paolo Bonzini wrote:
> On 24/07/2017 16:11, Daniel P. Berrange wrote:
> >>> +
> >>> +The supported lifetime for versioned machine types is 12 releases,
> >>> +which is equivalent to 4 years worth of previous QEMU releases.
> >> I think there's still no consensus on this.
> > 
> > Indeed, which is exactly why I sent this patch - we need to come up
> > with a sensible policy here, so we can stop repeating the same debate
> > over & over & over each time some proposes a patch to kill off some
> > random old machine type.
> > 
> > The 12 release / 4 year figure was a fairly arbitrary starting
> > point to which I'd be hoping to see critical reviewer feedback
> > on (with possible counterproposals) so we can try to get something
> > documented, to put an end to the repeated debates in this area
> > each time someone proposes a patch.
> 
> I agree.  At the moment, the status is "machine types never die".
> 
> We can change it, but I think that we should also make a decision on
> whether removing machine types implies removing properties that only
> exist for backwards-compatibility reasons.
> 
> 4 year seems like a long time, but it can actually be pretty taxing for
> RHEL.  I'm pretty sure that around RHEL 8.4 (some time between
> 2020-2022) we'll need a 1.5-ish machine type (2016).

QEMU 1.5 was 2013, so that's saying RHEL 8 will want support for QEMU
machine types (and all their properties) that are ~10 years old from
upstream QEMU POV.  Possibly longer, as RHEL lifetime seems to only
ever increase

Generally I see the following choices:

 1. Upstream never removes machine types or properties they use

 2. Upstream removes machine types after N releases / Y years,
    but keeps properties related to them forever

 3. Upstream removes machine types after N releases / Y years,
    & removes some associated properties at same time.

 4. Upstream removes machine types after N releases / Y years,
    & optionally marks associated properties as deprecated,
    removing them in accordance with deprecation policy.

Option 1 is current state of play, leaving burden on upstream
forever, and letting machine list grow without bound.

Option 2 stops the '-M ?' list growing without bound, but aside from
that is the same as option 1. Not much difference from option 1, since
supporting the properties is what adds the core maint burden, not the
machine types themselves.

Options 3/4 reduce burden on QEMU upstream, at cost of requiring the
downstream vendor(s) to un-delete properties that upstream decides to
remove and deal with any fallout that entails.  The work involved in
undeleting stuff is larger than the work involved in keeping it alive
in upstream, because downstream has to undelete it, resolve conflicts,
and then do all the same work upstream would have been doing had it
not delete it & deal with further merge conflicts.


Downstreams may not care about difference betweeen option 1 & 2 if
they define their own custom machine types (RHEL & Ubuntu both do)

Effectively it comes down to who should have the maint burden,
upstream or downstream.



If it takes more work downstream to undelete & maintain machine
types in the downstream fork, that means downstream maintainers
less free time to improve QEMU upstream. From that POV, deleting
machine types & props upstream is actually counterproductive to
upstream on balance. The rational thing would thus be to stick
with status quo, and explicitly cdeclare that upstream will *never*
delete machine types, or make their lifetime long enough for the
longest lived downstream (10 years min & by the time we get to
10 years, it might even be 15 years). 


Regards,
Daniel
Paolo Bonzini July 24, 2017, 2:58 p.m. UTC | #6
On 24/07/2017 16:47, Daniel P. Berrange wrote:
> If it takes more work downstream to undelete & maintain machine
> types in the downstream fork, that means downstream maintainers
> less free time to improve QEMU upstream. From that POV, deleting
> machine types & props upstream is actually counterproductive to
> upstream on balance. The rational thing would thus be to stick
> with status quo, and explicitly cdeclare that upstream will *never*
> delete machine types, or make their lifetime long enough for the
> longest lived downstream (10 years min & by the time we get to
> 10 years, it might even be 15 years). 

Yeah, that makes sense.  At the moment at least Red Hat and Canonical
create custom machine types.  As soon as neither Red Hat nor Canonical
contribute to upstream QEMU, the policy can change.  But honestly, even
though I have an obvious conflict of interest, I see no reason to make
things more complicated for downstreams that are active contributors to
QEMU...

Paolo
diff mbox

Patch

diff --git a/qemu-doc.texi b/qemu-doc.texi
index 48af5155c7..200c0f7d0a 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -38,6 +38,7 @@ 
 * QEMU Guest Agent::
 * QEMU User space emulator::
 * Implementation notes::
+* Support lifetime::
 * License::
 * Index::
 @end menu
@@ -3128,6 +3129,42 @@  Run the emulation in single step mode.
 
 @include qemu-tech.texi
 
+@node Support lifetime
+@appendix Support lifetime
+
+In general features are intended to be supported indefinitely once
+introduced into QEMU.
+
+In the event that a feature needs to be removed, it will be listed
+in the ``Deprecated features'' appendix of this document. The feature
+will remain functional for 2 releases prior to actual removal.
+
+Deprecated features may also generate warnings on the console when
+QEMU starts up, or if activated via a monitor command, however,
+this is not a mandatory requirement.
+
+Certain features have an inherently finite lifetime, and thus
+will be removed on a fixed schedule, without following the normal
+deprecation process. Such features are listed in the sections
+that follow.
+
+@node Machine types
+@section Machine types
+
+For architectures which aim to support live migration compatibility
+across releases, each release will introduce a new versioned machine
+type. For example, the 2.8.0 release introduced machine types
+``pc-i440fx-2.8'' and ``pc-q35-2.8'' for the x86_64/i686 architectures.
+
+To allow live migration of a guest running on a 2.8.0 release to a
+2.9.0, the QEMU 2.9.0 version must support the ``pc-i440fx-2.8'' and
+``pc-q35-2.8''. To allow users live migrating VMs to skip multiple
+intermediate releases when upgrading, new releases of QEMU will
+support machine types from many previous versions.
+
+The supported lifetime for versioned machine types is 12 releases,
+which is equivalent to 4 years worth of previous QEMU releases.
+
 @node License
 @appendix License