Ho aggiunto molto alla mia risposta di seguito, ma ho mantenuto intatta la mia risposta originale come riferimento.
TL: DR: le macchine virtuali sono uno strumento e mentre offrono la facile possibilità di utilizzare un sistema operativo all'interno di un altro, devi essere molto consapevole di quale sarà il tuo uso principale previsto del computer al fine di sfruttare appieno il sistema .
La tua domanda sembra essere fortemente inclinata verso le possibilità di prestazioni grafiche e di interfaccia dell'utilizzo di una macchina virtuale e quindi risponderò riguardo alle possibilità lì.
Il problema principale è che, al fine di gestire in sicurezza i sistemi operativi guest, l'accesso ai dispositivi (e quindi impedire al SO guest di calpestare l'host e rompere cose) tutti i dispositivi che si desidera utilizzare devono essere "emulati".
Ciò significa che la scheda grafica che il tuo SO guest può vedere non è la stessa scheda grafica che il tuo SO host può vedere. Potresti essere in grado di abilitare funzionalità come il rendering 3D nel guest, ma questo è gestito da un driver intermedio nel tuo guest che trasmette le richieste all'host in modo sicuro affinché il 3D sia reso lì.
È molto dubbio che funzioni come quelle necessarie per riprodurre i dischi blu-ray in modo sicuro su un display HDMI supportato siano emulate dai driver della scheda grafica guest e quindi probabilmente non funzioneranno.
Fondamentalmente tutto ciò che richiede supporto hardware sul tuo host non è probabile che funzioni bene, se non del tutto, nel tuo ospite. Non so come funziona WiDi, ma se richiede l'accesso diretto alla memoria della scheda video per condividerla con un televisore, non funzionerà se non lo si utilizza dal sistema operativo host (Linux).
Oltre a ciò in termini di prestazioni, una VM può avvicinarsi a ciò che sarebbe se fosse il sistema operativo principale, ma ci saranno sempre penalità in termini di accesso al dispositivo del disco rigido o contesa con altre risorse che l'host sta utilizzando.
All'inizio...
All'inizio avevamo un computer, quel computer poteva eseguire solo un sistema operativo. Quel sistema operativo tendeva solo a funzionare bene sul particolare processore e altro hardware che era nella macchina, con altri sistemi operativi in grado di funzionare male, se non del tutto, sull'hardware nativo disponibile.
Affinché le persone siano in grado di utilizzare il software per una particolare piattaforma su un'altra piattaforma (ad esempio, utilizzando il software MacOS Pre-OSX su un Commodore Amiga) è richiesto più di una semplice "installazione del software". Queste due macchine utilizzavano architetture di processore completamente diverse e hardware ausiliario. Semplicemente, non era possibile eseguire un sistema operativo sull'hardware di un'altra macchina.
Emulazione
L'emulazione è come un cugino della virtualizzazione, in realtà sono correlati e hanno obiettivi simili. Uno generò l'altro per così dire.
Ciò che significavano queste diverse piattaforme hardware era che se volevi usare un pezzo di software da un altro sistema operativo sulla tua macchina, allora tutto ciò che riguardava quella macchina doveva essere analizzato per scoprire come funzionava, e poi un pezzo di codice scritto che funzionava nel allo stesso modo della parte hardware. Questo doveva essere fatto per ogni pezzo, il processore, il controller grafico, il controller di memoria, tutto .
Quindi tutti questi pezzi vengono messi insieme e poiché ogni pezzo emula un po 'di hardware, abbiamo chiamato questa una macchina emulata . Quindi eseguiamo un sistema operativo su questa macchina emulata.
Il problema è che questo approccio è lento. Molto semplicemente sei stato fortunato se avessi potuto raggiungere 1/10 della velocità dell'hardware originale. Avevi letteralmente bisogno di una macchina molte volte più veloce della tua macchina emulata di destinazione per far funzionare il computer emulato quasi ovunque alla massima velocità.
Quindi cosa è cambiato?
Bene, ecco la cosa bella. Non molto. L'unica grande modifica è stata la standardizzazione delle piattaforme hardware. Abbiamo smesso di ottenere hardware personalizzato per ogni sistema operativo e tutti i sistemi operativi sono stati spostati o creati su un'unica piattaforma standard.
I componenti che compongono un Mac in questi giorni sono, in linea di massima, gli stessi componenti che compongono un PC. Linux funzionava sempre su hardware PC, quindi nulla di nuovo lì.
Per molto tempo l'emulazione era ancora la norma se si voleva eseguire il software da un sistema operativo su un altro. Oppure puoi eseguire il dual-boot ed eseguire entrambi i sistemi operativi come desideri, ma questo ha reso doloroso e fastidioso se volevi passare dalla programmazione in Linux ai giochi in Windows.
E poi..
È nata l'idea che, poiché l'hardware sottostante è lo stesso, perché entrambi i sistemi operativi non possono condividerlo?
Abbiamo finito con QEMU e WiNE e soluzioni software simili. QEMU era da sempre uno dei preferiti per la forte emulazione di macchine, mentre WiNE consentiva alle applicazioni Windows di funzionare su Linux intrappolando e rattoppando le loro chiamate API del sistema operativo e lasciando che il codice funzionasse nativamente sul processore.
QEMU ha fatto qualcosa di simile a WiNE, ma a un livello molto più basso. È ancora efficacemente un emulatore, ma per ogni chiamata hardware che è stata effettuata hanno usato un metodo di "patch e reindirizzamento" in modo che tutte le chiamate andassero invece alla propria piattaforma hardware emulata. perché la maggior parte del codice funzionante in un programma in realtà non comportava chiamate hardware (la maggior parte sono semplici flussi di calcoli con una chiamata alla fine per visualizzare i risultati).
Ciò ha comportato un aumento di velocità istantaneo per quasi tutti i programmi nella macchina ora non emulata . I programmi funzionavano con rallentamenti che dipendevano più da quanto accedessero all'hardware "virtuale" piuttosto che da quanto bene si potesse emulare la macchina. Invece di correre a 1/10 della velocità, ora correvano quasi alla stessa velocità di se fossero nativi.
Quindi, se stiamo eseguendo il processore ora, perché la mia scheda grafica non funziona?
L'unico problema con queste nuove macchine virtuali è che per loro stessa natura un sistema operativo presuppone che abbia il controllo diretto di tutto l'hardware presente nel computer, in modo che possano fornire funzionalità come la gestione della memoria e controllare l'accesso all'hardware.
Ciò significa che le macchine virtuali non possono allontanarsi completamente dall'emulazione, almeno nel metodo. Devono comunque emulare determinate funzioni nel software, ad esempio una scheda grafica, o una scheda di rete deve essere presentata al sistema operativo in esecuzione nella macchina virtuale in modo che il sistema operativo "Ospite" pensi di avere il pieno controllo di tale hardware. Il sistema operativo principale (in base ai requisiti di sicurezza) deve proteggersi dai programmi che accedono direttamente all'hardware e ciò pone delle restrizioni sul sistema operativo guest.
Per fare ciò devono emulare pezzi "virtuali" di hardware per qualsiasi cosa nel computer. Ora tutto il codice viene eseguito in modo nativo dal processore, quindi non è lento, ma ognuno di quei pezzi di hardware virtuale deve essere scritto nel software, e ciò comporta sia una piccola penalità in termini di prestazioni sia potenzialmente una grande penalità in termini di funzionalità .
Ciò significa che la tua scheda grafica virtuale non può e non avrà le stesse funzionalità della tua vera scheda grafica. Per ottenere le massime prestazioni, l'hardware virtuale può essere scritto per supportare le funzionalità più utilizzate e il rendering 3D è ora possibile in una macchina virtuale, ma non è ancora lo stesso dell'hardware reale.
Ciò significa che il sistema operativo host ottiene le migliori opzioni hardware, mentre il sistema operativo guest ottiene opzioni hardware generiche .
Una macchina virtuale non è valida come l'hardware reale, è solo uno strumento per semplificare il lavoro con gli strumenti da un sistema a un altro.
Quindi cosa devo fare?
Devi scegliere quale vuoi che sia lo scopo principale del tuo computer.
Se vuoi giocare agli ultimi giochi sulla tua scheda grafica ad alta potenza e utilizzare la stessa potenza delle schede grafiche per riprodurre filmati 1080p completi sulla tua TV HDMI da 400 ", ma solo occasionalmente vuoi fare un po 'di programmazione Linux, Windows potrebbe essere la soluzione migliore con Linux come ospite.
Se vuoi lavorare sul kernel Linux, creare driver hardware per dispositivi nel tuo computer e, occasionalmente, scrivere del software per Windows e testarlo su una buona approssimazione di un sistema Windows "standard", allora potresti essere migliore con Linux come host e Windows come guest.
Se ti piace la facilità d'uso di un Mac ma vuoi programmare per Windows (o c'è un pacchetto software che desideri che sia solo Windows), anche questa è un'opzione.
Non sto dicendo che Linux non possa giocare o che MacOS non sia per i programmatori in quanto sarebbe semplicemente un branco di bugie. È solo quella persona che può dire quale sistema operativo potrebbe essere più adatto a quello che vuoi fare tu .
Devi davvero capire cosa vuoi che faccia prima la tua macchina . Solo allora puoi capire cosa può fare una macchina virtuale per te.
Per rispondere alle tue domande:
Will the graphics and video rendering quality will be just as good?
No. La scheda grafica emulata può fornire alcune funzionalità della scheda grafica host, ma probabilmente non supporterà funzionalità complesse come l'accelerazione video hardware o la programmazione CUDA.
Will there be any hardware issue such as using HDMI or WiDi?
Ancora una volta, queste funzionalità extra probabilmente non saranno una funzionalità dell'hardware emulato / virtuale disponibile.
Will applications run just as smoothly as long as enough RAM is allocated?
La maggior parte delle applicazioni (purché non richiedano funzionalità hardware specifiche) funzionerà quasi alla stessa velocità che avrebbero sull'hardware reale, a condizione che non si metta a morire di fame l'host o il guest della memoria.