Acteur numéro 1 du drame : la distribution
GNU/Linux Debian, qui sort une nouvelle version toutes
les années bissextiles multiples de 27. Acteur numéro 2 : le
compilateur gcc
, qui sort des nouvelles versions assez
souvent (enfin, quand on compare à Debian), et qui prend un plaisir
malin à casser la compatibilité ascendante dès qu'ils le font.
Résultat de l'interaction : chaque version de Debian inclut une
demi-douzaine de versions de gcc
. Comme leur main
d'œuvre est limitée, leur support ne s'étend pas jusqu'aux versions
de gcc
du siècle précédent, i.e., de la version
précédente de leur distribution.
En l'occurrence, la version de Debian en cours de
préparation, wheezy (celle qui sortira en 2075 si on a de
la chance), comprend les versions 4.4, 4.5 et 4.6 de gcc
.
La précédente, squeeze (celle qui est sortie autour de
1967), comprend les versions 4.1, 4.3 et 4.4 (je ne sais pas pourquoi
la 4.2 n'a pas eu cet honneur, et je ne veux pas trop le savoir).
Remarquez qu'on a de la chance : il y a une intersection non nulle
(pas sûr que ça dure).
Maintenant, les choses se compliquent : quand on compile un noyau
Linux, on doit tout compiler (tout, c'est-à-dire modules et noyau
proprement dit) avec la même version de gcc
(comme je
disais, ils aiment bien casser la compatibilité ascendante, ce ne
serait pas drôle de définir une fois pour toutes
une ABI). Comme on se méfie de ce qui est à la pointe du
progrès, les développeurs Debian ont décidé que pour le noyau qu'ils
fournissent avec la distribution squeeze, ce serait le
4.3.
Le lecteur attentif aura remarqué que 4.3 n'apparaît pas dans la
liste des gcc
fournis par wheezy. Fournir
le compilateur utilisé pour le noyau par la précédente
version de notre distribution ? Vous n'y pensez pas, ma brave
dame.
Normalement, on devrait pouvoir s'en sortir quand même : le système
de packages est le même, après tout, et installer un package d'une
version de la distribution sur la version immédiatement après ne
devrait pas être rigoureusement impossible. Parfois ça marche, en
effet. Mais là,
manifestement, ce
n'est pas possible (il y a vraisemblablement eu une
incompatibilité dans une bibliothèque qui n'a pas été signalée par un
changement de numéro de version, ce qui rend l'installation simultanée
des versions 4.3.5 et 4.4.x de gcc
impossible) ; problème
qui devrait être résolu avec la version 4.3.6 de gcc
,
mais quelqu'un chez Debian a décidé que ça ne valait pas la peine de
faire l'effort de packager ça (remarquez le tag wontfix
dont la
traduction en langage plus fleuri est : allez vous faire enculer à
sec avec du gravier
). Je viens de passer des heures — qui
auraient aimé être employées à des activités plus utiles — à essayer
de construire moi-même un package Debian pour gcc
4.3.6
sur Debian wheezy (à partir du package
de gcc
4.3.5), sans succès, la montagne des patchs
appliqués est beaucoup trop énorme pour qu'on puisse juste changer la
version comme ça, et même si je fais toutes sortes d'horreurs pour la
traverser quand même je tombe
sur ce
problème insoluble.
Bref, la seule façon de compiler des modules noyau pour une machine sous Debian squeeze, c'est d'avoir une autre machine sous Debian squeeze sous la main pour faire la compilation. Moi qui ai l'habitude d'installer la Debian stable (donc squeeze en ce moment, justement) précisément sur mes machines qui ne sont pas assez puissantes pour faire des compilations (parce que ce sont aussi celles sur lesquelles je n'ai pas envie de mettre à jour des packages tout le temps), me voilà bien puni d'avoir choisi cette distribution. Seule solution que je voie : tout réinstaller à zéro (par exemple dans une machine virtuelle).