Wayland๊ณผ Weston

ยท 2087 words ยท 5 minute read

๊ฐœ์š” ๐Ÿ”—

์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋œ ์—…๋ฌด๋Š” ์•„๋‹ˆ์ง€๋งŒ ํŒ€ ๋‚ด์—์„œ wayland, weston ์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์ž์ฃผ ๋“ค๋ฆฐ๋‹ค. ์–ด๋ ธ์„ ์ ์— ๋ฆฌ๋ˆ…์Šค ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์— ๊ด€์‹ฌ์ด ๋งŽ์•„ X11 ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์†Œํ•œ์˜ ์ž‘์—… ํ™˜๊ฒฝ์„ ๋งž์ถ”๊ณ  gnome์ด๋‚˜ kde, xfce๊ฐ€ ์•„๋‹Œ fluxbox, blackbox, i3, xmonad, enlightenment ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ด๋Ÿฐ์ €๋Ÿฐ ์‹œ๋„๋ฅผ ํ•ด๋ณด์•˜๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค. ๋‹น์‹œ์—๋Š” ๊ทธ์ € ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋งŒ ๊ธ‰๊ธ‰ํ–ˆ์ง€ ์‹ค์ œ๋กœ ์—…๋ฌด์—์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒƒ๋“ค์ด ์‚ฌ์šฉ๋  ์ค„์€ ๊ฟˆ์—๋„ ๋ชฐ๋ž๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‚ฌ๋‚ด ์œ„ํ‚ค์˜ ๋‚ด์šฉ์„ ์ถœ์ฒ˜๋กœ ํ•˜์—ฌ, wayland, weston์— ๋Œ€ํ•œ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํด๋ผ์ด์–ธํŠธ ์˜ˆ์ œ๋ฅผ ๊ธฐ์ˆ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

Wayland ๐Ÿ”—

wayland๋Š” display server protocol์ด๋‹ค. ์œˆ๋„์šฐ์ฆˆ์™€ ๋‹ฌ๋ฆฌ ๋ฆฌ๋ˆ…์Šค๋Š” GUI ํ™˜๊ฒฝ์— ๋Œ€ํ•ด์„œ๋„ server - clients ๊ฐœ๋…์œผ๋กœ ์ฒ˜์Œ ๊ตฌํ˜„๋˜์—ˆ๊ณ  X11 ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์žกํ•œ ํ”„๋กœํ† ์ฝœ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋กœ ์ธํ•ด ๋ถˆํ•„์š”ํ•œ ํ˜ธ์ถœ์ด ๋งŽ์•˜๊ณ  ์ด๋ฅผ ๊ฒฝ๋Ÿ‰ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ”๋กœ wayland์ด๋‹ค.

X11์—์„œ wayland๋กœ์˜ ๋ณ€ํ™”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • X11์€ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋กœ์„œ ๋™์ž‘ํ•˜์ง€๋งŒ wayland๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์–ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฐ์†Œ

  • X11์€ server, compositor๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์ง€๋งŒ wayland๋Š” server์™€ compositor๊ฐ€ ํ†ตํ•ฉ๋˜์–ด ๋‘ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ถˆํ•„์š”ํ•œ ํ†ต์‹ ์ด ๊ฐ์†Œ

  • X11์—์„œ ๋ Œ๋”๋ง์„ ์„œ๋ฒ„๊ฐ€ ๋‹ด๋‹นํ•˜์˜€์ง€๋งŒ, Wayland๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ Œ๋”๋ง์„ ๋‹ด๋‹นํ•˜์—ฌ ์„œ๋ฒ„์™€์˜ ๋ณต์žก๋„๊ฐ€ ๊ฐ์†Œ

  • X11์€ ์„œ๋ฒ„๊ฐ€ client, compositor, kernel ๊ฐ„์˜ ๋ชจ๋“  ๋™์ž‘์„ ์ค‘๊ฐœํ•˜์˜€์ง€๋งŒ, Wayland๋Š” server๊ฐ€ client, kernel๋งŒ ์ค‘๊ฐœํ•˜์—ฌ ๋ณต์žก๋„๊ฐ€ ๊ฐ์†Œํ•จ

Android์—์„œ Wayland๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ  ๐Ÿ”—

Android Graphic์—์„œ๋Š” SurfaceFlinger, Gralloc ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์‚ดํŽด๋ณด์ž.

SurfaceFlinger ๐Ÿ”—

SurfaceFlinger๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋‚˜ ์•ฑ์—์„œ ์ƒ์„ฑํ•œ ํ™”๋ฉด์„ ๊ด€๋ฆฌํ•˜๊ณ  ํ™”๋ฉด์˜ ์œ„์น˜๋‚˜ ํ‘œ์‹œ ์ˆœ์„œ, ์ƒ‰์ƒ ๋“ฑ์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๋˜ํ•œ, ์ปค๋„์— ์œ„์น˜ํ•œ ํ”„๋ ˆ์ž„ ๋ฒ„ํผ ๋“œ๋ผ์ด๋ฒ„์™€ ์—ฐ๋™ํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ํ”„๋ ˆ์ž„ ๋ฒ„ํผ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋ ˆ์ž„ ๋ฒ„ํผ์™€ ์—ฐ๋™ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

SurfaceFlinger

Gralloc ๐Ÿ”—

Android์—์„œ ๊ทธ๋ž˜ํ”ฝ ๋ฒ„ํผ์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

์œˆ๋„์šฐ์ฆˆ์™€ ๋งฅ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ  ๐Ÿ”—

์œˆ๋„์šฐ์ฆˆ๋Š” DWM (Desktop Window Manager)๋ฅผ, ๋งฅ์€ Quartz Compositor๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Server/Client Model ๐Ÿ”—

Wayland๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐ๊ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” request์™€ event๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

Wayland Architecture

  1. kernel์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉด wayland compositor๋กœ ์ „๋‹ฌํ•œ๋‹ค. kernel์˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. compositor๋Š” ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ ์ค‘์—์„œ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  client๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  3. client๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค. client๋Š” ์—…๋ฐ์ดํŠธ ๋œ ํ™”๋ฉด์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด compositor์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  4. compositor๋Š” client๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์€ ํ›„์— ํ™”๋ฉด์„ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. ๊ทธ ๋’ค, ioctl์„ ํ†ตํ•ด KMS์—๊ฒŒ ์žฌ๊ตฌ์„ฑ ๋œ ํ™”๋ฉด์„ ์ „์†กํ•œ๋‹ค.

๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…๋ฅ˜ ๐Ÿ”—

์ถœ์ฒ˜์—์„œ๋Š” ๋ชจ๋“ˆ์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋” ์ ์ ˆํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜์—ฌ ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ธฐ์ˆ ํ•˜๊ฒ ๋‹ค. ์ด์ „์— ๋ณด์ง€ ๋ชปํ–ˆ๋˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค(clutter, SDL)์ด ์žˆ์–ด ํ•จ๊ป˜ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

QT5 ๐Ÿ”—

์ด์ „์—๋Š” qt4, qt5์˜ ํ˜ธํ™˜์„ฑ์œผ๋กœ ์—„์ฒญ๋‚˜๊ฒŒ ์š•์„ ๋จน์—ˆ์—ˆ๋Š”๋ฐ ์ตœ๊ทผ์—๋Š” ํ•ด๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ๋ฆฌ๋ˆ…์Šค, ์•ˆ๋“œ๋กœ์ด๋“œ, ์œˆ๋„์šฐ์ฆˆ ๋“ฑ์˜ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, qt์˜ ๋Œ€ํ‘œ์ ์ธ ๋ชจ๋“ˆ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • QtCore: ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ, ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ, ์ด๋ฒคํŠธ ๊ด€๋ฆฌ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • QtGui & QtWidgets: ๋ฐ์Šคํฌํƒ‘์šฉ GUI ํˆดํ‚ท์œผ๋กœ์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ๊ตฌ์„ฑ ์š”์†Œ ์ œ๊ณต
  • QtMultimedia: ๋น„๋””์˜ค, ์นด๋ฉ”๋ผ, ์˜ค๋””์˜ค ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํด๋ž˜์Šค ์ œ๊ณต
  • QtNetwork: ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์œ„ํ•œ ํด๋ž˜์Šค ์ œ๊ณต
  • QtSQL: ODBC, SQLite, MySQL ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์›
  • QtWayland: Wayland ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก API ์ œ๊ณต

GTK+ ๐Ÿ”—

GTK+ (GIMP Toolkit+)๋Š” GUI๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ์‹ค์ œ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ์ œ๊ณต๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ API๋‚˜ ๊ฒฐ๊ณผ๋ฌผ์˜ ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฝ๋‹ค. GTK์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ฒ ๋‹ค.

Clutter ๐Ÿ”—

์ธํ…”์— ํ•ฉ๋ณ‘๋œ OpenedHand์—์„œ C์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ 2D ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ฐ์ฒด Actor์™€ ์ด๋ฅผ ๊ทธ๋ฆฌ๋Š” Canvas๋ผ๋Š” ์ถ”์ƒํ™”๋œ ๊ฐœ๋…์ด ์žˆ๋‹ค. OpenGL ES๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์Šคํฌํƒ‘ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

SDL (Simple DirectMedia Layer) ๐Ÿ”—

์˜ค๋””์˜ค, ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ์กฐ์ด์Šคํ‹ฑ ๋“ฑ ํ•˜๋“œ์›จ์–ด๊ฐ€ OpenGL ๋ฐ Direct3D์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. SDL์€ ์œˆ๋„์šฐ์ฆˆ์šฉ ๊ฒŒ์ž„์„ ๋ฆฌ๋ˆ…์Šค๋กœ ์‰ฝ๊ฒŒ ํฌํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ  ํ˜„์žฌ๋Š” ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ƒ์—์„œ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๋ฐ ํฌํŒ… ๋ชฉ์ ์œผ๋กœ ๋„๋ฆฌ ์ด์šฉ๋˜๊ณ  ์žˆ๋‹ค.

EFL ๐Ÿ”—

Enlightenment Foundation Library๋กœ Enlightenment์— ์ฝ”์–ด ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Weston ๐Ÿ”—

weston์€ wayland compositor์˜ ์ฐธ์กฐ ๊ตฌํ˜„(ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„์„ ๋•๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ ํ”„๋กœ๊ทธ๋žจ)์ด๋‹ค. Desktop, ์ž๋™์ฐจ, ํ‚ค์˜ค์Šคํฌ, ์…‹ํ†ฑ๋ฐ•์Šค ๋“ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ Wayland API์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐฝ๊ด€๋ฆฌ์™€ composite ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

๊ธฐ๋ณธ ์—ญํ•  ๐Ÿ”—

Weston์˜ ๊ธฐ๋ณธ ์—ญํ• ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์œˆ๋„์šฐ๋“ค์„ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.
  • shell(์œˆ๋„์šฐ ๊ด€๋ฆฌ ๊ทœ์น™)์„ ์ด์šฉํ•ด ์ถœ๋ ฅ๋˜๋Š” ์œˆ๋„์šฐ์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์œˆ๋„์šฐ๋ฅผ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ธฐ๊ณ  ํ™”๋ฉด ํฌ๊ธฐ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

์ถœ์ฒ˜ ๐Ÿ”—

  • Telechips, Graphic Framework