Dépendance: pourquoi ne pas créer des applications portables

Retour dans le time aux âges où j'utilisais Windows, les applications étaient installées de manière indépendante. Cela a laissé beaucoup de liberté à l'user final / sysadmin pour décider quoi et où mettre à jour, quoi patcher et quand sans interférer d'autres applications.

Dans * NIX, les dependencies insortingquées sont un mal de tête douloureux. PC-BSD a essayé de surmonter cela avec PBI , en créant des applications autonomes. AFAIK, cela semble maintenant obsolète et ils sont returnnés à la gestion des packages (PBI est maintenant un wrapper pour les ports), et toutes les dissortingbutions Linux vont dans le même sens: des centaines de dependencies jusqu'à la fin, sur les démons de gestion du système .

Construire des applications basées sur des centaines de dependencies rend la vie des programmeurs plus facile, mais crée un problème choquant pour les users finaux et les administrateurs système. Par exemple, je ne peux plus garder une ancienne version Debian Etch d'une application fonctionnant sous Debian Jessie. Je sais que beaucoup de gens viendront avec l'histoire de la security et des correctifs et des systèmes à jour, mais OpenSource signifie la liberté de déterminer quoi, quand et où mettre à jour. Il y a des raisons très valables de ne pas mettre à jour un système ou une partie de celui-ci, ou du less de ne pas le faire comme le font les gestionnaires de packages * NIX habituels (c.-à-d. Les machines hors ligne, l'ancien matériel, la compatibilité avec les anciennes données qui doivent être conservé pour conformité, …). D'autres fois, les administrateurs système préfèrent le faire en plusieurs étapes pour la security.

Personnellement, je crois que moi, en tant que sysadmin, devrait décider quoi mettre à jour, et quand, et supporter le risque. Avec l'état actuel des choses, c'est impossible. (C'est à dire avoir une nouvelle version de libc6 dans Debian, cela a des dependencies partout). Si je décide de garder deux repositorys ou plus pour surmonter le problème, je génère un autre cauchemar.

Je comprends que certaines dependencies (c'est à dire avoir MySQL installé) sont acceptables car c'est une dépendance majeure, mais je ne comprends pas pourquoi les minuscules dependencies comme les bibliothèques ne sont pas simplement incorporées dans le code. Le disque est bon marché. De nombreuses applications Linux scopes à Windows ont atteint cet objective.

EDIT: pour s'assurer que ce n'est pas seulement basé sur l'opinion

Quelles sont les options pour installer un logiciel dans * NIX (mettons Debian / FreeBSD pour plus de simplicité) afin de:

  • Gardez une seule version d'un logiciel pendant des années sans mise à niveau et assurez-vous que vous pouvez restr intact quel que soit le operating system de base et les bibliothèques de mise à niveau, mais vous pouvez toujours les conserver.

  • Décidez de mettre à niveau / déclassr sans conflit d'autres logiciels / bibliothèques.

  • Installez deux ou plusieurs versions de ce logiciel.

Jails / chroot / VM ne sont pas des options, bien que ce soient les solutions de contournement évidentes. Aussi,

  • Qu'est-ce qui a spécifiquement empêché PBI d'atteindre cet objective d'indépendance en revenant à la gestion des ports / packages?

Je ne peux pas expliquer pourquoi PBI n'a pas réussi, mais je peux vous dire pourquoi les bibliothèques partagées sont préférables sous Linux.

L'argument principal est la security: si une bibliothèque est couramment utilisée, seule cette bibliothèque doit être mise à jour, et non toutes les applications qui utilisent cette bibliothèque (grâce à la compatibilité ABI). Cela signifie également que si vous restz fidèle aux principaux repos et PPA (dans le cas d'Ubuntu), vous n'avez pas besoin d'avoir 4 versions différentes d'une bibliothèque simplement parce que vos applications ont été compilées avec ces versions , où vous auriez probablement différentes versions des bibliothèques .NET installées ou différentes versions du runtime C ++ visuel installé).

Cela étant dit, cependant, il peut y avoir des cas où les applications ne sont pas obligées d'utiliser la version système des bibliothèques et peuvent utiliser leur propre version. Par exemple, Chromium dépend de nombreuses bibliothèques présentes dans les pensions de la plupart des dissortingbutions. Dans des circonstances normales, les applications seraient compilées de sorte que les bibliothèques qu'elles utilisaient étaient celles compilées par la dissortingbution. Cependant, dans Ubuntu (au less), Chromium est compilé avec sa propre version de bibliothèques, car:

  • L'utilisation de la version du système des bibliothèques signifie que Chromium devrait être testé pour chaque version d'Ubuntu.
  • Chromium utilise la plupart du time les dernières versions des bibliothèques, ce qui signifie que la probabilité d'une vulnérabilité est beaucoup plus faible.

En ce qui concerne l'argument de l'espace disque, vous pouvez soutenir que l'installation d'une version debootstrap de Debian Jessie nécessite less de 1 Go d'espace disque, ce qui est idéal pour les petites maps SD. Windows, d'autre part, nécessite au less plusieurs gigaoctets d'espace disque.

En ce qui concerne les logiciels plus anciens, vous pouvez comstackr l'application de manière statique et avoir la plupart des dependencies autonomes. Cependant, étant donné que votre dissortingbution peut ne pas contenir de versions statiques de bibliothèques (Debian et Ubuntu ne le sont généralement pas), vous devrez comstackr ces bibliothèques pour get les versions statiques de ces bibliothèques.

Enfin, l'un des principes d'Unix est que chaque application ne fait qu'une chose, et qu'elle est bonne. Si les applications et les bibliothèques étaient liées de façon statique, elles pourraient être considérées (indirectement) comme faisant beaucoup de choses.