Can I run Qemu (or some other VM) with an x86 guest on an ARM machine like Chromebook?

I am considering getting a Chromebook (still hoping the openSUSE on ARM goes well!) but one thing I need is the ability to run a VM with multiple guest OS’s (I run Ubuntu, Fedora and Windows in a VM). I’ve read that QEMU can run x86 on ARM but am not sure if I’m misunderstanding it.

When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.
When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. QEMU supports virtualization when executing under the Xen hypervisor or using the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86, server and embedded PowerPC, and S390 guests.

Will this do what I want? Can I install Ubuntu or Windows and run them in a VM with QEMU on Chromebook (using a different OS than ChromeOS)? Is there a better choice than QEMU?

For the most part you will not be able to run any kind of virtualization on an ARM device because for some years now all virtualization technologies largely depend on the virtualization extensions provided by Intel and AMD x86 processors.

I haven’t looked at, but think that it <might> be possible to run a Linux Containers or chroot if you want to run something similar, but even then you’re likely going to run into issues due to the generally low computing power of ARM processors (today, may be different a year or two from now).

If virtualization is important to you, you should be able to find x86 netbooks which don’t cost that much differently than the Chrome Book (low to mid $300 today).


Thanks. But I want to find a laptop that’s not too expensive (even $600 is OK), has long battery life but also that’s thin and doesn’t weigh more than about 2.9 pounds. That seems very hard to find.

tsu2 is not really correct. sure, the focus has been to use KVM on x86 with the VTx and VTd processor functions in Intel, but Arm has had the necessary things for virtual memory and virtualisation for some time, but you do need to pick the right processor - because of the way Arm licenses their CPU cores it’s possible for chip makers to be selective about the features they want.

I don’t have time to do any research, but take a look at QEMU or BOCHS or Eltechs/Exagear

Resurrecting a 2yr old thread?
Things have changed a bit since my post.
Since I posted, there have been efforts to implement virtualization on ARM, but of course no paravirtualization (which requires x86 CPU extensions).

But, at the moment even if it were possible, virtualization on ARM wouldn’t likely be practical yet because ARM today is still a less powerful CPU than x86 (although ARM has other nice tradeoff benefits like power consumption).


I think you’re (edit: stupid pattern matching in forum) belittling virtualisation on Arm with faint praise, when it’s a fully-fledged system.

Consider that the latest Arm processors, like the Denver model, from NVidia are able to rival Intel’s lower end, at a fraction of the energy use. There’s even a 100 core CPU.

KVM on arm exists:

Maybe, but it’s a practical observation. You’re comparing the very latest and greatest ARM against the type of x86 very few people would consider for virtualization platforms. It should make sense that if you’re going to set up a multi-tenant box, the contents of that box must support multiple tenants and <today> ARM is still lacking.

Also, as I’ve described paravirtualization (ie CPU hardware assist) cannot run on ARM today, and I doubt there is any effort to port x86 virtualization extensions to ARM. Superficially, it makes little sense to me until I see something new. And, this therefor means that KVM virtualization on ARM almost certainly has to be running in “full virtualization QEMU” mode which is much slower than paravirtualization.

The link you gave to ARM virtualization extensions only describes the ability to map large amounts of memory. Um. I would think that this had already been implemented in basic ARM architecture from the very beginning, and is already implemented in ARM’s current virtual core architecture (I’d always assumed every virtual core has access to its own virtual address space like any 32-bit or 64-bit x86 CPU). If so, then <maybe> the “big” feature is some kind of standardization and label the use of large address spaces, but not likely some earth-shattering new feature. But, I’m partially speculating now.

Like a lot of things in life and computing, just because something may exist doesn’t necessarily mean it’s fully ready for prime time.

So, if someone asked me <today> whether ARM is a suitable platform for virtualization, I’d say if your needs are small and you are willing to pay the premium for the very latest ARM, then go for it. For some with for instance an ARM notebook, maybe it’s nice to be able to run <any> kind of virtualization, even if it might run lousy.

But, if your needs are either greater or you want some reserve for unexpectedly heavier use, I’d say that ARM isn’t quite there yet.

As an alternative, I’d recommend someone running ARM to see if Linux Containers is implemented, <that> would definitely be a first class option for anyone looking to “virtualize.” Linux containers do not have special CPU requirements, easily have no restriction on file systems and runs wickedly fast (absolutely the same as the Host). The only real restriction is that both Host and Guests must be Linux.

The current leading implementations of Linux Containers are Docker and LXC, with plenty of interest in systemd-nspawn. All are great options. And, there should not be any problem loading up your ARM machine with as many Guests as you are willing to deploy.


yes, you can use docker with Arm.

yes, you can use chroot with Arm, it’s how I get to use a full Arm linux install on my android phone.