wayland简介-一A New X Server For Linux

 

            Wayland 是一个桌面的显示服务器协议和在Linux上实做这个协议的软件库。它是一个自由软件专案,采用MIT许可证释出,于2008年由 Intel 开放源代码技术中心 (Open Source Technology Center, OSTC) 的成员 Kristian Høgsberg 所发起的。[1]作者声称“每一个显示画面皆是完美的,我的意思是应用程序将能充分地去控制图形的显示,使我们完全无法察觉任何的撕裂、延迟、重画及闪烁”。[2][3]Wayland使得Compositor能够与应用程序和视频硬件直接交互。应用程序在它们自己的缓冲区中进行图形渲染。这样一来,窗口管理器就变成了一个显示管理服务,专门负责渲染那些屏幕上的程序。这比X Window系统中的窗口管理器要更简单,高效。

现有的Compositor例如Compiz,KWin和Mutter对Wayland都有着不同程度的支持。

背景

Kristian Høgsberg,一个专注于GNU/Linux图形开发的软件工程师,在2008年发起了Wayland project。当时他在Red Hat[4]工作,现在他在intel。[5]Wayland是自由软件,它的库(libwayland-server and libwayland-client)以MIT License授权,示例程序和Compositor一开始以GPLv2授权。现在整个Project都是以MIT License授权的了。直到2010年11月份,Wayland还仅仅只能在intel,AMD,Nvidia的开源驱动上运行。

“Wayland”这个名字来自于Wayland,MA。据说Høgsberg是在开车穿过那个小镇时得到灵感的。

设计

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)等等)或是程序库(cario,pixman,freetype,fontconfig,pango等等),所以窗口系统需要做的事情大大减少了。但是 X11 协议十分巨大,庞杂,并且它包括了许多已经过时的模块。虽然开发者们为了使 X server 适应现代化的计算机体系结构而开发出了 XRandR,XRender,COMPOSITE等一些额外扩展,但这终究是治标不治本,同时这也会增加维护的难度。 Wayland也包括了一个协议(近乎完成),但与X server不同的是 Wayland只做它必须要做到事情。下面我们以"鼠标点击按钮引发按钮更新动作"来说明一下 Wayland 和 X server 的区别:

wayland简介-一A New X Server For Linux_第1张图片
X 架构

在 X 中

  1. 内核捕获鼠标点击事件并发送给 X server。
  2. X server 会计算该把这一事件发送给哪个窗口(事实上,窗口位置是由Compositor控制的,X server并不能够正确的计算Compositor做过特效变化之后的按钮的正确位置)。
  3. 应用程序对此事件进行处理(将引发按钮更新动作)。但是,在此之前它得向X server发送绘制请求。
  4. X server接收到这条绘制请求,然后把它发给视频驱动来渲染。X 还计算了更新区域,并且这条"垃圾信息"发送给了Compositor。
  5. 这时,Compositor 知道它必须要重新合成屏幕上的一块区域。当然,这还是要向X server发送绘制请求的。
  6. 开始绘制。但是X server 还会去做一些不必要的本职工作(窗口重叠计算,窗口剪裁计算等)。
wayland简介-一A New X Server For Linux_第2张图片
Wayland 架构



在 Wayland 中

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


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

媒体关注

Phoronix 于 2008 年 11 月发表了一篇标题为“Wayland: A New X Server For Linux”的文章,[2]披露 Wayland 这项新的项目。Kristian 透过他的网志对此关注作出回应,他告示大众 Wayland 并非一个新的 X server 而是一个显示服务器,并声明这个新兴的专案尚处于未成熟的阶段。[13]

使用

Ubuntu

马克·沙特尔沃思于 2010 年 11 月 4 日宣布 Wayland 将作为 Ubuntu 未来某一未定版本 Unity 接口的显示服务器[14]。但是,2013年3月份,Canonical 确认他们将开发一个新的显示服务Mir显示服务器英语Mir_(display_server)而不是使用 Wayland 来替代X[15]

Fedora

Adam Jackson (ajax) 在Fedora 项目的邮件列表里表示,Fedora在未来很可能会默认使用Wayland。"...因为它在许多方面都有重大的进步..."[16]

KDE

KWin,KDE的视窗管理器加入支持 OpenGL ES 输出。[17] 已在 KDE SC 4.7 发布[18]目前,KWin 已经完成 Wayland 的初步移植。[19] 在2012年1月发布的 KDE SC 4.8,KDE 将支援 X 下执行 Wayland。在2012年夏天发布的 KDE SC 4.9,将可以直接执行 Wayland,主要用于支援行动设备,也就是Plasma Active。[20]

Compiz

Ubuntu 的 Compiz 开发者们已经把它对X的依赖部分变成了一个可选插件。同时,Canonical正在为Compiz添加OpenGL ES的支持。众所周知,目前 Wayland 正是使用OpenGL ES,这使将得Compiz能够更容易迁移到Wayland。

 

工具包

截止到 2012年3月:

Clutter对Wayland已经有完整的支持。

EFL对Wayland已经有完整的支持。

Qt5除了对client有一些改动之外,对Wayland已经有完整的支持。

GTK+3.4.0,发布于2012年03月26日,对Wayland的支持有一些缺陷。不过过随着3.4.1更新版本的发布,这个问题得到了缓解。

SDL的Wayland支持正在开发中。


与 X 的向后兼容性 [编辑]

借由 -platform 命令列选项,Qt 应用程式可以在运行时切换图形后端,如 X 与 Wayland。[21]2011年1月,Wayland 支持搬进了上游 Qt 版本库的 Lighthouse 分枝。

 

你可能感兴趣的:(Tizen,Linux)