Современные свободные среды рабочего стола требуют аппаратной акселерации графики для полноценной работы. Если в системе нет GPU, то остается только пользоваться легковесными оконными менеджерами. Возникает закономерный вопрос: что делать, когда возможностей подобных решений недостаточно? Разработчики популярных дистрибутивов пытаются решить эту проблему.
Активно использовать аппаратную акселерацию графики начали в KDE 4, по аналогичному пути развития пошла третья версия среды GNOME, а также появилась Unity — альтернативная оболочка компании Canonical. Некоторое время казалось, что наличие GPU станет обязательным (и вполне естественным в наше время) требованием к настольным системам, но сейчас программисты пытаются адаптировать современные среды для работы без аппаратной акселерации.
Началось всё с компании Red Hat — GNOME Shell в Fedora 17 будет работать без современных 3D-драйверов, поддерживающих OpenGL. Вместо них предполагается задействовать драйвер llvmpipe (Gallium3D), осуществляющий программный рендеринг с использованием LLVM для динамической компиляции шейдеров, обработки вершин и растеризации точек, линий и треугольников. А поскольку сотрудники Red Hat и члены сообщества Fedora активно участвуют в разработке GNOME, эта возможность попадет во все дистрибутивы Linux.
Компания Canonical поначалу пошла по другому пути, создав две независимые оболочки: Unity, которая технически является плагином Compiz, и Unity 2D, основанную на Qt. На прошедшем недавно саммите разработчиков Ubuntu была озвучена очень интересная инициатива — отказаться от Unity 2D и адаптировать Unity для работы на устройствах без GPU. Способ адаптации предлагается аналогичный — использование llvmpipe. Окончательное решение пока не принято, но этот шаг вполне логичен: вместо двух продуктов с почти идентичными возможностями придется делать всего один.
Теперь попробуем разобраться, как работает программный рендеринг. При использовании llvmpipe выполняющиеся на GPU операции преобразуются в промежуточное представление LLVM и транслируются в машинный код для архитектур x86 и x86_64. Это требует большей вычислительной мощности CPU, и производительности такого рендеринга маловато, скажем, для игрушек, но вполне достаточно для обсчёта эффектов графического интерфейса. Есть также проблема с процессорами ARM. На первый взгляд, сплошные недостатки, и в нововведении нет никакого смысла. Сегодня даже маломощные интегрированные видеоадаптеры настольных машин позволяют достичь аналогичного эффекта, не нагружая CPU.
Всё можно объяснить, если предположить, что и Red Hat, и Canonical нацелились на виртуальные среды и облачные технологии. Есть огромное множество провайдеров, у которых можно арендовать недорогой виртуальный сервер (притом с архитектурой x86 или x86_64), но в нём не будет GPU, а следовательно, с запуском современных оболочек возникнут проблемы. Зато с вычислительной мощностью сложностей не будет. Впрочем, есть ещё один путь развития. Недавно NVIDIA показала интересную технологию ускорения графики в средах виртуализации. Вместо отказа от аппаратной акселерации графики компания предлагает перенести её в облака. Этот вариант мне нравится больше, хотя бы возможностью запуска современных игр на виртуальных машинах.