@node Deprecated features
@appendix Deprecated features

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 this appendix. 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.

Prior to the 2.10.0 release there was no official policy on how
long features would be deprecated prior to their removal, nor
any documented list of which features were deprecated. Thus
any features deprecated prior to 2.10.0 will be treated as if
they were first deprecated in the 2.10.0 release.

What follows is a list of all features currently marked as
deprecated.

@section Build options

@subsection GTK 2.x

Previously QEMU has supported building against both GTK 2.x
and 3.x series APIs. Support for the GTK 2.x builds will be
discontinued, so maintainers should switch to using GTK 3.x,
which is the default.

@subsection SDL 1.2

Previously QEMU has supported building against both SDL 1.2
and 2.0 series APIs. Support for the SDL 1.2 builds will be
discontinued, so maintainers should switch to using SDL 2.0,
which is the default.

@section System emulator command line arguments

@subsection -machine enforce-config-section=on|off (since 3.1)

The @option{enforce-config-section} parameter is replaced by the
@option{-global migration.send-configuration=@var{on|off}} option.

@subsection -no-kvm (since 1.3.0)

The ``-no-kvm'' argument is now a synonym for setting
``-machine accel=tcg''.

@subsection -usbdevice (since 2.10.0)

The ``-usbdevice DEV'' argument is now a synonym for setting
the ``-device usb-DEV'' argument instead. The deprecated syntax
would automatically enable USB support on the machine type.
If using the new syntax, USB support must be explicitly
enabled via the ``-machine usb=on'' argument.

@subsection -fsdev handle (since 2.12.0)

The ``handle'' fsdev backend does not support symlinks and causes the 9p
filesystem in the guest to fail a fair amount of tests from the PJD POSIX
filesystem test suite. Also it requires the CAP_DAC_READ_SEARCH capability,
which is not the recommended way to run QEMU. This backend should not be
used and it will be removed with no replacement.

@subsection -no-frame (since 2.12.0)

The @code{--no-frame} argument works with SDL 1.2 only. The other user
interfaces never implemented this in the first place. So this will be
removed together with SDL 1.2 support.

@subsection -virtioconsole (since 3.0.0)

Option @option{-virtioconsole} has been replaced by
@option{-device virtconsole}.

@subsection -clock (since 3.0.0)

The @code{-clock} option is ignored since QEMU version 1.7.0. There is no
replacement since it is not needed anymore.

@subsection -enable-hax (since 3.0.0)

The @option{-enable-hax} option has been replaced by @option{-accel hax}.
Both options have been introduced in QEMU version 2.9.0.

@subsection -drive file=json:@{...@{'driver':'file'@}@} (since 3.0)

The 'file' driver for drives is no longer appropriate for character or host
devices and will only accept regular files (S_IFREG). The correct driver
for these file types is 'host_cdrom' or 'host_device' as appropriate.

@subsection -net ...,name=@var{name} (since 3.1)

The @option{name} parameter of the @option{-net} option is a synonym
for the @option{id} parameter, which should now be used instead.

@section QEMU Machine Protocol (QMP) commands

@subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0)

"autoload" parameter is now ignored. All bitmaps are automatically loaded
from qcow2 images.

@subsection query-cpus (since 2.12.0)

The ``query-cpus'' command is replaced by the ``query-cpus-fast'' command.

@subsection query-cpus-fast "arch" output member (since 3.0.0)

The ``arch'' output member of the ``query-cpus-fast'' command is
replaced by the ``target'' output member.

@section System emulator human monitor commands

@subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 3.1)

The @option{[hub_id name]} parameter tuple of the 'hostfwd_add' and
'hostfwd_remove' HMP commands has been replaced by @option{netdev_id}.

@section System emulator devices

@subsection ivshmem (since 2.6.0)

The ``ivshmem'' device type is replaced by either the ``ivshmem-plain''
or ``ivshmem-doorbell`` device types.

@section System emulator machines

@subsection pc-0.10 and pc-0.11 (since 3.0)

These machine types are very old and likely can not be used for live migration
from old QEMU versions anymore. A newer machine type should be used instead.

@subsection prep (PowerPC) (since 3.1)

This machine type uses an unmaintained firmware, broken in lots of ways,
and unable to start post-2004 operating systems. 40p machine type should be
used instead.

@section Device options

@subsection Block device options

@subsubsection "backing": "" (since 2.12.0)

In order to prevent QEMU from automatically opening an image's backing
chain, use ``"backing": null'' instead.

@subsubsection rbd keyvalue pair encoded filenames: "" (since 3.1.0)

Options for ``rbd'' should be specified according to its runtime options,
like other block drivers.  Legacy parsing of keyvalue pair encoded
filenames is useful to open images with the old format for backing files;
These image files should be updated to use the current format.

Example of legacy encoding:

@code{json:@{"file.driver":"rbd", "file.filename":"rbd:rbd/name"@}}

The above, converted to the current supported format:

@code{json:@{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"@}}

@subsection vio-spapr-device device options

@subsubsection "irq": "" (since 3.0.0)

The ``irq'' property is obsoleted.
