Per parecchie settimane ho strizzato fetchmail e mi rendevo conto che il disegno dell'interfaccia era utile, ma sporco, inelegante e con troppe opzioni che si sovrapponevano: in particolare mi davano fastidio le opzioni per scaricare laposta su un file o sullo standard output, ma non riuscivo a capire perch�.
(se non vi interessano i tecnicismi di Internet,
potete saltare i prossimi due paragrafi).
Quello che vedevo era che il popclient stava tentando di fare troppe cose.
Era stato disegnato per essere sia un MTA (mail transport agent) che un LDA (local delivery agent).
Con il forward SMTP poteva abbandonare il lavoro di MDA
e diventare un puro MTA, trattamdo la posta di altri programmi
per una consegna locale proprio come fa sendmail.
Perch� complicarsi la vita con la complessit� di configurare un MDA o attivare le funzioni su una mailbox quando il porto 25 � pressocch� garantito al primo posto su una piattaforma che gestisce TCP/IP? Specialmente quando ci� significa che la posta comunque appare come inviata da un SMTP ed � proprio ci� che vogliamo.
Qui ci sono parecchie lezioni. Primo, il concetto di SMTP-forwarding � stato il primo risultato che ho ricavato consciamente emulando il metodo Linux. Un utente mi ha dato l'idea, io dovevo solo capire le implicazioni.
11. Il modo migliore di avere buone idee � di riconoscere le buone idee altrui. A volte quest'ultima � migliore.
E' interessante notare che presto si capisce che pi� dichiari quanto devi alla gente, pi� ti tratterammo come quello che ha fatto tutto e che sei solo modesto sul tuo genio innato! (tutti possiamo vedere come questo succede per LINUX!)
Quando ho parlato alla conferenza Perl del 1997, Larry Wall, hacker straordinario sedeva in prim fila � grid�, in stile religioso: 'Puoi dirlo, puoi dirlo, fratello!' Tutti risero, anche perch� sapevano che era uno degli inventori di Perl.
Dopo alcune settimane in cui ho condotto il progetto con questo spirito, ho cominciato ad avere questa ammirazione non solo dai miei utenti, ma anche da altri. Ho messo da parte alcune di queste email e le guarder� se mi verr� da chiedermi se la mia vita ha avuto un senso :-).
Ma ci sono due lezioni fondamentali, non politiche, che sono comuni ai progetti di ogni tipo.
12. Spesso le soluzioni pi� innovative provengono dall'aver capito che la tua idea del problema era sbagliata.
Avevo cercato di risolvere il problema sbagliato continuando a sviluppare popclient come una combinazione MTA/MDA con tutti i tipi di modi locali di smistamento. Il progetto di Fetchmail aveva bisogno di essere ripensato come puro MTA, una parte del normale SMTP.
Quando ti scontri contro un muro nello sviluppo, quando ti trovi a pensare a dopo le prossima patch, spesso � ora di pensare non se stai dando la risposta giusta, ma se ti stai ponendo la domanda giusta. Forse il problema deve essere reinquadrato.
Bene, avevo reinquadrato il mioproblema. Chiaramente la cosa giusta da fare era (1) scrivere il supporto per il reinstradamento SMTP per un generico driver, (2) renderlo il modo default e (3) eventualmente buttar via tutti gli altri modi di consegna, specialmente le opzioni 'deliver-to-file' e 'deliver-to-standard-output'
Per un po' ho esitato sul passo 3, temendo di molestare gli utenti popclient da lungo tempo. In teoria essi potevano immediatamente passare al forward: in pratica la transizione poteva essere caotica.
Ma quando l'ho fatto, i benefici si sono dimostrati enormi. Il vecchio codice spar�, la configurazione divenne molto pi� semplice: nessun rovello, nessuna preoccupazione per la protezione dei file.
Inoltre, il solo modo di eliminare la posta dispersa: se mandi la posta su file e il disco � pieno, la posta va persa. Questo non pu� accadere con il nuovo meccanismo, perch� l'Ok viene dato solo se la posta � stata consegnata.
Ancora, le prestazioni sono migliorate (sebbene non in modo da potersene accorgere in una sola prova). Infine si � semplificata molto la pagina del manuale.
In seguito avrei dovuto portare indietro la consegna via un locale MDA specificato dall'utente, per assicurare alcune oscure situazioni generate dallo SLIP dinamico. Ma ho trovato un modo molto pi� semplice.
La morale? Non esitate a buttar via caratteristiche annose quando potete farlo senza perdere la funzionalit�. Antoine de Saint-Exupéry (aviatore e disegnatore di aerei, ma non autore di libri per bambini) ha detto:
13. ``La perfezione si raggiunge non quando non c'� pi� nulla da aggiungere, ma quando non c'� pi� nulla da togliere''
Quando il codice diventa migliore e pi� semplice, allora sapete che � corretto. Nel mio caso, il progetto fetchmail ha acquisito una sua identit�, differente dal popclient ancestrale.
Era ora di cambiare il nome. Il nuovo progetto assomigliava molto di pi� al duale di sendmail: sono entrambi MTA, sendmail spinge le consegne, questo nuovo popclient le tira. Cos� l'ho chiamato fetchmail.
C'� un lezione pi� generale in questa storia Non solo il debugging � parallelizzabile, ma anche lo sviluppo e l'esplorazione dello spazio del progetto. Quando lo sviluppo � iterativo in modo rapido, pu� diventare un caso speciale del debugging, in quanto trova 'buchi di omissione' nel progetto.
Anche ad alto livello concettuale pu� essere molto valido avere la riflessione di molti co-sviluppatori che si muovono liberamente nello spazio del progetto vicino al prodotto. Si pensi a come un lago trova l'emissario, o meglio ancora a come gli scarafaggi trovano il cibo: esplorazione per diffusione, seguita da sfruttamento mediato da uno strumento di comunicazione scalabile. Come con Harry Hochheiser e me, uno dei tuoi compagni pu� trovare facilmente una cosa vicina a te, che tu non vedevi perch� era troppo vicina per metterla a fuoco.