Помолясь, несколько месяцев назад я приступил к изучению графических стеков разных ОС. Тема эта достаточно сложна, особенно если изучать иксы. Даже по словам их разработчиков есть только три человека в мире, которые знают, как работает xorg. Поэтому в его устройство я особенно не лез, только поверхностно опишу его тут. Также я, в связи с недавними новостями, не лез в устройство Mir. Поэтому в основном в части статьи, касающейся Linux речь пойдет о новом протоколе Wayland, о его клиентах и композиторах.
Linux
Итак, целью введения Wayland было упрощение архитектуры, по сравнению с иксами. В концепции Wayland оконный менеджер, или как его называют в терминологии Wayland, композитор не занимается рисовательством сам. Он лишь достает из DRM или KMS фреймбуфер и отдает их приложению, которое уже рисует в этот буфер, что хочет и чем хочет, хоть с помощью cairo, хоть с помощью OpenGL (обычно еще через EGL, платформонезависимое API между OpenGL и приложениями. Теоретически может быть использовано хоть на маке, хоть на винде.). *Необходимо помнить, что Wayland собственно является лишь протоколом для связи между клиентами и композиторами, и поэтому все нападки, вроде «гигантский толстый жирнющий мегавяленд» являются не более, чем профанацией.* Далее уже композитор может делать с полученным от клиента буфером все, что угодно. *Например, повращать на кубике. Или разместить его на шаре, зеркально отражая при этом остальные фреймбуферы. Вам же хочется видеть окошки на шарике?* Также композитор не делает лишних телодвижений с событиями, которые были в xorg, и просто подхватывает через libinput события из evdev. Теперь не будет адских проблем с мультитачем.
Самое интересное, что поверх Wayland-композитора можно запустить сервер X. Это называется X-wayland и сделано для поддержки совместимости со старыми приложениями.
А что происходит, спросите вы, когда mesa получает задание отрендерить картинку? Через драйвер и DRM она общается с железом и рендеринг происходит аппаратно.
Разумеется, все это в случае с дровами свободными. В случае блоба ничем помочь, к сожалению, не могу.
Windows
Разобраться в графике Windows было намного сложнее по причине закрытости оной. Благо многие основные принципы есть в открытом доступе и здесь я расскажу про WDDM — архитектуру драйверов, позволяющую отображать рабочий стол посредством Direct3D. У этой модели есть несколько очень неплохих преимуществ.
- Параллельное использование ресурсов графического процессора Путем разделения графической памяти и графического процессорного времени в соответствии с приоритетами приложений.
- Виртуализация памяти Здесь это означает, что ни один процесс не может видеть память другого, в том числе и не может иметь доступа к видеопамяти. Также, если видеопамять переполнится, неиспользуемая ее часть будет записана на диск. Это может произойти при открытии множества окон, ведь по сути, рабочий стол в Windows начиная с Vista — 3D-приложение.
- Независимая от разработчика планировка Раньше разработчик каждого драйвера по-своему реализовал планировку приложений, требующих графического процессора. Теперь WDDM делает это сам, при помощи своего исполняемого модуля.
Сравнения:
Преимущества Linux:
- Легкая удаленная работа. Сетевая прозрачность протоколов X11 и Wayland позволяет легко работать с удаленным сеансом.
- Настройка режима дисплея внутри ядра(KMS) позволяет получить высокое разрешение в консоли.
- Открытая реализация OpenGL позволяет создавать свободные драйвера ядра, не задумываюсь о юзерспейсной части.
Преимущество Windows:
- Стабильность. При падении драйвера в Windows он просто перезапустится, а в Linux упадет вся система.
К сожалению, про macOS я ничего не нашел. Кому не жалко, могут поделиться ссылкой.