Gemini

J’ai trop longtemps négligé l’importance du texte. Jeune j’ai été passionné de littérature. La science m’en a alors détourné. Paul Feyerabend m’ayant rappelé qu’elle était elle-même langage et Noam Shomsky ayant confirmé qu’il en était de même pour l’informatique, mes pratiques ont lentement dérivées vers le texte par la programmation, des cours de physiques en LaTeX et le un nouveau plaisir d’écrire en opposition radicale avec la période désagréable des vidéos-conférences. Tout alors m’a éloigné du monde des images à tel point que j’ai abandonné la télévision. Ce changement ne fut pas radical, car des années auparavant, j’avais déjà abandonné la voiture pour le vélo et je savais que le ralentissement de ses déplacements pouvait être très bénéfique. J’ai alors compris que le filtrage des informations par le texte pouvait l’être tout autant.

La découvert du groupe « rawtext.club » a donc été pour moi une véritable révélation. Toutes les valeurs des membres de ce groupe me correspondaient et comme ils proposaient de mettre de l’information sur le tout jeune Gemini, un autre web focalisé sur le texte, je me suis lancé dans l’aventure.

Le protocole

Gemini est un protocole, à l’instar d’http. Il s’agit d’accorder deux ordinateurs pour qu’il se comprennent et puissent se transmettre de l’information. Ainsi, quand vous utilisez « Hyper Text Transfer Protocol », soit http, vous utilisez un « un protocole de communication client-serveur développé pour le World Wide Web » (Wikipedia). Quand vous utilisez « Gemini », soit gemini, vous utilisez « un protocole de communication client-serveur. C’est un protocole de la couche application qui utilise le protocole TCP comme couche de transport. Il permet notamment d’accéder à des documents texte simples de type hypertexte. Les échanges entre le client et le serveur sont sécurisés à l’aide du protocole TLS. Le protocole est mis au point de manière collaborative mais n’est pas un standard internet » (Wikipedia).

« Les ressources Gemini sont identifiées au moyen d’URL dont le schéma est gemini://. Il est à noter que contrairement au protocole HTTPS qui possède un équivalent non chiffré (HTTP), le protocole Gemini ne définit volontairement pas d’équivalent non-chiffré.

La syntaxe des pages gemini, appelée Gemtext, est inspirée de celle de Markdown. »

Navigation

Pour visiter des sites gemini, on pourrait croire qu’il suffit de taper gemini:// dans la barre d’un navigateur. Mais le protocole n’étant pas standard, cela n’est pas possible aujourd’hui. Il faut un navigateur spécifique pour cela. Plusieurs solutions existent. Personnellement j’utilise « Amfora », un navigateur Gemini en mode ligne de commande. Une liste de clients gemini vous permettra de faire votre choix et de les installer. Outre Amphora, écrit en go, AV-98 écrit en python sont à tester. Sur la figure suivante, vous pouvez voir les deux navigateurs, Amfora à gauche, coloré sur fond noir et à droite dans une console transparente, AV-98 qui se superpose dans un style plus classique. Pour les navigateurs en mode graphique, Lagrange semble un bon choix.

Rawtext.club

Comme dit plus haut, ce groupe est plus qu’un hébergeur Gemini. Je vous conseille donc de vous y intéresser de plus près si vous aimez le texte et la philosophie des mouvement « LOW ».

À l’url :
gemini://rawtext.club
vous trouverez une description de ce « Slow social network », comme il se décrit lui-même.

À l’url :
gemini://rawtext.club/~guyotv
vous trouverez mon site gemini. Tout progressivement, celui-ci va prendre de l’importance et j’espère à terme pouvoir migrer entièrement vers celui-ci.

31. Just sudo it

Un petit article pour préciser divers usages du compte root.

Comme le dit le titre, il est tout-à-fait possible, et souvent nécessaire, de réaliser des opérations en mode de Super Utilisateur : su. Plusieurs possibilités s’offrent à nous.

  • sudo, qui est une manière de gérer l’accès d’un utilisateur courant à certaines commandes réservées au super utilisateur,
  • sudo -s, …
  • sudo -i, …
  • sudo su … et
  • su, qui offre un accès complet et sans limites au système.

Accès au super utilisateur

Généralement, il n’est pas nécessaire de se connecter su le compte root. Non seulement cela peut être risqué en raison des erreurs qu’on peut y commettre, mais aussi pour des raisons de sécurité.

La commande sudo est donc généralement celle utilisée pour effectuer des opérations spécifiques nécessitant le lancement d’une unique commande, comme la mise-à-jour des paquets par exemple. Cette commande est hautement paramétrable grâce à l’utilitaire visudo, qui ne sera pas décrite ici, mais qui permet d’attribuer une ou plusieurs commandes à faire sous root, à un utilisateur particulier.

sudo -s, est une commande donnant accès au commandes du compte root, mais pas au compte root. Les variables d’environnement, le répertoire root, le changement du mot de passe root, … ne sont pas accessibles.

sudo -i va un peut plus loin que sudo -s. C’est le mot de passe utilisateur qui est toujours demandé et les commandes restent déléguées par setuid root, mais le shell est initialisé comme au login de l’utilisateur.

sudo su est totalement identique à sudo root, décrit ci-dessous, à l’exception que le mot de passe demandé sera celui de l’utilisateur référencé dans les sudoers. Ainsi, il est possible, pour autant qu’on y soit autorisé, de se connecter en root sans connaître le mot de passe root.

Enfin la commande su, qui est identique à su root (on peut aussi faire su unautreutilisateur), remplace l’utilisateur courant par le super utilisateur, avec tous ses pouvoirs. C’est très pratique, mais nécessite de connaître le mot de passe du super utilisateur.

Gestion des comptes

Par ailleurs, il est nécessaire d’évoquer ici la gestion des comptes et mots de passe dans le cadre du super utilisateur. Notamment, la possibilité d’imposer des changements de mots de passe ou de désactiver des comptes après un temps donné.

La commande « chage » sert à « modifier les informations de validité d’un mot de passe ». Un man chage nous fournit la description suivante :

« La commande chage modifie le nombre de jours entre les changements de mot de passe et la date du dernier changement. Ces informations sont
utilisées par le système pour déterminer si un utilisateur doit changer son mot de passe. »

man chage

Ainsi, si vous êtes confrontés, lors d’une tentative de vous connecter en super utilisateur via la commande su, à une information spécifiant que le compte a été désactivé, c’est que l’administrateur à trouvé nécessaire de vous obliger à reconsidérer votre accès au compte à un moment donné ou au bout d’un certain temps.

La désactivation de l’obligation de changer le mot de passe root se fait par la commande :

chage -E -1 -I -1 -M -1 root

dont l’explication est la suivante :

  • -E : date d’expiration du compte ; -1 supprime l’expiration,
  • -I : durée d’inactivité avant le blocage du compte ; -1 supprime cette durée d’inactivité,
  • -M : nombre de jours maximums pendant les quels un mot de passe est valable ; -1 supprime cette durée.

Voilà pour ces quelques précisions.

30. Systemd utilisateur

Ceci n’est pas un article sur systemd, mais la présentation d’une utilisation très pratique de systemd par un utilisateur pour lancer une commande avec systemd au lancement de la session de l’utilisateur. L’article sur lequel je me suis basé pour réaliser ce que je voulais est : https://medium.com/@alexeypetrenko/systemd-user-level-persistence-25eb562d2ea8

Mon problème était le suivant : je dispose d’un clavier bluetooth récupéré d’une tablette obsolète. Or ce clavier ne dispose pas de la touche backslash (\). C’est extrêmement désagréable pour quelqu’un qui pratique intensivement LaTeX.

Il s’agissait donc de lancer une modification du clavier à chaque lancement de session. Pour cela il fallait d’abord savoir comment affecter la touche backslash à l’une des touches libre de mon clavier. Après quelques recherches, le logiciel permettant cette modification a été trouvé et la commande suivante testée fonctionnelle :

xmodmap -e 'keycode 202=backslash' & 

Xmodmap permet d’affecter une touche physique, ici la touche 202, à un caractère, ici backslash. Pour déterminer le code de la touche, la commande suivante est nécessaire :

xev -event keyboard

Une fois lancée, en pressant sur une touche, on obtient un retours comme :

KeyPress event, serial 25, synthetic NO, window 0x3a00001,
    root 0x389, subw 0x0, time 5876177, (922,180), root:(924,260),
    state 0x0, keycode 202 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XmbLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False

dans lequel figure « keycode 202 » (ici déjà affectée à backslash). L’esperluette (&) de la fin de commande permettait de lancer la commande pour une session, ce que systemd va nous permettre de faire automatiquement et cela sans aucun droits de superutilisateur.

Venons en donc à systemd. À l’instar des services lancés par systemd pour root, l’idée est de mettre dans le répertoire (à créer au besoin) :

.config/systemd/user/

un fichier de service à lancer au démarrage de la session. Dans mon cas, le nom de ce fichier sera évidemment « backslash.service » puisque ce service va me permettre de disposer de la touche backslash. Son contenu sera le suivant :

[Unit]
Description=Just for backslash character

[Service]
ExecStart= /usr/bin/xmodmap -e 'keycode 202=backslash'
Restart=always
RestartSec=60

[Install]
WantedBy=default.target

Les lignes de restart signifient qu’en cas de problème le démon est relancé au bout de 60 secondes.

Pour installer le service, il faut alors utiliser la commande :

systemctl --user enable backslash.service

Un certains nombre de liens seront créé pour que systemd puisse lancer le service au démarrage de la session.

Pour démarrer le démon sans relancer la session, il faut classiquement faire :

systemctl --user start backslash.service

Si cela ne fonctionne pas, comme ce fut le cas pour moi, lancez :

systemctl --user status backslash.service

L’état du service vous sera retourné et vous verrez apparaître un « Failure » si la commande de votre service est mauvaise. En l’occurrence, pour moi, ce fut le fait qu’il fallait mettre le chemin complet vers xmodmap, soit /user/bin/xmodmap.

Enfin, après avoir corrigé les problèmes, un :

systemctl --user restart backslash.service

ne suffit pas. Il faut encore recharger l’ensemble des démons de l’utilisateur par :

systemctl --user daemon-reload
Voilà. Systemd peut donc être très utile au niveau utilisateur pour remettre en place des fonds d'écran par exemple ou tout autre commande à lancer au démarrage de la session utilisateur.

Raspberrypi : mise-à-jour stretch-buster

Voici un petit memo pour réaliser la mise-à-jour d’un raspberrypi tournant sous Raspbian stretch vers Raspbian buster.

Tout d’abord, il faut savoir que le téléchargement des paquets nécessaires à la mise-à-jour ne peut se faire que si la place nécessaire pour les stocker est disponible. Pour un système complet, il faut prévoir 8Go. Ainsi, vérifiez avec la commande :

df -h

que celle-ci est bien disponible. Cette commande signifie « disk free -human », soit en français « quelle est la place libre sur le disque, dans un langage humain ». Vous verrez alors apparaître une colonne vous donnant la mémoire disponible directement en Go.

Il faut ensuite réaliser un audit des paquet permettant de savoir si ceux-ci sont dans un état correct pour la mise-à-jour :

sudo dpkg --audit

Puis, il faut voir si des paquet sont bloqués :

sudo dpkg --get-selections | grep hold

L’argument de dpkg permet de récupérer la liste des paquets installés dont on recherche avec grep le motif « hold ». Ce motif signifie que l’utilisateur ne veut pas modifier (mettre-à-jour) le paquet. Comme cela peut poser problème, il faut qu’aucun paquet ne soit dans cet état à moins d’une bonne raison.

Il faut ensuite mettre à jour le système à partir duquel on va faire la mise-à-jour :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

La première commande fait une mise-à-jour de la liste des paquets. La seconde mets à jour les paquets non vitaux et la troisième fait la mise-à-jour des paquets vitaux.

Il faut ensuite changer le nom des dépôts pour passer les faire pointer vers la nouvelle distribution Buster :

sudo sed -i /deb/s/stretch/buster/g /etc/apt/sources.list
sudo sed -i /deb/s/stretch/buster/g /etc/apt/sources.list.d/*.list

Ce deux lignes sont complexes. L’idée est de changer toutes les ocurences « strech » en « buster » dans plusieurs fichiers. Comme avec Debian, le fichier « source.list » du répertoire /etc/apt/ est touché. Mais en plus tous les fichiers .list du répertoire /etc/apt/source.list.d/, ce qui est propre à Raspbian.

L’utilitaire permettant ces modifications automatiquement est sed. Dans le cas présent, on utilise -i pour spécifier qu’on va écraser le fichier original. Puis, on spécifie que toutes les lignes (/g) commençant par deb se verront substituer (s) le motif stretch par buster.

Cela fait, on met à jour la liste des paquets de buster :

sudo apt-get update

Puis, on met à jour la distribution :

sudo apt-get upgrade
sudo apt-get dist-upgrade

Des questions vous seront posées auxquelles il faudra répondre Y dans la plupart des cas, à moins de savoir ce que vous faites.

Reste à effacer les paquets qui ne sont plus nécessaires :

sudo apt autoremove -y
sudo apt autoclean

Normalement tout devrait bien se passer. Mais, il arrive que ce ne soit pas le cas. Lisez bien alors les messages d’erreurs, car parfois ils permettent de forcer l’installation de quelques paquets récalcitrants qui peuvent bloquer la mise-à-jour.

29. Images en ligne de commande : imagemagick

Rentrons dans le vif du sujet :

Informations

Au préalable de toute opération, Image Magick (IM) va nous permettre d’obtenir des informations sur l’image. Celles-ci peuvent être basiques ou plus développées :

identify monimage.jpg
identify -verbose monimage.jpg

Le retour est dans le premier cas :

Neige.jpg JPEG 1211x2359 1211x2359+0+0 8-bit sRGB 1.60686MiB 0.000u 0:00.000

Après le nom du fichier vient son type, sa taille (avec d’éventuels décalages), sa profondeur de couleur, son type colorimétrique, son poids et le temps nécessaire pour la lire.

Les informations retournées dans le second cas (-verbose) étant très nombreuses, je vous laisse les découvrir.

Réduction à une taille donnée

Ici, le problème est de produire des images de fond d’écran.

Imaginons que l’écran ait une taille de 2048×1152 pour des dimension de 10.8×6.1 in, ou 27.5×15.5 cm. La résolution en pixel per inch, ou en points par pouce est alors de 189 ppp.

L’objectif est de produire des images de 2048×1152 en 189 dpi. Évidemment, celles-ci doivent conserver leur ratio. On sait d’autre part que l’écran sera toujours en mode paysage.

Cn commence par réduire la hauteur de toutes les images à 1152 pixels (avec une résolution de 189 dpi, sa taille sera donc celle de l’écran). Trois cas peuvent alors se présenter :

  • la largeur est alors plus petite que 2048, auquel cas, il faudra faire apparaître des bordures noires pour combler le vide,
  • la largeur est précisément de 2048 et il n’y a rien à faire et
  • la largeur est supérieure à 2048, auquel cas, il faudra la réduire et faire apparaître des bordures noires en haut et bas de celle-ci.

Avec IM, il faut savoir que par défaut, le ratio de l’image est préservé. De plus, l’option « – resize » de convert ou mogrify, les deux utilitaires d’IM permettant respectivement de modifier une image en en produisant une nouvelle et de modifier une image en l’écrasant, non seulement préserve le ratio, mais agit simplement en réduisant la taille de l’image pour la placer à l’intérieur du cadre imposé par les dimensions spécifiées, avec l’une ou l’autre des dimensions maximales.

Enfin, le choix de mogrify est intéressant, car il évite de devoir spécifier un nom d’image particulier pour chaque image créée par convert. Mais, évidemment, la prudence exige un backup préalable des images, réalisée avec :

cp *.jpg ../rep_back/

alors qu’on est dans le répertoire contenant les images et que le répertoire de backup se nomme « rep_back » et se situe au même niveau que le répertoire précédent.

Ensuite, c’est très simple. Il suffit de se trouver dans le répertoire contenant les images et de lancer :

mogrify -resize '2048x1152>' *.jpg

Deux précisions :

  • le signe > signifie que toutes les images dont l’une ou l’autre des dimensions est plus importante que celle demandée et
  • les ‘…’ sont présents pour éviter que le signe > ne soit interprété par le shell.

On se retrouve alors avec des images toutes plus petites que ou égale à la taille de l’image demandée.

Référence pour resize : https://legacy.imagemagick.org/Usage/resize/#resize.

Reste à remplir les vides. Malgré que les afficheurs de fond d’écran permettent d’afficher des images sans les déformer au dessus d’un fond noir, par exemple, il peut être intéressant de laisser l’afficheur adapter les images à l’écran parce que certaines le permettent. Alors, pour celles qui ne le permettent pas, il est nécessaire d’en faire des images à la bonne taille.

Conversion jpg vers pdf

Le problème est de convertir toutes les images jpg situées dans un unique répertoire en un seul pdf.

Deux étapes sont à réaliser :

ls *.jpg | xargs -I% convert % %.pdf 

où le ls crée une liste des fichiers, le « pipe » (|) envoie cette liste à la commande xargs. En effet, la commande convert ne dispose pas d’entrée standard et xargs utilise la commande passée sur son premier argument pour passer le fichier en entrée standard comme argument de la commande convert. Le drapeau -I de xarg, évite de passer tous les fichiers images en une fois à convert (comme de multiples arguments) pour faire le même fichier de sortie. Avec -I on récupère le nom de fichier dans % et on demande de réaliser la commande simple « convert fichier.jpg fichier.pdf » sur chaque fichier fournis par ls.

Puis, il faut créer l’unique pdf à partir des fichiers .jpg.pdf par :

pdftk *.pdf cat output merged.pdf && rm *.jpg.pdf

où, on récupère tous les fichiers d’extension .pdf et demande à pdftk de réaliser un « cat » (catenate), c’est-à-dire une concaténation, de ceux-ci dans le fichier donné en valeur d’argument de output, c’est-à-dire merged.pdf.

Finalement, si et seulement si (&&) le fichier merged.pdf est réalisé sans erreurs, on efface (rm : remove) les pdf de chaque page.


Mais il est apparu d’entrée un problème dont la solution se trouve dans un fichier de configuration d’Imagemagick. En effet, ce dernier refusait d’effectuer la conversion et renvoyait une erreur de « policy » peu compréhensible. Les recherches ont montré qu’il fallait autoriser Imagemagick à créer des pdf dans ce fichier :

/etc/ImageMagick-6/policy.xml

Les modifications se font évidemment en root. Se trouve dans ce fichier la ligne suivante :

<policy domain="coder" rights="none" pattern="PDF">

qu’il montre que le droit de faire des pdf n’est pas présent. Il faut donc la changer par :

<policy domain="coder" rights="read | write" pattern="PDF">

pour résoudre le problème.

Code is Education

Un éditorial de Véronique Bonnet, présidente de l’April, que je reproduit ici pour la grande clarté de son propos et suite à une discussion avec des collègues sur la plate-forme d’enseignement Moodle. Ce texte est en licence libre et je remercie non seulement son auteure, mais l’ensemble des membres de l’April de fournir des textes d’une aussi grande qualité sous de telles licences. Vous trouverez ici l’article original suivi d’un petit commentaire sur Moodle.

« Le monde d’après », qui fait sauter certains comme des cabris, dans la jubilation du « hors-sol », peine à dissimuler ses pilotis idéologiques. À la résultante historique la plus surdéterminée, on prétend refaire une virginité. Telle Vénus surgissant de l’écume des flots, la mythologie de l’abolition du « monde d’avant » multiplie les représentations chaotiques, purement chronologiques, de ce qui arrive. Parler de mondes successifs, comme de vagues successives de la pandémie, pour se référer aux irruptions successives des crises sanitaire, économique, existentielle, écologique, peut faire figure de pis-aller explicatif commode, mais ne doit pas faire disparaître dans les sables la logique des événements.

Dans le monde de l’éducation, l’informatique a été, eu égard au contexte, présentée comme une amie prodigieuse, capable de remédier aux impossibilités du présentiel par la magie soudaine et massive du distanciel. Cette formulation discontinuiste laisse entendre que toute solution logicielle est bonne à prendre. Que sont les John Van Neumann, les Alan Türing, les Ian Murdock, les Aaron Schwartz devenus, dans leur exigence d’une informatique de l’autonomie ? Richard Matthew Stallman, dans les textes de la philosophie GNU concernant l’école, a souligné l’importance de ne pas accoutumer les enfants à une informatique de la docilité, de la subordination, pour que les futurs adultes et citoyens soient confortés dans leur aspiration à comprendre. Restituons ici, par quelques chaînes de raisons, une ascendance pour l’opposer à une autre, pour remettre en perspective « l’informatique de l’après » et la situer par rapport aux idéaux ou aux intérêts de « l’informatique d’avant. »

Dans son article de janvier 2000 publié dans le Harvard Magazine intitulé Code is Law – On Liberty in Cyberspace : Le code fait loi – De la liberté dans le cyberespace, dans la traduction de Framalang https://framablog.org/2010/05/22/code-is-law-lessig/, le grand juriste Lawrence Lessig met en garde contre une l’opinion selon laquelle la loi ne pourrait émaner que d’un État. À l’ère du cyberespace, la loi peut aussi bien être la résultante du code qui, en l’organisant, « fait loi » :

« Nous sommes à l’âge du cyberespace. Il possède lui aussi son propre régulateur, qui lui aussi menace les libertés. Ce régulateur, c’est le code  : le logiciel et le matériel qui font du cyberespace ce qu’il est. Ce code, ou cette architecture, définit la manière dont nous vivons le cyberespace. Il détermine s’il est facile ou non de protéger sa vie privée, ou de censurer la parole. Il détermine si l’accès à l’information est global ou sectorisé. Il a un impact sur qui peut voir quoi, ou sur ce qui est surveillé. Lorsqu’on commence à comprendre la nature de ce code, on se rend compte que, d’une myriade de manières, le code du cyberespace régule. »

D’où sa crainte :

« Cette régulation est en train de changer. Le code du cyberespace aussi. Et à mesure que ce code change, il en va de même pour la nature du cyberespace. Le cyberespace est un lieu qui protège l’anonymat, la liberté d’expression et l’autonomie des individus, il est en train de devenir un lieu qui rend l’anonymat plus difficile, l’expression moins libre et fait de l’autonomie individuelle l’apanage des seuls experts. Mon objectif, dans ce court article, est de faire comprendre cette régulation, et de montrer en quoi elle est en train de changer. Car si nous ne comprenons pas en quoi le cyberespace peut intégrer, ou supplanter, certaines valeurs de nos traditions constitutionnelles, nous perdrons le contrôle de ces valeurs. La loi du cyberespace – le code – les supplantera. »

En effet, alors que dans l’architecture initiale du cyberespace, les protocoles TCP/IP, outils de l’échange de données entre réseaux interconnectés, rendant difficile l’identification de ceux qui échangent et de ce qu’ils échangent, permettent le respect de la vie privée et la liberté d’expression, il se trouve que « le code n’est pas figé », et que cette « architecture peut changer. »

Rappelant que, techniquement, si le code fait la loi, il pourrait faire intervenir des nuances, Lawrence Lessig aperçoit le risque d’une mainmise progressive du code sur les utilisateurs, si des intérêts particuliers tendant vers le profilage des individus prennent le pas sur les idéaux des droits de l’être humain :

« La technologie pourrait permettre de certifier certains faits vous concernant, tout en gardant d’autres faits confidentiels. La technologie dans le cyberespace pourrait fonctionner selon une logique de «  moindre révélation  », ce qui n’est pas possible dans la réalité. Là encore, tout dépendrait de la manière dont elle a été conçue. Mais il n’est pas dit que les choses iront dans ce sens.[…] Il existe d’autres architectures en développement, de type «  une seule carte pour tout  ». Dans la logique de cette architecture, plus il y a d’informations, mieux c’est. Rien ne permet aux individus de faire le choix du moins. La différence entre ces deux conceptions est que l’une garantit la vie privée, alors que l’autre non. La première inscrit le respect de la vie privée au cœur de l’architecture d’identification, en laissant un choix clair à l’utilisateur sur ce qu’il veut révéler  ; la seconde néglige cette valeur. »

On le voit, l’auteur montre que le cyberespace est à la croisée des chemins. De deux choses l’une. Soit les dispositifs de régulation du cyberespace essaient de faire la part des choses, c’est-à-dire d’éviter que l’absence de régulation soit préjudiciable et porte atteinte au individus tout en préservant dans la mesure du possible la vie privée.
Soit ces dispositifs, intrusifs, tentent de faire de l’utilisateur, purement et simplement, un document, en croisant toutes ses métadonnées pour le caractériser intégralement, le profiler.

(Pour le dire dans le contexte qui est le nôtre, en 2020, nous en sommes à essayer d’éviter que sur les réseaux sociaux la liberté d’expression en vienne à permettre l’expression ouverte du racisme, sexisme. Mais au risque, considéré par certains comme une opportunité, de traiter chaque acteur du cyberespace comme ayant à rendre public tout ce qui le concerne, sans possibilité de garder un dimension privée.)

Quoi qu’il en soit, Lessig met, dès 2000, en évidence la montée en puissance insensible du pouvoir de la technologie, nommé par le philosophe Michel Foucault soft power, celui qui s’avance masqué et peut se manifester dans des logiciels apparemment anodins, qu’on soupçonnera d’autant moins qu’ils rendent service sur le court terme :

« La question n’est donc pas de savoir qui décidera de la manière dont le cyberespace est régulé  : ce seront les codeurs. La seule question est de savoir si nous aurons collectivement un rôle dans leur choix – et donc dans la manière dont ces valeurs sont garanties – ou si nous laisserons aux codeurs le soin de choisir nos valeurs à notre place. »

Quatorze ans plus tard un autre juriste, très impliqué dans le registre de la documentation, Lionel Maurel, alias Calimaq, dans un article intitulé : Comment « Code Is Law » s’est renversé en « Law Is Code », https://scinfolex.com/2014/01/24/comment-code-is-law-sest-renverse-en-la…, montre que le changement d’architecture pressenti par Lessig pouvait « machiniser la loi », la rendant insoupçonnable, non interrogeable et implacable :

« parce que le Code d’Internet a été construit sur des bases antagonistes avec celles de la propriété intellectuelle, l’axiome de Lessig tend aujourd’hui à se renverser : « Code Is Law » devient de plus en plus « Law Is Code ». Les principes du droit d’auteur peuvent en effet être transcrits en langage machine et interprétés automatiquement par des algorithmes. C’est la logique depuis longtemps à l’œuvre derrière les DRM (Digital Rights Management), première tentative technique d’agir sur le Code pour le mettre en conformité avec la loi. Mais au-delà des DRM, le « Droit de Regard de la Machine » déborde aujourd’hui les simples verrous numériques pour déboucher sur des systèmes de surveillance et de contrôle à grande échelle. ContentID, le Robocopyright de YouTube qui compare constamment les vidéos à des empreintes fournies par les titulaires de droits, donne par exemple une image de ce que peut devenir une application mécanisée du droit d’auteur déployée au niveau de l’une des plus grandes plateformes au monde. Faite à l’origine pour être interprétée et appliquée par des humains, la loi aujourd’hui se machinise ; elle peut entrer « dans le code » et ce mouvement provoque des conséquences susceptibles d’altérer en profondeur l’équilibre des libertés en ligne. »

Toutes proportions gardées, construisons deux analogies. Si la proposition « Code is Education », peut être portée par le mouvement du logiciel libre, montrons qu’il serait préjudiciable de le transformer en « Education is Code », c’est-à-dire de confier l’acte éducatif émancipateur à n’importe quel support qui serait porteur, dans ses rouages techniques, de dispositifs de confiscation. Soit de réduire le droit de regard de l’éducateur et de l’éduqué au droit de regard d’une technologie invasive qui introduirait dans ses mécanismes des couches logicielles intrusives.

Montrons, d’une part, que l’architecture de codage du logiciel libre est, en soi, éducative.
Mais montrons, d’autre part, qu’il ne faudrait pas prendre la partie pour le tout. Ni croire que toute séquence de code, toute plateforme logicielle, serait en soi éducative, que tout code serait éducation.

Code is Education. L’architecture de codage du logiciel libre est, en soi, éducative.

Dans son texte de la philosophie GNU, sur le site de la Free Software Foundation, intitulé Pourquoi les écoles devraient utiliser exclusivement du logiciel libre (https://www.gnu.org/education/edu-schools.fr.html) Richard Stallman rappelle les fondamentaux :

« L’école a une mission sociale celle de former les élèves à être citoyens d’une société forte, capable, indépendante, solidaire et libre. Elle doit promouvoir l’utilisation de logiciel libre tout comme elle promeut la conservation des ressources naturelles et le vote. En formant les élèves et étudiants au logiciel libre, elle donnera leur diplôme à des citoyens prêts à évoluer dans une société numérique libre. Cela aidera la société toute entière à échapper à la domination des multinationales. En revanche, enseigner un programme non libre revient à implanter la dépendance, ce qui va à l’encontre de la mission sociale de l’école. Les écoles ne doivent jamais le faire. »

En effet, le logiciel libre qui promeut les quatre libertés que sont la liberté d’exécuter le programme, la liberté d’étudier le programme pour éventuellement le modifier, la liberté de le copier et la liberté d’en distribuer des copies, modifiées ou non, permet au discernement et à la créativité de ceux qui apprennent une libre expression :

« Le logiciel libre permet aux élèves et étudiants d’apprendre comment les programmes fonctionnent. Certains programmeurs-nés, une fois adolescents, ont soif d’apprendre tout ce qu’il y a à savoir de leur ordinateur et de ses logiciels. Ils sont extrêmement curieux de lire le code source des programmes qu’ils utilisent tous les jours. »

Alors que les logiciels non libres verrouillent le code source, à plus forte raison lorsqu’ils captent des données de navigation à l’insu de l’utilisateur, jouent sur une crédulité et vont jusqu’à dissuader de connaître. Richard Stallman se réfère à la soif d’apprendre des programmeurs-nés ( natural-born programmers) , soit des jeunes qui sont très doués qui progressent rapidement dans cette discipline, soit plus largement au adolescents dont la curiosité est restée intacte et agit en véritable moteur pour un exceptionnel potentiel de progression dans l’écriture du code.

« Le logiciel privateur rejette cette soif de connaissance ; il dit : « Le savoir que tu recherches est un secret – apprendre est interdit ! » Le logiciel privateur est par essence l’ennemi de l’éducation, aussi ne doit-il pas être toléré à l’école, sauf comme objet de rétro-ingénierie. »

Code is Education au sens où une certaine informatique peut donner de l’appétit, et des ailes :

« Le logiciel libre encourage tout le monde à apprendre. La communauté du logiciel libre rejette ce « culte de la technologie » qui maintient le grand public dans l’ignorance de son fonctionnement ; nous encourageons les élèves et étudiants de tous âges et toutes origines à lire le code source et à apprendre autant qu’ils veulent savoir. Les écoles qui utilisent du logiciel libre permettent aux apprentis programmeurs doués de progresser. Comment les programmeurs-nés apprennent-ils à être de bons programmeurs ? Ils ont besoin de lire et de comprendre de vrais programmes que les gens utilisent réellement. On apprend à écrire du code bon et clair en lisant beaucoup de code et en écrivant beaucoup de code. Seul le logiciel libre le permet. »

Savoir technique-pratique, donc, mais aussi plus que cela. Richard Matthew Stallman fait état du pouvoir humanisant de la pratique du code, si le code est effectivement éducatif ; il amène les apprenants à se dépasser, en exerçant leur libre arbitre et leur sens de l’autre :

« La raison la plus profonde d’utiliser du logiciel libre dans les écoles concerne l’éducation morale. Nous attendons de l’école qu’elle enseigne aux élèves et étudiants des connaissances de base et des compétences utiles, mais c’est seulement une partie de sa mission. Sa mission la plus fondamentale est d’enseigner la bonne citoyenneté, y compris l’habitude d’aider les autres. Dans le domaine de l’informatique, cela signifie apprendre aux élèves à partager les logiciels. Il faut qu’on leur dise dès la maternelle : « Si tu apportes un logiciel à l’école, tu devras le partager avec les autres élèves. Tu dois montrer le code source à la classe, au cas où quelqu’un voudrait s’instruire. »

Le texte se conclut alors par un appel à tous les partenaires de l’éducation :
« Si vous êtes dans le milieu de l’enseignement – que ce soit comme élève, étudiant, enseignant, employé, administrateur, donateur ou parent – il est de votre responsabilité de faire campagne pour que l’école migre vers le logiciel libre. Si une demande faite en privé ne permet pas d’atteindre ce but, portez la question sur la place publique dans ces communautés ; c’est ainsi que les gens prendront conscience du problème et que vous trouverez des alliés dans votre campagne. »

Lorsque le 17 mars dernier, le professeur que je suis a dû très rapidement reconfigurer sa pratique pédagogique pour continuer à préparer les étudiants de seconde année aux concours des grandes écoles scientifiques et économiques, ceux de première année à la seconde année, mon enseignement, comme celui de mes collègues, a reposé tout entier sur des lignes de code, permettant une continuité entre les apprentissages et exercices accomplis in vivo et les modalités de substitution, à distance, qu’elles soient en audio ou en vidéo. En prenant bien soin de n’utiliser que des plateformes irréprochables, non intrusives, respectueuses de l’autonomie du professeur et de ses élèves, pour éviter l’appropriation indue de données d’autant plus sensibles qu’elles concernent le lien entre un enseignant et des adultes en construction qui ont besoin de pouvoir s’exercer à écrire et à parler sur des dispositifs hautement sécurisés. Par exemple, la plateforme education.apps (https://apps.education.fr/), proposant des outils logiciels libres est soucieuse de bonnes pratiques ; elle écrit sur sa page d’accueil :

« Vous y trouverez les outils essentiels et communs à tous les métiers de l’Éducation nationale. Les utilisateurs sont propriétaires de leurs données et sont, de fait, en charge de leur gestion. »

Mais toute informatique n’est pas éducative. Education is not Code.

Il ne faudrait pas prendre la partie pour le tout. Ni croire que toute séquence de code, toute plateforme, est en soi éducative, que tout logiciel peut être, les yeux fermés, proposé à des élèves ou des étudiants. Certes, avec la meilleure intention du monde, certains ont pu, dans l’urgence, ouvrir pour leurs classes des dispositifs informatiques sans en contrôler les licences ni les certifications d’innocuité. Et s’apercevoir que certaines caractéristiques pouvaient s’avérer toxiques, comme permettre le siphonnage sans vergogne des métadonnées des élèves. Il est alors essentiel de rectifier le tir. L’éducation ne saurait s’en remettre à n’importe quelle informatique.

Dans le Protagoras de Platon ( https://fr.wikisource.org/wiki/Protagoras_(trad._Chambry ), de 313c à 314b, le personnage Socrate demande ainsi à son interlocuteur de fiction, Hippocrate, homonyme du fameux médecin, s’il ne prend pas un risque considérable à confier son esprit au sophiste Protagoras dont les discours sont peut-être empoisonnés.

« Est-ce qu’un sophiste, Hippocrate, n’est pas une sorte de marchand et de trafiquant des denrées dont l’âme se nourrit ? […] aussi faut-il craindre, ami, que le sophiste, en vantant sa marchandise, ne nous trompe comme ceux qui trafiquent des aliments du corps, marchands et détaillants ; ceux-ci en effet ignorent ce qui, dans les denrées qu’ils colportent, est bon ou mauvais pour le corps ; mais ils n’en vantent pas moins toute leur marchandise, et leurs acheteurs ne s’y connaissent pas mieux, à moins qu’il ne s’y trouve quelque maître de gymnastique ou quelque médecin. »

Platon joue ici sur les deux sens du terme grec pharmakon, qui signifie aussi bien le remède que le poison.

« Si donc tu sais ce qu’il y a dans ces marchandises de bon ou de mauvais pour l’âme, tu peux sans danger acheter les sciences et à Protagoras et à tout autre ; sinon, prends garde, bon jeune homme, de hasarder sur un coup de dés ce que tu as de plus cher ; car le danger est beaucoup plus grand dans l’achat des sciences que dans l’achat des aliments ; si en effet on achète des vivres et des boissons à un détaillant ou à un marchand, on peut les emporter dans les vases appropriés, et, avant de les introduire dans le corps en les buvant et en les mangeant, on peut les déposer chez soi, consulter, et faire appel à quelqu’un qui sait ce qu’il faut manger ou boire, et ce qu’il ne faut pas, combien il faut en prendre, et à quel moment, de sorte qu’on ne court pas grand danger à les acheter ; mais les sciences, on ne peut les emporter dans un autre vase, il faut, le prix payé, loger dans son âme même la science qu’on apprend et s’en aller, empoisonné ou conforté. »

Il en va de certains pourvoyeurs de logiciels comme des sophistes. Sous couvert de panacée, de remède universel, ils prétendent que l’éducation peut se fier à n’importe quelle informatique, que toute informatique fait du bien à qui l’utilise. Qu’un logiciel ne peut jamais faire de mal puisqu’un élève doit au moins apprendre à s’adapter à lui.

Préférons alors à ces outils logiciels peu soucieux d’éveiller le libre arbitre une informatique capable de se comporter effectivement en amie prodigieuse. L’informatique libre par laquelle « Code is Education ».

Si « Code is Education », il faut cependant rester très méfiant. Car, si l’exigence d’une informatique libre est nécessaire, elle n’est pas suffisante. Les extraordinaires capacités de suivi des élèves par Moodle montrent que des limites peuvent apparaître dans la relation entre les valeurs de l’utilisateur et celles du créateur de code. À l’instar de l’incroyable utilisation des logiciels libres par les GAFAM, il faut relever que l’utilisation de logiciels libres au sein du monde de l’éducation ne garantit pas une éducation libre.