Sono un DevOps engineer e un CKA. In Turkish Aerospace (TUSAS)
ho costruito e gestito infrastruttura containerizzata su Kubernetes, ho guidato la migrazione di application server
come Tomcat dalle VM tradizionali e ho ottimizzato le pipeline GitLab CI/CD che portavano tutto in produzione.
Prima ancora, in ASELSAN, ho fatto girare su Kubernetes, con KubeVirt, software legacy che non si poteva containerizzare.
Credo che i migliori ingegneri ops conoscano il livello sotto quello che gestiscono, quindi ci sono andato di proposito.
Ho scritto un container runtime partendo da namespace e cgroup nudi, e un connection tracker in eBPF/XDP. Ho anche
compilato un kernel RTOS embedded con ASPIS, uno strumento basato su LLVM che protegge il codice dai bit flip causati dalle radiazioni. Ora sto concludendo una tesi magistrale sul networking kernel-bypass al Politecnico di Milano.
Lontano dal terminale gioco a tennistavolo con l’AON Milano Sport nel campionato italiano.
ruolo
DevOps engineer
studio
Laurea magistrale, Politecnico di Milano
lang
Go · Python · Bash
passioni
XDP, AF_XDP, eBPF, QUIC
sede
Milano · disponibile a trasferirmi
stato
disponibile
cerco
DevOps · platform · SRE
anche
software di rete
L2 Collegamento dati · ciò che unisce tutto
lsmod
I moduli caricati in questo ingegnere. Cliccane uno per vedere dove l’ho usato, al lavoro o nei progetti.
ModuloAreaUsato da
L3 Rete · come sono arrivato qui
traceroute osman
traceroute to osman (present), 30 hops max, 60 byte packets
1Laurea triennale in Ingegneria Informatica@ Università di Ankara2018 – 2023
Laureato con una media di 3,81 / 4,0 (GPA)
Ho iniziato a lavorare nell’industria durante gli studi, prima come stagista in ASELSAN e poi in TUSAS
2Stagista DevOps@ ASELSANago – set 2022
Con KubeVirt ho fatto girare come VM su Kubernetes software legacy non containerizzabile, così VM e container condividevano un unico control plane
3DevOps Engineer@ Turkish Aerospace (TUSAS)nov 2022 – set 2024
Ho costruito e mantenuto infrastruttura containerizzata su Kubernetes
Ho guidato la migrazione degli application server (ad es. Tomcat) da deployment sul sistema operativo a Kubernetes
Ho risolto problemi e ottimizzato le pipeline GitLab CI/CD di integrazione e deployment
Ho scritto automazioni in Bash e Python che hanno tolto al team il lavoro ripetitivo
4Laurea magistrale@ Politecnico di Milanoset 2024 – dic 2026
Tesi: networking kernel-bypass per un relay Media-over-QUIC (scopri di più)
5* * * richiesta scaduta. Forse il tuo team è il prossimo hop?invia SYN →
L4 Trasporto · la mia tesi magistrale
Tesi
Accelerating a Media-over-QUIC Relay with AF_XDP Kernel-Bypass Networking
Osman Bugra Dagli · Politecnico di Milano · gen 2025 – oggi
Media over QUIC (MoQ) è un protocollo IETF emergente per la distribuzione di media in diretta, e i relay ne sono il cuore.
Ogni pacchetto che inoltrano attraversa lo stack di rete del kernel. Questa tesi misura quanto costa
nel relay moxygen di Meta e toglie il kernel da quel percorso.
Un’analisi del tempo CPU basata su perf mostra che il relay è limitato dalla CPU di un singolo core, a circa
l’1% della velocità di linea da 100 Gbit/s della NIC, e che l’I/O dei pacchetti nel kernel occupa il 16–29% del tempo
attivo di quel core. Ho costruito un fast path AF_XDP e l’ho collegato allo stack QUIC tramite un
punto di iniezione dei socket: il punto in cui il server sceglie quali socket UDP usa QUIC. L’intero percorso
UDP RX/TX del relay ora passa per AF_XDP senza modificare la logica di inoltro del relay; l’unica
modifica al server sono poche righe, attivabili con un flag, che installano la socket factory AF_XDP.
Il margine è stato misurato prima, con un microbenchmark del percorso di ricezione sullo stesso hardware e senza
lavoro applicativo per pacchetto: su un core, AF_XDP zero-copy riceve circa 2,4 volte più pacchetti al
secondo del percorso kernel ottimizzato.
microbenchmark del percorso di ricezione, un core (milioni di pacchetti/s · UDP da 1500 byte · nessun lavoro per pacchetto · Intel E810)
kernel · recvmmsg + GRO (ottimizzato)~0,65
AF_XDP · zero-copy~1,55
~2,4× per core
prima: ogni pacchetto attraversa il kernel
NIC
driver · sk_buff
UDP stack
recvmmsg
QUIC
relay
dopo: kernel bypass
NIC
XDP redirect
UMEM (zero-copy)
AF_XDP socket
injection seam
QUIC
relay
Contributi
Una pipeline basata su perf che scompone il tempo CPU per core lungo il data path del relay
Un microbenchmark del percorso di ricezione sull’hardware del testbed: AF_XDP zero-copy raggiunge ~1,55 Mpps su un singolo core, contro ~0,65 Mpps di un percorso kernel ottimizzato (recvmmsg + GRO)
Un percorso RX/TX AF_XDP per il relay, in un nuovo modulo xdp/ di moxygen
Un punto di iniezione dei socket, costruito sulla socket factory di proxygen, che sposta il relay su AF_XDP lasciando invariata la sua logica di inoltro
Un testbed CloudLab riproducibile: un solo profilo prepara le macchine, applica le patch a moxygen e proxygen, sincronizza gli orologi con PTP per la latenza one-way ed esegue gli esperimenti di fan-out, throughput e flame graph
Cose che ho costruito per capire come funzionano. Filtrale con la tabella lsmod qui sopra.
Miosix resistente alle radiazioni
LLVM · STM32 · 2026
In orbita, una particella carica può invertire un bit in un registro o in RAM. È un single-event upset,
e il codice continua a girare con un valore sbagliato. ASPIS è un plugin LLVM dell’HEAPLab del Politecnico di Milano
che protegge il codice da questo problema a livello della rappresentazione intermedia (IR) di LLVM. L’ho integrato nella build di Miosix, un RTOS
embedded, così il kernel stesso viene compilato in versione protetta per un STM32F407.
Prova: clicca un bit qualsiasi di x per colpirlo con un raggio cosmico. EDDI (error detection by duplicated instructions) tiene una copia ombra di ogni valore e confronta le due prima di usarlo.
x0x2A
x′ ombra0x2A
icmp eq x, x′ è vero, quindi l’esecuzione continua.
C / C++
clangemits LLVM IR
llvm-link
ASPIS passesEDDI + CFCSS
codegen
.elf → .binobjcopy
STM32F407
Un modulo CMake che fa passare qualsiasi target per la pipeline clang → opt → link e salta automaticamente i file assembly
Ogni pass si può scegliere dallo script di build: duplicazione dei dati (eddi, reddi, seddi, fdsc) e controllo del flusso (cfcss, rasm, inter-rasm, racfed)
Ho compilato l’intero kernel con ASPIS, poi sono passato a una protezione selettiva con annotazioni sullo scheduler
Un toolchain file clang che può puntare a qualsiasi installazione di LLVM, più un passaggio objcopy che produce un .bin pronto da flashare
containerrt
Go · mar 2026
Un container runtime minimale scritto da zero sulle primitive Linux, senza runc né libcontainer.
Volevo sapere esattamente cosa fa docker run prima che il processo parta.
clone()NEWUTS · NEWPID · NEWNS
pivot_roothost root fully unmounted
tmpfs /devessential device nodes
cgroup v2limits applied by parent
pipe barrierchild waits for setup
exec
Isolamento con i namespace UTS, PID e mount
pivot_root invece di chroot: la root dell’host viene smontata, non solo nascosta
Un /dev tmpfs effimero con i soli device node essenziali
Una barriera di sincronizzazione su pipe tra padre e figlio garantisce che il processo parta già dentro i limiti cgroup v2, senza race con il setup
Un vero init: raccoglie gli zombie, inoltra SIGINT/SIGTERM ed esce con il codice del processo (128 + segnale)
Testato con tentativi di evasione, monitoraggio di pids.current e OOM kill sotto memory.max
conntracker
eBPF/XDP · mag 2025
Connection tracking e fingerprinting TCP che girano nel kernel, a livello XDP, prima ancora che lo stack
di rete allochi un sk_buff.
Macchine a stati TCP e UDP in eBPF, con metriche per connessione
Estrae le sequenze di opzioni TCP (MSS, SACK, timestamp, window scale) per il fingerprinting di sistema operativo e stack
Un demone user-space in C carica una configurazione YAML, aggancia il programma ed espone statistiche e ban list via HTTP
Count-Min sketch e filtri di Bloom per un filtraggio rapido a soglia con memoria limitata
cd2alloy
Python · metodi formali
Trasforma diagrammi delle classi UML in modelli Alloy, così un progetto si può verificare con il model checking
invece di limitarsi a rileggerlo. Disegni il diagramma in PlantUML, esporti l’XMI e apri il .als generato nell’Alloy Analyzer.
Lettore XMI → modello delle classi (classi, classi di associazione, enum) → traduttore Alloy
Sceglie tra le librerie di base di Alloy a seconda che il diagramma usi enum e valori degli attributi
Verificato su soluzioni reali degli esami di Software Engineering 2
cloud-storage
Go · HTTP/3
Un file server self-hosted su HTTP/3 (QUIC). TCP+TLS e QUIC/UDP condividono la stessa porta.
I browser arrivano via TCP, vedono Alt-Svc e passano a HTTP/3 da soli.
Nomi dei file protetti da path traversal e byte di controllo/NUL
Scritture sicure contro le collisioni, che non sovrascrivono mai un file
Middleware di autenticazione con API key; il server si rifiuta di partire senza una chiave
L6 Presentazione · stessi dati, codifiche diverse
iconv
Il livello di presentazione traduce tra formati diversi. Eccomi in alcuni di questi.
$ iconv -f osman -t <locale>
tr_TR.UTF-8Türkçemadrelingua
en_US.UTF-8Englishprofessionale
it_IT.UTF-8ItalianoB1, migliora ogni giorno
$ openssl x509 -in osman.crt -noout -text
Subject: CN = Osman Bugra Dagli
Issuer: O = The Linux Foundation, OU = CNCF
X509v3 Extended Key Usage:Certified Kubernetes Administrator (CKA)Verify return code:0 (ok)
$ iconv -f osman -t application/pdf > cv.pdf
La stessa storia in una pagina, per chi preferisce la carta. (in inglese)