Nicola D'Agostino (.net) - Articoli, traduzioni, grafica, web

OpenSource » La mela aperta: shell, system hacking e software libero prima di Mac OS X

Sfatiamo un mito che vuole la Apple prima di Mac OS X totalmente "chiusa" alla sua utenza, sia a livello di sistema che come offerta di software. Ecco allora tool di hacking del sistema e programmazione liberamente rilasciati da Cupertino, shell ufficiali e di terze parti ma anche applicativi "free" ed "open", con qualche curiosa sorpresa.

di Nicola D’Agostino

Tra le accuse mosse in passato al sistema operativo dei Macintosh, sopratutto dagli utenti di altri sistemi, c’erano la scarsa modificabilità e l’impossibilità di "mettere le mani sotto il cofano", o, ancora, la non disponibilità di un’interfaccia a caratteri, di una "shell", mancanza additata sopratutto dagli utenti *nix.

In linea di principio ci si potrebbe limitare rispondere che i limiti additati esistevano per una precisa scelta di progettazione, vista la filosofia dei prodotti Apple e la fascia di utenti a cui si rivolgevano. Ma non diremmo completamente la verità: la possibilità di "smanettare’ con OS e programmi era contemplata, curiosamente proprio grazie ad uno strumento reso liberamente disponibile dalla Apple stessa.

Shell e resource hacking secondo Cupertino.

Tanto potente quanto pericoloso, ResEdit permette di modificare praticamente ogni minimo aspetto della componente di metadati del Mac OS prima di X, operando sul cosiddetto ‘resource fork’.

Res Edit splash

La geniale dualità risorsa/data dei file in ambito Macintosh si deve a Bruce Horn, membro del team originale di progettisti dei primi anni ’80, e grazie a ResEdit si può operare in maniera visuale, intervenendo anche pesantemente sul codice, sui messaggi e sull’aspetto del sistema operativo e dei programmi. Con questo ‘coltellino svizzero’, tuttora scaricabile dal sito Apple chiunque, a suo rischio e pericolo, può pasticciare con i menù e le scorciatoie di tastiera, manipolare font, localizzare programmi e modificare schermate o stringhe anche in esadecimale effettuare ‘patch’, magari abilitando o disabilitando funzioni.

Discorso simile possiamo fare anche per l’interazione a livello utente, che nel ‘vecchio’ Mac OS, era solo apparentemente ‘limitata’ alla curatissima interfaccia grafica del Finder. Anche se non immediatamente disponibili (leggi: rivolte a sviluppatori ed utenti più smaliziati), le alternative alla modalità GUI esistevano.

Una di queste risale addirittura al 1988: A/UX (Apple’s UniX) è il primo (ma non unico) tentativo commerciale (fino a 800 dollari) di Apple di creare uno Unix per le sue macchine Macintosh. Basato sul System V di AT&T, A/UX fondeva l’ambiente a caratteri con la GUI del Mac OS con risultati interessanti.

Con A/UX era possibile scegliere tra un ‘window server’ proprietario, MacX, che manteneva l’aspetto di Mac OS 7 (e la compatibilità con molti programmi commerciali dell’epoca), oppure un più abituale X11 (R4 per la precisione). Come ogni UNIX che si rispetta, A/UX offre una modalità di interazione a linea di comando, con una classica finestra terminale (disponibili sh, csh e ksh) e un pieno supporto a numerosi applicativi ed utility quali, tra gli altri, Apache, Emacs, Pine, gcc, make, inetd, sendmail, bind, named, telnet, ssh, perl, traceroute.

Un po’ meno costoso, ma comunque a pagamento fino al 1997 (oggi è gratuito), c’è anche MPW, Macintosh Programmer’s Workshop, framework di sviluppo ufficiale di Apple.

Commando

MPW è un ambiente aperto, configurabile e manipolabile tramite script con il supporto per vari linguaggi tra cui il C, C++ e l’assembly (ed altri, come vedremo più avanti). Quella che ci interessa è l’applicazione ‘cuore’, l’MPW Shell. In una finestra a caratteri, oppure tramite una originale maschera di inserimento con opzioni detta "Commando" (sì, il doppio senso era voluto…) possiamo intervenire sul filesystem e sul suo contenuto, spegnere o riavviare il computer, stampare, lanciare o fermare programmi, ed altro ancora. La sintassi della MPW Shell è un curioso misto di Unix, Ms-Dos e neologismi targati Cupertino (‘Files’; e ‘NewFolder’ invece di ‘ls’ e ‘mkdir’) e la conferma ci viene anche dal modo in cui è possibile interrompere l’esecuzione: la classica combinazione tasto mela+ punto (command+".").

$ cd macos:programs:macshell

La possibilità di interagire tramite una CLI non si limita però solamente alle proposte ufficiali, anzi. Una ‘C shell’ è offerta sia dall’essenziale
Msh, di origine giapponese e purtroppo criptico come documentazione, e da Mac Default Shell che fornisce anche qualche utility specifica per i file Mac.

Ci sono poi due implementazioni di interfaccia a caratteri che fanno parte di progetti più vasti.
Mac06 è un ambiente di sviluppo in C che sin dalla pronuncia (Mac oh six) richiama lo standard POSIX che implementa su Macintosh. Tra le cose che offre Mac06, realizzato da uno studioso tedesco, c’è anche un kernel con i suoi bravi comandi Unix, accesso a uno stack TCP/IP e una interessante integrazione con il Mac OS, di cui traduce e adatta alcune peculiarità.
Il secondo ambiente risponde al nome di LAMP, acrostico ricorsivo che sta per "LAMP Ain’t Mac POSIX" (LAMP non è Mac POSIX) che contiene Genie, una shell con accesso ad alcuni comandi UNIX. Un aspetto da non sottovalutare è che Genie, come LAMP sono progetti rilasciati sotto licenza GPL e sono archiviati presso SourceForge dove hanno il loro sito.

Open up, Apple!

L’esistenza di software con questo tipo di licenze non è una rarità. E’ vero che con Mac OS X il panorama si è allargato a dismisura ma anche prima dell’arrivo della decima versione del sistema operativo di Apple sono comparsi numerosi programmi con licenze GPL o che comunque fornivano il sorgente (e la possibilità di usarlo).

Un piccolo, timido tentativo in quest’ultima direzione è stato fatto anni fa anche da Apple stessa, con OpenPlay. Disponibile come sorgente per Mac OS e Windows 95/98, OpenPlay è un ‘network abstraction layer’ multipiattaforma pensato in origine per facilitare giochi online a più utenti e, seppure incompleto e reso problematico dalla necessità di usare pezzi di sistema proprietari, rappresenta una tappa storica nota a pochi.

Un passato glorioso.

Gli esempi migliori di programmi aperti vengono però dalla fedele ed entusiasta comunità di sviluppatori indipendenti, che hanno realizzato ottimi strumenti diventati in alcuni casi spunti per il lavoro di altri.
E’ il caso del noto client IRCle, sviluppato originariamente da Olaf Titz e rilasciato come GPL all’inizio degli anni ’90 o il lavoro di

John Norstad, noto anche perché autore dell’antivirus Disinfectant, il cui codice aperto e condiviso per il newsreader NewsWatcher ha fatto da base per altri quattro programmi simili.

Liberi perché derivati da codice libero sono invece la versione per Mac di Analog, il popolare tool di analisi dei log per webserver, di cui sono disponibili i sorgenti, oppure BetterTelnet, basato sul vecchio Telnet di pubblico dominio della NCSA (la stessa di Mosaic) e MacSSH, entrambi rilasciati come free software con licenza GPL.

Non si può negare che qualcuno, come il ‘sistema open source per Mac’ InfiniteOS, partiti sull’onda dell’entusiasmo, si sia poi arenato e che altri, come il valido editor musicale Player Pro, abbiano cambiato licenza e messo a disposizione i sorgenti solo dopo l’abbandono dello sviluppo. D’altro canto tanto di cappello meritano gioiellini come Gerry’s ICQ, il clone di pubblico dominio (con sorgenti rilasciati) di ICQ, superiore all’originale; oppure consideriamo il port, funzionale ed ‘interessato’ di CVS, MacCVS Pro, con licenza GPL e realizzato a partire dal 1996 a cura degli sviluppatori di Netscape e Mozilla.org. Interessante notare che di questa squadra faceva parte Don Melton, ora alla Apple e capo del team di sviluppo del browser Safari: un segno di continuità con il passato?

Nominiamo infine alla spicciolata anche le numerose implementazioni di Ghostcript, MacLynx la versione per Macintosh del noto browser testuale o il decano del 3D POV-ray la cui licenza lo dichiara come ‘freeware’ ma i sorgenti in C sono disponibili ed esistono varianti non ufficiali.

The choice of a GNU (Apple) generation.

Nella nostra breve indagine sul volto ‘aperto’ e ‘libero’ del mondo Apple prima di OS X il punto massimo, almeno concettualmente, spetta al panorama GNU. Ebbene sì, anche il vituperato Mac OS, contro la cui ‘chiusura’ e ‘incompatibilità’ con le scelte libere la Free Software Foundation si è più volte scagliata ha le sue brave versioni di molti dei popolari ed apprezzati strumenti, linguaggi, programmi e librerie GNU.

Il posto d’onore spetta ovviamente ai tool pensati e realizzati per lavorare in congiunzione con il sunnominato ambiente di sviluppo MPW. Tra i pacchetti disponibili molti i nomi noti (ed usati): Bison, CMacTeX, Diff, DiffUtils, Gzip, GNU Awk, l’editor Ed, GNU grep/egrep e fgrep, Sed. Naturalmente esiste il compilatore C GCC (GNU C Compiler), così come due linguaggi di primo piano come il Python e il Perl. Il Perl per Mac è una delle tante disponibili per piattaforme diverse ed è disponibile per i sistemi operativi dal 7.x in poi nella versione 5.

SteVIe

Per ultime due chicche. Non potevano mancare implementazioni di due tra i più popolari (e discussi) editor del mondo Unix: ecco quindi che dello storico ‘Vi’ esistono ben due versioni, lo spartano, ma efficace SteVie e il ‘migliorato’ Vim – VI iMproved.
L’altro grande nome è Emacs, di Richard M. Stallman, il "sistema operativo camuffato da editor", per la gioia degli ‘hacker’ (quelli veri) anche della mela morsicata.

Approfondimenti:

ResEdit Reference
developer.apple.com/documentation/mac/resedit/resedit-2.html

Mac Open Source Software Directory
www.macdevcenter.com/pub/q/mac_os_directory

Mac Sources
ftp://sunsite.cnlab-switch.ch/software/platform/macos/src/HTML/All.html

GNU for MPW
perso.wanadoo.fr/gilles.depeyrot/DevTools_en.html#GNU

Una versione di questo articolo è stata pubblicata su "OpenSource" n. 8 del 5/2004