Der Einfachheit halber versuche ich, eine ansonsten „normale“ Installation von Gentoo Linux als Gast in VirtualBox auf einem Windows 7-Host auszuführen. Ich habe die Installation sogar mit VirtualBox gebootet. Aber jetzt, nach etwa einem Jahr, in dem ich alle Pakete auf Portage mit -march=native in meinen Compiler-Flags zwangsläufig neu erstellt habe, habe ich festgestellt, dass alle nicht-trivialen Programme (trivial = ls, cd, cat, nicht-trivial = vim, man, im Grunde alles, was mit der C++-Standardbibliothek verknüpft ist) fast sofort beim Start beendet werden. Das Kernel-Protokoll zeigt an, dass es ungültige Anweisungen abgefangen hat, als ob das Programm mit CPU-Erweiterungen kompiliert worden wäre, die die Host-CPU nicht unterstützt. Aber das tut es! Mein Verständnis von Hypervisoren wie VirtualBox ist, dass die Programme grundsätzlich immer noch auf Bare-Metal laufen sollten, ihre wichtigste Rolle besteht darin, das Gastbetriebssystem und sein Userland und das Hostbetriebssystem und den virtuellen Speicher seines Userlands getrennt zu halten.
Meine Frage ist, was ist los? Dürfen VMs nur einige der Anweisungen verwenden, die auf der Host-CPU verfügbar sind? Oder ist das ein ganz anderes Problem?