Il Pioniere Italiano dell’OSS
Oggi mi sono imbattuto per caso in un podcast del 2023, in cui lo Youtuber Italiano Lorenzo Danese intervistava un modestissimo sviluppatore di Agrigento: Salvatore Sanfilippo. Ebbene, dopo un attento ascolto ho deciso, dall’alto della mia inconfutabile opinione, che antirez, nome d’arte di Salvatore Sanfilippo, è ufficialmente il pioniere Italiano dell’Open Source Software.
Contesto
Verso non ricordo che mese di metà 2024, stavo indagando la causa di un bug su APISIX, quando mi sono imbattuto in un account GitHub che ha suscitato il mio interesse.
Apache APISIX è un API gateway completamente open source, sviluppato da API7 e donato successivamente ad Apache Software Foundation, la più grande community open source al mondo, che lo ha reso pubblico e accessibile sotto licenza Apache 2.0.
APISIX si occupa principalmente di fare il routing delle richieste agli upstream, indirizzandole in base a una serie di regole. Configurandolo adeguatamente e impostando radixtree_uri_with_parameter
come router, è possibile utilizzare, nel pattern matching delle rotte, anche i path parameters. Con questo tipo di router, è possibile definire delle API come le seguenti:
/users/:user_id
/users/:user_id/orders
/users/:user_id/orders/:order_id
In queste API, :user_id
e :order_id
sono dei path parameters, tramite cui è possibile passare dei valori dinamici.
Caratteri Speciali nei Path Parameters
Gli URI seguono lo standard RFC 3986, che definisce una serie di caratteri con significato riservato (ad esempio /
, ?
, #
, %
, &
). Poiché questi caratteri svolgono una funzione specifica nella struttura dell’URI, per rappresentarli come “semplici caratteri” è necessario utilizzare una codifica sicura, chiamata percent-encoding (sezione 2.1 dello standard). Il nome è dovuto al fatto che i caratteri codificati sono preceduti dal simbolo %
.
In un API gateway (o un web server generico), quando si utilizzano delle rotte con path parameters, è necessario codificare adeguatamente i valori assegnati ad essi, altrimenti si generano ambiguità. Ad esempio, definendo un’API /users/:user_id
, un parametro come user_id=abc/def
, romperebbe l’interpretazione dell’API, poiché /
è un carattere speciale, e nell’URI assume il significato di separatore. Per questo motivo, il carattere riservato /
dev’essere codificato con la corrispondente sequenza %2F
, ottenendo il parametro user_id=abc%2Fdef
.
Il Bug
Spataccando con APISIX, mi sono accorto che assegnando a un path parameter alcuni caratteri riservati codificati, APISIX non riusciva a fare il match della richiesta, e restituiva {"error_msg": "404 Route Not Found"}
. Ad esempio, definendo un’API /users/:user_id
, si ottenevano i seguenti casi:
path parameter senza caratteri speciali:
path parameter contenente
%2F
(carattere slash/
percent-encodato):path parameter contenente
%20
(carattere spaziopercent-encodato):
Questo si verifica perché il router radixtree_uri_with_parameter
di APISIX decodifica automaticamente questi valori, prima di effettuare il match della rotta, generando un comportamento anomalo.
Si noti che altri web server, proxy e API gateway, ammettono e gestiscono correttamente questo caso d’uso.
Dunque, abbiamo notificato il problema agli sviluppatori, e successivamente è stata applicata una patch che risolve (in parte) il problema.
Modulo Radix Tree
Prima che gli sviluppatori di APISIX prendessero in carico la richiesta, abbiamo cercato di capire quale poteva essere la causa del problema. E qui entra in gioco il bello di avere a disposizione software open source: sia il codice di APISIX che tutta la catena di dipendenze su cui si basa, sono completamente pubblici, accessibili, e scaricabili da tutti. Inoltre, chiunque può contribuire al progetto (seguendo i giusti criteri e controlli da parte dei maintainer). Per questo motivo, è stato possibile risalire al componente interessato: api7/lua-resty-radixtree.
A questo punto, il povero cristo che sta leggendo questo post probabilmente si starà chiedendo “Ora che so tutto di APISIX e radix tree, cosa me ne faccio? E cosa c’entra con antirez?”. Mio caro e pazientissimo lettore, indovina un po’ gli sviluppatori di APISIX da dove hanno preso l’implementazione di radix tree? :)
Un Passo Indietro
Mentre vagavo tra un repository e l’altro nella catena di dipendenze, cercando di risalire alla radice (eheh radix) del problema…
Che oltretutto, è possibile solo perché il codice è completamente open source (grazie Apache e team di APISIX/API7 🤍)
…Mi sono imbattuto nel codice che implementa l’algoritmo radix tree in APISIX: api7/lua-resty-radixtree. Questo progetto è un modulo OpenResty, che wrappa una libreria scritta in C che implementa, appunto, l’algoritmo radix tree, esponendo delle API Lua che permettono di sfruttarlo per i casi d’uso dell’API gateway. Ma chi ha scritto la libreria C che implementa l’algoritmo? Proprio lui, antirez!
Probabilmente, gli sviluppatori di APISIX/API7, in un certo momento storico, hanno deciso di integrare nel proprio API gateway un router che sfruttasse l’algoritmo radix tree. Nel farlo, piuttosto che reinventare l’acqua calda, hanno cercato dei progetti open source, e si sono imbattuti nella libreria di antirez. Questa libreria è stata resa disponibile sotto licenza licenza BSD 2-Clause “Simplified” (per chi non la conoscesse, è una delle licenze più permissive), e i ragazzi di APISIX/API7 hanno potuto integrarlo nel loro API gateway senza problemi. Inoltre, poiché che nel codice hanno mantenuto la copyright notice, sono stato in grado di risalire al suo profilo GitHub: github.com/antirez.
Stalking su GitHub
Non so per quale strana malattia mentale, ma quando scopro dei progetti interessanti, mi piace spulciare i profili degli autori, per vedere se hanno contribuito anche a qualcos’altro o scoprire di più sulla loro persona. Quando sono finito sul suo profilo GitHub, sono rimasto incredibilmente sopreso nello scoprire che:
- è Italiano (anche se il era un indizio abbastanza evidente), e soprattutto Siciliano;
- scrive la maggior parte dei progetti in C, un linguaggio che amo;
- ha tipo 22.000 follower!
Dopodiché, mi è subito caduto l’occhio sui repository in evidenza:
- rax – A radix tree implementation in ANSI C;
- dump1090 – Dump1090 is a simple Mode S decoder for RTLSDR devices;
- linenoise – A small self-contained alternative to readline and libedit;
- kilo – A text editor in less than 1000 LOC with syntax highlight and search;
- sds – Simple Dynamic Strings library for C;
- disque – Disque is a distributed message broker.
Se tu che stai leggendo questo post conosci antirez, sono sicuro che avrai notato qualcosa di strano: tra queste manca qualcosa di decisamente importante. Non c’è Redis!
Fast Forward ad Aprile 2025
Mi capita su YouTube una puntata del Podcast di Lorenzo Danese, in cui aveva intervistato Salvatore: “Salvatore Sanfilippo @antirez: Open Source, AI” (link al video).
Inizio ad ascoltarlo e, mentre torno a casa da lavoro in macchina, scopro che antirez, che seguo da un annetto su GitHub, è anche il creatore di Redis.
Nel video, pubblicato il 17 Ottobre 2023, Lorenzo e Salvatore affrontano e toccano diversi argomenti:
- parallelismo tra software e architettura, durante cui Salvatore racconta un po’ come si è avvicinato all’ambiente dell’informatica e quali perplessità ha incontrato nel suo percorso scolastico;
- la bellezza e l’importanza del software e dell’open source;
- la storia di Redis, che è il suo più popolare;
- l’importanza di mantenere la creatività, almeno per quanto riguarda la soddisfazione personale, nonostante spesso non sia necessaria, e anzi sia controproducente, per creare valore in un sistema produttivo;
- le sue opinioni sull’Intelligenza Artificiale e il “capitalismo informatico”.
Un’episodio estremamente illuminante e piacevole da ascoltare, che consiglio di recuperare a chiunque, anche chi non ne sa nulla di informatica.
Conclusioni
Scoprire la storia di antirez, è stata una piacevole sorpresa. La sua filosofia e dedizione all’open source sono ammirevoli, e mi è rimasta impressa in particolare l’introduzione del video, che riporto parafrasata:
“Guardarsi allo specchio dopo vent’anni passati in un’azienda, e rendersi conto di aver lavorato solo a progetti terminati, a cose di cui non me ne fregava niente, o richieste di clienti che mi sembravano inutili… Questo mi avrebbe fatto sprofondare in una crisi emotiva. Quindi ho scelto di dedicarmi a ciò che mi appassionava, e di offrirlo gratuitamente.”
Verso la fine del podcast, Salvatore menziona il libro di fantascienza che aveva pubblicato da poco, nel 2022: Wohpe, un romanzo che esplora il rapporto tra umanità e tecnologia, immergendo i lettori in un futuro dove l’IA sfida i confini tra consapevolezza e controllo.