La JVM va maximiser le "Throughput" (ou débit), au détriment de la charge CPU et mémoire. Elle va tout faire pour aller le plus vite possible, quitte à recompiler le code à la volé (charge CPU supplémentaire), ou ne pas désallouer lorsque la mémoire n'est plus utilisée.
C'est complexe à faire avec d'autres langages qui vont chercher à maximiser la vitesse, sans doute en utilisant moins de ressources.
s'exécute à chaque requête. Difficile d'optimiser le code, on peut jouer seulement sur les paramètres de la JVM. Cela dit, je ne sais pas si le contexte est multi-threadé ou non. J'ai testé pour le fun avec Graalvm, aucune différence.
N'as t-on pas le droit d'utiliser le langage que l'on veut sur la JVM ?
À part complexifier l'utilisation de GraalVM, je vois pas d’inconvénients…
La pertinence de ce test vient du fait que ce n'est pas le même parseur que celui de Java, même si la syntaxe est compatible, tu n'as pas besoin de compiler (même si tu peux le faire), et contrairement aux idées reçues, ce n'est pas tellement plus lent pour une application de type serveur. L'exemple ne se prête pas aux démonstration pédantique de syntaxe.
Et tu as pas mal d'apport potentiel lié à Groovy… Comme les DSL.
J'ai un CPU très rapide par rapport à son enveloppe thermique (105 watts) :
$ cat /proc/cpuinfo
. . .
processor : 31
vendor_id : AuthenticAMD
cpu family : 25
model : 33
model name : AMD Ryzen 9 5950X 16-Core Processor
stepping : 2
microcode : 0xa201205
cpu MHz : 3276.090
. . .
Clairement le CPU utilise plus d'un core. Si j'ai le temps, j'essaierais de voir si c'est le GC qui utilisent toutes les autres threads… Es-tu sûr que ce soit mono-threadé hors GC ? Je n'ai pas bien compris l'explication.
Sur la documentation de Class HttpServer ce n'est pas monothreadé de ce que je comprends…
C'est la distribution de la Steam Deck, extraite à partir de l'image recovery de la console, sur un de mes PC avec une carte ATIAMD.
Cette distribution est basée sur Arch Linux. Je voulais bidouiller un peu pour bidouiller ensuite la console (et oui, j'en ai une), après installation, tout marche sur ce PC.
Cette distribution utilise Xorg et Plasma 5.23 et boot sur l'environnement gaming de la console. En modifiant la configuration de SDDM pour booter sur Plasma, et celle de Pacman pour ajouter les sources officielles (et kde-testing), Et bah encore une fois, tout marche : Plasma 5.24.90, avec Wayland et OBS Studio (0,2 % de CPU pour l'enregistrement d'un écran 4K …), SAUF l’environnement de la console.
Ce qui m'a impressionné :
- Pas de changement de contexte Framebuffer <-> Wayland Ou serveur X au boot;
- Temps mis pour booter depuis grub est vraiment faible ;
- Et Plasma 5.25 beta, c'est une tuerie …
Je passe sur l'utilisation de Proton en version expérimentale (ça fonctionne vraiment très bien sur les jeux Windows, 4K60FPS sur les quelques gros jeux que j'ai pu tester, avec Mesa), la principale différence avec une Arch classique, c'est juste que les miroirs de Valves ont des versions figées, et un repo pour l’environnement desktop "console".
J'admire la façon dont ça a été fait. Rien à dire, je pensais au début qu'il y aurait du custom dans tous les sens, en fait, c'est une Arch avec Steam et Proton, point. J'aurais aussi pu installer une Arch classique, mais je voulais tester l'image de la console.
À partir du moment où un langage te permet de créer un module noyau, ou être utiliser dans un firmware, c'est du bas niveau. Cela dit, le C++ dispose aussi de bibliothèques de haut niveau, tel Qt, qui ajoute au C++ les signaux /slots par exemple (mais est-ce du C++ ?).
Un langage de haut niveau, en plus d'être peu recommandable pour le développement de firmware, devrait te permettre limiter l'accès aux ressources systèmes, définir le degré l'isolation des bibliothèques nativement, gérer ses dépendances comme un grand, qu'il soit "sécurisable" directement par l'administrateur ou l'utilisateur simplement, et pas par le développeur. Il y en a bien un, ça commence par J et ça fini par a, mais c'est plus une plateforme qu'un langage.
Je sais pas trop ce que tu veux dire par « aspect performance », mais lancer une exception c’est loin d’être cheap, le stack unwinding, capturer la stack trace etc a un coût certain. En pratique, pour beaucoup d’application, ça va pas faire une différence notable, mais c’est pas gratuit, que ce soit en c++ ou en java.
Il y a 2 aspects liés à la gestion des exceptions :
le coût d'une levée d'exception, comme tu le signales,
le coût de gestion de celles-ci dans le binaire (binaire plus gros).
En C++, le coût de gestion était élevé à mon époque, tout le monde n'activait pas la gestion de celles-ci (d'où des incompatibilités sur certaines plateformes). En gros, ça revient à ajouter des return spéciaux supplémentaires, et l'une des règles de codage en C++ était de minimiser le nombre de return dans le corps des méthodes. Je crois qu'en Java, le coût de gestion est plus négligeable car il peut y avoir des optimisations au runtime, et la Jvm est stack-based (un peu comme du C++ sur du x86), donc peu d'impact d'un return.
Le lancement d'une exception dans le cas normal arrive rarement. Donc même si le coût est élevé, tu perds au final peu de performances. C'est différent de systématiquement encapsuler ton résultat. Mais oui, c'est pas forcément significatif en terme d'impacte sur la plupart du code que l'on rencontre.
En Java, tu es obligé d'attraper la plupart des exceptions.
Pas en Groovy. Dans le cadre d'un serveur d'application qui intègre un connecteur FreeCAD, Solr, LibreOffice, sans compter la gestion des données persistantes, la problématique de la sécurité, la validation des données… c'est peut-être un avantage. Tu n'as certainement pas envie de traiter tous les cas de figure si le formulaire contient un fichier à uploader et peu lever un nombre d'exception conséquent lors de la sauvegarde de ce formulaire.
D'ailleurs, vu par l'utilisateur, le cas ou une exception est non catchée sur un serveur d'application c'est que la requête retourne un code 501 et que les données persistantes ne sont pas modifiées. C'est donc "limité". L'application continue de tourner. C'est difficile d'anticiper un comportement correcte suite à certaines erreurs. Moi, c'est mon tél ou ma boite mail qui vont recevoir les insultes, personne ne va en mourir dans mon cas (à moins d'être susceptible ou dépressif). Mais je ne vois pas comment on peut faire mieux.
Il n'y a quasiment pas de try … catch dans notre code, excepté pour ne pas interrompre l'initialisation du serveur si l'erreur est tolérable, lors de l'initialisation des services, lorsque le service est initialisé AVANT son utilisation (pas de lazy-init). Bref, au final, je n'ai pas quasiment pas de code de gestion d'erreur, mais nombre d'erreur soit sont traitées par le framework lui-même, soit on ne peut rien en faire et seulement prévenir l'administrateur…
C'est inspirant cette façon de faire des présentations… 1h pour ne pas faire de try catch.
Ce qui est intéressant c'est la volonté de formuler tous les cas de figure pour la gestion d'erreurs et d'y associer une syntaxe.
Ce qui me gène avec cette approche :
l'aspect performance, on ne retourne pas directement un résultat, mais un objet virtuel, qui contient soit le résultat, soit une erreur. C'est un inconvénient par rapport au fait de dissocier le résultat et l'erreur ;
"do or do not, there is no try", j'ai besoin de savoir pourquoi ;
Au final je ne trouve pas forcément la syntax simple ;
Enfin et surtout, la validation des données N'EST PAS une erreur.
En ce qui me concerne, nous utilisons groovy et Java, qui propose avec les enum des possibilités proches. Pour le cas présenter (validation d'un objet, sequence de traitement, gestion des erreurs associées) :
La validation des données nécessite un validator dans la classe implémentant l'objet, aucun cas de gestion de cette aspect n'apparait dans le code métier, c'est le FW qui décore les actions pour retourner l'information à l'utilisateur ;
Le reste sont des exceptions.
Les exceptions constituent les erreurs non prévisibles, comme un problème réseau, disque plein, et d'autres aspect, comme la sécurité. Je comprends mal l'intérêt de ne pas utiliser les exceptions..
Moi je dirai : Il ne faut pas rabaisser le libre à un mouvement dogmatique, politique ou religieux. De même, l'échange du savoir n'a pas de couleur politique. C'est sûr, c'est tellement plus beau d'être de ceux qui demande aux autres de partager… C'est gratuit, mais pas libre.
PyCharm, Intellij plus une bonne distribution Kde, je trouve ça bien plus efficace que MacOS. Et largement suffisamment bien fini.
Sans faire de prosélytisme, car j'aime bien mon M1 PRO, je le préférais largement sous Linux. Mais le monde du PC portable est à la ramasse par rapport à ce que propose Apple en terme de hardware sur le haut de gamme.
La syntaxe est concise et typée. Je ne suis pas expert en LINQ/Stream API, je pense que ce dernier aspect est délicat avec ces APIs. Et le tout en utilisant le Jdk 7. C'est d'ailleurs un peu comme les WhereQueries de Gorm (très ancienne), mais cette infrastructure ne fonctionne que sur les classes du domaine qui sont donc mappées dans une base de données, pas sur de simples objets en mémoire.
Si ça t’intéresse, j'ai une carte à base de RDNA1 que je peux te donner (tu sais où me trouver) et je vais recevoir une carte RDNA2 que tu pourrais emprunter (d'ici quelques jours).
La RDNA2 est une Gigabyte, c'est pour moi un challenge d'acheter cette marque..
Mea maxima culpa, cette fonctionnalité mérite que l'on s'y attarde, j'avais peu de temps, aussi mettre du JSON dans des exemples de code pour illustrer un langage me révulse.
Voici un autre exemple avec des objets classiques :
[^] # Re: Rust et C
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 4.
La JVM va maximiser le "Throughput" (ou débit), au détriment de la charge CPU et mémoire. Elle va tout faire pour aller le plus vite possible, quitte à recompiler le code à la volé (charge CPU supplémentaire), ou ne pas désallouer lorsque la mémoire n'est plus utilisée.
C'est complexe à faire avec d'autres langages qui vont chercher à maximiser la vitesse, sans doute en utilisant moins de ressources.
[^] # Re: En groovy (sans optimisations)
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 2.
Oui, globalement d'accord, le résultat dépend grandement de la Jvm et donc prévisible. Seule la section :
s'exécute à chaque requête. Difficile d'optimiser le code, on peut jouer seulement sur les paramètres de la JVM. Cela dit, je ne sais pas si le contexte est multi-threadé ou non. J'ai testé pour le fun avec Graalvm, aucune différence.
[^] # Re: En groovy (sans optimisations)
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 3. Dernière modification le 13 juin 2022 à 14:37.
En quoi est-ce pire ?
N'as t-on pas le droit d'utiliser le langage que l'on veut sur la JVM ?
À part complexifier l'utilisation de GraalVM, je vois pas d’inconvénients…
La pertinence de ce test vient du fait que ce n'est pas le même parseur que celui de Java, même si la syntaxe est compatible, tu n'as pas besoin de compiler (même si tu peux le faire), et contrairement aux idées reçues, ce n'est pas tellement plus lent pour une application de type serveur. L'exemple ne se prête pas aux démonstration pédantique de syntaxe.
Et tu as pas mal d'apport potentiel lié à Groovy… Comme les DSL.
[^] # Re: En groovy (sans optimisations)
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 3.
J'ai un CPU très rapide par rapport à son enveloppe thermique (105 watts) :
Clairement le CPU utilise plus d'un core. Si j'ai le temps, j'essaierais de voir si c'est le GC qui utilisent toutes les autres threads… Es-tu sûr que ce soit mono-threadé hors GC ? Je n'ai pas bien compris l'explication.
Sur la documentation de Class HttpServer ce n'est pas monothreadé de ce que je comprends…
[^] # Re: En groovy (sans optimisations)
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 2.
Pour info, après un second round (j’exécute le tout dans Intellij, avec pleins de choses ouvertes, comme Steam):
# En groovy (sans optimisations)
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 4.
Dans Main.groovy
Pour le démarrer, j'utilise Groovy 4.0.3 :
Requests per second: 39136.05 #/sec
j't'éclate ton serveur… Mais merci quand même.
[^] # Re: C'est beaucoup ?
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 1.
Autant pour moi, ce n'est pas du https..
[^] # Re: C'est beaucoup ?
Posté par YBoy360 (site web personnel) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 2.
Et en https, ça donne quoi ?
Il faudrait tester exactement le même programme et sur la même machine. Que donne le programme Java sur ta machine ?
# 3615 MaLife: HoloIso
Posté par YBoy360 (site web personnel) . En réponse au journal Quelques mots sur Arch. Évalué à 7.
J'ai pris ma journée d'hier à installer HoloISO.
C'est la distribution de la Steam Deck, extraite à partir de l'image recovery de la console, sur un de mes PC avec une carte
ATIAMD.Cette distribution est basée sur Arch Linux. Je voulais bidouiller un peu pour bidouiller ensuite la console (et oui, j'en ai une), après installation, tout marche sur ce PC.
Cette distribution utilise Xorg et Plasma 5.23 et boot sur l'environnement gaming de la console. En modifiant la configuration de SDDM pour booter sur Plasma, et celle de Pacman pour ajouter les sources officielles (et kde-testing), Et bah encore une fois, tout marche : Plasma 5.24.90, avec Wayland et OBS Studio (0,2 % de CPU pour l'enregistrement d'un écran 4K …), SAUF l’environnement de la console.
Ce qui m'a impressionné :
- Pas de changement de contexte Framebuffer <-> Wayland Ou serveur X au boot;
- Temps mis pour booter depuis grub est vraiment faible ;
- Et Plasma 5.25 beta, c'est une tuerie …
Je passe sur l'utilisation de Proton en version expérimentale (ça fonctionne vraiment très bien sur les jeux Windows, 4K60FPS sur les quelques gros jeux que j'ai pu tester, avec Mesa), la principale différence avec une Arch classique, c'est juste que les miroirs de Valves ont des versions figées, et un repo pour l’environnement desktop "console".
J'admire la façon dont ça a été fait. Rien à dire, je pensais au début qu'il y aurait du custom dans tous les sens, en fait, c'est une Arch avec Steam et Proton, point. J'aurais aussi pu installer une Arch classique, mais je voulais tester l'image de la console.
[^] # Re: C++, haut niveau ?
Posté par YBoy360 (site web personnel) . En réponse au journal Écrire un jeu en Rust presque de zéro. Évalué à 1.
À partir du moment où un langage te permet de créer un module noyau, ou être utiliser dans un firmware, c'est du bas niveau. Cela dit, le C++ dispose aussi de bibliothèques de haut niveau, tel Qt, qui ajoute au C++ les signaux /slots par exemple (mais est-ce du C++ ?).
Un langage de haut niveau, en plus d'être peu recommandable pour le développement de firmware, devrait te permettre limiter l'accès aux ressources systèmes, définir le degré l'isolation des bibliothèques nativement, gérer ses dépendances comme un grand, qu'il soit "sécurisable" directement par l'administrateur ou l'utilisateur simplement, et pas par le développeur. Il y en a bien un, ça commence par J et ça fini par a, mais c'est plus une plateforme qu'un langage.
[^] # Re: encore ?
Posté par YBoy360 (site web personnel) . En réponse au lien Python 3.11, plus rapide pour de vrai de vrai. Évalué à 2. Dernière modification le 07 juin 2022 à 05:47.
Tu devrais remplacer Java et Go par PHP dans ton commentaire… ça serait déjà pas mal.
[^] # Re: Kamoulox !
Posté par YBoy360 (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 2.
Il y a 2 aspects liés à la gestion des exceptions :
En C++, le coût de gestion était élevé à mon époque, tout le monde n'activait pas la gestion de celles-ci (d'où des incompatibilités sur certaines plateformes). En gros, ça revient à ajouter des return spéciaux supplémentaires, et l'une des règles de codage en C++ était de minimiser le nombre de return dans le corps des méthodes. Je crois qu'en Java, le coût de gestion est plus négligeable car il peut y avoir des optimisations au runtime, et la Jvm est stack-based (un peu comme du C++ sur du x86), donc peu d'impact d'un return.
Le lancement d'une exception dans le cas normal arrive rarement. Donc même si le coût est élevé, tu perds au final peu de performances. C'est différent de systématiquement encapsuler ton résultat. Mais oui, c'est pas forcément significatif en terme d'impacte sur la plupart du code que l'on rencontre.
[^] # Re: Kamoulox !
Posté par YBoy360 (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 3.
Pas en Groovy. Dans le cadre d'un serveur d'application qui intègre un connecteur FreeCAD, Solr, LibreOffice, sans compter la gestion des données persistantes, la problématique de la sécurité, la validation des données… c'est peut-être un avantage. Tu n'as certainement pas envie de traiter tous les cas de figure si le formulaire contient un fichier à uploader et peu lever un nombre d'exception conséquent lors de la sauvegarde de ce formulaire.
D'ailleurs, vu par l'utilisateur, le cas ou une exception est non catchée sur un serveur d'application c'est que la requête retourne un code 501 et que les données persistantes ne sont pas modifiées. C'est donc "limité". L'application continue de tourner. C'est difficile d'anticiper un comportement correcte suite à certaines erreurs. Moi, c'est mon tél ou ma boite mail qui vont recevoir les insultes, personne ne va en mourir dans mon cas (à moins d'être susceptible ou dépressif). Mais je ne vois pas comment on peut faire mieux.
Il n'y a quasiment pas de try … catch dans notre code, excepté pour ne pas interrompre l'initialisation du serveur si l'erreur est tolérable, lors de l'initialisation des services, lorsque le service est initialisé AVANT son utilisation (pas de lazy-init). Bref, au final, je n'ai pas quasiment pas de code de gestion d'erreur, mais nombre d'erreur soit sont traitées par le framework lui-même, soit on ne peut rien en faire et seulement prévenir l'administrateur…
[^] # Re: Kamoulox !
Posté par YBoy360 (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 5.
C'est inspirant cette façon de faire des présentations… 1h pour ne pas faire de try catch.
Ce qui est intéressant c'est la volonté de formuler tous les cas de figure pour la gestion d'erreurs et d'y associer une syntaxe.
Ce qui me gène avec cette approche :
En ce qui me concerne, nous utilisons groovy et Java, qui propose avec les enum des possibilités proches. Pour le cas présenter (validation d'un objet, sequence de traitement, gestion des erreurs associées) :
Les exceptions constituent les erreurs non prévisibles, comme un problème réseau, disque plein, et d'autres aspect, comme la sécurité. Je comprends mal l'intérêt de ne pas utiliser les exceptions..
[^] # Re: Kamoulox !
Posté par YBoy360 (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 3.
Je n'ai pas bien compris ce qu'était une gestion élégante d'erreur avec
un unionune interface encapsulant 2 types…Ce n'est pas plus propre de séparer le résultat et la gestion d'erreur ?
[^] # Re: Tu es prêt pour... Etre déçu par le libre
Posté par YBoy360 (site web personnel) . En réponse au journal Le mouvement du logiciel libre est un mouvement politique et social. Évalué à 5.
Moi je dirai : Il ne faut pas rabaisser le libre à un mouvement dogmatique, politique ou religieux. De même, l'échange du savoir n'a pas de couleur politique. C'est sûr, c'est tellement plus beau d'être de ceux qui demande aux autres de partager… C'est gratuit, mais pas libre.
[^] # Re: Un peu tout
Posté par YBoy360 (site web personnel) . En réponse au sondage Développeur Libristes, oui ! mais macOS, Visual Studio et Azure ?. Évalué à 1.
PyCharm, Intellij plus une bonne distribution Kde, je trouve ça bien plus efficace que MacOS. Et largement suffisamment bien fini.
Sans faire de prosélytisme, car j'aime bien mon M1 PRO, je le préférais largement sous Linux. Mais le monde du PC portable est à la ramasse par rapport à ce que propose Apple en terme de hardware sur le haut de gamme.
[^] # Re: Chapeau bas, David Louapre
Posté par YBoy360 (site web personnel) . En réponse au lien ScienceEtonnante : JE CRAQUE WORDLE ! 🟩⬛🟨⬛🟨 (grâce aux maths). Évalué à -6.
Ce type est une énigme à lui tout seul, il est un peu aux sciences ce que Gad Elmaleh est à l'humour.
[^] # Re: Compatibilité à partir du Jdk 7+
Posté par YBoy360 (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 5.
Selon moi :
les joins
Et les clauses Having / Group by ( )
La syntaxe est concise et typée. Je ne suis pas expert en LINQ/Stream API, je pense que ce dernier aspect est délicat avec ces APIs. Et le tout en utilisant le Jdk 7. C'est d'ailleurs un peu comme les WhereQueries de Gorm (très ancienne), mais cette infrastructure ne fonctionne que sur les classes du domaine qui sont donc mappées dans une base de données, pas sur de simples objets en mémoire.
# Très belle initiative
Posté par YBoy360 (site web personnel) . En réponse à la dépêche OpenCL sous Linux : l’état des pilotes AMD est désormais pire que ce qu’il était à l’époque de fglrx. Évalué à 6.
Si ça t’intéresse, j'ai une carte à base de RDNA1 que je peux te donner (tu sais où me trouver) et je vais recevoir une carte RDNA2 que tu pourrais emprunter (d'ici quelques jours).
La RDNA2 est une Gigabyte, c'est pour moi un challenge d'acheter cette marque..
[^] # Re: Compatibilité à partir du Jdk 7+
Posté par YBoy360 (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 2.
Mea maxima culpa, cette fonctionnalité mérite que l'on s'y attarde, j'avais peu de temps, aussi mettre du JSON dans des exemples de code pour illustrer un langage me révulse.
Voici un autre exemple avec des objets classiques :
Ce qui donne :
[Tartanpion, Tartuffe, TarteAuPoire]
[[Tartanpion, Europe], [Jambon, Europe], [TarteAuPoire, Europe]]
C'est puissant..
[^] # Re: C'était proprio ?
Posté par YBoy360 (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 6. Dernière modification le 31 janvier 2022 à 17:20.
C'était volontaire et non issu de Google Trad. C'est comme bronsonizer, je pensais que c'était un running gag…
Sortie, peut avoir une connotation négative et déjà vu. Je préfère publication. Mais bon.
[^] # Re: The profiler
Posté par YBoy360 (site web personnel) . En réponse au lien Aide pour identifier une personne toxique au travail. Évalué à 1. Dernière modification le 31 janvier 2022 à 04:09.
faut y aller mollo sur les coups d'oeil.
[^] # Re: Bah
Posté par YBoy360 (site web personnel) . En réponse au lien Trouver des développeurs va être votre plus gros casse-tête cette année (Python, Java, Javascript). Évalué à 1.
Merci, j'ai la chanson en tête, j'ai envi de les revoirs maintenant.. Durant l'époque des 8-bit, on se prenait moins la tête.
[^] # Re: Cargo.lock affligeant
Posté par YBoy360 (site web personnel) . En réponse au lien Rewriting the GNU Coreutils in Rust. Évalué à 3.
Les modules du C++ 2020 ne permettent pas justement de rapatrier des binaires "portables" de façon agnostique ?
Pour gérer les dépendances, c'eût été pratique …