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

JS/UIX/ lo UNIX dentro il browser

Un po’ gioco, un po’ dimostrazione di abilità tecnica, ecco un sistema operativo Unix a linea di comando scritto in Javascript e realizzato da uno sviluppatore austriaco in poco meno di due anni.

di Nicola D’Agostino

Internet è piena di progetti strani ed esotici, che coinvolgono linguaggi di programmazione raffinati o astrusi e ambiziosi sistemi e ambienti operativi. Ogni tanto però si fa largo qualcosa di davvero straordinario.
E’ il caso di JS/UIX, che possiamo descrivere solo come un hack, una pura dimostrazione di abilità e inventiva.
All’url www.masswerk.at/jsuix/ è disponibile online un sistema operativo virtuale a caratteri di tipo Unix scritto interamente in Javascript che funziona in un semplice web browser (Mozilla, Firefox, Explorer e Netscape dalle versioni 4 in sù).

Il prompt di JS/UIX

JS/UIX implementa una shell (di tipo"sh"), un filesystem virtuale, gestione dei processi e tanto altro dietro l’interfaccia di un classico terminale a 80 colonne a caratteri verdi su sfondo nero il cui input può essere immesso, volendo, anche per mezzo di una tastiera virtuale che compare sulla stessa pagina web.

Il mondo di JS/UIX

Per accedere a JS/UIX basta andare sul sito web e fare clic sul link "open terminal". A questo punto si apre nella stessa pagina il riquadro del terminale che presenta una maschera di login. Per ora non c’è alcuna password: per accedere basta digitare uno username a piacimento e dare invio. Ci ritroviamo così al prompt. Anche se l’autore di JS/UIX specifica che si tratta di un ambiente con un set limitato di comandi, poche opzioni e nessuna compatibilità POSIX, la dotazione offerta è di tutto rispetto.

Alcuni dei comandi disponibili in  JS/UIX

Andiamo dai comandi per muoverci e orientarci in giro per il filesystem (ls, cd, pwd, clear) a quelli per avere informazioni sul sistema (uname, ps, date, info) e sui programmi (help, apropos, man, which), per settaggi e opzioni (alias, unalias, chmod, stty, set, unset). Per uscire dalla shell e rifare login con un altro nome basta digitare "exit" oppure possiamo fermare (halt) o riavviare (reboot) il sistema operativo virtuale. Possiamo creare, copiare, modificare, rinominare e rimuovere file e cartelle (touch,cat mkdir, rm, rmdir, cp, mv) e usare pipe e diversi simboli tipici di Unix (; | > >>) per legare, concatenare e ridirezionare l’output e anche per fare dello shell scripting. peccato che non si possano usare le wildcard (! e *) e manchi un compilatore.
E’ disponibile un calendario (cal) e un tool (wc) per contare parole, righe e caratteri nei file. Ciliegina sulla torta è la presenza, sempre in Javascript, dello storico programma di videoscrittura "vi", creato da Bill Joy. E’ un po’ semplificato, ma con le funzioni principali al posto loro.

Ma cosa c’è dietro?

L’architettura di JS/UIX è ingegnosa e al tempo stesso semplice: shell, filesystem e programmi sono realizzati grazie a una miscela di DHTML, CSS nella pagina principale e di sette file javascript separati che vengono invocati nel sorgente HTML (li troviamo subito prima del tag <BODY>).
Questi sono
– jsuix_gui.js (con le funzioni DHTML e dati per l’interazione)
– jsuix_krnl.js (con le funzioni del kernel)
– jsuix_shell.js (con le funzioni della shell e dei suoi comandi)
– jsuix_cmd.js (con altri comandi)
– jsuix_vi.js (che implementa "vi")
– jsuix_rc.js (con i dati per i file per l’embedding all’avvio)
– jsuix_man.js (con i dati per "man&quot,)

La sequenza di boot di JS/UIX

In quanto fatto in Javascript JS/UIX ha però anche dei lati negativi, che ne limitano i confini e quindi gli usi.
La prima è che per questo linguaggio non esistono dei socket propri: implementare comunicazioni di rete (ad esempio un client SSH) non è possibile se non con hack e appoggiandosi a componenti esterne sul server o aggiunte specifiche in ActiveX o per Mozilla. Altra limitazione è la non persistenza dei dati: possiamo creare, editare e salvare dati, ma se chiudiamo la pagina tutto ciò che abbiamo creato svanisce. Una soluzione parziale è l’uso del copia e incolla, alla base anche di due comandi di JS/UIX (fexport e fimport) che esportano e importano, in una finestra del browser, i dati della nostra sessione, permettendo uno spartano salva e ripristina.

Perché? A cosa serve?

La prima risposta ci viene dall’autore, l’austriaco Norbert Landsteiner: "perché era possibile". JS/UIX è sicuramente un buon biglietto da visita per Landsteiner (che si propone come webdesigner), ma ha anche diverse potenzialità. Tra queste che diventi la base per per sviluppare o lavorare su sistemi remoti. oppure che venga usato per corsi di formazione o test come strumento di insegnamento e simulazione di scenari. Nel frattempo perché non divertirci a esplorare e mettere alla prova questo incredibile e curioso hack?

C’è anche l’utente root

Una delle migliorie recenti di JS/UIX, che mentre scriviamo è arrivato alla versione 0.44, è la possibilità di entrare come superutente, cioè root. E’ al momento l’unico account che richiede una password, che troviamo al punto 2 della documentazione.
Utilità e vantaggi? Per ora nessuno, ma volete mettere essere root del sistema?

Posta e browser

Tra i comandi di JS/UIX ne troviamo due per gestire posta e navigazione web. Mail e browse non sono però ciò che sembrano ma fanno tesoro del trovarsi in una finestra di un navigatore web. Il primo comando non invoca un mailer a linea di comando ma il programma di posta sul nostro computer, come fanno i link sulle pagine web.
Qualcosa di simile succede per browse che, seguito da un indirizzo web


browse www.sito.xyz

lo carica in una nuova finestra o tab del nostro navigatore.

Una versione di questo articolo è stata pubblicata su "Hacker Journal" n. 81 del 04/08/2005