Я очень много добавил к своему ответу ниже, но я сохранил свой первоначальный ответ без изменений для справки.
TL:DR: Виртуальные машины - это инструмент, и хотя они предоставляют простую возможность использовать одну ОС в другой, вы должны очень хорошо знать, каким будет ваше основное предназначение компьютера, чтобы полностью использовать систему. ,
Ваш вопрос, похоже, сильно склонен к графическим возможностям и возможностям производительности интерфейса при использовании виртуальной машины, и поэтому я отвечу относительно возможностей там.
Основная проблема заключается в том, что для безопасного управления доступом гостевых операционных систем к устройствам (и, таким образом, для предотвращения того, чтобы гостевая ОС топчется на хосте и ломается) все устройства, которые вы хотите использовать, должны быть "эмулированы".
Что это означает, что видеокарта , что ваш гостевой ОС можно увидеть не то же видеокарта , что ОС хоста может видеть. Возможно, вы сможете включить такие функции, как 3D-рендеринг в гостевой системе, но это обрабатывается промежуточным драйвером в вашей гостевой системе, который безопасно передает запросы хосту, чтобы 3D-изображение отображалось там.
Весьма сомнительно, что функции, подобные тем, которые необходимы для безопасного воспроизведения дисков blue-ray на поддерживаемом дисплее HDMI, эмулируются драйверами гостевой видеокарты, и, вероятно, это не будет работать.
По сути, все, что требует аппаратной поддержки на вашем хосте, вряд ли будет работать хорошо, если вообще будет работать с вашим гостем. Я не знаю, как работает WiDi, но если ему требуется прямой доступ к памяти вашей видеокарты, чтобы поделиться ею с телевизором, он не будет работать, если вы не используете его из операционной системы своего хоста (Linux).
Кроме того, с точки зрения производительности, виртуальная машина может приблизиться к тому, что было бы, если бы она была основной ОС, но всегда будут штрафы с точки зрения доступа к жесткому диску или конкуренции с другими ресурсами, которые использует хост.
В начале...
В начале у нас был компьютер, который мог работать только с одной операционной системой. Эта операционная система имела тенденцию работать хорошо только на конкретном процессоре и другом оборудовании, которое было в машине, а другие операционные системы могли работать плохо, если вообще работали, на доступном родном оборудовании.
Чтобы люди могли использовать программное обеспечение для одной конкретной платформы на другой платформе (например, использовать программное обеспечение Pre-OSX MacOS на Commodore Amiga), требовалось нечто большее, чем просто "установка программного обеспечения". Эти две машины использовали совершенно разные процессорные архитектуры и вспомогательное оборудование. Просто одна ОС не могла работать на оборудовании другого компьютера.
эмуляция
Эмуляция похожа на двоюродного брата в виртуализации, они на самом деле связаны и имеют схожие цели. Один родил другого как бы.
Эти отличающиеся аппаратные платформы означали, что если вы хотите использовать один программный продукт из другой ОС на вашем компьютере, то все на этом компьютере необходимо проанализировать, чтобы выяснить, как оно работает, а затем написать фрагмент кода, который функционирует в так же, как аппаратная часть. Это должно было быть сделано для каждой части, процессора, графического контроллера, контроллера памяти, всего.
Затем все эти части собраны воедино, и, поскольку каждая часть эмулирует немного аппаратного обеспечения, мы назвали это эмулированной машиной. Затем мы запускаем операционную систему поверх этой эмулированной машины.
Проблема в том, что этот подход медленный. Проще говоря, вам повезло, если вы смогли достичь 1/10 скорости оригинального оборудования. Вы буквально нуждались в машине в несколько раз быстрее, чем ваша целевая эмулируемая машина, чтобы запустить эмулируемый компьютер практически на полной скорости.
Так что изменилось?
Ну, вот классная вещь. Не очень на самом деле. Единственным большим изменением было то, что аппаратные платформы были стандартизированы. Мы перестали получать нестандартное оборудование для каждой ОС, и все ОС перешли на единую стандартную платформу или были созданы на ней.
Компоненты, составляющие Mac в наши дни, - это в основном те же компоненты, что и ПК. Linux всегда работал на оборудовании ПК, так что ничего нового там нет.
В течение долгого времени эмуляция оставалась нормой, если вы хотели запускать программное обеспечение из одной ОС в другой. Или вы можете выполнить двойную загрузку и запустить любую операционную систему так, как вам хочется, но это сделало вас болезненным и раздражающим, если вы хотите перейти от кодирования в Linux к играм в Windows.
А потом..
Возникла идея, что, поскольку базовое оборудование одинаково, почему обе ОС не могут использовать его совместно?
Мы получили QEMU, WiNE и аналогичные программные решения. QEMU долгое время был фаворитом для жесткой эмуляции машин, в то время как WiNE позволяла приложениям Windows работать в Linux, перехватывая и исправляя их вызовы API-интерфейса ОС, и позволяя коду запускаться на процессоре.
QEMU сделал что-то похожее на WiNE, но сделал на гораздо более низком уровне. Это по-прежнему эффективный эмулятор, но для каждого производимого аппаратного вызова они использовали метод "исправления и перенаправления", поэтому любые вызовы переходили на собственную эмулируемую аппаратную платформу. потому что большинство работающего кода в программе на самом деле не связаны с аппаратными вызовами (большинство - это простые потоки вычислений с вызовом в конце для отображения результатов).
Это привело к мгновенному увеличению скорости почти для каждой программы на машине, которая сейчас не эмулируется . Программы работали с замедлением, в большей степени зависящим от того, насколько они обращались к "виртуальному" оборудованию, а не от того, насколько хорошо машина могла эмулироваться. Вместо того, чтобы работать на 1/10 скорости, они теперь работали почти с такой же скоростью, как если бы они были изначально.
Итак, если мы сейчас работаем на процессоре, почему моя видеокарта не работает?
Единственная проблема с этими новыми виртуальными машинами заключается в том, что по своей природе операционная система предполагает, что она имеет прямой контроль над всем оборудованием, находящимся в компьютере, чтобы они могли предоставлять такие функции, как управление памятью и контроль доступа к оборудованию.
Однако это означает, что виртуальные машины не могут полностью уйти от эмуляции, по крайней мере, в методе. Им по-прежнему необходимо эмулировать определенные функции в программном обеспечении, например, графическую карту или сетевую карту, которые должны быть представлены ОС, работающей на виртуальной машине, чтобы операционная система "Гость" считала, что она полностью контролирует это оборудование. Основная ОС (по требованиям безопасности) должна защищать себя от программ, напрямую обращающихся к оборудованию, и это накладывает ограничения на гостевую операционную систему.
Чтобы сделать это, они должны эмулировать "виртуальные" части оборудования для всего на компьютере. Теперь весь код выполняется самим процессором, поэтому он не медленный, но каждый из этих кусков виртуального оборудования должен быть написан программно, что влечет за собой как небольшое снижение производительности, так и потенциально большое ухудшение функциональности. ,
Это означает, что ваша виртуальная видеокарта не может и не будет иметь те же функции, что и ваша настоящая видеокарта. Чтобы добиться максимальной производительности, виртуальное оборудование может быть написано для поддержки наиболее часто используемых функций, а 3D-рендеринг теперь возможен на виртуальной машине, но он по-прежнему отличается от реального оборудования.
Что это означает, что операционная система хоста получает лучшие варианты аппаратного обеспечения, в то время как гостевая операционная система получает общие опции аппаратного обеспечения.
Виртуальная машина не так хороша, как реальное оборудование, это всего лишь инструмент, облегчающий работу с инструментами из одной системы в другую.
Так что мне делать?
Вы должны выбрать то, что вы хотите, чтобы основное назначение вашего компьютера.
Если вы хотите играть в новейшие игры на своей мощной видеокарте и использовать те же мощные видеокарты для воспроизведения фильмов в формате 1080p на своем телевизоре с диагональю 400 "HDMI, но только иногда хотите заняться программированием для Linux, то Windows может быть лучшим выбором с Linux в качестве гостя.
Если вы хотите работать с ядром Linux, создавать аппаратные драйверы для устройств на вашем компьютере, а иногда писать какое-то программное обеспечение для Windows и тестировать его на хорошем приближении к "стандартной" системе Windows, то, возможно, вам лучше с Linux в качестве хоста и Windows в качестве гостя.
Если вам нравится простота использования Mac, но вы хотите программировать для Windows (или вам нужен программный пакет, предназначенный только для Windows), то это тоже вариант.
Я не говорю, что Linux не может играть в игры или что MacOS не для программистов, потому что это просто ложь. Просто один человек, который может сказать, какая ОС больше подходит для того, что вы хотите сделать, это вы.
Вы действительно должны понять, что вы хотите, чтобы ваша машина делала в первую очередь. Только тогда вы сможете понять, что виртуальная машина может сделать для вас.
Чтобы ответить на ваши вопросы:
Will the graphics and video rendering quality will be just as good?
Нет. Эмулируемая графическая карта может обеспечивать некоторые функции графической карты хоста, но, скорее всего, она не будет поддерживать сложные функции, такие как аппаратное ускорение видео или функции программирования CUDA.
Will there be any hardware issue such as using HDMI or WiDi?
Опять же, эти дополнительные функции, скорее всего, не будут характерны для любого доступного эмулируемого / виртуального оборудования.
Will applications run just as smoothly as long as enough RAM is allocated?
Большинство приложений (если им не требуются определенные аппаратные функции) будут работать почти так же быстро, как на реальном оборудовании, если вы не будете голодать ни у хоста, ни у гостя памяти.