2008年2月19日火曜日

X11対VNC

X11はUNIXで主流(というより唯一といってもよい)のウィンドウシステムとそのプロトコルだ。X11はWindows登場以前からウィンドウシステム自体にネットワーク端末の機能が備わっていた。Windowsがリモートデスクトップを採用したのはつい最近のことだ。
しかし、今ではローカルでX11を使うことはあっても(UNIXなら間違いなく使っているはず)、リモートで使うことはめったにない。
一方、現在のリモート操作の雄はVNCだ。WindowsでもLinuxでもOSを選ばずに使われている。Windowsのリモートデスクトップはさておき、X11が動作するUNIXでもVNCが使われているのは、きわめて簡単な理由からだと思う。それは純粋なクライアントサーバ方式だからだ。
X11では、クライアントPC側でX11のサーバが稼働し、PC画面に表示を行う。つまり、サーバで動作するX11アプリケーションはクライアントになる。
それに対してVNCでは、クライアントPCでVNCクライアントが動作し、サーバでVNCサーバが動作する。
このクライアントとサーバの逆転現象こそX11の普及を阻んだ最大の要因だと思う。X11自体の機能は決して悪くない。GNOMEのようなデスクトップを立派に構築できることで証明済みだ。
この逆転現象は、X11が過去の産物であるために生じたものだ。過去のインターネットはアドレスも豊富(と思われていたの)で、皆がグローバルアドレスを割り当てていた。しかし、それはもはや過去のことで、今ではアドレスが枯渇し、またセキュリティのために多くの組織がプライベートアドレスを用いている。
プライベートアドレスは基本的に一方通行である。サーバPCのアドレスがグローバルでもクライアントPCはプライベートだ。そのためX11プロトコルはサーバからクライアントに決して到達しない。IPフォワードやプロキシで対応することも可能だが、あまりに面倒だ。特にクライアントPCのアドレスがDHCPで変化するときには毎回設定しなおす必要がある。
ところが、純粋なクライアントサーバのVNCは容易に接続できる。この差が大きい。
プロトコルだけ見れば、VNCよりX11の方が抽象度も高く、優れているようにみえる。しかし、抽象度の高いプロトコルは、描画モデルがわずかに異なるだけで対応できなくなる危険もある。原始的なVNCの方が非効率でも幅広く対応できる。しかし、これは二次的な理由だと思う。
失敗から学ぶことは多い。X11がなぜ失敗したのか理解して、無理なアーキテクチャを採用しないことだ。コールバック手法のほとんどが失敗の要因を持っている。コールバックするなら必ずクライアント主導でなければならない。

0 件のコメント: