1##  virt-manager UI design philosophy
2
3**virt-manager** is a UI toolbox-style frontend for libvirt. It provides UI access to common virt management tasks and operations. virt-manager aims to provide a simple UI, but not too simple that it excludes valid usecases. virt-manager prioritizes stability over features. Given the user definitions defined below, our goals are:
4
5* **_Basic virt users_** should be able to meet their needs with virt-manager.
6* **_Intermediate virt users_** should find virt-manager sufficiently flexible for their needs.
7* **_Advanced virt users_** will not find explicit UI support for their advanced use cases, but virt-manager should still function correctly in the face of their manually configured advanced virt usage. virt-manager should not get in their way.
8
9Here are some things that virt-manager explicitly is not:
10
11* **gnome-boxes**: a heavily desktop integrated VM manager with an emphasis on UI design and simplifying virt management. They prioritize a seamless designed experience over flexibility, our goals are different.
12* **virt-viewer/remote-viewer**, **vncviewer**: our graphical VM window should 'just work' for most needs but any advanced console configuration is left up to these other better suited tools.
13* **VirtualBox**, **VMWare Workstation**: It's a nice idea to aim to be the equivalent of those apps for the QEMU+KVM+Libvirt stack. But to get there would require a level of resource investment that is unlikely to ever happen.
14* **oVirt**, **Openstack**: virt-manager does not aim to support management of many hosts with many VMs. virt-manager won't reject this case and we try within reason to keep it working. But the UI is not designed for it and we will not change the UI to facilitate these style of usecases.
15
16## How do we evaluate UI changes
17
18When is it worth it to expose something in the UI? Here's some criteria we will use:
19
20* **How many users do we expect will use it**: This is handwavy of course but some things come up in email/IRC discussion regularly, and some are mentioned once in 5 years.
21
22* **How critical is it for users who need/want it**: if it's an absolute blocker just to get a working config for some people, that can influence the discussion
23
24* **How self explanatory is the feature**: 'Enable 3D acceleration' is fairly self explanatory. Disk io native vs threads, not so much.
25
26* **How dangerous or difficult to use is the feature**: If it works in only specific cases or renders the VM unbootable for certain scenarios, this matters.
27
28* **How much work is it to maintain, test**
29
30* **How much work is it to implement**: If something requires significant app specific logic on top of libvirt, libosinfo, or spice-gtk that would also be useful to other virt apps, it is suspect. We should be aiming to share common functionality
31
32
33## User definitions
34
35### Basic virt user
36
37They know little or nothing about libvirt, qemu, and kvm, but they understand the high level concept of a virtual machine. They have a Windows or Linux distro ISO and they want to create a VM and interact with it graphically. They should be able to figure out how to do that by running virt-manager and following the UI. The defaults we provide for new VMs should be sufficient for their needs.
38
39After the VM is installed, the UI should facilitate intuitive UI tasks like:
40
41* lifecycle operations: start/stop/pause the VM; save, snapshot the VM; delete, clone the VM
42* rename the VM; change the VM title or description
43* eject/insert CDROM media; change VM boot order
44* increase VM memory
45* attach a host USB device to the VM; possibly add an additional disk to the VM
46* graphical operations like send a keycombo, screenshot
47
48### Intermediate virt user
49
50They know more about virt in general but we do not assume they have ever edited libvirt XML or run the qemu command line. They are a more intermediate tech user anyways. They may know about less standard virt features and they want to enable them for their VMs. Or they are using VMs as part of a specific workflow, possibly for a development environment, or hosting personal services on their own network, or managing VMs on a remote host. This is the fuzzy area. We want to support these people but each request needs to be handled on a case by case basis.
51
52Here's some of the things the current UI supports that fit this bucket:
53
54* Management of remote virt hosts
55* Management of non-qemu/kvm libvirt drivers: lxc, vz, xen, bhyve
56* Support for non-x86 VM creation: aarch64, armv7l, ppc64, s390x
57* Change VM CPU model or mode
58* UEFI config for new VMs
59* VM direct kernel/initrd boot
60* VM serial console access
61* VM use of network bridge or macvtap
62* Spice/virgl 3D acceleration usage
63* Libvirt storage pool management
64* Libvirt virtual network management
65* Ideally every VM UI edit operation should be justifiable in this context
66
67### Advanced virt user or usecase
68
69An advanced virt user likely has some experience with libvirt XML or the qemu command line. They may know that they need some specific libvirt XML value for their VMs. They may be running virt in an environment that depends on non-trivial non-standard host configuration.
70
71We want virt-manager to still be useful to these users for fulfilling basic and intermediate needs, but not get in the way or prevent usage of their advanced config, within reason.
72
73Some examples:
74
75* **usecase**: managing many hosts and many VMs
76* **usecase**: require tweaking anything but the most standard <domain> performance options
77* **usecase**: generally anything that requires special host or guest configuration outside virt-manager
78* **user**: Generally anybody that knows the qemu command line or specific XML config options they want
79
80
81## Previously rejected/removed UI elements
82
83* VM properties
84  * [disk driver io=threads|native](https://github.com/virt-manager/virt-manager/commit/a162a3b845eee24f66baf63b3aeb82523b274b0d)
85  * [disk serial](https://github.com/virt-manager/virt-manager/commit/106686758346c7f7f0f25ce2a29e36fa6dff0547)
86  * [disk scsi reservations](https://github.com/virt-manager/virt-manager/commit/b583ea7e66cd0b7117971cf55365355f78dd3670)
87  * [graphics spice TLS port](https://github.com/virt-manager/virt-manager/commit/bd82ef65292cc47cffc27b8f67d7987679c61bf3)
88  * [graphics keymap selection](https://github.com/virt-manager/virt-manager/commit/7251ea25c2936b69284366abc787f1b33c199b15)
89  * [network virtualport](https://github.com/virt-manager/virt-manager/commit/b4b497e28f3f3e32a05f4cf78c21f07022ee824b)
90  * [Any explicit `<clock>`/`<timer>` config](https://www.redhat.com/archives/virt-tools-list/2019-January/thread.html#00041)
91  * [Raw `<genid>` config](https://www.redhat.com/archives/virt-tools-list/2019-April/msg00001.html)
92  * [Fine grained `<cpu><feature>` config](https://www.redhat.com/archives/virt-tools-list/2014-January/msg00180.html)
93  * [Host network management via libvirt interface APIs](https://blog.wikichoon.com/2019/04/host-network-interfaces-panel-removed.html)
94  * [VM hugepages/hugetlbfs](https://bugzilla.redhat.com/show_bug.cgi?id=1688641)
95  * Most VM tuning: `<cputune>`, `<blkiotune>`, `<numatune>`, fine grained `<vcpus>` listing
96  * Editing existing machine type/arch/ostype, UEFI config. Only advanced users can make it work, and they can edit the XML.
97
98* Tight desktop integration stuff: registering as a default file handler, registering as a gnome search provider, etc. This is gnome-boxes territory
99* Serial console config options like [buffer scrollback size](https://bugzilla.redhat.com/show_bug.cgi?id=1610165). Use `virsh console` or cli tools if need flexibility.
100
101* Advanced VNC/SPICE viewer config. virt-viewer should be the target app
102  * VNC bit depth config
103  * advanced mouse/keyboard grab support
104  * advanced SPICE viewer options
105  * [hiding viewer window borders](https://www.redhat.com/archives/virt-tools-list/2019-January/msg00000.html)
106  * [keypress delay](https://bugzilla.redhat.com/show_bug.cgi?id=1410943)
107  * [SPICE/QXL multidisplay support](https://bugzilla.redhat.com/show_bug.cgi?id=885806)
108  * support for [manual key combinations](https://bugzilla.redhat.com/show_bug.cgi?id=1014666), or adding custom values.
109  * Any feature that goes beyond what virt-viewer or other clients provide. virt-manager should not be the home for clever console/viewer behavior
110
111* UI scalability features to manage large amounts of VMs
112  * [custom manager columns for VM organizing](https://www.redhat.com/archives/virt-tools-list/2019-April/msg00059.html)
113  * [organizing VMs into collections/groups](https://bugzilla.redhat.com/show_bug.cgi?id=1193303) ([and another](https://bugzilla.redhat.com/show_bug.cgi?id=1548879))
114  * multiselect operations on VMs/other objects ([like storage](https://bugzilla.redhat.com/show_bug.cgi?id=1698879))
115  * hiding offline VMs or other view options
116  * [Advanced VM name search support](https://github.com/virt-manager/virt-manager/issues/147). Note: GTK provides some support already: in the manager window, CTRL+F to open a searchbox, searches match from the beginning of VMs only, use arrow keys to jump between matches. Use VM 'title' field to customize how it is named in the manager window.
117
118
119## Use of the bug tracker
120
121We plan to keep open bugs only for:
122
123* bugs/problems that are actively affecting users, which the developers plan to fix eventually.
124* features/improvements that the developers plan to implement eventually.
125
126The bug tracker will not be used as a wishlist. Users are free to
127file RFEs there, but they may be closed.
128
129* A feature/enhancement request that does not match the design guidelines, will be CLOSED->WONTFIX, with an explanation
130* A feature/enhancement request that would be nice to have but the developers do not plan to fix, will be CLOSED->DEFERRED, with an explanation.
131
132
133## References
134
135* [The original mailing list thread for this document](https://www.redhat.com/archives/virt-tools-list/2019-June/msg00108.html)
136* [Follow on discussion about some feature removals](https://www.redhat.com/archives/virt-tools-list/2019-June/msg00117.html), [and a follow up](https://www.redhat.com/archives/virt-tools-list/2019-July/msg00005.html)
137