Il m'arrive de vouloir lire des documents sous forme de traces de carbone sur des bouts d'arbre mort (plutôt que sous forme d'excitations de photophores derrière un plastique mal fichu). Fort heureusement, notre civilisation a conçu des engins prévus spécifiquement pour déposer du carbone sur des bouts d'arbre mort, ça s'appelle des imprimantes. Malheureusement, si Unix a prévu des moyens pour ce servir de ces engins, il en a prévu trop, si bien qu'on se perd rapidement dans un labyrinthe de petites façons d'imprimer toutes semblables.
Je pense que le problème vient de quelque chose comme ceci : chaque système d'exploitation a inventé une façon différente d'imprimer (et a peut-être même changé plusieurs fois d'avis au cours de son histoire), et chacun a récupéré toutes les méthodes connues par tous les autres ; pire, l'impression est constituée de plusieurs couches logicielles (le document pouvant subir différentes transformations en chemin vers l'imprimante) et chacune peut se faire de cinquante manières. Et les imprimantes elles-mêmes sont trop intelligentes, donc elles prévoient elles aussi plein de façons de parler. Au final on ne s'y retrouve plus du tout.
L'impression sous Unix fonctionne par le mécanisme CUPS, inventé par Apple [correction () : on me souffle dans l'oreillette qu'ils ne l'ont pas inventé, juste repris] pour remplacer un mécanisme plus ancien qui existait sous BSD ; comme Apple a lui-même remplacé CUPS par — euh — autre chose sous les versions plus récentes de Mac OS, et que le mécanisme plus ancien doit toujours fonctionner pour compatibilité, on voit déjà une source de bordel. Beaucoup d'imprimantes modernes parlent (entre autres !) IPP, qui est (si je comprends bien) le protocole sous-jacent à CUPS. Enfin, je crois : elles répondent sur le port TCP 631 qui est le port traditionnel d'IPP, et y proposent une interface Web qui ne ressemble pas du tout à un serveur CUPS. Mais il y aussi un autre protocole qui écoute sur le port TCP 9100, et plein de manières dont une imprimante peut rendre publique son existence. Ajoutez à ça qu'un serveur CUPS peut parler à un autre serveur CUPS et ré-exporter les imprimantes qu'il y trouve : ça commence à devenir compliqué. Du coup, quand on demande la découverte des imprimantes sur le réseau local, on peut se retrouver avec plein de copies de la même imprimante, parce que celle-ci s'arrange pour être découvrable de plusieurs manières et que, par ailleurs, plusieurs ordinateurs du réseau peuvent l'avoir configurée et la ré-exporter à leur tour ; si on fait le mauvais choix, l'imprimante ne sera peut-être utilisable que tant que quelqu'un a laissé son ordinateur allumé.
Le niveau des filtres et pilotes d'impression est à l'avenant : il y a un million de façons de transformer un fichier PDF en PostScript, et on peut souvent fournir à l'imprimante soit du PCL, soit du PostScript, soit directement du PDF, avec des résultats aléatoirement différents (dans le genre de subtilités pénibles, le PostScript ne supporte pas le même modèle de transparence que le PDF, donc parfois on peut avoir un document PDF qui s'imprime très bien, sauf une page qui utilise de la transparence quelque part, que je ne sais quel filtre a décidé qu'il ne pouvait pas transformer en PostScript vectoriel à cause de ça, et a donc tout réduit en raster/bitmap sans connaître la résolution de l'imprimante, d'où une qualité épouvantable pour cette page précise — je précise que l'anecdote est vécue et que je me suis beaucoup arraché les cheveux pour comprendre). L'imprimante de mon poussinet, qui est chez nous, est censée comprendre le PostScript, mais apparemment pas complètement, et un jour l'impression s'est mise à ne plus marcher parce que GhostScript lui envoyait du PostScript trop compliqué pour elle : on a fini par résoudre le problème en lui faisant avaler du PCL à la place, mais enfin, tout ceci est un vrai labyrinthe.
Je me plaignais déjà de ce genre de choses il y a quatre ans.