4 points par GN⁺ 2024-12-09 | 1 commentaires | Partager sur WhatsApp
  • Les plus grands programmes shell au monde

    • akinomyoga/ble.sh : 61K LoC au total (46K SLoC). Un Bash Line Editor, c’est-à-dire un éditeur de ligne interactif de type fish, écrit en bash pur. Le fichier principal out/ble.sh contient 30K LoC (23K SLoC), et l’ensemble dépasse 60K+ LoC. Il comprend de nombreux commentaires en japonais. Il existe aussi une vue d’ensemble du fonctionnement de ble.sh, qui montre l’utilisation de structures de données très sophistiquées.

    • kalua : un addon OpenWRT composé d’environ 56K SLoC/lignes en shell POSIX.

    • bashdb : un débogueur bash composé d’environ 14K lignes de bash. Il a une histoire de mise en œuvre intéressante.

    • drwetter/testssl.sh : un fichier unique de 21K lignes en bash. Semble avoir été écrit entièrement à la main.

    • Simplenetes : Kubernetes en 17K lignes de shell. Surprenant, mais actuellement inactif.

    • rkhunter : 21K lignes de shell Bourne sur le site officiel, écrites entre 2003 et 2018.

    • romkatv/powerlevel10k : le répertoire internal/ contient 12K lignes de scripts zsh. S’y ajoutent 8K lignes de configuration et de scripts auxiliaires.

    • dylanaraps/neofetch : 10K lignes en bash 3.2 pour afficher les informations système.

    • xwmx/nb : nb lui-même contient 26K LoC (22K SLoC) en bash. En comptant en plus les tests bats en bash, on atteint 91K LoC (61K SLoC).

    • distrobox : composé de plus de 7K lignes de scripts bash. Permet d’utiliser n’importe quelle distribution Linux depuis le terminal.

    • acme.sh : un script shell de 7K lignes pour émettre et renouveler des certificats.

    • inxi 2.3.56 [obsolete] : 16K lignes en bash. A commencé en 2008 comme un fork de infobash.

    • bashforth : environ 3800 lignes, mais implémente un véritable langage de programmation.

    • yoda : deux fois plus petit que bashforth, mais implémente un interpréteur et un compilateur complets.

    • vegardit/bash-funk : bibliothèque Bash de 27K LoC au total (24K SLoC).

    • Relax-and-Recover : 35K LoC (24K SLoC). Outil de sauvegarde et de restauration.

    • abcde / A Better CD Encoder : utilisé pour l’extraction de CD, avec environ 5.5k LoC.

    • thc-segfault : 3.3K LoC. Serveur pubnix construit principalement en Bash.

    • ffmpeg/configure : 8.4K LoC. Le script de configuration de FFmpeg, écrit à la main.

    • ffhevc : 4k LoC. Script wrapper Bash entièrement écrit à la main pour encoder en vidéo HEVC avec FFmpeg et libx265.

    • ffx264 : 3.9k LoC. Script wrapper Bash entièrement écrit à la main pour encoder en vidéo H.264/AVC avec FFmpeg et libx264.

    • h264enc : 9.2k LoC. Script wrapper Bash entièrement écrit à la main pour encoder en vidéo H.264/AVC avec MEncoder.

    • bashtop : 5.3k LoC. Moniteur de ressources.

    • halcyon : 6.6k LoC. Système d’installation d’applications Haskell.

    • winetricks : script shell de 22K lignes. Installe divers programmes Windows dans Wine.

    • wordshell : environ 7k lignes de code. Gère plusieurs sites WordPress en ligne de commande.

    • BaCon : environ 10k lignes de code. Convertit des programmes écrits en BASIC en C.

  • Langages de type shell / DSL

    • modernish : un dialecte shell portable écrit en shell.

    • bats : un DSL pour écrire des tests. Génère du code bash.

    • bashible : un DSL similaire à Ansible en bash.

    • clash : framework orienté objet compatible avec le shell POSIX moderne.

    • bash Infinity : bibliothèque standard et framework boilerplate pour bash.

  • Petits programmes

    • Alpine, Aboriginal, Debian scripts : voir l’article de blog.

    • Completion scripts : volumineux, mais souvent répétitifs.

    • _git Zsh completion : 8.3k lignes de code.

    • git-completion.bash : complétion Docker.

    • dyne/Tomb : environ 3500 lignes de scripts zsh.

    • Basalt : gestionnaire de paquets complet écrit en Bash pur (vers 2021). Il ne fait que quelques milliers de lignes, mais dispose déjà d’un écosystème riche (plus de 15 apps/bibliothèques).

1 commentaires

 
GN⁺ 2024-12-09
Commentaires sur Hacker News
  • Chez Sony, il y a 25 ans, une personne a été affectée à un projet visant à améliorer un système de gestion des commandes très lent et qui plantait souvent.

    • Il s’agissait d’un système composé de 50 000 lignes de scripts shell abandonnés pendant des décennies sur un serveur AIX.
    • En utilisant Perl, le système a été réduit à 5 000 lignes et les performances ont été améliorées d’un facteur de 10 à 100.
    • Ce projet a été une expérience très satisfaisante.
  • Une personne a écrit le programme d’installation d’Enrust CA et du répertoire, qui a évolué pour fonctionner sur tous les Unix.

    • L’installation était simple, mais les mises à niveau étaient complexes.
    • Il fallait gérer les légères différences entre les utilitaires de chaque Unix.
    • Le Unix de DEC était déroutant, par exemple parce que ses utilitaires en ligne de commande limitaient la largeur de sortie.
    • HP-UX avait des changements selon les versions.
  • Quelqu’un a essayé d’écrire l’interpréteur du langage de script Lil en bash, mais a choisi AWK en raison des difficultés liées aux calculs en virgule flottante et du support limité des tableaux.

    • AWK était disponible dans les environnements POSIX et convenait bien comme langage généraliste.
  • Les scripts Bash ne conviennent pas à l’écriture de programmes complexes.

    • La lisibilité est mauvaise, les règles de portée des variables sont subtiles, et la gestion des erreurs est rudimentaire.
    • Le manque d’outils d’analyse statique, de linters et de débogueurs rend la maintenance difficile.
    • Les tests sont fastidieux, et il est difficile de gérer une logique complexe ou des structures de données élaborées.
    • Bash convient à une automatisation simple, mais pour des applications complexes, d’autres langages sont préférables.
  • Le script rkhunter est bien écrit et riche en informations.

    • Une grande partie du code sert à garantir que les utilitaires se comportent comme prévu sur diverses plateformes.
    • S’il avait été écrit dans un langage de programmation plus complexe, il aurait été moins transparent.
  • Le plus gros programme shell utilisé autrefois était abcde, composé d’environ 5 500 lignes de code.

  • Le client FreeBSD Update est composé d’environ 3 600 lignes de code sh.

    • En tant qu’outil de mise à jour du système d’exploitation, il offre des fonctionnalités considérables.
  • Le shell est parfois le seul outil dont la disponibilité est garantie, mais il faut y réfléchir à deux fois avant d’écrire une grosse application shell.

  • Le script acme.sh fait 7,1 K lignes et sert à émettre et renouveler des certificats via Lets Encrypt.

  • mod_pagespeed utilisait des scripts shell pour les tests système, mais il aurait mieux valu passer à Python.

    • 10 579 lignes de code bash étaient utilisées.
    • Une migration progressive aurait été plus efficace.