Une solution pour avoir une gestion des E/S indépendante des périphériques, consiste à interposer un logiciel entre d'une part l'application cliente; d'autre part l'écran, le clavier et la souris.
Un serveur X est un programme qui peut dialoguer avec plusieurs clients X. Un client X est une interface graphique pour une application quelconque.
Toutes les entrées-sorties de l'application ne sont pas adressées directement aux périphériques, mais au serveur X, et c'est celui-ci qui est chargé du dialogue avec les périphériques. La portabilité est traitée par le serveur et non pas par l'application. Une conséquence est la possibilité des entrées-sorties distantes.
Au niveau de l'implémentation :
Au niveau de l'utilisation :