4 puntos por GN⁺ 2024-12-09 | 1 comentarios | Compartir por WhatsApp
  • El programa shell más grande del mundo

    • akinomyoga/ble.sh: Un total de 61K LoC (46K SLoC). Es Bash Line Editor, un editor interactivo de líneas tipo fish escrito en bash puro. El archivo principal out/ble.sh contiene 30K LoC (23K SLoC), y en conjunto supera las 60K+ LoC. Incluye muchos comentarios en japonés. Hay una visión general de cómo funciona ble.sh, y muestra el uso de estructuras de datos muy sofisticadas.

    • kalua: Un add-on de OpenWRT compuesto por unas 56K SLoC/líneas de shell POSIX.

    • bashdb: Un depurador de bash compuesto por unas 14K líneas de bash. Tiene una historia interesante sobre la implementación del depurador.

    • drwetter/testssl.sh: Consta de 21K líneas de bash en un solo archivo. Parece haber sido escrito a mano.

    • Simplenetes: Kubernetes hecho con 17K líneas de Shell. Sorprendente, pero actualmente está inactivo.

    • rkhunter: 21K líneas de shell Bourne en el sitio oficial, escritas entre 2003 y 2018.

    • romkatv/powerlevel10k: Tiene 12K líneas de scripts zsh en el directorio internal/. Además, hay 8K líneas adicionales de configuración y scripts auxiliares.

    • dylanaraps/neofetch: Muestra información del sistema con 10K líneas de bash 3.2.

    • xwmx/nb: nb en sí tiene 26K LoC (22K SLoC) de bash. Si además se cuentan las pruebas bats como bash, hay 91K LoC (61K SLoC).

    • distrobox: Está compuesto por más de 7K scripts bash. Permite usar cualquier distribución Linux dentro de la terminal.

    • acme.sh: Script de shell de 7K líneas para emitir y renovar certificados.

    • inxi 2.3.56 [obsolete]: Consta de 16K líneas de bash. Empezó en 2008 como un fork de infobash.

    • bashforth: Tiene unas 3800 líneas, pero implementa un lenguaje de programación real.

    • yoda: Tiene la mitad del tamaño de bashforth, pero implementa un intérprete y compilador completos.

    • vegardit/bash-funk: Biblioteca de Bash con un total de 27K LoC (24K SLoC).

    • Relax-and-Recover: 35K LoC (24K SLoC). Herramienta de respaldo y recuperación.

    • abcde / A Better CD Encoder: Se usa para ripear CDs y consta de unas 5.5k LoC.

    • thc-segfault: 3.3K LoC. Servidor pubnix construido principalmente en Bash.

    • ffmpeg/configure: 8.4K LoC. Script de configuración de FFmpeg escrito manualmente.

    • ffhevc: 4k LoC. Script wrapper de Bash totalmente escrito a mano para codificar video HEVC usando FFmpeg y libx265.

    • ffx264: 3.9k LoC. Script wrapper de Bash totalmente escrito a mano para codificar video H.264/AVC usando FFmpeg y libx264.

    • h264enc: 9.2k LoC. Script wrapper de Bash totalmente escrito a mano para codificar video H.264/AVC usando MEncoder.

    • bashtop: 5.3k LoC. Monitor de recursos.

    • halcyon: 6.6k LoC. Sistema de instalación de apps Haskell.

    • winetricks: Script de shell de 22K líneas. Instala varios programas de Windows en Wine.

    • wordshell: Unas 7k líneas de código. Administra múltiples sitios WordPress desde la línea de comandos.

    • BaCon: Unas 10k líneas de código. Convierte programas escritos en BASIC a C.

  • Lenguajes similares a shell / DSL

    • modernish: Un dialecto de shell portable escrito en shell.

    • bats: Un DSL para escribir pruebas. Genera código bash.

    • bashible: Un DSL parecido a Ansible en bash.

    • clash: Un framework orientado a objetos compatible con shell POSIX moderno.

    • bash Infinity: Biblioteca estándar y framework boilerplate para bash.

  • Programas pequeños

    • Alpine, Aboriginal, Debian scripts: Ver la publicación del blog.

    • Completion scripts: Son grandes, pero a menudo repetitivos.

    • _git Zsh completion: 8.3k líneas de código.

    • git-completion.bash: Docker completion.

    • dyne/Tomb: Unos 3500 líneas de scripts zsh.

    • Basalt: Un gestor de paquetes con todas las funciones escrito en Bash puro (alrededor de 2021). Solo tiene unos pocos miles de líneas, pero ya cuenta con un ecosistema rico (más de 15 apps/bibliotecas).

1 comentarios

 
GN⁺ 2024-12-09
Comentarios en Hacker News
  • En Sony, hace 25 años, le asignaron un proyecto para mejorar un sistema de gestión de pedidos muy lento y que se caía con frecuencia.

    • Era un sistema compuesto por 50,000 líneas de scripts de shell abandonados durante décadas en un servidor AIX.
    • Usando Perl, redujo el sistema a 5,000 líneas y mejoró el rendimiento entre 10 y 100 veces.
    • Este proyecto fue una experiencia muy satisfactoria.
  • Escribió el instalador de Enrust CA y del directorio, y evolucionó hasta ejecutarse en todos los Unix.

    • La instalación era sencilla, pero las actualizaciones eran complejas.
    • Había que manejar las pequeñas diferencias entre las utilidades de cada Unix.
    • El Unix de DEC era confuso, por ejemplo limitaba el ancho de salida de las utilidades de línea de comandos.
    • HP-UX tenía cambios entre versiones.
  • Intentó escribir en bash un intérprete para el lenguaje de scripting Lil, pero debido a las dificultades con las operaciones de punto flotante y al soporte limitado de arreglos, eligió AWK.

    • AWK estaba disponible en entornos POSIX y resultaba adecuado como lenguaje de propósito general.
  • Los scripts de Bash no son adecuados para escribir programas complejos.

    • Tienen poca legibilidad, reglas sutiles de alcance de variables y un manejo de errores primitivo.
    • La falta de herramientas de análisis estático, linters y depuradores dificulta el mantenimiento.
    • Hacer pruebas es engorroso, y es difícil manejar lógica compleja o estructuras de datos.
    • Bash sirve para automatizaciones simples, pero para aplicaciones complejas es mejor usar otro lenguaje.
  • El script de rkhunter tiene buen código y mucha información.

    • Gran parte del código se usa para garantizar que las utilidades funcionen como se espera en distintas plataformas.
    • Si se hubiera escrito en un lenguaje de programación más complejo, habría sido menos transparente.
  • El programa de shell más grande que usó en el pasado fue abcde, con unas 5500 líneas de código.

  • El cliente de FreeBSD Update está compuesto por unas 3600 líneas de código sh.

    • Ofrece una cantidad considerable de funcionalidad como herramienta para actualizar el sistema operativo.
  • El shell puede ser la única herramienta cuya disponibilidad está garantizada, pero conviene pensarlo dos veces antes de escribir una aplicación grande en shell.

  • El script acme.sh tiene 7.1K líneas y se usa para emitir y renovar certificados de Lets Encrypt.

  • En mod_pagespeed usaron scripts de shell para realizar pruebas del sistema, pero habría sido mejor cambiar a Python.

    • Se usaron 10,579 líneas de código bash.
    • Hacer la transición de forma gradual habría sido más eficiente.