Mirの実装方針にフィードバックを
「Mir」の実装方針を決めるにあたり、フィードバックを募集しています。Waylandサポートの現状
現在「Mir」は「Wayland」のサポートに向け、実装作業が行われています。すでに「Mir」には「Wayland」の基本的なサポートが実装されていますが、完全な「Wayland」のサポートには至っていません。
現在「Wayland」に関する実装では、以下の基本的な実装が行われています。
- WaylandクライアントがWaylandサーバー(Mir)に接続できる
- ウィンドウを作成し、クライアントのコンテンツを描画する
- マウス、キーボード、タッチパッド入力が可能
また「Mir」の振る舞いが他の「Wayland」の実装と同じ振る舞いであることをテスト及び保証するため、「Wayland Conformance Test Suite」の構築作業も行われています。
まだまだ足りないWaylandサポートの実装
「Wayland」のサポートに必要な実装はまだまだ足りていません。例えば以下の機能は、十分な実装が行われていません。
- コピー&ペースト
- ドラッグ&ドロップ
- より多くのウィンドウ管理機能
- サブコンポジター
- サブサーフェス
また「Wayland」プロトコルにはプロトコル拡張があり、これらの実装も含め多くの実装作業が必要になります。
Mirの実装方針
必要な作業が数多くあるため、実装の優先順位や「Mir」の実装方針について、コミュニティーのフィードバックを判断材料の一つにしたいとのことです。フィードバックは以下の内容を参照した上で、上記のトピックに返信してください。
1.デスクトップアーキテクチャー
簡潔に言うとデスクトップ環境は、アプリのウィンドウを表示するためのサーバー、コンポジター、ウィンドウマネージャー、そしてユーザーがアプリを起動したり、アプリのウィンドウを切り替えられるようにするため、パネルやドック、デスクトップから構成されます。デスクトップ環境を構築する手法(デスクトップアーキテクチャー)がいくつかあります。
大別すると、以下の手法に別れます。
モノシリックなデスクトップ
モノシリックとは、一枚岩のことです。それぞれの構成要素がお互いに密に結びついています。
モノシリックなデスクトップは、サーバー/コンポジター/ウィンドウマネージャーとパネル/ドック/デスクトップがすべて単一プロセス内で動作する構造です。
利点
実装が容易であり、お互いの状態を同期するためにIPC(Inter-Process Communication/プロセス間通信)を行う必要がなくなります。また意図しない方法でアプリがシェルの挙動を学び取ったり、意図しない方法でアプリがシェルを操作することを防ぐことができ、より高いセキュリティーを実現できます。
欠点
モジュール式ではないため、サードパーティーのパネルやドックと組み合わせることができません。つまり特定の構成要素を別のものに入れ替えることが困難です。
またソフトウェアの品質面では堅固さに欠けます。
例えばドックのソースコードのたった1行に実装上の問題があった場合、シェル全体をクラッシュさせることが可能です。
結果ユーザーセッションが失われることになるでしょう。
処理の効率面もあまり良くありません。
例えばパイプラインのレンダリングでは、複雑なレンダリングになるほどフレームドロップが発生しやすくなります。
GNOME Shellの実装方法である
「GNOME Shell」は「Wayland」をサポートするために大部分でこの手法を採用し、実装を行っています。高度にモジュール化されたデスクトップ
モノシリックとは逆の構造であり、それぞれの構成要素がお互いに密に結びついていません。プラグインみたいな構造ですね。
サーバー/コンポジター/ウィンドウマネージャー/パネル/ドック/デスクトップが、それぞれのプロセスで動作する構造です。
それぞれのコンポーネントが、個別の・自身のプロセス内で動作します。
利点
サードパーティーのパネルやドックと組み合わせることができ、カスタマイズされた様々なデスクトップ環境を構築できます。各コンポーネントが個別のプロセスで動作するためより堅固な構造であり、サーバー以外のコンポーネントがクラッシュしても、そこからデスクトップ環境を復帰できます。
つまり問題が起きてもユーザーセッションが失われにくくなります。
処理面ではレンダリングが簡素になり、コンポジティングがより効果的に動作できるようになり、フレームドロップも起きにくくなります。
欠点
実装が複雑になり、プロセス間で状態を同期するためIPCに頼った実装が必要になります。この同期処理において、サーバーがウィンドウを破棄しようとしている時にコンポジターが描画を行おうとするなど、まれに競合状態が発生する可能性があり、この競合状態が発生しないように注意深く実装を行う必要があります。
例えばスクリーンショットを取るためのAPIやホットキーを監視するためのAPIなど外部に公開している機能は、悪意あるソフトウェアによって不正に使用される可能性があり、セキュリティー面が脆弱です。
X11ベースのデスクトップの実装方法
今日X11ベースのデスクトップは、この手法を使用して実装されています。いいとこ取りできないか
それぞれの手法には、利点と欠点があります。すべての利点を享受し、全く欠点がない手法があればそれに越したことはありませんが、それは可能なのでしょうか。
もしそのような手法があれば、すでに実現されているでしょう。
そこで「Mir」の開発者は、以下のようなアイデアを考えています。
サーバー/コンポジター/ウィンドウマネージャーは、同一のプロセスで動作させます。
パネル/ドック/デスクトップは、それぞれ個別のプロセスで動作させます。
ただし特別なAPIを提供するため、Wayland拡張にアクセスする権限を与えます。
これによりウィンドウスタックやウィンドウ配置位置の操作等が可能になります。
この設計手法は多くの問題を解決しそうです。
「Wayland」にはすでに「Weston」がやっているように、クライアントに権限を与える実装方法がいくつかあります。
しかしこの設計手法は、Waylandエコシステムにもっと多くの拡張を追加する必要性があり、エコシステムの枠組みに影響を与えることになります。
この設計手法を導入した結果、「Mir」で実装されている「Wayland」でしか動作しないパネルやドックが出てくる可能性があり、「Mir」の開発者はこのような状況を望んでいません。
パネルやドックが特定の「Wayland」実装に依存しない方法が望ましいのですが、しかしどうやってそれを実現すればよいのか、「Mir」の開発者は頭を悩ませてます。
2.デスクトップのカスタマイズとテーマ
「Mirサーバー」はモジュール化されており、他のツールキットと簡単に統合できるよう設計されています。現在「Mirコンポジター」が実装している機能は非常に基本的な機能であり、アニメーションなど視覚効果のない2Dのウィンドウを描画します。
また「Mir」のウィンドウマネージャーは複数のホックを提供しており、振る舞いのカスタマイズが可能になっています。
さてデスクトップには、「Compiz」が実現しているような様々な視覚効果があります。
またウィンドウのタイリングなど配置方法に関してもいくつか種類があります。
それらを含め「Mir」に期待するグラフィック機能は何でしょうか?
すでにそれらを実現しているグラフィックツールキットはあるのでしょうか?
3.最も要求される機能
デスクトップが持つ機能や性質で最も重要視する要素は何でしょうか?ゲーマーなら低遅延やホットキーのサポートに重要性を感じるでしょう。
動画を多く見る人なら、テアリングが起きないことに重要性を感じるでしょう。