L'urgenza della transizione a IPV6

English version here

IPv6 (Internet Protocol version 6) è la versione più recente del protocollo di comunicazione che gestisce il traffico Internet. La sua principale differenza rispetto alla versione precedente, IPv4, è l'uso di un indirizzo IP a 128 bit, rispetto ai 32 bit di IPv4. Ciò significa che IPv6 può supportare un numero molto maggiore di indirizzi IP rispetto a IPv4, che si è dimostrato insufficiente per soddisfare la crescente domanda di connessione a Internet. Inoltre, IPv6 include anche nuove funzionalità di sicurezza e di gestione del traffico che non erano presenti in IPv4. Tuttavia, la transizione da IPv4 a IPv6 è stata lenta e graduale a causa della compatibilità con il vecchio protocollo e della necessità di aggiornare l'infrastruttura di rete esistente.

Da oltre 20 anni, l'adozione di IPv6 è un tema caldo nel mondo delle reti. Pur essendoci una crescita costante, siamo ancora ben lontani dal supporto completo di questa nuova generazione di indirizzi IP. L'IPv6 promette maggiore efficienza, scalabilità e sicurezza, ma la sua adozione è frenata da una serie di sfide e resistenze.

Una delle principali difficoltà nell'adozione dell'IPv6 è il cambiamento, almeno in parte, della concezione della rete. Questo richiede una comprensione più approfondita delle dinamiche di funzionamento, ma una volta compreso il meccanismo, risulta più logico e pratico di IPv4.

Inoltre, l'IPv6 mette in discussione le certezze di molti "tecnici" che per anni hanno considerato il NAT come una protezione per la rete locale (non lo è). La sicurezza della LAN non è garantita dal semplice fatto di "essere dietro NAT". Molti "tecnici" disabilitano l'IPv6 come prima operazione perché ritengono che possa causare solo problemi, mentre in realtà ciò che manca è una conoscenza adeguata della gestione dell'IPv6.

Nel frattempo, gli indirizzi IPv4 sono ormai esauriti e i pochi disponibili sul mercato vengono venduti a prezzi elevati. Anche provider come Hetzner e OVH hanno aumentato i loro prezzi per gli indirizzi IP, influenzando le dinamiche di gestione. L'IPv6, invece, è più efficiente e adatto al moderno mondo interconnesso, offrendo una quantità pressoché illimitata di indirizzi.

Tuttavia, l'IPv6 introduce nuove problematiche, come la raggiungibilità diretta di tutti i dispositivi attraverso il routing diretto (senza NAT), rendendo il firewall ancor più importante nella gestione della sicurezza di rete. È necessario comprendere meglio le dinamiche delle reti e sottoreti e, dato il numero di cifre degli indirizzi IPv6, è quasi impossibile ricordarli a memoria.

Oggi, tutti i miei dispositivi sono connessi tramite IPv6. Quando non dispongo di supporto diretto (come nelle connessioni mobili), utilizzo un tunnel Hurricane Electric o, se impossibile (a causa della mancanza di un IPv4 pubblico), una connessione WireGuard verso un VPS esterno in grado di fare Nat66. Ho creato un ULA per permettermi comunque il collegamento diretto ad indirizzi pubblici IPv6.

Purtroppo, molti gestori non comprendono ancora appieno il funzionamento di IPv6 e la quantità di indirizzi disponibili. Assegnando "solo" una /64, limitano le possibilità di utilizzo, mentre una /48 o una /56 permetterebbero la creazione di numerosissime /64, facilitando l'utilizzo dello SLAAC per i dispositivi collegati. Probabilmente, i gestori temono di ripetere gli errori commessi con l'IPv4, quando venivano assegnate grandi quantità di indirizzi, portando poi alla scarsità attuale. Fortunatamente, l'IPv6 dispone di un numero così elevato di indirizzi che non dovremmo preoccuparci di problemi simili, nemmeno in caso di spreco massiccio.

Per accelerare l'adozione dell'IPv6 e trarre vantaggio dai suoi benefici, dobbiamo spingere affinché venga implementato in maniera capillare e il più rapidamente possibile. È fondamentale imparare ad utilizzarlo correttamente e abbandonare i vecchi criteri (spesso errati) legati alle limitazioni tecniche di IPv4. In questo modo, la qualità delle reti migliorerà, l'ottimizzazione sarà più efficace e tutti ne beneficeremo.

È dunque essenziale superare le resistenze e le paure associate all'IPv6, formare adeguatamente i tecnici e aggiornarsi costantemente sulle novità. Solo così potremo garantire un futuro più efficiente, sicuro e sostenibile per le nostre reti e i dispositivi connessi.

No, in informatica il “si deve fare così” non dovrebbe esistere

Photo by Eric Prouzet on UnsplashPhoto by Eric Prouzet on Unsplash

English version available here

L’esperienza insegna, l’esperienza forma. Probabilmente, se sei giovane, starai pensando “ok, boomer” e sarai pronto a chiudere questo articolo, passando oltre. Se sei meno giovane, invece, potresti pensare che sia il solito articolo “rivoluzionario”, contro il sistema e contro le big corporation.

Non è così.

Circa 20 anni fa tutti gli utenti di sistemi operativi alternativi (ovvero non Windows) venivano visti come degli alieni in quanto “tutto il mondo usa Windows”. Si sognava “l’anno della svolta di Linux (o FreeBSD) su Desktop, argomento su cui si scherza ancora oggi. Di fatto questi sistemi operativi sono arrivati davvero ovunque (sotto forma di Android, Smart Home, Playstation, in parte MacOS, ecc.), in maniera ovviamente diversa rispetto a come avremmo sognato.

Già allora mi adiravo e rispondevo “per quale ragione dovrei usare Windows? Solo perché lo usano tutti?”. La risposta, di solito, era questa: “Nel mondo reale e lavorativo tutti usano Windows”.

Per quanto in un certo senso potessero avere una parte di ragione, non mi sembrava un motivo valido per costringermi ad usare un sistema operativo inadatto o, quantomeno, meno efficace per il mio lavoro.

Il tempo mi ha dato ragione. Internet ha visto prevalere i server basati su sistemi Unix o Unix-like, i datacenter sono diventati principalmente basati su Linux (grazie, Amazon, per aver spinto ancora di più questo trend!), è nato il concetto di “cloud” e tutto ciò che ne deriva. Router e firewall hanno iniziato ad essere basati su Linux o sistemi *BSD e lo sviluppo è andato avanti non più solo sul mantenere in piedi un packet filter ma sulle funzionalità aggiuntive che oggi abbiamo a disposizione.

I big player sono entrati in gioco, Microsoft stessa ha iniziato ad amare Linux, FreeBSD e, con il WSL, ha definitivamente dimostrato che non si può ignorare “l’altro”.

Ad oggi, dire di essere un sistemista Linux genera ammirazione e rispetto, mentre meno di venti anni fa mi sentivo rispondere “Linux è un giocattolo che si usa nelle università, il mondo utilizza Windows”. Essere sistemisti esperti in sistemi *BSD, invece, genera ancora strani pensieri nell’interlocutore.

L’esperienza mi ha dunque insegnato che non esiste (e non deve esistere!) un solo modo di fare le cose. Nel mondo dell’Open Source, poi, la pluralità di soluzioni agevola uno sviluppo diversificato e che potrebbe, nel tempo, riservare sorprese.

Pochi giorni fa ho pubblicato un articolo su come ho effettuato una migrazione da un server Proxmox a FreeBSD senza particolari problemi e migliorando l’efficienza del sistema. L’articolo ha avuto un successo inaspettato, ha ricevuto in pochi giorni un enorme numero di visite e i commenti sono stati entusiastici. Qualche commento critico, ovviamente, è giunto. Amo i commenti critici in quanto a volte è fondamentale vedere le cose da un altro punto di vista. Quando sono davvero convinto, resto comunque della mia idea mentre se il commento critico dovesse riuscire a suscitare un dubbio, avrei lo spunto di indagare ancor di più. Di fare ricerca. Di sperimentare, che è poi alla base del nostro mestiere.

Ecco perché non ho mai simpatizzato con chi, con arroganza (e l’arroganza, spesso, è sinonimo di ignoranza), chiude a qualunque soluzione che non sia la propria favorita.

Dovremmo ormai aver imparato che quello tecnologico è un mondo pressoché infinito, fatto di strumenti (ovvero mattoni) con cui costruire una soluzione al nostro problema. Vedere persone adulte o anziane arroccate su posizioni chiuse e rigorose è triste, ancor più triste è vedere persone giovani (magari anche competenti) che chiudono le porte a tutto ciò che non sia la soluzione “hype” del momento, magari spinta proprio da tanto marketing di chi, su quelle soluzioni, ha investito molti soldi. Dire “siamo nel 2023 e tutti usano Kubernetes sul cloud, su cluster gestiti”, ad esempio, vuol dire ignorare che non tutti gli strumenti sono adatti per risolvere tutti i problemi. Non utilizzo una bilancia industriale per pesarmi in quanto sarebbe troppo grande o troppo costosa o comunque inadatta allo scopo. Non tutti, dunque, dovrebbero utilizzare bilance industriali per pesarsi.

Lo studio del problema dovrebbe sempre essere il primo passo verso la ricerca degli strumenti più adatti alla soluzione dello stesso. Per fortuna non esiste “una taglia unica”, in informatica. Così come non sempre lo strumento più “moderno e in voga” sarà quello più adatto e longevo sul lungo periodo.

L'abbondanza di risorse hardware: una maledizione per l'ottimizzazione dei software?

English version here

"Il server è pieno, aggiungi spazio!"

Anche se ci sono decine di giga di log inutili. Anche se ci sono decine di giga di roba inutile, lasciata sul server solo per inerzia.

Le recenti innovazioni nel campo delle risorse hardware hanno generato dispositivi con prestazioni sempre più elevate, capacità di memoria superiore e consumi energetici ridotti. Questa tendenza ha permesso lo sviluppo di applicazioni e servizi che fino a poco tempo fa erano impensabili. Tuttavia, un lato oscuro di questo progresso riguarda il peggioramento dell'ottimizzazione del software.

L'ottimizzazione non è più una priorità

Il progresso tecnologico ha portato ad un contesto in cui l'hardware potente e accessibile è diventato la norma. Di conseguenza, gli sviluppatori non sentono più l'urgenza di ottimizzare il loro software. In passato, quando le risorse erano limitate, l'ottimizzazione era una necessità per garantire il corretto funzionamento delle applicazioni e per evitare sprechi di risorse. Oggi, invece, gli sviluppatori tendono a concentrarsi su altre priorità, come l'implementazione di nuove funzionalità o il miglioramento dell'esperienza utente. L'ottimizzazione non conta più. La soluzione, per loro, è sempre ricorrere ad hardware più potente.

Il peggioramento dell'ottimizzazione del software ha diverse conseguenze negative:

  1. Consumo energetico: Applicazioni non ottimizzate consumano più energia rispetto a quelle ottimizzate, contribuendo ad un impatto ambientale maggiore. La crescente preoccupazione per il cambiamento climatico rende questa questione particolarmente rilevante.
  2. Spreco di risorse: Quando gli sviluppatori trascurano l'ottimizzazione, le applicazioni utilizzano risorse hardware in modo inefficiente, sprecando spazio su disco, memoria e potenza di calcolo. Questo spreco si traduce in costi maggiori per gli utenti, che potrebbero essere costretti ad aggiornare il loro hardware più spesso del necessario.
  3. Prestazioni ridotte: Applicazioni non ottimizzate possono causare lentezza, lag e crash, compromettendo l'esperienza utente e la produttività. Inoltre, l'hardware meno recente potrebbe non essere in grado di eseguire correttamente questi programmi, limitando l'accesso ad una porzione di utenti.
  4. Sicurezza e stabilità: Un software non ottimizzato potrebbe presentare falle di sicurezza o bug, esponendo gli utenti a potenziali rischi. Inoltre, le applicazioni instabili possono causare la perdita di dati o compromettere l'integrità del sistema.
  5. Manutenzione e aggiornamenti: La mancata ottimizzazione rende più difficile e costoso mantenere e aggiornare il software, poiché gli sviluppatori devono affrontare un codice più complesso e disorganizzato. Ciò può portare a ritardi nel rilascio di patch e nuove funzionalità.

Per invertire questa tendenza e garantire un futuro più sostenibile ed efficiente per il settore del software, è fondamentale che gli sviluppatori riconoscano l'importanza dell'ottimizzazione. Di seguito alcuni passi che possono essere intrapresi per promuovere un cambiamento positivo:

  • Formazione ed educazione: Insegnare ai programmatori l'importanza dell'ottimizzazione e fornire loro strumenti e tecniche per implementarla sin dall'inizio del processo di sviluppo. Spesso diventa difficile, specialmente per noi sistemisti "adulti", spiegare a chi non è abituato ai limiti fisici dell'hardware ma crede che il cloud sia "a risorse infinite, basta pagare di più". Dobbiamo però farlo, altrimenti saremo poi noi a dover rispondere quando il server sarà lento o, peggio, pieno.
  • Standardizzazione e buone pratiche: Promuovere l'adozione di standard e buone pratiche che guidino gli sviluppatori verso un approccio più efficiente nella creazione del software.
  • Benchmark e metriche: Utilizzare strumenti e metriche per valutare l'efficienza del software e confrontarlo con soluzioni concorrenti, incoraggiando così un continuo miglioramento delle prestazioni.
  • Incentivi e riconoscimenti: Creare premi o incentivi per le aziende e gli sviluppatori che si impegnano a produrre software ottimizzato, riconoscendo pubblicamente i loro sforzi.

L'abbondanza di risorse hardware e a basso costo (almeno in apparenza) ha portato ad un peggioramento dell'ottimizzazione del software, poiché gli sviluppatori non la considerano più una priorità. Tuttavia, è possibile invertire questa tendenza attraverso la formazione, l'adozione di buone pratiche e la promozione di un approccio più sostenibile ed efficiente allo sviluppo del software. Solo così potremo sfruttare appieno le potenzialità offerte dall'innovazione tecnologica, garantendo al contempo un impatto positivo sull'ambiente e sull'esperienza utente.