Wayland๋ ํ๋กํ ์ฝ์
๋๋ค - https://en.wikipedia.org/wiki/Wayland_ (display_server_protocol)
ํ๋กํ ์ฝ์ ์์ํ C#์ผ๋ก ๊ตฌํํ๊ฑฐ๋ libwayland-client์ ๋ํ ๋ฐ์ธ๋ฉ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
http://www.jlekstrand.net/jason/projects/wayland/language-bindings-guide/
libwayland-server ๋ฐ libwayland-client๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ถ์๋์์ต๋๋ค.
๊ฐ์ฅ ์กด๊ฒฝ๋ฐ๋ ํดํท์๋ Wayland๊ฐ ์ง์๋ฉ๋๋ค. - http://wayland.freedesktop.org/toolkits.html
"ํนํ ์ด๊ฒ์ ์ค๋์ค์ ๋ํด ์คํ ๊ฐ๋ฅํ ๋คํธ์ํฌ ํฌ๋ช ์ฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค"(???)
์ ์ ๊ฐ์ฌํฉ๋๋ค! ํ์ง๋ง ์ด๋ฏธ GTK(wayland ์๋จ์ ์์น)๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ wayland์ ์ง์ ๋ฐ์ธ๋ฉํ ๊น์? ์ด๊ฒ์ ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ์ง ์์ต๋๊น? ๋ด๊ฐ ์ดํดํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์ฐ๋ฆฌ๋ ๋ชจ๋ ์์ ฏ, ์ฐฝ ๊ธฐ๋ฅ ๋ฑ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ด์ ์ ๋ฌด์์ด๋ผ๊ณ ๋ณด์ญ๋๊น?
์ข์ ์๊ฐ์ด์ง๋ง eto ํ๋ ์์ํฌ๊ฐ ์๋ ๋ชจ๋ ธ ํ๋ ์์ํฌ ๋๋ .net ์ฝ์ด์ฉ์ ๋๋ค. ์ฅ์ ์ ๋ถ๋ช ํฉ๋๋ค. Eto -> gtk# -> mono/.net ์ฝ์ด -> gtk+ -> xwindow. eto -> mono/.net ์ฝ์ด -> wayland๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋ด๊ฐ ํ๋ฆด ์๋ ์์ง๋ง Wayland๋ ๋จ์ง ํฉ์ฑ๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ , ๊ทธ๋ผ๋์ธํธ, ํ ์ค์ฒ ๋ฑ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๋๋ก์ API๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ cairo์ ๊ฐ์ ๊ฒ์ด ์ ๊ณตํ๊ณ ๋งค์ฐ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. Eto.Forms๊ฐ ๋ฒํผ์ ๋ ๋๋งํ๋ ์์ฒด ๋๋ก์ API๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์์ํ์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ์ด ๋ค์ ๋ง๋ค์ด์ง๊ณ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ Eto.Drawing API๋ฅผ ์ฌ์ฉํ์ฌ Eto์ ๊ฐ ์ปจํธ๋กค(์: Button, TextBox ๋ฑ)์ ๋ํด ์ฌ์ฉ์ ์ ์ ๊ทธ๋ ค์ง ํธ๋ค๋ฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ํด ์ข ์ข ์๊ฐํ์ต๋๋ค. ์ด๊ฒ์ ํ๋ซํผ์ ์ง์ํ๊ธฐ ์ํด ํ๋ซํผ์ ๋ํ Eto.Drawing ํธ๋ค๋ฌ๋ง ๋ํํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค(์๊ฐ์ ์ผ๋ก ๋ณด์ด๋ ๋ฐฉ์์ ์ ๊ฒฝ ์ฐ์ง ์๋ ๊ฒฝ์ฐ).
Eto.Forms๋ ์ด๋ฏธ cairo(wayland ์ง์)๋ฅผ ๋ํํ๋ฏ๋ก ๊ฐ ์ปจํธ๋กค์ ๋ํด ์ฌ์ฉ์ ์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋๋ฉฐ ์ต์ํ GTK+๋ ์๋ผ๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ฌ์ ํ โโ๋ง์ ์์ ์ ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ถฉ๋ถํ ์ด์ฑ์ ์ด๋ผ๋ฉด ํ์ํ ๋งํ ์ถ๊ฐ ์ฌํญ์ด ๋ ๊ฒ์ด๋ฉฐ ์์ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ง๋ง ๋ง์ ์์ ์ ํ ์๋ ์์ต๋๋ค.
์์ง๋ ์ด ์์ด๋์ด์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ด ์ฃผ๋ณ์ ์์ต๋๊น? C#์ด Wayland๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋๋ก ํ๋ Wayland์ ๋ํ ๋ฐ์ธ๋ฉ์ ๋ง๋ค์์ต๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ๋ก๋ํ๊ธฐ ์ ์ ๋์์ธ์ ๋ง๋ฌด๋ฆฌํ ๊ณํ์ ๋๋ค. (๊ธฐ๋ณธ์ ์ผ๋ก DL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ Wayland ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Mono๊ฐ DLL ํจ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ง์ ์ธํฐํ์ด์คํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Wayland์ C# ๊ฐ์ P/Invoke๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ค๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.) ์ ๋ Cairo ๋์ ImageSharp ์ฌ์ฉ(Cairo๋ ๋ถ๋ช ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์ํธ ์์ฉํ ์ ์์ผ๋ฉฐ ๋ด ๋ ธ๋ ฅ์ ์ง์ ๊ฒฝ๋ฉธํฉ๋๋ค.)
์์ด ๋ฌธ์ ๊ฐ ๋ฌธ์ ์ธ์ง ์ ๋ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ... ๋ฌด์์ ์ป์ ์ ์์ต๋๊น?
GTKSharp ๋ฐ GTK ์ข ์์ฑ์ ๋ํ ํ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ ํฐ ์ผ์ ๋๋ค. Wayland๋ Skia, OpenGL, ImageSharp์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ๋น ๋ฅด๊ณ ์ ์ฐํฉ๋๋ค. Eto.Form์ ๋ ๋๋งํ๊ธฐ ์ํด ์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ดํ์ง ์์ ๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GTK์ ๊ฐ์ ๋งค์ฐ ๊ฑฐ์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ์ํ๋ ๋์ ๋ ์๊ณ ์ฌ๋ฆผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํนํ ์๋ฒ ๋๋ ํ๊ฒฝ์์ ์ฌ์ฉ์์๊ฒ ๋ ๋ง์ ์ต์ ์ ์ ๊ณตํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(ARM ์ฅ์น์์ Wayland๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ๋ณด๋ ค๋ฉด https://www.youtube.com/watch?v=GtXQJ0c5q0k).
๋๋์ฒด ์ด๋ป๊ฒ gtk/qt๋ฅผ ์ค๊ณํ์ง ์๊ณ ๊ทธ๋ฅ wayland๋ก ๋ฒํผ์ ๋ ๋๋งํ๊ณ ์ฌ์ ํ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ด๋๋ก ๋ง๋ค ์ ์์ต๋๊น?
์ด๋ฏธ์ง๋ก ํ ๋๋ฆฌ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ์ฝ๋๋ก ๊ทธ๋ฆฝ๋๋ค. ์๊ฐ๋ณด๋ค ์ฝ๊ณ HTML ์น ๋์์ธ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ImageSharp๋ C#์ฉ Gimp์ ์ ์ฌํ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ํด๋น ์์ ์ ์ฝ๊ฒ ์ํํ ์ ์๋๋ก ํฉ๋๋ค.
์ด๋ฏธ์ง๋ก ํ ๋๋ฆฌ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ์ฝ๋๋ก ๊ทธ๋ฆฝ๋๋ค. ์๊ฐ๋ณด๋ค ์ฝ๊ณ HTML ์น ๋์์ธ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
Eto Forms์ ์์ ์ ํ๋ซํผ์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ์ https://github.com/AvaloniaUI/Avalonia ์ ๊ฐ์ ํ๋ก์ ํธ์ ๋ ์ ํฉํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์ ์ ์ฌ์ ํ โโ์ ํจํฉ๋๋ค. Eto์์ C# ํ๋ซํผ์ ๋ง๋ค์ด Linux๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํ๋ซํผ์์ ์๋ํ ์ ์๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์ ์ ์ฌ์ ํ โโ์ ํจํฉ๋๋ค. Eto์์ C# ํ๋ซํผ์ ๋ง๋ค์ด Linux๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํ๋ซํผ์์ ์๋ํ ์ ์๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๊ทธ๋ฆผ์ด ๋ ๊ฒ์ด๋ฉฐ UI๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ด์ง ์์ ๊ฒ์ ๋๋ค.
์ด ํ๊ฒฝ์์๋ ๋ค๋ฅธ UI ํดํท์ด ์์ผ๋ฏ๋ก '๋ค์ดํฐ๋ธ'๋ผ๋ ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค. ๋๋ ์ข ์ข ๊ทธ๋ฆฌ๊ธฐ ์คํ์ ๊ตฌํํ๊ธฐ๋ง ํ๋ฉด ๋๋ Drawable ์ปจํธ๋กค๋ก ์์ฝ๋๋ ํ ๋ง ํธ๋ค๋ฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ @cra0zy ๋ Avalonia๊ฐ ์ด๋ฏธ ๊ทธ ๋ผ์ธ์ ๋ ๊ฐ๊น๊ณ ์ด๋ฏธ ์์ ์ค์ธ Skia ๋ฐฑ์๋๊ฐ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
๊ทธ๋์ ๋น์ ์ Eto ํ๋ก์ ํธ๊ฐ ๋์์ ์ด๋ ค ์์ง ์๊ณ GTK์ ๊ฐ์ ๋ถํ๋ ค์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ์ํ ๊ฒ์ด๋ผ๋ ๋ง์ ๋๊น?
@CsharpOnLinuxDev ์๋์, ์ ๋ ์ด์ ๋ํด ์ด๋ ค ์์ต๋๋ค. Eto๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์ ํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ, ๊ทํ(๋๋ ๋๊ตฐ๊ฐ)๊ฐ ๋์ฒด ํ๋ซํผ์ ๊ธฐ๋ฐ์ด ๋๋ ํ๋ฅญํ ํ๋ ์์ํฌ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์ ์ ์ผ๋ก ์ง์งํฉ๋๋ค. ์๋ฒ ๋๋ ํ๋ซํผ์ฉ GTK๋ QT์ ๊ฐ์ ๊ธฐ์กด UI ํดํท์ด ์๋ ํ๋ซํผ์ ์ง์ํ๋ ์ ์ค ์ผ์ด์ค๊ฐ ๋ถ๋ช ํ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ .NET Core๊ฐ ์๋ ์ฐฝ์ ์ง์ํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ฆ, ๊ทธ๋ฌํ ํ๋ซํผ์ ๊ฐ๋ฐํ๊ฑฐ๋ ์ ์ง ๊ด๋ฆฌํ ์ฃผ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ์ด์ ๋ํ ๋ชจ๋ ์ง์ ์ ์ปค๋ฎค๋ํฐ์์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ๋ํ ๋ฐ๋์ ๊ธฐ๋ณธ Eto ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ผ๋ถ์ผ ํ์๋ ์์ผ๋ฉฐ ๋๊ตฌ๋ Eto์ฉ ํ๋ซํผ ๊ตฌํ์ ๋ง๋ค๊ณ ์ํ๋ ๋๋ก ๊ฒ์ํ ์ ์์ต๋๋ค. (;
๋๋ (ํญ์) ์์ฒญํ๋ ์ฌ๋์๊ฒ ๋์๊ณผ ์๋ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์๋ ํ์ธ์, ์ด๊ฒ์ ์ง์ ์ด ์์ต๋๊น? Wayland๊ฐ Eto์ ํตํฉ๋ฉ๋๊น?
๊ธ์, ๋น์ ์ด Gtk 3 ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๋น์ ์ ์ด๋ฏธ wayland๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค ...
@cra0zy ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค!
ํ์ง๋ง eto -> mono/.net core -> wayland
๊ฐ ์๋๋ผ Eto -> gtk# -> mono/.net core -> gtk3 -> wayland
์
๋๋ค.
์ฌ์ค ์ ๋ wayland C# ์ํผ๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค. ๐