Hi, I am Giovanni.
I am a System Software Engineer. I have a keen interest in operating systems, game engines and compilers. I specialize in Linux system development (userspace and kernelspace)
Get in contact with me:
- preferably via email at giovanni.santini@proton.me,
- on mastodon @santo7@mastodon.social.
- check out my blog
- on IRC, I go by "santo_".
Below you can find a list of some of my projects, you can also click here to visualize them by category.
Projects Overview
Here is a very high level picture of how my projects are structured. The vision is to rewrite the entire software stack from scratch, focusing on developer "platforms" which are used to build applications. I believe this is necessary to develop the deep technical experteese that I want to have to meaningfully contribute to technology.Ideally all code should be designed with the following characteristics:
- cross platform support (cross-OS and cross-architecture), natively compiled
- well-defined and well-engineered abstractions
- easy to hack and extend (like plugin systems)
- depend only on a minimum set of core libraries and tools
- releases with the same major are all backward compatible
- Brenta Engine: a 3D renderer and game engine in modern C++, with a custom ECS framework website. Satellite projects:
- micro-engine.h: micro header-only, portable game engine in C99. website
- povOS: povOS is an operating system for an IBM-compatible PC using the x86_64 architecture. Supports virtual memory, multitasking and some drivers, with a custom bootloader.
- kivebpf: eBPF-powered file access monitoring Kubernetes operator
- The Kibebpf website: more documentation about the operator
- Baldo scanner: malware scanner daemon for linux using a kernel module
- povolang: embeddable programming language (work in progress)
A collection of high-quality, configurable, header-only libraries written in C99. The libraries are designed to be highly reusable, simple to maintain with little to no dependencies, and easy to integrate in your projects. website
- micro-tests.h: lightweight testing framework, with multithread support and run-time settings
- micro-log.h: configurable, thread safe logging framework in C99. With lots of features
- micro-draw.h: a 2D software renderer
- Projects that use this renderer: cosu, cgis, game-of-life (wasm)
- micro-lex.h: simple lexer for lisp-like languages, and others. See also justlex-rs crates.io
- micro-arena.h: memory allocator (first fit). It implements the common memory functions from stdlib.h.
- micro-flag.h: tiny library to parse command line arguments
- micro-module.h: define, load, and unload runtime modules / plugins with a simple C99 API
- micro-serde.h: serialization library for C99, in ~150 lines of code.
- micro-bench.h: micro benchmarking library
- micro-conf.h: library to parse config files
- micro-fswatcher.h: listen to events in multiple files on the filesystem
- micro-hash.h: quick and dirty hash functions in C99, with some benchmarks
- micro-la.h: linear algebra types and functions
- hll.h: configurable, header-only implementation of HyperLogLog, used for approximating the cardinality of large multisets
- bloom-filter.h: configurable, header-only implementation of bloom filters, a space-efficient probabilistic data structure that is used to test whether an element is a member of a set
- rendezvous-hasher.h: dependency-free implementation of Rendezvous Hashing (a.k.a. Highest Random Weight hashing), useful for distributing keys across a dynamic set of nodes
- consistent-hasher.h: implementation of consistent hashing, alternative to rendezvous-hashing
- hashmap.h: implementation of an hashmap for any type
- hashset.h: implementation of an hashset for any type
- llist.h: type-safe, generic doubly-linked list in C99
- liblaunchpad.h: abstraction layer over Novation's Launchpad S through ALSA, as an header-only C99 library
- micro-example.h: example header-only library in C99 used as a template project, in the style of the great micro-headers
- game-of-life.h: Conway's Game of Life logic implementation
Related projects:
- micro-style.css: minimal, simple, tunable style for your websites
- micro-website: generate a static website from markdown files
- micro-templating.c: generate a file from a template, in ~200 lines of code
- micro-timerd: client-server application to start, stop and list timers
- micro-audio.c: tiny wrapper over miniaudio for managing audio sounds and streams
- micro-sprite: simple drawing tool.
- lkde-tool: develop and test kernel patches and applications in multiple kernel branches, trees, architectures and configurations.
- xorcrypt.rs: encrypt / decrypt files with XOR encryption
- mapkg: my packet manager
Projects showcasing how to use various technologies.
- fft.c: implementation of Discrete Fourier Transform (DFT) and Fast Fourier Transform (FFT) in C99, with a bonus cool music visualization.
- ld-preload-sample: sample LD_PRELOAD demonstration to replace libc functions
- ebpf-c-sample: sample project for an eBPF program + loader in C with libbpf and clang
- example-lua-binings: example project for creating bindings between Lua and C/C++.
- raytracer: a simple raytracer
- rustemu: KVM virtual machine example
- rust-c-wrapper: how to create a wrapper of a C library in Rust
- opentelemetry-cpp-sample: sample C++ application with OpenTelemetry instrumentation to emit telemetry data
- linux-kernel-module: hello world kernel module with a full developement setup using qemu
- linux-kprobe-example: example kernel module that registers a kprobe on a syscall
- linux-tracepoint-example: example kernel module registering a tracepoint
- linux-perf-event-example: example kernel module registering a software perf event through a Performance Monitor Unit (PMU)
- micro-gl-sample: simple setup project for OpenGL graphics
- x509-examples: examples for generating and storing an RSA key pair and a self-signed x509 certificate (RFC 5980), in C and Go
- go-chat-server: a server and client for a minimal text-based chat in Go
- elixir-blockchain: a simple blockchain library implemented in elixir
- llvm-ir-samples: Several examples of LLVM IR
- povOS: povOS is an operating system for an IBM-compatible PC using the x86_64 architecture
- rpi3B-os: an operating system for the Rasbperry Pi 3B
- lkde: Linux Kernel Development Environment: the right tool for the day-to-day hacker
- hello-pico2: collection of examples on the Raspberry Pi Pico2.
- liblaunchpad.h: abstraction layer over Novation's Launchpad S through ALSA, as an header-only C99 library
- pi2-oscilloscope: Raspberry Pi Pico 2 based Oscilloscope
- hello-stm32-blue-pill: example projects for the STM32 "Blue Pill" (private for now)
- hello-esp32: Example projects for the ESP32 (private for now)
- haplolang: a Lisp-like, s-expression based, imperative, strongly typed programming language
- The Design and Implementation of Haplolang: my notes after implementing the language
- wlevico: my own wayland compositor
- minipiano.c: play the piano using sinewaves and your keyboard!
- cosu!: a rhythm game written in C, (not yet fully) compatible with osu!mania maps.
- snakepp: simple demo of snake in C++, using SFML
- Introduction-to-machine-learning: useful notes for students studying for an introductionary course to Machine Learning, or to anyone interested in the subject
- design-patterns-cpp: implementation of common design patterns in C++, useful reference for many projects
- modern-cpp-template: a template for c++ libraries
- parallel-computing-cpp: MPI and OpenMP algorithms and benchmarks
- cycloidal-curves: cycloidal curves interactive visualization. website
- fixmi: business management software using microservices.
- repo-graph: visualize GitHub repositories through a graph based on their topics.
- Algorithms and Data Structure course (Italian): high quality notes from my Algorithms university course
- react-express-template: a meplate for web applications using node, express, typescript, react, tailwind, docker.
- webgl-3D-renderer: a 3D renderer in WebGL and Angular
- tiny-rss: RSS feeds generator for org mode
- musync: download music declaratively
- ssap: local password encryption manager written in in Rust
- rust-lc3: implementation of a virtual machine for LC-3
- robotUI: bevy visualizer for Advanced Programming 2023 @Unitn
- rust-pomodoro-timer: TUI study timer written in Rust
- rust-music-player: a TUI music player written in Rust
- broutines: goroutines and coroutines implemented in C
- stock-exchange-py: simple logic implementation of a stock exchange in Python.
- chttps: https server in C with server-side rendering
- cchecker: borrow checker in C++
- regEZ: fully constexpr regex implementation in modern C++
- go-ebpf: example eBPF program in go
- risto89: online tickets market in java
- ledger-board: highly scalable transaction producer/consumer app, built with Kubernetes, Kafka, Django, Angular, Nginx, Redis, Celery, Docker
- how-to-root-samsung-galaxy-j5: instructions to root a Samsung Galaxy J5
- hypr-nerd-gestures: control hyprland through hand gestures, using openCV
- launchpad-app-launcher: launch commands from a novation's launchpad
- modern-python-template
- youtube-minuature-generator
- many more...
Code extracted from my other projects that can be easily reused, or implementation of simple algorithms.
- unix_server.c: Create an unix socket server that reads data sent to it
- inet_server.c: Create an inet server that reads data sent to it
- set_signals.c: Setup an handler for various POSIX signals
- sdl_window.c: Create an SDL3 window and poll events
- mmap_file.c: Read a file's contents using mmap, faster than read(2). Neat optimization on POSIX systems
- traverse_dir.c: Traverse a directory recursively and call handle_file on each file
- djb2.c: Simple hash function for strings
- lcg.c: LCG algorithm for fast pseudo random number generation
- utils.h: Utility macros for C projects
- mandelbrot.c: Get the number of iterations of a point in the Mandelbrot set
- left_space.c: Get number of separator charactes from the left of a string in C99
- clear_screen.c: Clear the terminal screen using ANSI control sequences
- delta_time.c: Calculate the frame delta time and render a certain number of times per seconds in C99
- time_sec.c: Get the time in seconds in C
- xorshift_rng.c: xorshift algorithm for generating pseudo random numbers
- Makefile: Simple Makefile template for C projects
- CMakeLists.txt: Modern Cmake template for C++ projects
- windows-commands.ps1: Useful Microsoft Windows commands
- yt-dl-mp3.sh: Download mp3 music from youtube
- replace-string.sh: Replace all occurrences of a string in all files recursively.
- k-means.py: Implementation of k-means clustering in Python
- scikit-sample.py: Example of using a ML model with scikit-learn
- hello_world.asm: Hello world x86-64 assembly on Linux
- black-and-white-screen.glsl: Use picom and a glsl shader to render the screen black and white
- static-ip-over-ethernet: Set a static ip on two computers connected via ethernet so that they can communicate
- knn.c: Implementation of KNN for supervised learning classification on a one-dimensional dataset in C
- perceptron.c: Implementation of a perceptron for binary classification in C
- generate-debuginfo: Separate debuginfo and executable in two different files
- gcc-print-definitions: Print all the #define symbols and their values with gcc or clang
- ohm-law: Ohm's law cheatsheet
- calling-conventions-x86-32-64: Calling conventions for i386 and i686
- ffi_wasm_c_js.md: ffi C to JS and JS to C using wasm
- sha1.c: sha1 implementation from nginx (src/core/ngx_sha1.c)
- md5.c: md5 implementation from nginx (src/core/ngx_md5.c)
Custom configurations for my daily development setup and workflow.
- .emacs.d: my emacs configuration
- dwm: my fork of DWM and DWL
- home-lab: home lab experiments, with lots of useful notes
- init.lua: simple Neovim configuration without too much bloat
- i3config: i3 configuration, I use it as a fallback
- lfs: my Linux From Scratch distribution
- nixos-dotfiles: my (outdated) nixos setup
- obsidian-chill-theme: my custom obsidian theme
- obsidian-advanced-slided-theme: custom theme for obsidian advanced slides
These are the libraries that I use the most in my projects and that I find incredibly useful.
- RGFW (C99): when you just want to open a window in a cross-platform way, love it!
- stb headers (C): great source of inspiration and knowledge. There are some other headers in the creator's website such as stb_malloc.c.
- raylib (C99): simple 2D/3D graphics library
- micro-headers (C99): my own cool libraries for all my other projects
- csynth (C): A simple synth in C, very fun to explore the code, It is somewhat unusual and enlightening.
- luigi (C): single header GUI framework in C. It is absurdly simple and well written, amazing read.
- nginx (C): even if it is not a library, each source file is well divided from the others so that you can copy paste almost everything in your projects!
- SDL (C): my goto library for writing desktop applications
- miniaudio (C): my goto library to play and mix audio
- SFML (c++17): another great multimedia library, more ideomatic for C++
- moviepy (Python): edit videos from python
- wren (C): the most elegantly implemented programming language I have ever seen
- pi-pico-freertos-starter: template for running FreeRTOS on a Raspberry Pi Pico 2
- rp2350-bare-metal-build: bare metal programming for the Raspberry Pi Pico 2
- POSIX-UEFI: Dependency-free POSIX compatibility layer and build environment for UEFI
Minor contributions all over the interweb:
- riscv/riscv-opcodes#375: Correct parse.py example
- ColleagueRiley/RGFW#329: fix example program
“What I cannot create, I do not understand.” – Richard Feynman




