@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 -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.

@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 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.
