Come diventare un hacker


Dal documento originale: How to be an hacker.

Traduzione aggiornata alla revisione 1.43 del 7 febbraio 2011.


Indice dei contenuti


Perchè questo documento?

In quanto curatore del Jargon File ed autore di qualche altro famoso documento simile, ho spesso ricevuto email con richieste da principianti entusiasti che chiedevano (effettivamente) "Come posso imparare ad essere un mago dell’hacking?".  Nel 1996 avevo notato che non vi erano FAQ o documenti web che rispondevano a questa domanda vitale, quindi ho iniziato questo. Molti hacker ora lo considerano definitivo, e suppongo che lo sia. Comunque, non voglio essere un’autorità esclusiva riguardo a questo argomento; se non ti piace cosa c’è scritto qua, scrivi la tua.

Se stai leggendo una copia di questo documento, l’attuale versione è pubblicata su https://arlandi.design/documents/hacker.html

Nota: c’è una lista di FAQ al fondo di questo documento. Leggila – due volte – prima di inviarmi qualunque domanda via mail riguardo a questo documento.

Numerose traduzioni di questo documento sono disponibili: Arabo, Bielorusso, Cinese (semplice), Danese, Ebraico, Estone, Greco, Inglese (originale), Norvegese, Olandese, Portoghese (Brasile), Rumeno, Spagnolo, Svedese, Tedesco, Turco. e Ucraino. Da notare che, poiché questo documento cambia occasionalmente, potrebbero essere più o meno obsoleti (tranne l’originale, ovviamente).

Il diagramma con cinque pallini dentro nove quadrati che decora questo documento si chiama glider. È un pattern semplice con proprietà sorprendenti nella simulazione matematica chiamata Life, che ha affascinato gli hacker per molto tempo. Penso che rappresenti un emblema degli hacker – astratto, all’inizio misterioso, ma una porta verso un mondo di intricata logica. Leggi di più sul glider qua.

Cos’è un hacker?

Il Jargon File contiene diverse definizioni del termine “hacker”, la maggior parte hanno a che fare con l’esperienza tecnica ed il piacere nel risolvere problemi, oltre che oltrepassare i limiti. Se vuoi sapere come diventare un hacker, allora solo due sono importanti.

C’è una comunità, una cultura condivisa, di programmatori esperti e maghi dei network che ha origine decine di anni fa con i primi esperimenti di minicomputer con time-sharing su ARPAnet. I membri di questa cultura hanno coniato il termine “hacker”. Gli hacker hanno costruito Internet. Gli hacker hanno portato il sistema operativo Unix all’attuale livello. Gli hacker hanno fatto funzionare Usenet. Gli hacker hanno fatto funzionare il World Wide Web. Se sei parte di questa cultura, se hai contribuito al suo sviluppo e altri membri ti chiamano hacker, allora sei un hacker.

La mentalità hacker non è confinata nell’ambito dell’hacking di software. Ci sono persone che applicano il comportamento hacker ad altre cose, come l’elettronica o la musica – anche se in realtà se ne possono trovare nelle alte sfere delle scienze o delle arti. I software hackers riconoscono uno spirito simile altrove, chiamandolo hacking allo stesso modo – e alcuni sostengono che la natura hacker sia indipendente dall’ambito in cui si lavora. Ma nel resto di questo documento ci soffermeremo sulle conoscenze e le abilità dei software hacker, e sulle tradizioni della comunità da cui è nato il termine “hacker”.

C’è un altro gruppo di persone che si fanno chiamare hacker senza problemi, ma non lo sono. Queste persone (soprattutto adolescenti maschi), mossi dalla volontà di bucare sistemi e modificare linee telefoniche. I veri hacker li definiscono “crackers” e non hanno niente a che vedere con loro. I veri hacker di solito sostengono che i cracker siano pigri, irresponsabili, non molto brillanti, e credono che infrangere sistemi di sicurezza faccia diventare hacker tanto quando saldare automobili faccia diventare ingegneri di automobili.

La differenza principale è questa: gli hacker creano, i cracker distruggono.

Se vuoi diventare un hacker, continua a leggere. Se vuoi diventare un cracker, dai un’occhiata alle discussioni su alt.2600 per provare quanto tu non sia così intelligente. E questo è tutto ciò che ho da dire sui cracker.

Il comportamento hacker

  1. Il mondo è pieno di affascinanti problemi da risolvere.
  2. Nessun problema dovrebbe mai essere risolto due volte.
  3. La noia e la fatica fanno male.
  4. La libertà è bella.
  5. Il comportamento non sostituisce la competenza.

Gli hacker risolvono problemi e creano cose, e credono nella libertà e nell’aiuto volontario. Per essere accettato come hacker, devi credere i questi comportamenti come se fossero tuoi. E per comportarti di conseguenza, devi veramente crederci.

Ma se credi che coltivare la mentalità hacker sia un modo per venire accettati nella cultura, stai sbagliando. Diventare la persona che crede in queste cose è importante per te – ti aiuta ad imparare e ti mantiene motivato. Come in tutte le arti creative, la via migliore per diventare un maestro è imitare la mentalità del maestro – non solo a livello intellettuale, ma anche emozionale.

O, come spiega il seguente poema Zen moderno:

Per seguire il cammino:
cerca il maestro,
segui il maestro,
cammina con il maestro,
guarda oltre il maestro,
diventa il maestro.

Quindi, se vuoi diventare un hacker, ripeti i seguenti punti finché non ci credi:

1. Il mondo è pieno di affascinanti problemi da risolvere.

Essere un hacker è molto divertente, ma è un divertimento che necessita di molto sforzo. Lo sforzo ha bisogno di motivazione. Gli atleti di successo ottengono la giusta motivazione nel piacere fisico di rendere performanti i loro corpi, nello spingersi oltre i propri limiti fisici. Allo stesso modo, per essere un hacker, devi essere appassionato dal risolvere i problemi, affinare le tue conoscenze ed esercitare la tua intelligenza.

Se non sei la persona che sente tutto ciò naturalmente, lo dovrai diventare per essere un hacker. Oppure vedrai la tua energia dedicata all’hacking minata da distrazioni come il sesso, i soldi e l’approvazione da parte della società.

(dovresti anche sviluppare una fiducia nella tua capacità di apprendere – fiducia che ti permetterà di imparare qualcosa da una piccola parte di problema, anche se non avrai le conoscenze necessarie per risolverlo – e così via, finché non hai finito)

2. Nessun problema dovrebbe mai essere risolto due volte.

Le menti creative sono una risorsa di grande valore ma limitata. Non dovrebbero essere sprecate per reinventare la ruota con tutti i problemi affascinanti che ci sono al mondo.

Per comportarti come un hacker, devi sapere che il tempo di ragionamento degli altri hacker è prezioso – così tanto che è quasi un dovere per te condividere le informazioni, risolvere i problemi e quindi pubblicare la soluzione, in modo che altri hacker possano risolvere altri problemi invece di doversi soffermare sempre sugli stessi.

Nota comunque che “nessun problema dovrebbe essere mai risolto due volte” non implica che le attuali soluzioni siano intoccabili, o che ci sia una sola soluzione ad un problema. Spesso si impara molto dal problema appena risolto studiando la soluzione. È perfetto, e spesso necessario, decidere che possiamo fare di meglio. Ciò che non va bene sono le barriere artificiali tecniche, legali ed istituzionali (come i programmi “chiusi”) che impediscono il riutilizzo di una soluzione, costringendo le persone a reinventare la ruota.

(non sei obbligato a pubblicare tutti i tuoi prodotti creativi, anche se gli hacker che lo fanno ricevono il rispetto maggiore dagli altri hacker. È nei principi hacker vendere il tuo prodotto abbastanza da poterti cibare, poter abitare da qualche parte e poter comprare nuovi computer. Va bene usare le proprie conoscenze hacker per supportare una famiglia o anche diventare ricco, l’importante è non dimenticare la fedeltà verso la propria arte e i propri compagni hacker nel farlo).

3. La noia e la fatica fanno male.

Gli hacker (ed in generale le persone creative) non dovrebbero mai annoiarsi o affaticarsi in stupidi e ripetitivi lavori, perché quando avviene vuole dire che non stanno facendo l’unica cosa che possono fare: risolvere nuovi problemi. Questo spreco ferisce tutti. Quindi non solo la noia e la fatica non sono piacevoli, ma sono addirittura malefiche.

Per essere un hacker, devi crederlo abbastanza da riuscire ad automatizzare tutte le parti noiose il più possibile, non solo per te, ma anche per le altre persone (soprattutto per gli altri hacker).

(c’è un’eccezione a questo. Gli hacker di tanto in tanto fanno cose che possono sembrare noiose a chi osserva, ma sempre come esercizio, per ottenere una certa conoscenza o una particolare esperienza che solo in quel modo può essere ottenuta. Ma questo è per scelta – nessuno dovrebbe essere mai costretto in una situazione che lo annoia)

4. La libertà è bella.

Gli hacker sono di natura contro le autorità. Chiunque può darti degli ordini ti può fermare dal risolvere qualunque problema da cui sei affascinato – dandoti, visto come funziona il sistema della autorità, delle ragioni decisamente stupide. Quindi l’autorità dovrebbe essere combattuta ovunque, in modo che non ti soffochi,  e non soffochi gli altri hacker.

(questo non vuole dire combattere tutte le autorità. I bambini devono essere guidati e i criminali arrestati. Un hacker può accettare di sottoporsi ad un’autorità al fine di ottenere qualcosa che vale il tempo speso a ricevere ordini. Ma questo è un affare limitato e conscio; il tipo di arresa personale che le autorità desiderano non è in vendita)

I dittatori prosperano con la censura ed il segreto. Rigettano la cooperazione volontaria e la condivisione di informazioni – a loro piace solo la “cooperazione” che possono controllare. Quindi per diventare hacker, devi sviluppare un’ostilità istintiva verso la censura, il segreto e l’uso della forza o dell’inganno contro le persone adulte e responsabili. E devi essere disposto ad agire in questa convinzione.

5. Il comportamento non sostituisce la competenza.

Per essere un hacker devi sviluppare alcuni di questi comportamenti. Ma solo l’atteggiamento non ti farà un hacker, allo stesso modo non ti farà diventare un atleta o una rock star. Diventare un hacker necessiterà di ingegno, pratica, dedicazione e duro lavoro.

Dunque, devi anche imparare a sfiduciare solo il comportamento, rispettando la competenza in qualunque sua forma. Gli hacker dunque non lasceranno che le persone normali sprechino il loro tempo, lodando invece chi è davvero competente – soprattutto competenza in hacking, anche se qualunque competenza è be accetta. La competenza in qualcosa che pochi possono fare è buona, e la competenza in acutezza mentale, in un mestiere o nella concentrazione è ancora meglio.

Se riverisci la competenza, ti piacerà svilupparla in te stesso – il duro lavoro e la dedicazione diventeranno come un gioco intenso, invece di una fatica. L’atteggiamento è vitale per diventare un hacker.

Conoscenze base per l’hacking

  1. Impara a programmare.
  2. Scarica uno dei sistemi operativi open-source basati su Unix e impara ad usarlo.
  3. Impara ad usare il World Wide Web e scrivere in HTML.
  4. Se non hai una conoscenza appropriata dell’inglese, fai in modo di averla.

L’atteggiamento è vitale per diventare un hacker, ma le conoscenze lo sono ancora di più. Il comportamento non sostituisce la competenza, e c’è sicuramente una serie di conoscenze base che devi avere prima che un hacker possa anche solo sognare di definirti tale.

1. Impara a programmare.

Questa è ovviamente l’abilità base di un hacker. Se non conosci nessun linguaggio di programmazione, consiglio di iniziare con Python. Ha un design pulito, è ben documentato e relativamente leggero per chi inizia. Pur essendo un buon linguaggio per iniziare, non è un giocattolo; è potente, flessibile e ottimo anche per grandi progetti. Ho scritto una dettagliata valutazione su Python. Ottimi tutorial sono disponibili sul sito di Python.

In precedenza consigliavo Java come buon linguaggio da imparare, ma questa critica mi ha fatto cambiare idea (cerca “The Pitfalls of Java as a First Programming Language” nel documento). Un hacker non può, come loro criticano “iniziare a risolvere i problemi come un idraulico in un negozio di hardware”; devi conoscere come i componenti funzionano veramente. Quindi adesso credo che sia meglio imparare prima C o Lisp prima, e Java dopo.

C’è forse un ulteriore punto qua. Se un linguaggio sembra che faccia troppe cose, potrebbe essere allo stesso tempo un buon strumento di produzione ed un cattivo modo per imparare. Non è solo un problema che accomuna i linguaggi; framework di applicazioni web come RubyOnRails, CakePHP o Django potrebbero permettere un semplice apprendimento superficiale che però potrebbe lasciarti senza risorse quando devi risolvere un problema davvero difficile, ma anche quando devi trovare un errore in un problema relativamente semplice.

Se vuoi entrare nella programmazione più seria, dovrai imparare C, il linguaggio principale di Unix. C++ è molto simile a C; se ne conosci uno, imparare l’altro non sarà così difficile. Comunque non sono buoni linguaggi per iniziare a programmare. E, tuttavia, più eviti di programmare in C e più sarai produttivo.

C è molto efficiente, e molto parco nell’utilizzare le risorse della macchina. Purtroppo, C è così efficiente poiché richiede che sia tu a pensare al suo utilizzo di risorse, programmandolo a mano. Tutto questo codice a basso livello è complicato e molti errori potrebbero presentarsi, sprecando un sacco del vostro tempo per risolverli. Con le potenti macchine di oggi, è un pessimo affare – è più intelligente usare un linguaggio che utilizza in modo meno efficiente le risorse della macchina, ma molto meglio le tue. Perciò, Python.

Fra gli altri linguaggi particolarmente importanti per gli hacker ci sono Perl e LISP. Vale la pena imparare Perl per ragioni pratiche; è molto usato per pagine web dinamiche e sistemi amministrativi, tanto che anche se non scriverai mai in Perl, almeno dovresti imparare a leggerlo. Molte persone usano Perl come io ho consigliato Python, per evitare la programmazione in C per lavori che non hanno bisogno dell’efficienza del computer. Dovrai imparare a capire il loro codice.

Vale la pena invece imparare LISP per un altro motivo – la profonda ed illuminante esperienza che avrai quando finalmente lo capirai. Un’esperienza che ti renderà un programmatore migliore per il resto dei tuoi giorni, anche se farai poco uso di LISP. (acquisirai una conoscenza base di LISP abbastanza facilmente scrivendo e modificando le modalità di edit per l’editor di testo Emacs, o plugin Script-Fu per GIMP)

È meglio comunque impararli tutti e cinque (Python, C/C++, Java, Perl e LISP). Oltre ad essere il linguaggi più importanti per l’hacking, rappresentano approcci diversi alla programmazione, ed ognuno di loro di educherà in una diversi ed ottimi modi.

Ma ricorda che non raggiungerai il livello di conoscenza di un hacker o anche solo di un programmatore semplicemente accumulando linguaggi – devi imparare a pensare a problemi di programmazione in generale, indipendentemente dal linguaggio. Per essere un vero hacker, devi raggiungere una situazione in cui puoi imparare un nuovo linguaggio in pochi giorni relazionando ciò che c’è sul manuale con ciò che già sai. In questo modo dovresti essere in grado di imparare molti e diversi linguaggi.

Non posso dare dettagliate istruzioni su come imparare a  programmare qua – è troppo complesso. Ma ti posso assicurare che i libri e i corsi non lo faranno – molto, e forse la maggior parte degli hacker migliori sono autodidatti. Puoi imparare caratteristiche del linguaggio – pezzetti di vera conoscenza – dai libri, ma la mentalità che trasforma quella conoscenza di abilità vivente si può acquisire solo con la pratica e l’apprendistato. Ciò lo farà sarà (a) leggere il codice e (b) scrivere codice.

Peter Norvig, uno dei migliori hacker di Google e co-autore del libro sulle intelligenze artificiali più usato al mondo, ha scritto un eccellente saggio chiamato “Impara a programmare in dieci anni”. I suoi consigli meritano attenzione.

Imparare a programmare è come imparare a scrivere bene una lingua. La migliore cosa da fare è leggere ciò che hanno scritto i maestri del campo, scrivere qualcosa da solo, leggere un po’ di più, scrivere un po’ di più, leggere ancora di più, scrivere ancora di più… da ripetere finche la tua scrittura non acquisisce quella forza e quell’economia dei tuoi modelli.

Trovare buon codice da leggere una volta era complicato, perché c’erano pochi programmi disponibili come sorgente per gli apprendisti hacker da leggere e ragionarci sopra. La situazione è molto cambiata; software open-source, strumenti di programmazione e sistemi operativi (tutti scritti da hacker) sono ora largamente disponibili. Questo mi porta direttamente al prossimo punto...

2. Scarica uno dei sistemi operativi open-source basati su Unix e impara ad usarlo.

Presumo che tu abbia un pc o possa accedere ad uno. (fermati un momento ad apprezzare quanto questo voglia dire. La cultura hacker si è evoluta quando i computer erano così costosi che i privati non se li potevano permettere) Il primo e più importante passo che qualunque principiante possa fare per raggiungere le competenze hacker è scaricare una copia di Linux o una delle copie di BSD-Unix o OpenSolaris, installarla su un computer e farla girare.

Si, ci sono altri sistemi operativi nel mondo oltre ad Unix. Ma sono distribuiti in binario – non puoi leggere il codice, e non lo puoi modificare. Provare ad imparare l’hacking su macchine con Microsoft Windows o con qualunque altro sistema closed-source è come imparare a ballare mentre si indossa una camicia di forza.

Con Mac OS X è possibile, ma solo parte del sistema è open source – dovrai probabilmente affrontare molti muri, e dovrai stare attento a non sviluppare la brutta abitudine di dipendere la codice proprietario di Apple. Se ti concentri sul codice Unix all’interno puoi imparare qualcosa di utile.

Unix è il sistema operativo di internet. Mentre puoi imparare ad usare Internet senza conoscere Unix, non puoi essere un Internet hacker senza aver capito Unix. Per questa ragione l’attuale cultura hacker è concentrata su Unix. (non è stato sempre così, e qualche vecchio hacker non è ancora contento di questo, ma la simbiosi fra Unix e Internet è diventata così forte che nemmeno i muscoli di Microsoft riescono a piegarla)

Quindi prendi Unix – Io preferisco Linux ma ci sono anche altre vie percorribili (e si, puoi installare Windows e Linux sulla stessa macchina). Imparalo. Mettilo in moto. Ragiona su di esso. Parla ad Internet con lui. Leggi il codice. Modifica il codice. Avrai strumenti di programmazione (che includono C, LISP, Python e Perl) migliori di qualunque cosa che gira su Windows, ti divertirai, e riceverai così tanta esperienza che te ne accorgerai solo quando da maestro hacker guarderai al passato.

Per saperne di più su Unix, dai un’occhiata a “The Loginataka”. Dai anche un’occhiata a “L’arte di programmare Unix”.

Per mettere le mani su Linux, consulta il sito Linux Online!; puoi scaricarlo da lì o (meglio) trovare un gruppo locale di utenti Linux che te lo installino.

Nei primi dieci anni di vita di questo documento, lo dicevo dal punto di vista del nuovo utente, tutte le distribuzioni di Linux sono pressoché identiche. Ma tuttavia nel 2006-2007 emerse una scelta migliore: Ubuntu. Mentre altre distro hanno i loro punti di forza, Ubuntu è finora il migliore per chi vuole iniziare con Linux.

Puoi trovare aiuto e risorse su BSD Unix sul sito www.bsd.org.

Un buon modo per fare una prova è caricare quello che i fan di Linux chiamano un live CD, una distribuzione che gira esclusivamente da CD senza dover modificare il tuo hard disk. Sarà lento, perché i CD sono lenti, ma è un ottimo modo per dare un’occhiata senza dover fare niente di drastico.

Ho scritto un’introduzione sulle basi di Unix e Internet.

Di solito sconsigliavo di installare Linux o BSD da soli. Oggi i setup sono diventati abbastanza buoni da permetterti di installare il tutto da solo, anche se sei un principiante. Comunque, raccomando sempre di contattare il gruppo di utenti Linux locale e chiedere aiuto. Non farà male, e potrebbe rendere il processo più agevole.

3. Impara ad usare il World Wide Web e scrivere in HTML.

La maggior parte di ciò che la cultura hacker ha costruito lavora senza farsi vedere, aiutando il funzionamento di fabbriche, uffici ed università senza alcun impatto sulla vita dei non-hacker. La Rete è una grande eccezione, il gigantesco e brillante giocattolo hacker che perfino i politici ammettono quanto abbia cambiato il mondo. Anche solo per questa ragione (ma ce ne sono molte altre) devi imparare a lavorare con la Rete.

Questo non vuole dire solo far funzionare un browser (tutti lo possono fare), ma imparare a scrivere HTML, il linguaggio di markup della Rete. Se non sai programmare, scrivere in HTML ti insegnerà alcune abitudini mentali che ti aiuteranno ad imparare. Perciò crea una pagina. Prova a concentrarti su XHTML, un linguaggio più pulito di HTML. (ci sono ottimi tutorial per principianti su Internet; eccone uno)

Ma avere una pagina è molto lontano dall’essere un hacker. La Rete è piena di pagine. La maggior parte di loro sono inutili, fango senza contenuto – sempre fango, e pure orribile (per più su questo argomento: The HTML Hell Page)

Per essere degna, la tua pagina deve avere contenuto – deve essere interessante e/o utile per gli altri hacker. E questo mi porta al prossimo argomento...

4. Se non hai una conoscenza appropriata dell’inglese, fai in modo di averla.

In quanto americano (parlando quindi inglese dalla nascita), non mi è mai interessato consigliarlo, perché non venga interpretato come sorta di imperialismo culturale. Ma diverse persone da altri paesi mi hanno spinto per evidenziare che l’inglese è la lingua con cui lavora la cultura hacker ed Internet, e che dovrai conoscerla per funzionare nella cultura hacker.

Più o meno nel 1991 ho imparato che molti hacker che conoscono l’inglese come seconda lingua lo usano in realtà nelle discussioni tecniche anche se condividono un’altra lingua; mi era stato detto che l’inglese ha un vocabolario tecnico molto più ricco di qualunque altra lingua e perciò è uno strumento migliore per lavorare. Per ragioni simili, traduzioni di libri tecnici scritti in inglese non soddisfano mai (se mai vengono fatte).

Linus Torvalds, un finlandese, commenta il suo codice in inglese (apparentemente non ha mai fatto diversamente). Il suo inglese fluente è stato un fattore importante nella sua abilità di reclutare una comunità mondiale di sviluppatori per Linux. È un esempio da seguire.

Parlare inglese dalla nascita non ti garantisce la possibilità di funzionare come un hacker. Se la tua scrittura è semi-analfabeta, sgrammaticata e piena di errori molti hacker (me incluso) tenderanno ad ignorarti. Anche se una scrittura sciatta non significa un pensiero sciatto, abbiamo spesso trovato una forte correlazione – e non ci servono pensatori sciatti. Se ancora non sai scrivere degnamente, impara a farlo.

Posizione nella cultura hacker

  1. Scrivi software open-source.
  2. Aiuta a testare software open-source.
  3. Pubblica informazioni utili.
  4. Aiuta a mantenere funzionante l'infrastruttura.
  5. Servi la cultura hacker.

Come la maggior parte delle culture non basate sull’economia monetaria, la cultura hacker si basa sulla reputazione. Stai tentando di risolvere problemi, ma quanto questi problemi siano interessanti, e quanto la tua soluzione sia buona, è qualcosa che solo i tuoi superiori possono normalmente giudicare.

Quindi, quando sei in un gioco hacker, impari a tenere il punteggio in base a cosa gli altri hacker pensano delle tue competenze (proprio per questo non sei un hacker finché gli altri hacker non ti chiamano così). Tale fatto è nascosto dall’immagine per cui l’hacking sarebbe un lavoro solitario; o anche dal taboo culturale degli hacker (che va lentamente decadendo dagli anni ’90, ma ancora potente) contro l’ammissione del fatto che la considerazione altrui è importante nella propria motivazione.

Nello specifico, la cultura hacker è ciò che gli antropologi chiamano cultura del regalo. Ottieni una posizione ed una rilevanza non dominando le altre persone, non per essere bello e nemmeno per avere ciò che gli altri vogliono, ma per regalare delle cose. In particolare regalando il tuo tempo, la tua creatività ed il risultato della tua abilità.

Ci sono cinque cose che puoi fare per essere rispettato dagli altri hacker:

1. Scrivi software open-source.

La prima cosa (la principale e più tradizionale) è scrivere programmi che altri hacker possano considerare divertenti o utili, e dare il sorgente del programma alla cultura hacker, in modo che lo posso utilizzare.

(li chiamavamo “software liberi”, ma confondeva troppe persone riguardo al significato della parola “libero”. Molti di noi ora preferiscono il termine software “open-source”)

Coloro considerati semidei dagli hacker sono persone che hanno scritto grandi ed efficienti programmi che servivano a molte persone e li hanno date via, in modo che tutti li possano utilizzare.

Ma bisogna fare una piccola precisazione storica qua. Mentre gli hacker hanno sempre visto gli sviluppatori open-source come nucleo della comunità, prima della metà degli anni ’90 la maggior parte degli hacker lavorava su closed-source. Ed era ancora così quando ho scritto la prima versione di questo documento nel 1996; ci volle l’uscita di molti open-source nel 1997 per cambiare le cose. Oggi, la comunità hacker e gli sviluppatori open-source sono ormai sinonimi – ma bisogna ricordare che non è sempre stato così. (per maggiori informazioni, guarda la sezione chiamata “Cenni storici: hacking, open source e software libero”)

2. Aiuta a testare software open-source.

Gli hacker servono anche coloro che risolvono gli errori nei software open-source. In questo mondo imperfetto, spenderemmo inevitabilmente la maggior parte del nostro tempo nella fase di controllo errori (debug). Ecco perché qualunque autore di programmi open-source che pensa bene ti dirà che un buon beta-tester (chi sa come descrivere i sintomi chiaramente, trovare gli errori facilmente, che tollera gli errori di una versione non completa ed è favorevole a compiere una serie di routine di controllo) vale il suo peso in oro. Anche solo uno di questi può fare la differenza fra una fase di debug lunga e da incubo ed una che sembra una semplice passeggiata.

Se sei un principiante, prova a cercare un programma in via di sviluppo di cui sei interessato e diventa un buon beta-tester. C’è una progressione naturale fra l’aiutare a testare programmi all’aiutare a rimuovere errori all’aiutare a modificarli. Imparerai molte cose in questo modo, generando un karma positivo con le persone che ti aiuteranno in seguito.

3. Pubblica informazioni utili.

Un’altra buona cosa da fare è collezionare e filtrare interessanti ed utili informazioni in pagine web o documenti come le FAQ ( = domande rivolte spesso), e renderle disponibili al pubblico.

Chi mantiene la migliori FAQ tecniche riceve lo stesso rispetto degli sviluppatori open-source.

4. Aiuta a mantenere funzionante l'infrastruttura.

La cultura hacker (e lo sviluppo di Internet) è mantenuta in vita da volontari. C’è un sacco di lavoro non bello ma necessario che deve essere fatto per far funzionare il tutto – amministrare mailing list, moderare forum, mantenere siti con grandi archivi di software, sviluppare RFC ed altri standard tecnologici.

Le persone che fanno ciò e lo fanno bene ottengono rispetto, perché tutti sanno che questi lavori hanno bisogno di un sacco di tempo e non sono così divertenti come giocare con i codici. Fare questi lavori indica dedicazione.

5. Servi la cultura hacker.

Infine puoi servire e propagare la cultura stessa (come ad esempio scrivere un’accurata introduzione su come diventare hacker J ). Questo non è proprio qualcosa da fare finché non ti sarai fatto conoscere abbastanza per una delle prime quattro cose.

La cultura hacker non ha leader, esattamente, ma ha in realtà eroi della cultura, anziani della tribù, storici e portavoce. Quando sarai stato nelle trincee abbastanza tempo, anche tu diventerai uno di questi. Attenzione: gli hacker detestano gli sfacciati fra i loro anziani, quindi voler visibilmente raggiungere questa fama è pericoloso. Invece di sforzarsi per la fama, devi posizionarti in un posto visibile, e poi essere modesto riguardo al tuo stato.

La connessione fra hacker e nerd

Al contrario di quanto pensa la gente, non c’è bisogno di essere nerd per essere hacker. Aiuta molto comunque, e infatti molti hacker sono infatti nerd. Essere quasi un emarginato ti aiuta a rimanere concentrato sulle cose veramente importanti, come pensare e hackerare.

Per questa ragione, molti hacker hanno adottato la dicitura “geek” come simbolo di orgoglio – è un modo per dichiarare la loro indipendenza dalle normali aspettative sociali (come anche la passione per la fantascienza ed i giochi di strategia, che spesso accompagnano gli hacker). Il termine “nerd” era molto in voga negli anni ’90, quando “nerd” aveva una connotazione dispregiativa e “geek” ancora peggio; dopo il 2000 si sono invertiti, almeno nella cultura popolare americana, ed ora c’è perfino un orgoglio geek fra coloro che non sono proprio coinvolti nella tecnologia.

Se riesci a concentrarti abbastanza sull’hacking da essere bravo ed avere ancora una vita, va bene. È molto più facile oggi di quando io ero un principiante negli anni ’70; l’attuale cultura principale è molto più socievole verso i nerd tecnologici oggi. C’è perfino un buon numero di persone che crede che gli hacker siano amanti e sposi di buona qualità.

Se sei attratto dall’hacking perché non hai una vita, va bene lo stesso – almeno non avrai alcun problema a concentrarti. Magari ti farai una vita più tardi.

Punti di stile

Ancora, per essere un hacker, devi entrare nella mentalità hacker. Ci sono cose che puoi fare quando non sei al computer che potrebbero aiutare. Non sono sostitute dell’hacking (niente lo è) ma molti hacker lo fanno, e sostengono che in qualche modo si colleghi alla vera essenza dell’hacking.

Più sono le cose che fai naturalmente e più potresti essere un hacker naturale. Non è molto chiaro perché proprio queste cose, ma sono connesse con un misto di abilità della parte destra e sinistra del cervello che pare essere importante; gli hacker devono saper ragionare in modo logico e riuscire ad andare oltre l’apparente spiegazione che un problema può dare a prima vista.

Lavora tanto intensamente quanto giochi, e gioca tanto intensamente quanto lavori. Per i veri hacker, i confini fra “gioco”, “lavoro”, “scienza” ed “arte” tendono a scomparire, o unirsi in un unico divertimento creativo di alto livello. Inoltre, non accontentarti di poche abilità. Anche se molti hacker si descrivono come programmatori, molto probabilmente sono molto competenti anche in altri campi – amministrazione di sistema, web design e hardware pc fra le più comuni. Un hacker che è un amministratore di sistema d’altro canto, è probabilmente abile anche alla programmazione di script e web design. Gli hacker non fanno le cose a metà; se spendono tempo in un’abilità, tendono a diventare bravi.

Infine, alcune cose da non fare.

La reputazione che guadagnerai facendo una di queste cose equivale a 0. Gli hacker hanno una memoria lunga – potrebbero servirti anni prima di venire di nuovo accettato.

Il problema dei nickname merita qualcosa in più. Celare la propria identità dietro un nickname è un comportamento giovanile e buffo caratteristico dei cracker, warez d00dz e altre forme di vita inferiori. Gli hacker non lo fanno, sono orgogliosi di ciò che fanno e lo voglio associato al loro nome. Quindi se hai un nickname, abbandonalo. Nella cultura hacker ti renderà solo un perdente.

Cenni storici: hacking, open source e software libero

Quando ho scritto questo documento nel 1996 alcune delle condizioni nel mondo intorno erano molto differenti da quanto lo sono ora. Qualche parola su questi cambiamenti potrebbe aiutare a chiarire le idee alle persone confuse sui collegamenti fra open source, software libero e Linux con la comunità hacker. Se non sei curioso riguardo a ciò puoi semplicemente saltare alla bibliografia o alle FAQ.

L’etica e la comunità hacker che ho descritto qua è anteriore all’uscita di Linux dal 1990; sono stato coinvolto in questa intorno al 1976, ma le sue radici si possono trovare negli anni ’60. Ma prima di Linux, l’hacking veniva fatto o su sistemi proprietari oppure su sistemi quasi sperimentali e fatti a mano come l’ITS del MIT che non uscirono mai dalle nicchie accademiche. Anche se ci furono precedenti (ante-Linux) tentativi di cambiare questa situazione, il loro impatto fu al massimo molto marginale e confinato nelle comunità di veri credenti che erano minuscole minoranze nella comunità hacker, ancora peggio rispetto al mondo degli sviluppatori software in generale.

L’origine di quello che ora è chiamato “open source” è vecchia tanto quanto la comunità hacker, ma fino al 1985 era una pratica senza nome adottata da qualcuno invece di un vero e proprio movimento conscio con teorie e manifesti. La preistoria terminò quando, nel 1985, l’hacker Richard Stallman (“RMS”) provò a dargli un nome – “software libero” (free software). Ma il suo tentativo di dare un nome era anche un tentativo di controllo; attaccò un bagaglio ideologico al “software libero” che gran parte della comunità hacker non accettò mai. Il risultato fu che l’etichetta “software libero” venne rifiutata fortemente da una minoranza della comunità (specialmente fra gli associati a BSD Unix), e usata con serietà ma silenziosa riservatezza dalla maggior parte dei rimanenti (me incluso).

Anche se con riservatezza, la volontà di RMS di definire e guidare la comunità hacker sotto lo slogan “software libero” proseguì fino alla metà degli anni ’90. Fu sfidata seriamente solo dalla nascita di Linux. Linux diede una casa allo sviluppo di software open-source. Molti progetti usciti con termini che oggi definiremo open-source migrarono dal proprietario Unix a Linux. La comunità intorno a Linux esplose, diventando molto più larga ed eterogenea di qualunque altro gruppo ante-Linux. RMS tentò di collaborare alla nascita di questo movimento avvicinandolo al suo “free software”, ma fu allontanato sia dalla grande diversità della comunità di Linux dalla sua e dallo scetticismo pubblico del suo fondatore, Linus Torvalds. Torvalds continuò ad usare il termine “software libero” per mancanza di alternative, ma rifiutava pubblicamente le ideologie di RMS. Molti giovani hacker lo seguirono.

Nel 1996, quando ho pubblicato per la prima volta questo documento, la cultura hacker si stava rapidamente riorganizzando intorno a Linux e un sacco di nuovi sistemi operativi open-source (principalmente dai discendenti di BSD Unix). La memoria del fatto che la maggior parte di noi aveva speso decenni a programmare software closed-source su sistemi closed-source non stava ancora sparendo, ma il fatto sembrava già essere parte di un passato morto; gli hacker si stavano lentamente definendo hacker per il loro attaccamento a progetti open-source come Linux o Apache.

Il termine “open-source” non era comunque ancora emerso; e non lo avrebbe fatto fino al 1998. Quando emerse, quasi tutte le comunità hacker lo adottarono nei successivi sei mesi; le eccezioni furono delle minoranze ancora attaccate alla filosofia del termine “software libero”. Dal 1998, e specialmente dopo il 2003, l’identificazione di “hacking” con “sviluppo open-source (e software libero) si fece più stretta. Al momento non ci sono discussioni che mirano a distinguere queste categorie, e molto probabilmente non cambierà in futuro.

È da ricordare comunque che non è sempre stato così.


Altre risorse


Domande frequenti

Da cosa posso sapere se sono già un hacker?

Fatti queste tre domande:

Se puoi rispondere in modo affermativo a tutte e tre le domande, allora sei già un hacker. Solo due non sono sufficienti.

Il primo punto testa le tue abilità. Probabilmente lo puoi passare se hai le conoscenze tecniche minime descritte precedentemente in questo documento. Vai molto oltre se un buon ammontare di tuo codice è stato accettato in un progetto open-source.

Il secondo testa l’attitudine. Se i cinque principi della mentalità hacker ti sono sembrati ovvi, più come una descrizione del modo in cui vivi e niente di nuovo, sei a metà del percorso. Quella è la parte interiore; l’altra, esteriore, è il grado con cui ti identifichi nei progetti a lungo termine della comunità hacker.

Ecco una lista incompleta ma indicativa di qualcuno di questi progetti. Ti interessa che Linux si sviluppi e si allarghi? Sei appassionato dalla libertà dei software? Ostile ai monopoli? Agisci credendo che i computer siano dei potenti strumenti che possono rendere il mondo un posto più vivibile?

Ma bisogna fare attenzione ad una cosa. La comunità hacker ha alcuni specifici interessi politici, principalmente difensivi – due di questi sono la difesa della libertà di parola e la difesa contro l’allargarsi della “proprietà intellettuale” che renderebbe illegale l’open-source. Alcuni di questi progetti a lungo termine sono organizzazioni come la Electronic Frontier Foundation, e un’attitudine esteriore è proprio il supportarli. Ma oltre a questo, molti hacker guardano con sospetto i tentativi di sistematizzare la comunità in espliciti programmi politici; abbiamo imparato, nel peggiore dei modi, che questi tentativi dividono e distraggono. Se qualcuno cerca di reclutarti per marciare sulla tua capitale nel nome degli hacker, non hanno capito il punto. La giusta riposta è probabilmente “Fai silenzio e mostra il codice”.

L’ultimo è un difficile test che ricorre. Ho fatto notare nella sezione chiamata “Cos’è un hacker?” che essere un hacker è in parte un problema di far parte di una particolare subcultura o social network con una storia condivisa, un dentro ed un fuori. Nel passato lontano gli hacker erano gruppi meno coesi e consci di quanto lo siano oggi. Ma l’importanza dell’aspetto social network è aumentata negli ultimi 30 anni così come Internet ha reso più facili da sviluppare e mantenere connessioni fra subculture hacker. Un facile aspetto del comportamento che è cambiato è che in questo secolo abbiamo le magliette personalizzate.

I sociologi, che studiano reti come quella degli hacker sotto l’appellativo generale di “gruppi invisibili”, hanno notato che una caratteristica di queste reti è la presenza di guardiani – importanti membri con l’autorizzazione della società a far entrare nuovi membri nella rete. Perché il “gruppo invisibile” della cultura hacker è informale e libero, e anche il ruolo di guardiano è informale. Ma ciò che gli hacker sentono sulle loro ossa è che non tutti sono guardiani. I guardiani devono avere un certo grado di maturità e realizzazione prima di poter mostrare il loro titolo. Quanto di questi è difficile da quantificare, ma ogni hacker lo sa quando lo vede.

Mi insegnerai l’hacking?

Dalla pubblicazione di questa pagina, ho ricevuto diverse richieste a settimana (spesso diverse al giorno) di gente che voleva che io gli insegnassi tutto sull’hacking. Sfortunatamente, non ho né il tempo e né l’energia per farlo; i miei progetti di hacking, e il lavoro come avvocato dell’open-source mi prende il 110% del tempo.

Anche se lo facessi, l’hacking è una conoscenza che devi insegnarti da solo. Scoprirai che mentre i veri hacker vorranno aiutarti, non ti rispetteranno se vorrai essere “imboccato” di tutte le loro conoscenze.

Impara qualcosa all’inizio. Fai vedere che stai provando, che sei capace di imparare da solo. Poi vai dagli hacker che incontri con domande specifiche.

Se mandi una email a un hacker chiedendo un consiglio, ecco due cose che devi sapere prima. Innanzitutto abbiamo notato che le persone troppo pigre o senza cura nella scrittura sono di solito troppo pigre o senza cura nella loro volontà di diventare hacker – quindi stai attento a scrivere correttamente, usare una buona grammatica e una buona punteggiatura, oppure potresti essere semplicemente ignorato. In secondo luogo, non provare nemmeno a chiedere di ricevere la risposta su un altro ISP account rispetto a quello che hai usato per scrivere; abbiamo notato che di solito persone del genere sono ladri che hanno rubato account, e non abbiamo alcun interesse a premiare o assistere il furto.

Come posso iniziare allora?

La migliore cosa per iniziare potrebbe essere recarsi ad un incontro di un LUG (gruppo utenti Linux). Puoi trovare questi gruppi su LDP Pagina di informazioni generali su Linux; probabilmente ce n’è uno vicino a te, probabilmente associato con una scuola o università. I membri del LUG di daranno probabilmente una copia di Linux se chiedi, e ti aiuteranno di certo ad installarne una e iniziare.

Quando bisogna iniziare? È troppo tardi per me?

Ogni età in cui sei motivato a iniziare è quella giusta. La maggior parte delle persone sembra essere interessata fra i 15 e i 20 anni, ma conosco eccezioni in entrambe le direzioni.

Quanto ci vorrà per imparare l’hacking?

Dipende dal tuo talento e da quanto tu possa lavorare seriamente. Molte persone ottengono una conoscenza rispettabile dai 18 mesi ai due anni, se si concentrano. Non pensare comunque che finisca qua; nell’hacking (come in molti altri campi) ci vogliono almeno dieci anni per diventare maestro. E se sei un vero hacker, spenderai il resto della tua vita ad imparare e perfezionare la tua arte.

Visual Basic è un buon linguaggio per iniziare?

Se fai questa domanda, è perché stai pensando di hackerare su Microsoft Windows. E questa è una brutta idea. Quando ho comparato l’imparare l’hacking su Windows come provare a ballare mentre si indossa una camicia di forza, non stavo scherzando. Non ci andare. È orribile, e non smette di essere orribile.

C’è un problema specifico con Visual Basic: non è portabile. Anche se esiste un prototipo di implementazione open-source di Visual Basic, gli standard ECMA applicabili non coprono che una piccola parte delle sue interfacce. Su Windows la maggior parte delle librerie supportate sono proprietà di Microsoft; se non sei estremamente attento alle funzioni utilizzate – facendo più attenzione di quanto un principiante possa fare – finirai per essere rinchiuso in quelle piattaforme che solo Microsoft può scegliere. Se inizi su Unix, migliori linguaggi e migliori librerie sono disponibili. Python, per esempio.

Inoltre, come gli altri Basic, Visual Basic è un linguaggio disegnato male che ti insegnerà cattive abitudini. No, non chiedermi di spiegartele nel dettaglio; la spiegazione potrebbe riempire un libro. Impara un linguaggio ben disegnato invece.

Una di queste cattive abitudini è diventare dipendente da librerie, widget e strumenti di programmazione di una singola azienda. In generale, qualunque linguaggio non completamente supportato almeno sotto Linux o BSD, e almeno tre sistemi operativi proprietari, non è sufficiente per impararci l’hacking.

Mi puoi aiutare a bucare un sistema, o insegnarmi come si cracka?

No. Chiunque ancora chieda questa domanda dopo aver letto la FAQ è troppo stupido per essere educabile anche se avessi il tempo per fare da tutore. Qualunque email con richiesta del genere verrà ignorata o risposta con estrema maleducazione.

Come posso trovare la password di un account altrui?

Questo è cracking. Vai via, idiota.

Come posso entrare nella mail di un altro?

Questo è cracking. Dileguati, deficiente.

Come posso rubare i privilegisui canali IRC?

Questo è cracking. Vattene, cretino.

Sono stato attaccato. Mi puoi aiutare a rispondere con altri attacchi?

No. Tutte le volte che mi è stata rivolta questa domanda, lo è stato da gente con Windows. Non è possibile effettivamente rendere sicuri i sistemi Windows contro gli attacchi di cracking; il codice e l’architettura hanno semplicemente troppe mancanze, ciò significa che provare a rendere sicuro Windows è come provare a salvare una barca con un setaccio. L’unica prevenzione disponibile è passare a Linux o qualunque altro sistema operativo sicuro.

Ho problemi con un software per Windows. Mi puoi aiutare?

Si. Vai sul prompt dei comandi e digita “format c:”. Ogni problema sparirà in pochi minuti.

Dove posso trovare qualche vero hacker con cui parlare?

La migliore opzione è trovare un gruppo di utenti Linux o Unix e andare ai loro incontri (puoi trovare link a molte liste di gruppi di utenti sulla pagina LDP di ibiblio)

(di solito dicevo che non avresti mai trovato veri hacker sui canali IRC, ma sto capendo che le cose stanno cambiano. Apparentemente alcune comunità di hacker, unite per esempio a GIMP o Perl, hanno ora dei canali IRC)

Puoi consigliarmi qualche buon libro sull’hacking?

Mantengo una Bibliografia per Linux HOWTO che potresti trovare d’aiuto. Il Loginataka potrebbe anche essere interessante.

Per un’introduzione a Python, guarda questo tutorial sul sito di Python.

Devo essere bravo in matematica per diventare un hacker?

No. L’hacking necessita di poca matematica o aritmetica. In particolare, non userai trigonometria, calcolo o analisi (ci sono eccezioni per chi si avvicina alla grafica 3d). Conoscere basi di logica e algebra Booleana è sufficiente. Qualche base in matematica finita (fra cui teoria degli insiemi, calcolo combinatorio e teoria dei grafici) può aiutare.

Molto più importante: devi saper pensare logicamente e seguire catene esatte di ragionamento, come i matematici. Mentre il contenuto della matematica non ti servirà, avrai bisogno della disciplina e intelligenza per usare la matematica. Se ti manca l’intelligenza, c’è poca speranza per te come hacker; se ti manca la disciplina, faresti meglio a svilupparla.

Penso che un buon modo per scoprire se hai ciò che ti serve è comprare una copia del libro “Qual è il nome di questo libro?” di Raymond Smullyan. Gli esercizi giocosi di logica di Smullyan sono molto nello spirito hacker. Essere abili a risolverli è un buon segno; provare piacere nel risolverli uno ancora migliore.

Con quale linguaggio dovrei iniziare?

XHTML (l’ultimo dialetto di HTML) se ancora non lo conosci. Ci sono un sacco di pessimi e ultra-intensivi libri su HTML, e veramente pochi buoni. Quello che mi piace di più è HTML: La guida definitiva.

Ma HTML non è un linguaggio di programmazione completo. Quando sei pronto per iniziare a programmare, consiglio di iniziare con Python. Sentirai un sacco di persone che consigliano Perl, ma è più difficile da imparare e (secondo me) disegnato meno bene.

C è molto importante, ma molto più difficile di Python o Perl. Non provare ad impararlo per primo.

Utenti Windows, non iniziate con Visual Basic. Ti insegnerà cattive abitudini, e non è portabile fuori da Windows. Evitate.

Di che hardware ho bisogno?

Una volta i personal computer erano meno potenti e con poca memoria, abbastanza da rendere difficile il processo di apprendimento di un hacker. Ha smesso di essere così dalla metà degli anni ’90; qualunque macchina successiva all’Intel 486DX50 è abbastanza potente per lavoro di sviluppo, comunicazione Internet e altro; e anche il più piccolo disco acquistabile oggi è grande abbastanza.

L’importante è scegliere una macchina compatibile con Linux o BSD. Vero per tutte le macchine moderne. L’unica parte complicata sono modem e schede di rete; qualche macchina con hardware specifico per Windows non funzionerà con Linux.

C’è una FAQ sulla compatibilità hardware; l’ultima versione è qua.

Voglio contribuire. Puoi aiutarmi a trovare un problema da risolvere?

No, perché non conosco il tuo talento o i tuoi interessi. Devi essere motivato o non andrai da nessuna parte, ecco perché dare indicazioni sulla direzione da scegliere spesso non funziona.

Prova questo. Guarda gli annunci di progetti su Freshmeat per qualche giorno. Quando ne trovi uno che ti fa pensare “Bello! Voglio lavorarci sopra!”, aggiungiti.

Dovrei odiare e insultare Microsoft?

No, non devi. Non che Microsoft non sia nauseante, ma c’era una cultura molto prima di Microsoft, e ve ne sarà una molto dopo Microsoft. Ogni energia che spendi per odiare Microsoft potrebbe essere spesa meglio per amare la tua arte. Scrivi buon codice – insulterà Microsoft a sufficienza senza inquinare il tuo karma.

Ma il software open-source non renderà impossibile per i programmatori sopravvivere?

Non sembra proprio – al momento, l’industria del software open-source sembra creare lavoro invece di toglierlo. Se avere un programma scritto è un guadagno economico rispetto a non averlo scritto, il programmatore verrà pagato anche se il software sarà open-source. E non c’è problema su quanta parte del programma viene reso “libero”, ci sarà sempre una maggiore domanda di applicazioni nuove e personalizzabili. Ho scritto di più in merito sulle pagine Open Source.

Dove posso trovare Unix gratuito?

Se non hai ancora Unix installato sulla tua macchina, in altri punti della pagina ho fornito link per scaricare le versioni gratuite più comuni di Unix. Per essere un hacker hai bisogno di motivazione, iniziativa ed essere abile ad imparare da solo. Inizia adesso…