On Thu, 24 Aug 2000, Alessandro Vernet wrote:

> J'eusse espere qu'il y ait un moyen miracle permettant de packager un
> executable avec tous les so dont il depend en recreant ainsi un nouvel

oui. C'est possible. Il suffit de créer un package par so, et
de rendre le nouveau package dépendant des précédents (au moins
Debian le fait pour certains anciens programmes il me semble).

> Windows. Pourquoi ceci est-il possible sous Windows et pas Linux (i.e. a
> moins d'utiliser -static)?

Windows a-t-il le concept de versions d'objets partagés ?  Si oui,
a-t-il le concept de plusieurs versions cohexistantes ?  Je n'utilise
pas trop Windows, mais à ce que j'ai vu de l'installation de Windows
dans le passé, il n'est pas rare qu'un programme X installe sa version
de la DLL sur une autre, et que cela casse ensuite d'autres programmes,
mêmes modernes.

Mais faisons une équation simple;

   UNIX == open source == facile de recompiler

   so sous UNIX == versionables == facile à installer plusieurs

   La somme des deux donne:
      - parfois on casse la compatibilité quand il s'agit
        de corriger des bugs sérieux, au lieu d'ajouter
        du code dans la so genre:
           if program_is_internet_explorer
              use winsock 2.1;
           else
              use buggy_winsock

Lorsque les programmes que tu utilisent ne sont pas open source,
la façon Linux rend les choses vraiment mauvaises (star office: a ses
propres so s'il voit que les tiennent ne sont pas les bonnes).

D'où l'avantage d'avoir une distribution très étendue qui teste
à fond ce genre de choses, en incluant parfois les programmes
commerciaux propriétaires dans le test (non-free de la Debian).

Mais il peut aussi arriver qu'une so trop ancienne n'offre pas
le support d'une fonction X ou Y, nouvelle. C'est un choix
du créateur du programme entre compatibilité ascendante et
simplification d'implémentation. Un programme open-source
portable sur multiples OS UNIX et architectures devrait
être compilable avec à peu près toutes les libc des 3
dernières années (vulcan tourne libc5 encore, et
à peu près tout ce que j'utilise dessus, 100% open-source
bien sûr fonctionne, même des versions récentes d'Apache,
sendmail, etc).

PS: pour ta question précise sur le ld-linux, je ne sais
pas. En tous cas quand on avait libc5/libc6 compatibilité,
la libc5 était compilée spécialement pour utiliser un
root de /usr/libc5 ou quelque chose comme ça --- cela peut
te donner une idée assez affreuse de comment résoudre le
problème dans le cas général: tourner ton programme
en chroot).


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.

Répondre à