Sviluppare partendo da zero un'implementazione della pila di protocolli tcp/ip dalle prestazioni buone quanto le altre implementazioni esistenti non è stato un lavoro semplice. La decisione di non basarsi su una delle implementazioni esistenti è stata presa in un momento in cui sembrava che le implementazioni esistenti sarebbero finite sotto una licenza più restrittiva a causa della sentenza di U.S.L., e quando c'era tanto entusiasmo da volerlo fare diversamente dagli altri e magari anche meglio di quello che era stato già fatto.
Il primo volontario che ha guidato lo sviluppo del codice di rete nel kernel
è stato Ross Biro <biro@yggdrasil.com>
. Ross ha implementato un
insieme di funzionalità semplice ed incompleto ma usabile per la maggior
parte dei bisogni. Queste procedure erano distribuite insieme ad un driver per
la scheda di rete WD-8003. Questo fu sufficiente a far sì che molte
persone iniziassero a provare e sperimentare il software, e alcuni riuscirono
pure a connettere delle macchine ad internet con questa configurazione. Ma nel
frattempo la richiesta di software di rete da parte della comunità Linux
stava crescendo, così che a un certo punto la domanda pressante che
gravava su Ross ed il suo coinvolgimento personale in termini di tempo
superarono a suo giudizio i vantaggi che ne derivavano. Ross lasciò
quindi il suo posto alla guida del gruppo di programmatori. Gli sforzi di Ross
per far partire il progetto e la responsabilità che si era preso di
produrre davvero qualcosa di utile nonostante la situazione fosse controversa,
sono state le cose che hanno catalizzato tutto il lavoro futuro, e sono state
perciò una componente essenziale del successo del prodotto attuale.
Orest Zborowski <obz@Kodak.COM>
ha scritto la prima interfaccia di
programmazione per i socket BSD all'interno del kernel Linux. Questo è
stato un grande passo in avanti, e ha permesso di far funzionare sotto Linux
molte delle applicazioni di rete esistenti senza cambiamenti notevoli.
All'incirca nel medesimo momento Laurence Culhane
<loz@holmes.demon.co.uk>
ha sviluppato i primi driver per supportare
il protocollo SLIP all'interno di Linux. Questo ha permesso a molte persone che
non avevano accesso a reti di tipo Ethernet di provare il nuovo software di
rete.
Ancora una volta, qualcuno prese questo driver e lo mise al lavoro per
collegarsi ad Internet. Questa possibilità diede a molti un'idea delle
possibilità che si sarebbero potute realizzare se Linux avesse avuto un
supporto di rete completo, ed accrebbe il numero di utenti che provavano ed
usavano il software esistente.
Un'altra persona che ha lavorato attivamente nel compito di costruire il
supporto per la rete è stata Fred van Kempen,
<waltje@uwalt.nl.mugnet.org>
.
Dopo un periodo di incertezza che aveva seguito l'abbandono di Ross dalla
posizione di coordinatore dello sviluppo, Fred aveva offerto il suo tempo e
le sue capacità e aveva accettato il ruolo senza alcuna opposizione.
Fred aveva dei piani ambiziosi per la direzione che il software di rete di
Linux avrebbe dovuto prendere, e si preparò a progredire in queste
direzioni. Fred ha prodotto una serie di programmi di rete chiamati `NET-2'
che molte persone sono state in grado di usare proficuamente (il codice `NET'
era quello di Ross). Fred ha introdotto un certo numero di innovazioni
nell'agenda dello sviluppo, come l'interfaccia dinamica per le periferiche, il
protocollo AX.25 per le radio amatoriali e un'implementazione del networking
progettata più modularmente.
Il codice NET-2 di Fred fu usato da un numero molto elevato di entusiasti, ed
il loro numero cresceva in continuazione mentre si diffondeva la voce che
questa implementazione funzionava bene. Il software di rete a questo punto
esisteva ancora sotto forma di un ampio numero di modifiche da applicare alla
distribuzione ufficiale del kernel, non essendo ancora stato incluso in tale
distribuzione.
I documenti NET-FAQ e successivamente NET-2-HOWTO descrivevano la procedura
(allora abbastanza complessa) per avere tutto quanto funzionante. L'impegno di
Fred era volto allo sviluppo di innovazioni all'implementazione di rete
convenzionale e questo gli prendeva tempo. La comunità di utenti stava
diventando impaziente aspettando qualcosa che funzionasse in modo affidabile e
che soddisfacesse l'80% degli utenti. Come era successo con Ross, la pressione
su Fred come coordinatore del progetto crebbe considerevolmente.
Alan Cox <iialan@www.uk.linux.org>
propose una soluzione al problema
che avrebbe dovuto risolvere le controversie. Egli propose di prendere il
codice NET-2 di Fred e di sistemarlo, rendendolo affidabile e stabile
così da soddisfare gli utenti impazienti, nel contempo avrebbe
alleggerito la pressione su Fred permettendogli di continuare il suo lavoro.
Alan si mise a far ciò con un certo successo e la sua versione del
codice di rete per Linux prese il nome di `Net-2D(ebugged)'. Il codice
funzionava in maniera affidabile in molte configurazioni comuni e la base degli
utenti era contenta. Alan chiaramente aveva idee e capacità proprie da
mettere nel progetto e in molte delle discussioni relative alla direzione che
il codice NET-2 stava prendendo. Si svilupparono allora due diverse scuole di
pensiero nella comunità Linux: una che seguiva la filosofia "farlo
funzionare subito, migliorarlo in seguito" e un'altra che diceva "farlo meglio
subito". Linus fece la parte dell'arbitro e incluse il codice di Alan nella
distribuzione ufficiale del kernel. Questo pose Fred in una posizione
difficile. Ogni sviluppo innovativo avrebbe mancato della larga base di utenti
che testassero ed usassero attivamente il codice, e questo avrebbe significato
un rallentamento e certe difficoltà nello sviluppo. Fred continuò
a lavorare per un breve periodo e alla fine abbandonò, così Alan
si trovò ad essere il nuovo leader dello sviluppo del supporto di rete
nel kernel di Linux.
Donald Becker <becker@cesdis.gsfc.nasa.gov>
ha rivelato presto le
sue capacità negli aspetti di più basso livello del networking, e
ha prodotto un grosso campionario di driver per schede di rete: quasi tutte
quelle incluse nei kernel attuali sono state sviluppate da Donald. Ci sono
state altre persone che hanno contribuito in maniera significativa, ma il
lavoro di Donald è stato notevole, per cui merita una menzione
particolare.
Alan ha continuato a migliorare il codice NET-2-Debugged per un certo tempo,
mentre lavorava nell'implementazione di alcune delle cose nella lista delle
priorità che non erano ancora state affrontate.
Prima che il sorgente del kernel 1.3.*
diventasse maturo, il codice di
rete nel kernel era passato alla distribuzione NET-3, sulla quale sono basate
le versioni attuali. Alan ha lavorato su molti aspetti del codice di rete e ha
migliorato il codice in molte direzioni con l'aiuto di un certo numero di altre
persone di talento nella comunità Linux. Alan ha prodotto i dispositivi
di rete dinamici e le prime implementazioni standard di AX.25 e IPX.
Alan ha continuato a giocare col codice, ristrutturandolo e migliorandolo
lentamente fino allo stato in cui si trova oggi.
Il supporto per PPP è stato aggiunto da Michael Callahan
<callahan@maths.ox.ac.uk>
e Al Longyear
<longyear@netcom.com>
. Anche questa è stata un'innovazione
significativa per aumentare il numero di persone che usano Linux attivamente
nel networking.
Jonathon Naylor <jsn@cs.nott.ac.uk>
ha contribuito migliorando in
maniera significativa il codice AX.25 di Alan, aggiungendo il supporto per i
protocolli NetRom e Rose. La capacità di usare AX.25, NetRom e Rose
è un fatto significativo in se, poiché nessun altro sistema
operativo può vantare il supporto nativo per tutti questi protocolli.
Naturalmente, ci sono state altre centinaia di persone che hanno contribuito significativamente allo sviluppo del software di rete per Linux. Alcune di queste le incontrerete più avanti nelle sezioni relative alle singole tecnologie, altre persone hanno fornito moduli, driver, correzioni di errori, suggerimenti, risultati di test e supporto morale. In ognuno di questi casi ciascuno può dire di aver giocato la sua parte e di avere offerto quello che poteva. Il codice di rete del kernel è un esempio eccellente dei risultati che si possono ottenere dallo stile di lavoro anarchico della comunità Linux. Se questo non vi ha ancora meravigliato, lo farà presto: lo sviluppo non si è fermato.
Ci sono vari posti in cui si possono trovare delle buone informazioni riguardo all'uso delle reti in Linux.
Alan Cox, il coordinatore attuale del codice di rete nel kernel, ha una pagina WWW che contiene informazioni sullo stato attuale e sul nuovo sviluppo del supporto di rete per Linux. La sua pagina è: www.uk.linux.org.
Un'altra risorsa interessante è un libro scritto da Olaf Kirch,
intitolato "Network Administrators Guide
". È un lavoro del
Linux Documentatation Project
e può essere letto interattivamente presso
Network Administrators Guide, versione HTML. Oppure può
essere scaricato tramite ftp in vari formati dall'archivio ftp dell'LDP su
sunsite.unc.edu LDP ftp archive.
Il libro di Olaf è molto completo e fornisce una buona panoramica di
alto livello della configurazione di rete sotto Linux.
Esiste un newsgroup dedicato alla rete e argomente connessi nella gerarchia di gruppi relativi a Linux. È: comp.os.linux.networking
C'è una mailing list alla quale ci si può iscrivere, nella quale si possono chiedere informazioni a proposito del networking sotto Linux. Per iscriversi occorre mandare un messaggio di posta elettronica:
To: majordomo@vger.rutgers.edu
Subject: anything at all
Message:
subscribe linux-net
Nelle varie reti IRC si trovano spesso dei canali #linux
sui quali si
possono trovare persone in grado di rispondere a domande sull'argomento.
Ogni volta che si presenta un problema bisogna ricordare di includere il maggior numero possibile di dettagli riguardo ai problemi. In particolare, occorre includere la versione del software che si sta usando, in particolare la versione del kernel, la versione dei programmi come pppd e dip, e la natura esatta del problema che si è verificato. Questo vuol dire prendere nota della sintassi esatta di ogni messaggio di errore ricevuto, e di tutti i comandi che si stanno invocando.
Per chi sta cercando informazioni introduttive e pratiche sul networking tcp/ip in genere, io raccomando di dare un'occhiata ai seguenti documenti:
questo documento esiste sia in versione testo sia in versione postscript.
questo documento esiste sia in versione testo sia in versione postscript.
Internetworking with TCP/IP, Volume 1: principles, protocols and architecture, by Douglas E. Comer, ISBN 0-13-227836-7, Prentice Hall publications, Third Edition, 1995.
[tradotto in italiano per Jackson Libri N.d.T.]
Per chi vuole imparare come scrivere applicazioni di rete in un ambiente compatibile a Unix, raccomando altrettanto caldamente:
Unix Network Programming, by W. Richard Stevens, ISBN 0-13-949876-1, Prentice Hall publications, 1990.
Una seconda edizione di questo libro sta per apparire sugli scaffali delle librerie; la nuova edizione è composta da tre volumi: sito web di Prentice-Hall per ulteriori informazioni.
Si può anche provare a guardare nel newsgroup comp.protocols.tcp-ip.
Una fonte importante di informazione prettamente tecnica riguardo a Internet e alla suite di protocolli tcp/ip sono gli RFC. RFC è un acronimo che significa `Request For Comment' ed è il modo convenzionale per pubblicare e documentare gli standard sui protocolli Internet. Ci sono svariati archivi di RFC, molti di questi sono siti ftp mentre altri forniscono accesso via WWW con un motore di ricerca che permette di cercare le parole chiave in un database associato agli RFC.
Un possibile luogo ove trovare gli RFC è il database RFC di Nexor.