Wayland

Wayland是一个通信协议，規定了顯示伺服器與其客戶機之間的通信方式，而使用这个协议的显示服务器称为Wayland Compositor。它由Kristian Høgsberg於2008年发起，目标是用更简单的现代化视窗系统取代X Window System。Wayland协议的参考实现称为Weston，由Wayland项目组使用C语言开发。

Wayland與X Window System的最大不同在於，它規定由客戶機自身負責窗口邊框和裝飾的繪製，並且客戶機能夠通過EGL以及一些Wayland特定的EGL擴充元件直接在顯示記憶體中算繪自己的緩衝區。窗口管理器简化成显示管理服务，专门负责算繪那些屏幕上的程序。这比X Window System中的窗口管理器要更简单、高效。

Wayland项目的源码使用MIT許可證釋出。现有的Compositor例如Compiz，KWin和Mutter对Wayland都有着不同程度的支持。

 歷史 
Wayland的创始人Kristian Høgsberg是X.Org Server开发者，曾参与过和的开发。他在2008年供职于红帽时发起了Wayland作为业余项目，目标是让“每一个帧都完美无瑕，也就是说应用程序要能充分地控制图形的渲染，使我们完全无法察觉任何的撕裂、延迟、重画及闪烁”。这一灵感浮现时他正开车经过马萨诸塞州的韦兰，也就由此决定了项目的名字。

2010年10月，Wayland加入了Freedesktop.org项目。在迁移过程中，邮件列表wayland-devel代替了原先的Google group邮件组，用于讨论项目的开发。

Wayland是自由软件，它的库(libwayland-server和libwayland-client)以MIT License授权，示例程序和Compositor一开始以GPLv2授权。现在整个项目都是以MIT License授权。直到2010年11月份，Wayland还仅仅只能在Intel、Nvidia和AMD的开源驱动上运行。

 设计 

Wayland运用既有的Linux核心技术，像是Direct Rendering Manager（DRM），Kernel Mode-Setting（KMS）以及Graphics Execution Manager（GEM）以提供一個最小化的显示管理服务。Wayland混合器（compositor）在2010年6月已从桌面常用的OpenGL改为OpenGL ES。這個專案也開發支援Wayland顯示的Qt，而不需要X。大部分應用程式都有望獲得透過函式庫，無需修改程式即可支援Wayland。

近些年来，GNU/Linux桌面图形开发者将许多与渲染有关的接口从X server移动到内核中。现在，已经有许多功能被移入内核（内存管理、任务调度、模式设置（KMS）等等）或是程序库（cairo、pixman、freetype、fontconfig、pango等等），所以窗口系统需要做的事情大大减少了。但是X11协议十分巨大、庞杂，并且它包括了许多已经过时的模块。虽然开发者们为了使X server适应现代化的计算机体系结构而开发出了XRandR、XRender、Composite等一些额外扩展，但这终究是治标不治本，同时这也会增加维护的难度。

Wayland是一款协议，但与X server不同的是，Wayland只做它必须要做的事情。下面以「鼠标点击按钮引发按钮更新动作」为例来说明一下Wayland和X server的区别：

在X中：
 内核捕获鼠标点击事件并发送给X server。
 X server会计算该把这一事件发送给哪个窗口（事实上，窗口位置是由Compositor控制的，X server并不能够正确的计算Compositor做过特效变化之后的按钮的正确位置）。
 应用程序对此事件进行处理（将引发按钮更新动作）。但是，在此之前它得向X server发送绘制请求。
 X server接收到这条绘制请求，然后把它发给视频驱动来渲染。X还计算了更新区域，并且这条「垃圾信息」发送给了Compositor。
 这时，Compositor知道它必须要重新合成屏幕上的一块区域。当然，这还是要向X server发送绘制请求的。
 开始绘制。但是X server还会去做一些不必要的本职工作（窗口重叠计算、窗口剪裁计算等）。

在Wayland中：
 内核捕获鼠标点击事件并发送给Wayland Compositor。
 由于是直接发给Wayland Compositor的，所以Wayland Compositor会正确地计算出按钮的位置。同时它会把这一事件发送给按钮所在的应用程序来处理。
 应用程序直接渲染，无需向Wayland Compositor请求。只需在绘制完成之后向Wayland Compositor发送一条信息表明这块区域被更新了。
 Wayland Compositor收到这条信息后，立即重新合成整个桌面。

目前，Wayland使用OpenGL ES而不是传统的OpenGL。“从长远来看，我们需要完整的OpenGL支持，但问题是libGL会带来X的依赖性......”另一方面，使用OpenGL ES会使得Wayland更容易支持移动设备。Wayland目前并不支持网络透明性，但未来可能会支持。

 媒体关注 
Phoronix於2008年11月發表了一篇标题為「Wayland: A New X Server For Linux」的文章，披露Wayland這項新的项目。Kristian透過他的網誌對此關注作出回應，他告示大眾Wayland並非一個新的X server而是一個顯示伺服器，並聲明這個新興的專案尚處於未成熟的階段。

 使用 
 Arch Linux 
Arch Linux本身不具有Wayland。但实际上，安装 Enlightenment 或 KDE 等桌面環境时，可以選用Wayland安裝作为显示服务器。

 Ubuntu 
馬克·沙特爾沃思於2010年11月4日宣佈Wayland將作為Ubuntu未來某一未定版本Unity介面的顯示伺服器。但是2013年3月份，Canonical确认他们将开发一个新的显示服务Mir而不是使用Wayland来替代X。2017年4月份，Canonical宣佈放棄Unity與Mir，並於Ubuntu 17.10開始使用Wayland。但在18.04LTS版本中因為Wayland無法支持屏幕共享，遠程桌面服務以及GNOME Shell崩潰的可恢復性更換為X.Org Server。

 Fedora 
Fedora 25整合了GNOME桌面最新版本 3.22，并将GNOME桌面的版本的显示后端切换至预设为Wayland。

 RHEL 
RHEL 8整合了Wayland。

 Qt 
Qt 5.x提供了QtWayland模塊以支持Wayland協議，藉由-platform命令列選項，Qt應用程式可以在運行時切換圖形後端，如X與Wayland。2011年1月，Wayland支持进入上游Qt版本庫的Lighthouse分支。

 KDE 
KWin，KDE的視窗管理器加入支持OpenGL ES輸出，已在KDE SC 4.7發布。目前，KWin已經完成Wayland的初步移植。在2012年1月發布的KDE SC 4.8，KDE將支援X下執行Wayland。在2012年夏天發布的KDE SC 4.9，將可以直接執行Wayland，主要用於支援行動設備，也就是Plasma Active。

 GNOME 
GNOME從3.10開始支持Wayland。

 Compiz 
Compiz开发者们已经把它对X的依赖部分变成了一个可选插件。同时，Canonical正在为Compiz添加OpenGL ES的支持。众所周知，目前Wayland正是使用OpenGL ES，这使将得Compiz能够更容易迁移到Wayland。
註:compiz此項目的主要作者已經離開Canonical，使得此項目進入停止開發的狀態，當然遷移到wayland的計劃也就更遙遙無期。

 Sailfish OS 
Jolla的第一款裝置搭载的Sailfish OS使用Wayland。

Wayland 合成器
實作 Wayland 顯示伺服器協定的顯示伺服器也稱為 Wayland 合成器，因為它們也執行合成視窗管理器的任務。

Hyprland – 一個用C++ 編寫的基於wlroots 的平鋪Wayland 合成器，Hyprland 值得注意的功能包括動態平鋪、選項卡式視窗、乾淨且可讀的C++ 程式碼庫以及提供視窗動畫、圓角和Dual-Kawase模糊的自訂渲染器。

Weston – Wayland 合成器的參考實現，實現客戶端裝飾。

Enlightenment - 聲稱自 0.20 版本以來完全支援 Wayland ，但目前正在進行工作以實現完整的 Wayland 合成器 。

KWin - 截至 2021 年，KWin 幾乎擁有完整的 Wayland 支援。

Mutter - Mutter 為 GNOME 3.9 的 Wayland 整合維護了一個單獨的分支（2013 年 9 月）；[54] 在 2014 年的 3.13.1 版本中，Wayland 分支被合併到主儲存庫中。

Clayland – 使用 Clutter 的 Wayland 合成器的簡單範例。

Sway – 平鋪 Wayland 合成器和 X11 i3 視窗管理器的直接替代品。

Weston
Weston 是Wayland 合成器的參考實作，它也是由Wayland 專案開發的，使用C 語言編寫，並在MIT 許可證下發布，由於Weston 依賴Linux 作業系統的某些功能，因此Weston只提供對Linux 作業系統的官方支援。其處理依賴evdev，雖然緩衝區的處理依賴於通用緩衝區管理 (GBM)，但是，2013 年宣布了 Weston 到 FreeBSD 的原型移植。

Weston 支援高頻寬數位內容保護 (HDCP)。

Weston 依靠 GEM 在合成器和應用程式之間共用應用程式緩衝區。對於渲染，Weston 可以使用OpenGL ES 或pixman 函式庫進行軟體渲染。支援庫作為依賴項。

Weston 的遠端存取介面由 RealVNC 員工於 2013 年 10 月提出。

Maynard
Maynard 是一個圖形 shell，被寫為 Weston 的插件，就像 GNOME Shell 被寫為 Mutter 的插件一樣。

Raspberry Pi 基金會與 Collabora 合作發布了 Maynard，致力於提高效能和降低記憶體消耗。

 工具包 

 Clutter 对 Wayland 已经有完整的支持。
 EFL 对 Wayland 通常情况下有完整支持。
 Enlightenment Foundation Libraries 对Wayland已经有完整的支持。
 QT 5 除了对 client 有一些改动之外，对Wayland已经有完整的支持。
 GTK+3.4.0，发布于2012年3月26日，对 Wayland 的支持有一些缺陷。不过过随着3.4.1更新版本的发布，这个问题得到了缓解。
 SDL自 2.0.2 发布以来开始支持 Wayland，自 2.0.4 开始默认启用。
 GLFW 自 3.2 开始支持。
 FreeGLUT 已开始支持。

 参见 

 X Window系統
 Mir
 Cairo

 參考資料 

 外部連結 
 官方網站 

Category:Wayland
Category:使用MIT许可证的软件