• [^] # Re: Mal connaître sa distribution

    Posté par . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 4.

    DPKG (nope, APT n'est pas un gestionnaire de paquets, il se contente de télécharger un paquet et ses dépendances) est majoritairement "déclaratif" c'est à dire basé sur un simple fichier de configuration.

    Peut-être que je comprends mal ce qu'est APT. J'avais cru comprendre que c'était Advanced Packaging Tools donc une suite d'outils pour manipuler les paquets Debian. D'après ma compréhension, dpkg est un outil qui gére à proprement parler le .deb mais il ne gère pas la résolution de conflit qui est faite par apt ou aptitude, non ?

    C'était des gros guillemets parce que l'analogie ne vaut qu'une analogie. :-)

    Debian se comporte de manière procédurale (état séquentiel) et mutable. Par exemple, tu n'as aucune garantie que la séquence apt update, apt install foo, apt remove bar donne le même état final que apt update, apt remove bar, apt install foo.

    Dans Guix, le résultat sera le même. Enfin normalement. ;-)

    Pour le dire autrement, dans Debian, il y a des effets de bord qui sont contrôlés dans un style impératif. Dans Guix, les effets de bord sont contrôlés dans un style fonctionnel.

    https://guix.gnu.org/manual/en/html_node/The-Store-Monad.html#The-Store-Monad

    À noter qu'au taf, j'ai opté pour la création de paquets qui activent les services qu'on écrit,

    Concernant les services, c'est presque la même histoire que pour les paquets. ;-)

    Concrètement, que signifie 3 fois la même version ? Est-ce que la version libfoo-1.2.3 compilé par GCC 7 ou GCC 8 ou autre signifie la même version pour vous ?

    Tout dépend de si GCC 7 et GCC 8 ont la même ABI. Si c'est pas le cas, c'est en effet le job de distro de gérer.
    Mais bon, hé, vraiment, mauvais exemple ici (a moins que tu aies un bug causé par une incompat entre ces compilos?),

    Considérons ceci :

    #include <stdio.h>
    int main() {
     printf("Bonjour\n");
     return 1;
    }

    Et compilons avec GCC 6 et GCC 7 :

    gcc-6 hello.c -o hello-6
    gcc-7 hello.c -o hello-7

    Evidemment ./hello-6 et ./hello-7 produisent la même sortie. Mais ce ne sont pas les mêmes binaires :

    md5sum hello-{6,7}
    e1c353671a5c2737e819cf586503865c hello-6
    608d3e055a4f7eb124ebc43747152fd7 hello-7

    Doit-on considérer que le même code source compilé par 2 compilateurs est la même version ou non ? Qu'est-ce qu'une même version ? Code source identique ? Binaire identique ? Résultat identique ?

    Et là commence les ennuis. ;-) Parce que GCC 6 est lui même un binaire donc produit par un autre binaire.

    C'est le problème du yahourt. Pour produire un yahourt (binaire), il faut un yahourt (compilateur) et du lait (source). Et donc quel est le yahourt initial ? Et si ce yahourt initial change, va-t-on produire le même yahourt final ?

    Ce n'est pas un problème d'ABI. C'est un problème de qu'est-ce qui définit la version d'un logiciel ? Une fois définie, on peut parler de même version ou version différente.

    Par ailleurs, Guix a aussi la notion d'héritage (inherit) pour un paquet.

    L'équivalent d'un méta-paquet qui dépend au choix d'un ou plusieurs paquets, ou l'équivalent d'un paquet qui fournit un paquet virtuel? Non, parce que bon, Debian implémente ça depuis que je m'en sers, soit au moins 10 ans.

    Ce n'est pas un méta-paquet. Du moins de ce que je comprends.

    Un méta-paquet permet de résoudre un problème de nommage ou il permet d'installer une collection de paquets.

    Un paquet utilisant inherit utilise la recette du paquet qu'il hérite et la modifie.

    Par exemple

    • la définition longue de GnuPG (v2.2.19)

    https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/gnupg.scm#n247

    • GnuPG v2.0.30 l'utilise et change des choses

    https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/gnupg.scm#n320

    • et GnuPG v1 l'utilise aussi

    https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/gnupg.scm#n366

    Les 3 paquets sont fonctionnels en soi. Il n'y a pas de "coquilles vides". C'est juste que la définition du paquet gnupg-2 hérite de la définition du paquet gnupg.

    J'ai peut-être mal compris ce qu'était un méta-paquet.

    Toujours est-il que Guix utilise plein de choses existantes ailleurs. Une partie de l'originalité est de les rassembler de manière cohérente.