Embedded : : Linux/: : Linux UX

Wayland vs X11

Jay.P Morgan 2024. 5. 12. 05:22

 

  0. Wayland란

 

  Wayland는 리눅스 데스크탑 환경을 구현하기 위한 프로토콜로, 데스크탑 환경은 크게 컴포지터와 쉘로 구분합니다.

  Wayland는 컴포지터와 쉘의 구현을 돕는 API와, 쉘이 어플리케이션과 통과할 수 있도록 프로토콜을 제공합니다.

 

 

  1. Wayland의 장점

 

  1.1  성능

  WaylandX 서버에 비해 대기 시간을 줄이고 전반적인 성능을 향상시키는 것을 목표로 간결하고 효율적으로 설계되었습니다. 이는 X Server에 존재하는 레거시 기능과 오래된 메커니즘 중 일부를 제거하여 더 부드럽고 응답성이 뛰어난 사용자 인터페이스를 제공함으로써 이를 달성합니다.

 

 

  1.2  보안

  Wayland는 처음부터 보안을 염두에 두고 구축되었습니다. 보다 안전한 아키텍처를 채택하여 프로세스 간 통신에 대한 보다 엄격한 제어를 구현하고 애플리케이션을 서로 격리합니다. 이 설계는 특정 취약점을 완화하는 데 도움이 되며 악성 소프트웨어가 시스템을 손상시키는 것을 더 어렵게 만듭니다.

 

 

  1.3  간소화

  Wayland는 합성 및 창 관리를 프로토콜에 직접 통합하여 그래픽 스택을 단순화합니다. 이는 데스크탑 환경 또는 창 관리자가 Wayland 컴포지터로 구현될 수 있어 X 창 관리자 및 데스크탑 컴포지터와 같은 추가 레이어가 필요하지 않음을 의미합니다. 간소화된 아키텍처로 인해 더욱 깨끗하고 응집력 있는 시스템이 탄생했습니다.

 

 

  1.4  다양한 GPU 지원

  Wayland는 여러 그래픽 카드(GPU)에 대한 향상된 지원을 제공합니다. 이를 통해 응용 프로그램이 특정 GPU에 직접 렌더링할 수 있으며, 이는 통합 및 개별 GPU가 있는 노트북과 같은 하이브리드 그래픽 설정이 있는 시스템에 특히 유용할 수 있습니다. Wayland는 이러한 시나리오에서 GPU 할당에 대한 더 많은 제어 기능과 더 나은 성능을 제공합니다.

 

 

  1.5  렌더링 환경

  Wayland는 기본적으로 잘림 현상과 깜박임 없는 렌더링 환경을 제공합니다. 화면 찢어짐을 방지하기 위해 이중 버퍼링 및 수직 동기화와 같은 기술을 사용하는 X 서버와 달리 Wayland의 프로토콜은 응용 프로그램이 화면 표면을 직접 제어할 수 있도록 보장하여 애니메이션을 더 부드럽게 하고 찢어짐을 줄입니다.

 

 

  1.6  샌드박싱 애플리케이션

  Wayland는 샌드박싱 애플리케이션 개념을 도입합니다. 각 애플리케이션은 자체 격리된 환경에서 실행되므로 오작동하는 애플리케이션이 다른 애플리케이션이나 시스템 전체에 영향을 미치는 것을 방지할 수 있습니다. 이러한 격리를 통해 안정성과 보안이 향상될 뿐만 아니라 애플리케이션 개발 및 유지 관리가 더 쉬워집니다.

 

 

  1.7  현대적인 코드베이스

  WaylandX Server에 비해 더 간단하고 현대적인 코드베이스를 제공합니다. 해당 프로토콜은 더 간단하고 이해하고 구현하기가 더 쉽습니다. 이러한 단순성 덕분에 개발자는 애플리케이션과 컴포지터를 만드는 데 더 쉽게 접근할 수 있습니다. 또한 Wayland는 더 나은 도구와 디버깅 기능을 제공하여 개발자가 문제를 진단하고 해결하는 데 도움을 줍니다.

 

 

  2. 역사

 

  2.1  History

  X11 (X Window System)1987년 도입된 이래 Unix 계열 시스템의 주요 디스플레이 서버 프로토콜이었습니다. 이는 Linux Unix 시스템에서 그래픽 사용자 인터페이스를 표시하기 위한 기본 아키텍처를 제공했습니다. 그러나 기술이 발전하면서 X11의 한계는 더욱 분명해졌습니다.

 

  Wayland2008Kristian Hogsberg에 의해 X의 새로운 프로토콜이자 현대적인 대체 프로토콜로 소개되었습니다. X11의 한계를 극복하고 보다 간편하고 안전한 고성능 시스템을 제공하도록 설계되었습니다.

 

 

  2.2  X11 관련 이슈:

     • 복잡성과 레거시 코드

     • Direct Rendering 부족

    보안 문제

    비효율적인 다중 모니터

    중복 기능

     • Tearing 및 지연 문제

 

※ 화면 찢김(Tearing) 현상의 예. 출처 : medeum

 

    → API 증가 및 기능이 너무 거대해지며, 유연성이 떨어지는 문제

    → X11이 하던 일들이 DRI, DRM 등을 통해 커널이 많은 기능을 처리

 

 

  2.3  Wayland가 해결한 사항:

    더 간단한 코드베이스 (컴포지터를 직접 구현하지 않음)

    다이렉트 렌더링

    더 나은 보안

    최신 다중 모니터 및 HiDPI 지원

    효율성과 성능

       →컴포지터와 쉘은 서드파티가 구현하도록 하여, 자유롭고 유연하며 확장성이 있는 구조를 갖게 됨.

 

 

  2.4  최종 사용자에게 미치는 영향

    사용자는 더 부드러운 애니메이션, 더 적은 화면 찢김, 더 반응성이 뛰어난 GUI를 느낄 수 있습니다.

    다중 모니터 또는 HiDPI 디스플레이를 사용하는 사용자는 Wayland가 설정을 더 잘 관리한다는 것을 알 수 있습니다.

    애플리케이션은 서로를 도청할 수 없으므로 사용자 개인정보 보호가 강화됩니다.

 

 

  2.5  최종 사용자에게 부정적인 영향

  - 일부 애플리케이션(특히 Discord 등 이전 Electron 버전을 사용하는 애플리케이션)이 제대로 작동하지 않을 수 있습니다. 이러한 문제 중 많은 부분이 수년에 걸쳐 해결되었습니다. 웨이랜드가 나온 지 16년이 지났습니다.

 

 

 

  Mutter(Gnome 컴포지터)와 Weston이 가장 완성도 높은 Wayland 컴포지터이며, Weston은 임베디드 환경에서 많이 사용합니다.

  많은 주요 Linux 배포판이 Wayland로 이동하고 있지만 X11은 즉시 사라지지 않는다는 점은 주목할 가치가 있습니다.

 

  그러나 GNOME KDE Plasma와 같은 주요 프로젝트에서 Wayland를 채택한다는 것은 Linux 데스크톱 생태계가 Wayland를 미래 표준으로 향한 광범위한 전환을 의미합니다.

 

 

  3. Weston이란

 

  Weston은 Gnome, Kde와 마찬가지로, 리눅스 데스크탑 환경입니다. 즉, Weston을 통해 우리는 리눅스에서 GUI를 사용할 수 있습니다. Weston은 Gnome, Kde가 제공하던 주요 기능(GUI 앱 윈도우 생성, 리사이즈, 이동, 창 겹치기, 마우스 입력 전달 등)을 제공합니다.

  또한 구조화가 잘 되어있기 때문에 다양한 환경(fb, drm, wayland/x11)에서 유연하게 사용 가능하며, 다양한 구현체(desktop-shell, ivi-shell)이 존재합니다. 이러한 장점들 덕분에, 데스크탑에서는 주류가 아니지만, 자동차, 항공 등 임베디드 리눅스에서 그래픽을 요구하는 분야에서는 높은 사용률을 가지고 있습니다.

 

 

 

 

  3.1  Weston 구조

 

  Weston의 개괄적인 구조는 위와 같다. Weston에서 가장 핵심이 되는 부분은 Compositor로, 주요 Wayland 객체를 생성/관리하고, Shell과 Backend를 로딩하여 인터페이스 기반으로 활용한다. Shell은 화면 구성과 관련된 Wayland 객체를 생성/관리하며, App의 보이는 영역(surface) 관리를 한다. Backend는 Compositor의 화면 출력(output)을 처리한다. 이를 정리하면 다음 표와 같다.

컴포넌트 내용
Compositor      • 주요 Wayland 객체 생성 / 관리
     • Weston 초기화
     • Shell 로딩
     • Backend 로딩
     • Input 디바이스 관리
     • 명령줄 인자 / Config / 환경 변수 관리
Shell      • Surface 관련 Wayland 객체 생성 / 관리
     • App의 Surface 관리
     • 실제로 사용자가 접하는 UI / UX 담당
Backend      • Output을 처리하는 컴포넌트
     • drm-backend: 최근에 나온 대부분 임베디드 리눅스 시스템에서 사용
     • fb-backend: 오래된 리눅스 시스템에서 사용
     • wayland-backend: wayland 데스크탑 환경에서 weston을 실행할 경우 사용
     • x11-backend: x11 데스크탑 환경에서 weston을 실행할 경우 사용
     • rdp-backend: 원격 데스크탑 프로토콜(rdp)으로 접속하는 경우 사용

  * Backend까지 다루면 내용이 너무 많아지기에, Backend 부분은 생략합니다.