Principe de moindre surprise

Le PMS ou, dans la langue de Shakespeare, le POLA (principle of least astonishment) est une règle informelle stipulant qu'en matière d'ergonomie, un composant quelconque doit se comporter de façon à éviter toute surprise à l'utilisateur. Genre, quand j'appuie sur la pédale la plus à droite dans ma voiture, ça accélère (à consommer avec modération). On peut évidemment faire évoluer une interface, mais il convient de faire attention.

C'est exactement ce qui n'a pas été fait dans le projet GNU (oui, je parle bien de presque Dieu-le-père) sur le paquet coreutils.

Dans les faits, la modification semble mineure. L'ubiquiste commande ls, qui permet d'obtenir le contenu d'un répertoire, n'affiche plus ses résultats tout à fait comme ce fut le cas pendant 35 ans. Plus précisément, un fichier contenant divers caractères particuliers, et tout particulièrement l'espace, est maintenant affiché entre guillemets :

$ ls
'nom avec espaces'
'blah-VmlsYWluIGN1cmlldXggISEhCg=='

Alors que, depuis une éternité, le nom était affiché sans fioritures inutiles, selon l'idée le nom, tout le nom, rien que le nom.

S'il y a des fantaisies dans le dit nom, ça devient compliqué. Un fichier appelé A l'abordage ! est présenté comme ceci :

$ ls
'A l'\''abordage !'

Bref, c'est de mon point de vue[1] une catastrophe, même si ce nouveau mode de présentation n'apparait, il faut le confesser, que pour l'affichage à l'écran (les scripts qui utilisent ls n'ont pas à être adaptés).

Bien sûr, il est possible de modifier l'appel à la commande ls, avec les options -N ou --quoting-style, pour revenir au comportement habituel, Il n'empêche. Je ne me vois pas ajouter un synonyme adéquat sur tous mes ordinateurs, pour tous les comptes utilisateurs existants.

C'est là que le fonctionnement de Linux Gentoo vient à ma rescousse. Le système étant basé sur une recompilation systématique de tout ce qui est installé, il suffit de créer un correctif ponctuel du code, qui sera appliqué y compris sur les futures versions du paquet coreutils. Ce correctif commente la ligne qui amène au nouveau comportement :

*** src/ls.c	2016-11-22 21:04:32.000000000 +0100
--- src/ls.c.new	2016-12-10 11:50:39.000000000 +0100
***************
*** 1678,1684 ****
        if (isatty (STDOUT_FILENO))
          {
            format = many_per_line;
!           set_quoting_style (NULL, shell_escape_quoting_style);
            /* See description of qmark_funny_chars, above.  */
            qmark_funny_chars = true;
          }
--- 1678,1686 ----
        if (isatty (STDOUT_FILENO))
          {
            format = many_per_line;
!           /* 30 years of history should *not* be ditched lightly
!            * set_quoting_style (NULL, shell_escape_quoting_style);
!            */
            /* See description of qmark_funny_chars, above.  */
            qmark_funny_chars = true;
          }

Avec Gentoo, le correctif est à placer dans le répertoire /etc/portage/patches/sys-apps/coreutils. Il doit porter le suffixe .patch.

Note

[1] Je ne suis pas le seul à penser ça.