Wayland는 리눅스 데스트탑에서 X-Window를 대치할 Display Server와 Compositing 프로토콜을 말한다. 참고로, Display Server는 실제 화면에 Desktop를 그린다. 각 윈도 부터, 윈도간의 멋진 효과도 모두 Display Server가 보여준다.
X-Window는 80년대 설계된 Windowing system이다. 네트웍을 기반으로 동작하도록 설계되었고, 많은 다른 Windowing System의 아버지로 Mac OSX의 Windowing System도 사실 X-Window를 기반으로 만들어졌다.
흥미롭게도, X-Window는 Client-Server 구조를 갖고 있다. X-Server는 사용자
PC에서, Xlib를 사용하는 응용 애플리케이션은 다른 워크스테이션에서 각각 실행될 수 있다. 이 덕분에 워크스테이션에 설치된 비싼 소프트웨어를 사용자 PC에서도 실행할 수 있었다. 하지만, 사용자 PC의 성능이 워크스테이션 급으로 향상되고, 임베디드 디바이스에서 리눅스 커널이 도입되면서 Client-Server 구조는 부담이 되었다. 또한 2D 그래픽은 Cairo, True Type Font를 출력을 위해서는 FreeType이 사용되면서 X-Window가 제공하는 2D Drawing 기능을 사용하지 않게 되었다. X-Window(DDX Driver)가 제공하던 mode setting기능이 Linux Kernel(KMS)에 추가되기도 했다. 결정적으로 윈도간의 그래픽 효과를 위해 OpenGL을 이용한 Compositing Manager가 도입되었는데, X-Window는 역할이 Kernel과 Compositing Manager사이에서 event를 전달해주는 역할로 축소되고 말았다. X-Window에서는 Compositing Manager가 별도의 프로세스로 동작하였고, Window Manager 역시 별도의 프로세스로 동작하므로 (GNOME shell의 경우 이 둘을 하나로 합쳤다), 3개의 프로세스가 필요했고 서로 간의 context switching은 성능 저하로 이어졌다.
Weston
Wayland하면 Weston이 꼬리 처럼 따라다니는데, Weston은 실제 Wayland interface를 사용해서 개발한 Compositing Window Manager이다. 현재, Wayland 적용한 다양한 Compositing Window Manager 있는데, GNOME Shell도 X-Window를 걷어내고 Wayland를 사용해서 개발되고 있고, KDE Desktop도 Wayland를 적용하고 있다. 실제 Weston을 실행하면 상당히 썰렁한데, 최소한의 데스크탑 기능만을 제공한다.
디자인 철학
개인적인 의견이지만, Wayland의 디자인 철학은 단순함과 확장성인 것 같다. 모든 것을 갖춘 X-Window에 비해 Display Server로서 최소한의 기능을 제공하고 있고, plug-in으로 확장하도록 하였다. 예를 들어, X-Window에서는 Client는 제목 표시줄을 제외한 부분만을 그리지만, Wayland에서 제목표시줄도 Client가 그려야 한다. 게다가 Rendering API를 제공하지 않기 때문에 Client가 원하는 그래픽 엔진을 사용하면 된다. 이 덕에 기존 UI Toolkit이 Wayland를 지원하는데 애를 먹었다.
Buffer 공유하기
Window Compositing manager는 각 윈도가 그려진 buffer를 접근해서 GPU를 통해 Compositing을 하는데, 각 Client와 Window Compositing Display Manager가 어떻게 buffer을 공유하느냐에 따라 성능에 영향을 준다. 소프트웨어 방식은 shm protocol를 통해 공유 메모리를 사용한다. 하지만, 최종적으로 buffer를 GPU memory에 올려야 한다. 반면, 하드웨어 방식은 DRM(Direct Rendering Manager)을 이용해서 GPU memory에 바로 buffer를 만들고 이를 Display Server와 공유하도록 하는 방식을 사용한다. 이렇게 하면 buffer를 이용해 EGL image를 만들고, 바로 texture로 만들어서 Compositing이 가능하다. 결국, 메모리 복사를 줄여서 성능이 향상된다. 이를 위해서는 EGL에서 EGL_WL_bind_wayland_display라는 extension이 제공되어야 한다.
현재, Gtk+, QT 같은 UI Toolkit도 Wayland로의 이전을 거의 마쳤다. Wayland를 사용한 GNOME Shell을 적용한 Fedora도 이미 사용해 볼 수 있다. Tizen 3.0도 Wayland를 기본으로 사용하고 있다. 이제 일반 사용자도 Wayland를 바로 사용해볼 수 있는 날이 멀지 않은 것 같다.
참고