# LyX

LyX ($\mathbf {L} \!_{\mathbf {\displaystyle Y} }\!\mathbf {X}$) è un software libero con interfaccia grafica per elaborare testi. Viene descritto dagli sviluppatori non come un word processor ma come un document processor in quanto permette di concentrarsi sulla struttura del testo invece che sul suo layout. La fase di stampa viene gestita producendo codice L$^A$T$_E$X, con il quale è possibile una stampa di qualità elevata. Gli sviluppatori ci tengono a sottolineare che si tratta di un editore WYSIWYM (What You See Is What You Mean) e non WYSIWYG (What You See Is What You Get).
È particolarmente adatto all'elaborazione di testi scientifici, ma si sta diffondendo in ambito umanistico e in generale accademico, grazie anche alla possibilità di gestire database bibliografici (attraverso BibTeX), ed è spesso usato per la scrittura di romanzi, specialmente eBook. Si pone come alternativa a L$^A$T$_E$X nel senso che pur producendo codice L$^A$T$_E$X evita di doverlo scrivere, il che è particolarmente vantaggioso in documenti con formule matematiche o tabelle. Gli sviluppatori in realtà non gradiscono troppo la definizione di «front end di L$^A$T$_E$X», giustificando ciò con il fatto che non memorizza il documento con codice L$^A$T$_E$X ma con un proprio formato, e anche dal fatto che si possono esportare i documenti anche in altri formati, come ad esempio DocBook. La presenza di L$^A$T$_E$X è comunque indispensabile ed è innegabile che LyX trovi i suoi utenti in particolar modo tra utilizzatori di L$^A$T$_E$X. Infatti in diversi siti personali, di persone anche esterne al progetto LyX, il programma viene praticamente sempre citato in ambito L$^A$T$_E$X. Lo stesso vale per le diverse recensioni che si possono trovare nelle riviste o, più raramente, nei libri.
È disponibile soprattutto per sistemi operativi con X11 (tipicamente Unix e GNU/Linux), ma esistono anche versioni binarie per Win32 e Mac OS X.

## Storia

LyX nasce nel 1995 come tesi di laurea di Matthias Ettrich, iniziatore e attuale coordinatore del più famoso progetto KDE. Lo scopo iniziale era un programma che permettesse di fare dei "documenti belli". Il progetto nasce con il nome LyriX in ambiente Unix, sui calcolatori dell'Università di Tübingen, dove l'iniziatore era studente di informatica. Dopo pochi mesi Ettrich rende pubblico il proprio progetto, distribuendolo a partire dalla versione lyrix-1.03 del 7 luglio 1995 con la licenza GPL. In un lungo thread svoltosi nei mesi di giugno e luglio 1995 nel gruppo di discussione comp.os.linux.misc, vengono discussi i primi progetti di wordprocessor WYSIWYG per GNU/Linux e il 29 giugno compare il primo riferimento a LyriX, primo nome di LyX. Dalla discussione che ne segue si vede che LyriX benché dichiarato dall'autore ancora in fase alpha, è considerato abbastanza maturo per essere usato.
Nel 1996 — nell'ambito del nuovo progetto KDE — Ettrich crea KLyX, una versione di LyX per KDE, che si basa sulle librerie Qt della Trolltech. Dalla versione 1.3 il frontend Qt viene integrato nella distribuzione standard di LyX, fino a quando con la versione 1.5 le Xforms usate in precedenza vengono abbandonate del tutto, risolvendo definitivamente dei problemi legati alla licenza di distribuzione.

## La distribuzione

LyX può essere usato sotto diverse piattaforme Unix (GNU/Linux, macOS, BSD, Irix, Solaris e altre), OS/2 e Windows. Non tutte le funzionalità sono supportate da tutte le piattaforme. In particolare, il LyX-server non è supportato da Win32 in quanto utilizza caratteristiche della gestione dei file inesistenti sotto Windows.
LyX può essere scaricato dal sito ufficiale e da suoi mirror, sia il sorgente che le versioni compilate; inoltre è incluso in tutte le principali distribuzioni Linux, in cui è possibile installarlo direttamente dal gestore di pacchetti.

### Le forme di comunicazione e informazione

LyX, come d'altronde la stragrande maggioranza dei prodotti opensource, non viene pubblicizzato in senso convenzionale. La sua diffusione è dunque legata ad altre forme di informazione. Una è la presenza stessa nelle distribuzioni GNU/Linux, in quanto il software di queste è organizzato in pacchetti. LyX viene compreso ad esempio nel pacchetto dedicato a L$^A$T$_E$X e viene presentato come un "wordprocessor WYSIWYG basato su L$^A$T$_E$X". Il target in questo caso sono le persone interessate a L$^A$T$_E$X e non persone alla ricerca generica di un programma per videoscrittura.
Un'ulteriore forma per aumentare la popolarità di LyX sono articoli su riviste o libri. Si tratta di riviste e testi dedicate a GNU/Linux o L$^A$T$_E$X. A parte le 25 pagine nel libro di Kofler, per il resto si tratta di una presentazione più o meno ampia del programma, indicando a volte il sito Internet oppure includendo il programma nel CD allegato. Inoltre esistono articoli o citazioni pubblicate su Internet da parte di siti specializzati in notizie e dunque visitati da utenti che di per sé possono persino ignorare l'esistenza di T$_E$X. Il sistema di ipertesto permette a tali articoli di rinviare direttamente al sito di LyX o ad altre risorse collegate. Gli articoli trovati risultavano nella stragrande maggioranza presenti in siti specializzati per GNU/Linux.
Esiste pure la possibilità che una persona utilizzi un motore di ricerca ricercando un programma o altro, senza conoscere l'esistenza di LyX. Interrogando i motori di ricerca si è visto che una ricerca riguardante L$^A$T$_E$X e WYSIWYG porta ottimi risultati per LyX, ma anche una ricerca per un wordprocessor sotto GNU/Linux ha buone probabilità di indicare LyX.
A queste forme di pubblicità bisogna aggiungere un'ultima risorsa direttamente controllabile dal LyX-Team: i gruppi di discussione, in particolar modo comp.os.linux.announce. Intervistando gli utilizzatori di LyX è risultato che le succitate modalità sono state effettivamente la fonte per la scoperta di LyX, alle quali bisogna aggiungere il passaparola tra amici o colleghi. Le due modalità principali risultano essere Internet, specialmente con i motori di ricerca, e la presenza di LyX dentro le distribuzioni GNU/Linux.
Per concludere si possono citare le occasioni nelle quali singoli collaboratori del progetto presentano LyX a convegni o incontri riguardanti l'Open Source in genere e GNU/Linux in particolare.

## Il processo di sviluppo di LyX
### La genesi del progetto
#### Gli inizi

LyX nasce nel 1995 come tesi di laurea di Matthias Ettrich. Già dal primo anno cominciano le prime collaborazioni, alcune delle quali durano fino alle attuali versioni. Nel 1998 compaiono raccolte di software su CD che includono per la prima volta anche LyX.
Tra il 1997 e il 1998 si sviluppa una discussione su quali librerie grafiche utilizzare. Di fatto vengono proposte le librerie Qt e gtk+, la prima non ancora libera, l'altra nata già GPL. In quest'ambito Ettrich porta LyX verso il progetto KDE creando KLyX, ma la scelta della libreria Qt porta a discussioni sul fatto che non essendo tali librerie libere, di fatto veniva violata la licenza GPL con la quale veniva distribuito LyX. D'altronde anche l'utilizzo delle librerie xforms violava la GPL. Da qui la scelta di licenziare LyX con una GPL modificata.
KLyX esce in marzo 1998, ma non ha tra gli sviluppatori il successo sperato, in quanto gli sviluppatori di LyX non passano al nuovo progetto e la collaborazione tra i due non è intensa. Questa biforcazione del codice mette però in evidenza l'utilità di sviluppare LyX in modo tale da rendersi indipendenti dall'interfaccia grafica (GUII — GUI Independence). L'idea e la speranza era di trovare una sufficiente collaborazione sia in campo KDE che in campo Gnome e, in attesa di raggiungere l'indipendenza dalla GUI, mantenere le xforms come una delle possibili implementazioni. I tempi si rivelano più lunghi del previsto, anche se nel 2001 l'indipendenza sembra vicina al successo. Comunque sia, una delle prime conseguenze della decisione a favore della GUI è che si separa lo sviluppo del kernel dallo sviluppo riguardante l'interfaccia grafica.

#### La prima svolta di progettazione

In seguito alle discussioni svoltesi tra gli sviluppatori all'inizio del 1998, anche in seguito alla distribuzione di KLyX, venne deciso di sviluppare LyX in modo tale, da separare il codice di LyX in senso stretto (LyX core o kernel) dal codice necessario per comunicare con l'utente. Questa separazione è cominciata di fatto con la versione (non stabile) 0.13.
La Graphical User Interface (GUI) è composta, oltre che dalla finestra principale che permette di vedere e scrivere il testo, dai menù, dalla barra degli strumenti, il minibuffer, i popup e quant'altro venga usato per comunicare con l'utilizzatore. In LyX, idealmente, la parte GUI è tutto ciò che non serve quando si usa LyX per processi batch.
L'indipendenza dalla GUI implica che gli sviluppatori possono ignorare il lavoro svolto da chi implementa l'interfaccia con l'utente (che potenzialmente potrebbe essere anche di tipo testo e non grafico), mentre gli sviluppatori della GUI possono usare un frontend 7 di proprio piacimento, senza conoscere i dettagli del LyX core. La parte che mette in contatto i due aspetti è il cosiddetto back end.
Tale indipendenza permette così di avere lo stesso programma, LyX, con interfacce diverse, evitando in questo modo il rischio di forking che si concretizzò con KLyX e che avrebbe potuto rendersi necessario con il progetto CJK-LyX. La scelta di separare il più possibile il kernel dall'interfaccia utente rende più facile il port verso sistemi operativi diversi da Unix e GNU/Linux, come ad esempio OS/2 e Windows, aprendo la possibilità ad un port nativo 8. Gli sviluppatori di LyX non hanno seguito completamente la soluzione scelta dal progetto opensource Mozilla, in quanto ritenuto tra l'altro troppo lento, pur considerandolo un punto di riferimento.
L'intenzione è di rendere l'indipendenza il più trasparente possibile dal punto di vista del LyX core. Inoltre dovrebbe rendere possibile lo sviluppo multi-toolkit, in modo che possano esistere diverse versioni di LyX che si distinguono soltanto per l'interfaccia con l'utente, integrandosi meglio con l'ambiente scelto dai porter: KDE piuttosto che Gnome in ambito GNU/Linux, ma anche OS/2 piuttosto che Windows per quanto riguarda i più noti sistemi operativi grafici proprietari.
La GUI non è ancora completa, si tratta infatti di modificare il codice un modo graduale. Non è stato neanche completata una GUI che non usi le xforms che rimangono di fatto l'implementazione di riferimento. Diversi gruppi lavorano alle seguenti librerie come alternativa alle xforms: Gtk/Gnome, Qt/KDE e Qt2. Da quanto pubblicato sul sito si può notare come i diversi gruppi lavorino con priorità simili ma non uguali, in quanto alcune parti sono state implementate da tutti e tre i gruppi, altre invece solo da uno o due di loro. Trattandosi di un progetto che per definizione coinvolge un numero imprecisato di sviluppatori, il LyX-Team ha scritto un'ampia documentazione destinata agli altri (potenziali) sviluppatori.

#### Le versioni

Nell'arco di quasi cinque anni le linee di codice sono sestuplicate. Al crescere della complessità è corrisposta una equivalente organizzazione dei file i quali mantengono nel tempo certe caratteristiche: sono formati mediamente da 80-90 linee di codice ciascuno, corrispondenti a 20-25 istruzioni elementari con una media di 4 linee di codice per ogni istruzione. Un decimo del codice è formato da commenti.
Al crescere del numero di file nei quali è stato scomposto il codice complessivo, non corrisponde una crescita della complessità. Infatti si registrano mediamente 5-6 #include pro file, sia per le versioni di più modeste dimensioni come la 0.12.0 che per quelle maggiori come la 1.1.6. Stabile pure il rapporto tra istruzioni elementari e l'ammontare di variabili definite, che passa però da una media di 100 istruzioni pro variabile nelle versioni tra la 0.12.0 e la 1.1.4 ad una media di 70 istruzioni pro variabile nelle versioni successive.
Quanto detto indica che al crescere del progetto la complessità è aumentata in modo quasi lineare. Il repentino cambiare di alcuni indicatori mostra come i passaggi dalla versione 0.12 alla versione 1.0 e poi dalla versione 1.1.4 alla versione 1.1.5 siano stati i più intensi per quanto riguarda la programmazione.
La versione stabile pubblicata il 20 maggio 2010 è la 1.6 revisione 6 mentre nove giorni dopo è stata resa disponibile la versione 1.6.6.1 con un importante bugfix allo spellchecker che non rilevava gli errori rimanenti nel documento dopo una correzione. Altre pubblicazioni si sono susseguite con vari bugfix fino alla versione 1.6.10.
L'8 maggio 2011, dopo la pubblicazione di diverse release candidate, gli sviluppatori sono fieri di presentare una nuova versione del programma, la 2.0.0: questa comprende numerose nuove caratteristiche e nuovi strumenti che ne facilitano l'utilizzo. Il 5 settembre 2011, viene pubblicato un nuovo aggiornamento di manutenzione che porta il software alla versione 2.0.1.
LyX è tuttora in sviluppo e sul sito web ufficiale è possibile visionare la roadmap delle versioni pianificate per immediato futuro.

### L'organizzazione del progetto

Non esiste un'organizzazione aziendale che si occupa dello sviluppo e la distribuzione di LyX. Si tratta invece di un'organizzazione informale, dove alcune decine di persone collaborano al progetto in modo gratuito e senza impegni formali. Complessivamente quasi un centinaio di persone, da tutti e cinque continenti ma in prevalenza europei, con più di quarant'anni di differenza tra il più anziano e il più giovane ma soprattutto tra i 25 e i 35 anni, hanno contribuito o contribuiscono tuttora ad alcune parti del progetto. Praticamente l'unica lingua di comunicazione è l'inglese.

#### I gruppi

Ci sono tre gruppi principali:
* gli sviluppatori o il developer team.
* coloro che si occupano della documentazione (per gli utenti) o documentation-team.
* i traduttori e chiunque si occupi dell'internazionalizzazione di LyX.
Una singola persona può senz'altro contribuire ai lavori di più di un gruppo, come effettivamente avviene.
I vari gruppi procedono in modo autonomo. I contatti sono dovuti più che altro al fatto che coloro che effettuano la documentazione necessitano di saperne di più da parte degli sviluppatori, e, analogamente, coloro che traducono i "manuali" hanno bisogno di informazioni supplementari da parte di chi cura la documentazione.

### Il Developer Team

È formato da una ventina di programmatori, di cui una manciata sono coloro che vi lavorano con più impegno, da più tempo e pertanto vi svolgono anche il ruolo di "coordinatori" o di "decisori" di un certo rilievo.

#### Il gruppo centrale degli sviluppatori

Lars Gullik Bjonnes era, prima dell'introduzione del CVS, il patch-maintainer, nel senso che le varie patches venivano spedite a lui, che le metteva poi insieme. Questa responsabilità gli derivava dal passaggio delle consegne avvenuto in seguito all'impegno di Ettrich a favore del progetto KDE. Con l'introduzione del CVS Bjonnes è colui che ne gestisce i diritti di scrittura. È inoltre lui che cura l'hardware (e il software) che ospita il sito principale www.lyx.org (compresi i sottodomini). Gli viene riconosciuto di fatto un ruolo maggiore sia perché partecipa al progetto fin dagli inizi, sia per le sue capacità, pur rifiutando l'etichetta di "capoprogetto".
Alcuni sviluppatori come Jean-Marc Lasgouttes, Jürgen Vigna e, per alcuni ambiti particolari, Angus Leeming e Allan Rae, hanno un particolare peso quando devono essere prese decisioni che riguardano più parti del codice o il progetto nel suo complesso (vedasi oltre, sui processi decisionali).
Un'altra decina di sviluppatori collaborano in modo continuativo al progetto ed hanno diritti di scrittura su alcune o tutte le directory del CVS. Altri ancora, pur ricevendo gli annunci tramite una mailinglist riservata, non possono parteciparvi (vedasi oltre, sui metodi di comunicazione). Infine vi sono sviluppatori che offrono sporadicamente contributi o patches, ma che non si può dire appartengano al gruppo LyX vero e proprio. Quando si vede che uno di questi collaboratori invia in modo più assiduo dei contributi ritenuti validi, gli viene proposto di entrare nella lista riservata degli sviluppatori oppure gli si assegnano i diritti di scrittura su una directory del CVS.
Come si può vedere nel riquadro nella pagina seguente, il gruppo principale degli sviluppatori è formato da persone che di professione si occupano di informatica o di matematica. L'età va dai 25 ai 35 anni, quattro sono sposati. Salvo RAE, l'unico di madrelingua inglese, parlano tutti correntemente almeno una lingua straniera, alcuni anche più di una. Lingua principale di comunicazione è l'inglese, parlato da tutti correntemente.
Salvo Pönitz e Rae, tutti gli altri hanno conosciuto LyX già ai suoi inizi, anche se non tutti hanno cominciato a contribuire al progetto fin dall'inizio, ma comunque da prima del 1999.

#### I processi decisionali

Non esistendo di fatto una vera e propria gerarchia, le decisioni vengono prese tramite consenso che si basa sul tacito e reciproco riconoscimento delle competenze dei colleghi. Solitamente colui che mantiene una directory del CVS può agire in piena libertà fin quando le sue decisioni non incidono sul lavoro altrui. Anche in questi casi però i suoi colleghi possono fare le osservazioni che ritengono opportune, sia riguardo all'implementazione del codice che alla sua leggibilità. Di fatto la responsabilità della decisione da prendere rimane sempre a colui che mantiene la directory.
Decisioni di più ampio respiro vengono discusse pubblicamente sulla mailing list, ove sia i pareri positivi che quelli negativi vengono motivati. La continua discussione fa in modo che venga presa la decisione ritenuta dai più la migliore. Coloro che la pensano diversamente accettano, dissentendo, tale decisione. Non si tratta di una decisione a maggioranza vera e propria, in quanto i pareri dei singoli vengono in qualche modo "pesati" dall'esperienza e competenza e dall'"autorità" di chi li esprime.
I contributi di "esterni" vengono o immediatamente accettati, per esempio in quanto si tratta di patches precise, oppure ne viene discussa l'utilità o meno del contributo, oltre che l'eventuale implementazione. Qualora il contributo non fosse interessante, la discussione si zittisce per mancanza di interesse.
Il singolo programmatore, quando vuole implementare una nuova funzione o effettuare modifiche più o meno ampie al proprio codice, può crearsi una propria sottodirectory all'interno della directory principale del CVS, testare il proprio codice e quando ritiene che questo funzioni, proporlo per un test agli altri e includerlo nella directory principale del CVS (cancellando solitamente la sottodirectory che creò provvisoriamente).

#### La condivisione del codice

Trattandosi di un progetto open source, è evidente che chiunque possa vedere il codice, a maggior ragione gli sviluppatori stessi. Questo non vuol dire però che chiunque abbia i diritti di scrittura su qualsiasi directory del CVS e anche in questi casi, il tacito accordo tra gli sviluppatori è che eventuali modifiche riguardanti codice "altrui" vengano proposte a colui che ne mantiene la directory.