QEMU 7.0
qemu.org
qemu.org
With -accel whpx you can even get pretty solid CPU acceleration. WHPX[1] is sort of like KVM for Windows, only takes a couple clicks and a reboot to enable, and ships on both Windows Home and Pro. Other than the heroes who did the actual work, we probably have Android to thank[2] for this situation.
If you're willing to get your hands a little dirty, QEMU is a fairly viable alternative to WSL or even Docker on Windows.
[0]: https://qemu.weilnetz.de/w64/
[1]: https://docs.microsoft.com/en-us/xamarin/android/get-started...
[2]: https://developer.android.com/studio/run/emulator-accelerati...
Also, how active is the WHP work in QEMU? Is it mostly done by the QEMU folks or inside MS? Is anyone other than Android actively banging on it?
Sorry for the deluge of questions but I think there's a ton of untapped potential in this tech.
And the only thing holding them back is that you need 3 pages of command-line arguments to invoke them properly :-)
(EDIT: I was just reminded that both were started by the same author: Fabrice Ballad)
You can watch some demo videos from the YouTube channel "KJ Liew",
1. https://www.youtube.com/channel/UCl8InhZs1ixZBcLrMDSWd0A/vid...
I think KJ Liew is also the person that submitted patches to Qemu for M1 Mac to have 3D acceleration in Linux/Classic Window OS guests
I work for a company (Datto) that backs up Windows/Linux machines, which can then later be run as VMs for disaster recovery. Our product heavily relies on QEMU, and would be significantly harder to implement and maintain without it (believe me, it was built around VBox in the past). Thank you!
https://www.kaseya.com/datto-to-be-acquired-by-kaseya (Apr 2022)
https://en.wikipedia.org/wiki/Kaseya_VSA_ransomware_attack (Jul 2021)
Windows is.. Windows. Always pain with drivers there. Linux should be the easiest story, but since RHEL7 (and the derivatives from there), dracut has defaulted to "host-only" mode which leaves the initramfs so skinny and devoid of drivers not related to the host.
I wonder what Bellard's overall hit rate across all those projects looks like in terms of staying around for chores after delivering the initial act of wizardry
I think you're straw-manning what I said a bit.
That said, I started a project recently that I'm very excited about. It wouldn't be possible without QEMU. I've had to get deeper into somewhat lower-level features, and it's likely I'll have to implement some new devices and interfaces for QEMU itself eventually.
Honestly I'm struggling to get my foot in the door. My questions on the user mailing list go mostly unanswered. I'm not aware of any QEMU book. Documentation feels sparse and is fragmented across multiple locations and often requires hoping someone has written a blog post about the specific piece you're interested in. I wish there were more descriptions of architecture and design decisions.
I hesitate to use the development mailing list since it appears dominated by patches (a ton of them; QEMU is very active), and my requests don't quite seem to be development-level (yet).
Any suggestions for how to get help learning QEMU as a "power user" hoping to eventually contribute as a dev? I'd happily pay for consulting if I knew the right people to ask.
Use the IRC channel. Or the mailing list.
The documentation is indeed not great, and documentation of the internals is worse. I think this is a mix of people often not having the time or priority to write documentation, being on the inside and not seeing the gaps in the docs that are obvious from outside, and sometimes the docs not having a structure that gives a simple place to add the needed new information. Plus as a low-level tool we assume to some extent that most users will be using a higher-level management app like libvirt which has hopefully better UX and docs. I don't have any bright ideas here, so if anybody does I'd be interested in them. Bug reports of the form "functionality X is undocumented" would be useful too I think.
I guess the community likes it this way, but it's my least favorite part of working with upstream QEMU. I think partitioning patches and discussion into separate lists would be a (IMO) small impact but would significantly facilitate communication.
I'm not being cheeky: read the source.
I worked with qemu for years, and the only way I could get real answers was to find the libvirt functionality and work backwards from it. Once I got good enough with that, I could navigate the qemu codebase on my own and just read.
Almost all the docs are going into libvirt, and libvirt's (IMHO) terrible abstractions. The reality is that almost all the investment in qemu's user-facing capabilities are done via libvirt, so it makes sense.
This is a great suggestion, thanks.
> Almost all the docs are going into libvirt, and libvirt's (IMHO) terrible abstractions. The reality is that almost all the investment in qemu's user-facing capabilities are done via libvirt, so it makes sense.
Yeah it's unfortunate that not many people seem to use QEMU directly. I can't use libvirt for my project because a) I'm targeting windows and b) libvirt seems to assume that it will run with root privileges, and I'm targeting userspace.
Honestly other than a few things like CPU pinning, I haven't seen much to justify libvirt over plain QEMU. This would be especially true if the QEMU CLI was simplified slightly and better documented.
Yah I had some similar constraints, also I just didn't want to bring the entire mess of libvirt into my project's life.
> This would be especially true if the QEMU CLI was simplified slightly and better documented.
I think this is the biggest issue. I can't complain because I haven't helped fix it, but the command line flag explosion, coupled with the qemu -readconfig/-writeconfig sucking is a big reason people just check out mentally and write big XML descriptions of their VMs.
> RISC-V: support for KVM
> RISC-V: support for ratified 1.0 Vector extension, as well as Zve64f, Zve32f, Zfhmin, Zfh, zfinx, zdinx, and zhinx{min} extensions.
Always happy to see RISC-V getting fully formed:)
I also didn't know about the leading number being a yearly increment and would have thought 7.0.0 was a substantial change over 6.0.0; setting the number to 2023.0.0 makes that distinction a lot more obvious
From the home page:
Latest releases 7.0.0 Apr 19th 2022 6.2.0 Dec 14th 2021 6.1.1 Dec 23rd 2021
And the "full list of releases":
is not any better, I think that starting from 2018 the number means (roughly) the year: 3=2018 (or also early 2019) 4=2019 5=2020 6=2021 7=2022 but I can see no evidence of a 4 month fixed interval release.
So, to clarify:
x is year (counting from 2016=1) ? (OR first release of a year gets a major version bump)
IF last digit is 0 then y is to be decoded as:
0=April
1=August
2=December
OTHERWISE IF last digit is 1 the y may (or may not) be decoded as above.
Does anyone know if there are Qemu wrappers with a nice UI/UX?
My current use cases aside, it's amazing the number of nice use cases Qemu is made use of. GNS3 was my favorite when I used it many years ago (Cisco IOS).
What operating system are you on?
QtEmu for Windows gets you there, but it's very much so an API frontend, so if you're looking for simple from a choices perspective, this ain't it (though you might figure out your sane defaults and go from there).
Since you mentioned Fusion though, I'm guessing you're a Mac user, and UTM might be the ticket for you. The project started as a side-loadable/jailbroken device iOS VM system, but the project also makes a macOS app as well. https://mac.getutm.app/ This works both on Intel and Apple Silicon Macs, though in order to get virtualization acceleration, it's best to run workloads built for your native architecture (ARM on AS, x86(_64) on Intel).
First time hearing about UTM, I decided not to go the M1 route because I need to run X86 VMs, can it emulate x86 on apple silicon?
That's kind of funny because I end up accidentally creating non-KVM machines with virt-manager all the time...
Maybe overkill depending on your use case but that's what I consider Proxmox[0] to be.
It works reasonably well, but I wish it was easier to do things like device passthrough or adding additional networks. If you get into the Advanced mode, you can pass in QEMU command flags directly which is nice.
We had an open source CPU emulator (of many CPU arch) called “Unicorn” that was a heavy test instrumentation points inserted widely throughout and into QEMU 4.0. I spent 2 solid years on these dynamic API bindings of Unicorn into QEMU.
It was an awesome piece of SW that allowed us to recreate the behavior of malware.
Asking the QEMU team to insert some 50-odd test points into the QEMU code was proved to be a maintenance nightmare.
Even if it just an #ifdef of C language, it was too “cluttery”, it was still an awesome automated detection of code generation of just the affected malware portion.
I still believe this approach to be a significant tangential vector of prime investing for a startup.
I do not think we could do that yet with the new QEMU TCG plug-in framework.
However I absolutely agree its not currently as full featured as we would like. The next step when I get time is re-factoring the handling of register values in the core QEMU code so we can expose them to the plugins in a clean API.
> It was an awesome piece of SW that allowed us to recreate the behavior of malware.
If you have experience w/QEMU and you are interested in working on it more, my team is doing work with QEMU. For the most part we have tended to focus on architecture-specific stuff but trying to grow our expertise.
If I remember correctly, some ARM extensions and peripherals needed implementing, have they done this for this latest release?
https://github.com/TrungNguyen1909/qemu-t8030 https://news.ycombinator.com/item?id=30545425