xtrans
X11の下にある転送層。Xlib、Xサーバー、フォントサーバー、ICEに代わってUnixソケットやTCP、もっと古いものを開くコードだ。誰もリンクせず、全員が自分用のコピーをコンパイルして取り込む。
Xプロトコルはバイトがどう運ばれるかについて何も定めておらず、80〜90年代には答えが多すぎた。TCP、Unixドメインソケット、DECnet、SVR4の名前付きパイプ、TLI、STREAMSなどだ。Xを話すプログラムは、適切なものを選ぶコードの自前の亜種をそれぞれ抱えていた。1994年のX11R6はそれをX Transport Interface、すなわちxtransにまとめ、下層が何であれ、接続を開く・待ち受ける・受け入れる・閉じるための一つのインターフェースにした。選択を決めるのはDISPLAY文字列だ。:0 は /tmp/.X11-unix/X0 のUnixソケットに、host:0 はポート6000へのTCPになり、unix/、tcp/、local/ の接頭辞で明示することもできる。Linuxには後に抽象ソケット @/tmp/.X11-unix/X0 が加わった。ファイルシステムに現れないので、/tmp が掃除されても生き残る。
作りは奇妙だ。xtransは共有ライブラリではなく、Xlib、Xサーバー、xfs、ICE、XDMが #include で取り込むC言語のファイル群で、マクロによりそれぞれ別の名前接頭辞が付く。つまり、xtransのバグが同じシステム上に5つのコピーとして存在したが、誰もが合意できなかった時代にABI安定な転送ライブラリを必要とした者もいなかった。2000年代にディストリビューションがサーバーを -nolisten tcp で起動し始めたとき、いじられていたのはxtransの待ち受けリストだった。