← Tornar als articles
Notícies· 5 min de lectura

Història de Bash i la shell d'Unix: del Thompson shell fins avui

Ken Thompson i Dennis Ritchie, creadors d'Unix, treballant amb un teletip el 1973
Imagen: Unknown authorUnknown author / Public domain · Wikimedia Commons

Obres un terminal a Linux, escrius una ordre i ja hi ets, parlant amb una peça de programari que té més de cinquanta anys al darrere: la shell. És l’intèrpret que tradueix les teves ordres al sistema operatiu, i la seva evolució explica bona part de la història d’Unix i del programari lliure. Aquí recorrem aquest camí, des del primer intèrpret d’ordres fins a Bash, la shell que avui mana al món Linux.

El Thompson shell: el primer intèrpret (1971)

La història comença als laboratoris Bell. El 1971 Ken Thompson va escriure la primera shell d’Unix, que avui coneixem com a Thompson shell (sh). Es va distribuir amb les versions 1 a 6 d’Unix, entre el 1971 i el 1975. Era un intèrpret d’ordres senzill, pensat per executar programes de manera interactiva més que no pas per programar.

Tot i ser tan bàsic, va portar idees que encara fem servir cada dia: la redirecció d’entrada i sortida amb < i >, i sobretot les canonades (pipes), que permeten encadenar la sortida d’un programa amb l’entrada d’un altre. Aquella filosofia d’“eines petites que fan una sola cosa bé i es combinen entre si” continua sent l’ànima dels sistemes tipus Unix, inclòs el nucli Linux.

El Bourne shell: l’estàndard d’UNIX (1979)

Sessió de la shell d'Unix Version 6 emulada en un PDP-11 amb SIMH
La shell de les primeres versions d'Unix, recreada en un emulador del miniordinador PDP-11. · Imagen: Huihermit / CC0 · Wikimedia Commons

El gran salt va arribar el 1979, quan Stephen Bourne, també als Bell Labs, va presentar el Bourne shell juntament amb UNIX Version 7. Aquell intèrpret va heretar el nom sh i va definir gairebé tot el que avui donem per bàsic en qualsevol shell: variables, estructures de control completes (if, for, while), substitució d’ordres i els cèlebres here documents.

Amb el Bourne shell la shell va passar a ser un autèntic llenguatge de programació. D’aleshores ençà, escriure scripts va deixar de ser un truc per a administradors avançats i es va tornar la manera habitual d’automatitzar tasques. La seva sintaxi va calar tant que encara defineix l’estàndard POSIX que respecten les shells modernes, i per això molts scripts antics segueixen funcionant en distribucions tan veteranes com Slackware.

C shell i KornShell: la competència

El Bourne shell no va estar sol gaire temps. També cap al 1979, Bill Joy, aleshores estudiant a Berkeley, va crear el C shell (csh), amb una sintaxi inspirada en el llenguatge C. Es va distribuir a bastament amb BSD Unix i va aportar comoditats com l’historial d’ordres i els àlies. El seu llegat continua viu en sistemes com FreeBSD, on variants de csh han tingut durant anys un paper destacat.

El 1983 David Korn va presentar el KornShell (ksh), un intent de millorar el Bourne shell sense trencar la compatibilitat. Hi va afegir control de tasques, arrays associatius i edició de la línia d’ordres a l’estil vi o Emacs. Durant anys, ksh va ser la shell comercial de referència en molts Unix corporatius.

Bash: la shell renascuda (1989)

Captura de la línia d'ordres de Bash executant-se a GNOME Terminal sobre Linux
Bash en acció dins de GNOME Terminal, la shell per defecte de la majoria de distribucions Linux. · Imagen: The GNOME Project / GPL · Wikimedia Commons

A finals dels anys vuitanta, el projecte GNU de Richard Stallman necessitava una shell completament lliure que reemplacés el Bourne shell sense restriccions de llicència. La tasca va recaure en Brian Fox, que va començar a programar-la el 1988 i va publicar la primera beta el 1989.

El nom ho diu tot: Bash, Bourne Again Shell, és alhora un joc de paraules i una declaració d’intencions. El Bourne shell “renascut” per a un món que volia llibertat i funcionalitat. Bash es va quedar amb el millor dels seus predecessors: mantenia la compatibilitat amb la sintaxi del Bourne shell i hi sumava l’historial, l’edició de línia i altres comoditats de csh i ksh. El 1989 també s’hi va sumar Chet Ramey, que amb el temps va acabar sent el seu mantenidor principal i encara ho és dècades després.

Bash com a shell per defecte de Linux

Quan Linux va començar a enlairar-se a principis dels noranta, Bash ja era una shell madura i lliure, encaixava al dit amb la filosofia GNU/Linux i es va convertir en la shell per defecte de la immensa majoria de distribucions. Avui la trobes a punt per fer servir a Ubuntu, Debian i pràcticament qualsevol sistema que instal·lis.

El seu poder rau en l’scripting. Amb canonades, redireccions, variables i funcions, Bash et deixa automatitzar des d’una còpia de seguretat fins al desplegament complet d’un servidor. Aquesta versatilitat explica per què continua sent l’eina diària d’administradors de sistemes i desenvolupadors arreu del planeta.

Alternatives modernes: zsh i fish

Bash no és el final de la història. En els darrers anys han guanyat terreny alternatives que milloren l’experiència interactiva. Zsh (Z shell) ofereix un autocompletat més intel·ligent, correcció d’errors i un sistema de temes molt popular gràcies a frameworks com Oh My Zsh. Fish (friendly interactive shell) aposta per la senzillesa i la usabilitat des del primer arrencada, amb suggeriments automàtics basats en l’historial.

El canvi més sonat va arribar el 2019: per motius de llicència (Bash va passar a GPLv3), Apple va substituir Bash per zsh com a shell per defecte a macOS Catalina, i així continua. Tot i això, Bash manté la seva corona al món Linux: cinc dècades després d’aquell primer Thompson shell, la shell continua sent el cor de la línia d’ordres i Bash, el seu representant més universal.