Homebrew 4 accélère la mise à jour de ses paquets en abandonnant Git

Nicolas Furno |

Homebrew, le gestionnaire de paquets pour macOS1, reçoit une mise à jour majeure et passe ainsi de la version 3.6 à une 4.0. Au programme, un gros changement sous le capot : les mises à jour des paquets ne se feront désormais plus en passant par Git, mais en téléchargeant des fichiers d’information directement depuis les serveurs du projet. Ce changement devrait avoir une conséquence positive pour les utilisateurs, avec des opérations qui devraient être désormais nettement accélérées.

Montage MacGeneration.

Comme tous les programmes similaires, Homebrew repose sur une liste de tous les paquets qu’il peut installer. Ces paquets peuvent être des apps complètes avec une interface graphique ou des outils à utiliser dans le terminal, peu importe. Dans l’univers de Homebrew, on parle de formules et ce site les liste toutes. Pour chaque formule, une fiche comme celle-ci pour le lecteur vidéo mpv contient quelques informations importantes, dont les numéros de version et les dépendances, c’est-à-dire les autres paquets qui sont nécessaires à son installation.

À chaque fois que vous utilisez Homebrew pour ajouter un paquet ou mettre à jour ceux qui sont installés, le programme doit tout d’abord mettre à jour la liste de tous les paquets connus, ainsi que des numéros de version les plus récents pour tous les éléments. Jusque-là, cette tâche était réalisée en utilisant le gestionnaire de version Git : les formules sont stockées dans le même dépôt qui sert au projet (ici pour celles du « core », les plus courantes), sous la forme de fichiers en Ruby, le langage de développement utilisé par le gestionnaire. À titre d’exemple, voici à quoi cela ressemble, toujours pour mpv.

Homebrew devait ainsi mettre à jour la copie locale du dépôt Git, puis consulter le numéro de version de chaque paquet en parcourant de longues listes de fichiers. Même sur un ordinateur moderne, ces opérations demandent beaucoup de ressources et il fallait du temps, un temps répété quasiment à chaque opération, ce qui ralentissait le gestionnaire de paquets. Les systèmes de versionnement, comme Git, ont des besoins assez spécifiques qui ralentissent ces opérations et il est difficile de les accélérer.

Mise à jour de Homebrew avant la version 4 : de nombreuses opérations liées à Git sont nécessaires.

Avec Homebrew 4, la logique change. Cette fois, le programme va interroger un serveur mis en place par ses créateurs et récupérer les informations nécessaires via des fichiers JSON. Voici le fichier qui correspond à mpv, avec les mêmes informations essentielles, comme les numéros de version et les dépendances. Passer par un serveur est nettement plus rapide, à la fois car on n’utilise pas Git et à la fois parce qu’il n’est pas nécessaire de traiter tous les fichiers à chaque opération. Pour mettre à jour une formule, Homebrew pourra désormais interroger le serveur et ne récupérer que le fichier qui la concerne.

Notez que Homebrew continuera pour le moment d’interroger les dépôts Git par défaut sur les installations existantes. C’est une sécurité, puisque ce changement majeur d’architecture pourrait avoir des conséquences négatives ou poser problème dans des cas qui auraient été mal évalués par les développeurs. Par ailleurs, cette intégration avec Git reste nécessaire pour les contributeurs qui publient ou modifient des formules. Pour les autres, ces deux commandes à saisir dans le terminal peuvent couper le lien et accélérer vraiment les phases de mises à jour :

brew untap homebrew/core
brew untap homebrew/cask
Homebrew 4 réalise nettement moins d’opérations pour se mettre à jour et c’est effectivement bien plus rapide.

La contrepartie de ce changement d’architecture, c’est que Homebrew dépend désormais d’un serveur centralisé pour ses opérations. Ce n’est pas un réel problème toutefois, car il sera toujours possible d’ajouter d’autres sources sous la forme de dépôts Git, comme avant. Par ailleurs, les gains de performances justifient sans doute le compromis sur la centralisation pour la majorité des utilisateurs.

Des options restent néanmoins disponibles si vous ne voulez pas adopter ce nouveau mécanisme, vous trouverez les détails dans l’article de présentation de la nouveauté. Vous pourrez voir au passage qu’il y a aussi quelques exceptions, notamment pour les paquets qui ne sont pas fournis sous la forme de binaires et qui doivent être compilés localement. Tout est géré automatiquement cela dit, vous ne réaliserez même pas que cela arrive, si ce n’est en mesurant éventuellement les temps d’exécution.

D’autres changements sont encore listés, dont l’abandon progressif de Google Analytics pour collecter des statistiques qui renseignent, par exemple, sur la popularité des formules ou encore sur les versions de macOS les plus utilisées. À la place, les développeurs de Homebrew vont stocker les données sur leurs propres serveurs qui offrent deux avantages : ils sont situés en Europe et ils ne collectent aucune information personnelle (ni identifiant unique, ni IP). La transition se fera dans les mois à venir et il reste une option pour désactiver toutes collectes de données si vous n’en voulez pas.


  1. À la base, car il existe désormais aussi pour Linux (et donc aussi Windows !), même si les gestionnaires de paquets sont nombreux dans cet univers.  ↩︎

avatar pakal | 

quel bonheur ce homebrew

avatar Change | 

Macport 😭

avatar MilesTEG | 

Bonjour,
Vous pouvez confirmer que les deux commandes suivantes sont nécessaires pour bénéficier des améliorations de cette v4 ?
brew untap homebrew/core
brew untap homebrew/cask

Ça ne va pas casser les liens avec les applications ?

edit : bon à priori rien de cassé après, les apps semblent être bien mises à jour.
Pour la rapidité, je verrais quand il y en aura un certains nombre ^^

avatar Nicolas Furno | 

@MilesTEG

Si j'ai bien compris, c'est nécessaire pour bénéficier de la nouveauté tout de suite. J'imagine qu'ils feront le ménage dans une future mise à jour pour tout le monde, le temps de s'assurer qu'il n'y a pas de bug.

Cela dit, le gain ne concerne pas la mise à jour des paquets elle-même, mais la mise à jour de la liste des paquets. Donc la commande brew update, mais pas brew upgrade. Les deux sont indispensables, mais c'est uniquement la première qui était ralentie à cause de Git.

avatar MilesTEG | 

@nicolasf

Merci pour ces précisions :)

avatar noxx09 | 

Dis c'est quoi ton terminal avec les indicateurs d'occupation processeur et mémoire ? 😛

avatar Nicolas Furno | 

@noxx09

C’est iTerm2.

avatar fleeBubl | 

Merci pour cet article

avatar cv21 | 

"les versions de macOS les plus utilisées" :
Monterey 60%, Big Sur 17%, Ventura 10%, Catalina 8%, Mojave 1,5%, puis le reste autour de zéro...

Principalement 4 versions, cela semble plus fragmenté que les annonces d'Apple.

avatar Rin-Kun | 

J’ai tapé les deux commandes mais j’ai pas vu d’amélioration lors de ma commande « brew update --verbose » :/

avatar Pixieguy | 

Un besoin de mise à jour de PHP se fait sentir sur ma machine qui tourne sous Mojave, mais la nouvelle version de Homebrew ( 4.1.12) n'est pas compatible . Quelle version dois je utiliser et ou la trouver en Pkg.
Merci pour l'aide à venir !

CONNEXION UTILISATEUR