Today, I stumbled upon a 2023 podcast where Italian YouTuber Lorenzo Danese interviewed an exceptionally humble developer from Agrigento: Salvatore Sanfilippo. Well, after listening carefully, I’ve decided – from the lofty heights of my irrefutable opinion – that antirez, Salvatore Sanfilippo’s alias, is officially Italy’s pioneer of Open Source Software.

Context

Sometime around mid-2024 (I don’t recall the exact month), I was investigating a bug in APISIX when I came across a GitHub account that piqued my interest.

Apache APISIX is a fully open-source API gateway developed by API7 and later donated to the Apache Software Foundation, the world’s largest open-source community, which made it publicly available under the Apache 2.0 license.

APISIX primarily handles request routing to upstream services based on a set of rules. When configured with the radixtree_uri_with_parameter router, it can also use path parameters for route matching. With this router, APIs like the following can be defined:

  • /users/:user_id
  • /users/:user_id/orders
  • /users/:user_id/orders/:order_id

Here, :user_id and :order_id are path parameters that allow dynamic values.

Special Characters in Path Parameters

URIs follow the RFC 3986 standard, which defines a set of reserved characters (e.g., /, ?, #, %, &). Since these characters serve specific functions in URI structure, they must be encoded safely – using percent-encoding (Section 2.1 of the standard) – to be treated as literal characters. The name comes from the % prefix used in encoded sequences.

In an API gateway (or any web server), when using routes with path parameters, values must be properly encoded to avoid ambiguity. For example, with an API like /users/:user_id, a parameter like user_id=abc/def would break interpretation because / is a reserved separator. Thus, / must be encoded as %2F, yielding user_id=abc%2Fdef.

The Bug

While messing around on APISIX, I noticed that when certain percent-encoded reserved characters were used in path parameters, APISIX failed to match the request and returned {"error_msg": "404 Route Not Found"}. Here is what I was seeing at the time, with /users/:user_id:

  • Path parameter without special characters:

    curl -s "http://localhost:9080/users/abc123"
    {"result": "ok", "user_id": "abc123"} 
    
  • Path parameter with %2F (encoded /):

    curl -s "http://localhost:9080/users/abc%2Fdef"
    {"error_msg": "404 Route Not Found"}
    
  • Path parameter with %20 (encoded space ):

    curl -s "http://localhost:9080/users/abc%20def"
    {"error_msg": "404 Route Not Found"}
    

This happens because the encoded values get decoded before route matching, causing unexpected behavior. At the time I put the blame on APISIX’s radixtree_uri_with_parameter router; as it turned out later, for %2F the decoding happens earlier still, in Nginx itself.

Note: Other web servers, proxies, and API gateways handle this use case correctly.

The %20 case turned out to be already known, and a patch merged in November 2024 fixed it. %2F, on the other hand, kept returning a 404, so we reported that one to the APISIX developers.

The complete fix took a while: in July 2026 APISIX merged match_uri_encoded_slash, an opt-in option that preserves %2F during route matching, closing the issue a year and a half after it was opened.

The Radix Tree Module

But let’s go back to mid-2024. Before any of that landed, we had tried to diagnose the root cause ourselves. And here’s the beauty of open-source software: APISIX’s code and its entire dependency chain are fully public, accessible, and downloadable by anyone. Moreover, anyone can contribute (subject to maintainer reviews). This led us to the component we ended up focusing on: api7/lua-resty-radixtree.

At this point, the poor soul reading this post might wonder: “Now that I know everything about APISIX and radix trees, what’s the point? And how does antirez fit in?”. Well, dear patient reader, guess where APISIX developers got their radix tree implementation from? :)

A Step Back

As I wandered through the dependency chain, trying to get to the root cause (heh, radix)…

Which however is only thanks to the code being fully open-source (shoutout to Apache and APISIX/API7 🤍)

…I ended up inside the code of api7/lua-resty-radixtree: an OpenResty module that wraps a C library that implements the radix tree algorithm, exposing Lua APIs for API gateway use cases. And who wrote that C library? antirez himself!

Likely, APISIX/API7 developers, at some point, decided to integrate a radix tree-based router into their gateway. Instead of reinventing the wheel, they found antirez’s open-source library, available under the permissive BSD 2-Clause “Simplified” license (for those who don’t know, it is one of the most permissive licenses) and integrated it. Crucially, they retained the copyright notice, which led me to his GitHub profile: github.com/antirez.

GitHub Stalking

I don’t know what mental quirk drives this, but when I discover interesting projects, I love digging into the authors’ profiles. Upon landing on antirez’s GitHub, I was stunned to learn:

  1. he’s Italian (even though the name was a pretty obvious hint) and Sicilian;
  2. he writes most projects in C, a language I adore;
  3. he has 22,000 followers!

Then, I spotted his pinned repositories:

  • rax – A radix tree implementation in ANSI C;
  • dump1090 – A Mode S decoder for RTLSDR devices;
  • linenoise – A minimal alternative to readline/libedit;
  • kilo – A sub-1000-LOC text editor with syntax highlighting;
  • sds – Simple Dynamic Strings library for C;
  • disque – A distributed message broker.

If you know antirez, you’ve probably noticed something glaringly missing: Redis!

Fast Forward to April 2025

A YouTube episode from Lorenzo Danese’s podcast popped up: “Salvatore Sanfilippo @antirez: Open Source, AI” (video link).

As I listened on my commute, I discovered that antirez – whose GitHub I’d followed for a year – was also the creator of Redis.

In the interview, published on October 17, 2023, Lorenzo and Salvatore covered:

  • parallels between software and architecture;
  • Salvatore’s journey into tech and his critiques of formal education;
  • the beauty and importance of open-source software;
  • the story behind Redis, his most famous project;
  • balancing creativity with productivity in tech;
  • opinions on AI and “tech capitalism.”

An enlightening and enjoyable episode, which I highly recommend, even to non-technical listeners.

Conclusions

Learning about antirez’s story was a delightful surprise. His philosophy and dedication to open source are inspiring, especially this paraphrased quote from the podcast:

“Looking in the mirror after 20 years at a company, realizing I’d only worked on abandoned projects, things I didn’t care about, or client requests that felt pointless… That would’ve crushed me. So I chose to work on what fascinated me and give it away for free.”

Toward the end, Salvatore also briefly mentioned his sci-fi book, published in 2022: Wohpe, a novel exploring humanity’s relationship with technology in a future where AI blurs the line between awareness and control.