My name is Chris Wellons, though I sometimes use the handle skeeto. I
am a professional software engineer with a passion for software
development. In my day job I regularly develop internal data processing
and data reduction tools, optimize software performance, and mentor
students. Occasionally I also do web development and data
However, this blog — ongoing for more than a decade — is largely
about what I do outside of my day job. Here I explain topics that I’ve
recently learned, share software development techniques I’ve discovered
or even invented, showcase cool demos, and discuss my
contributions to open source.
In general, each of my articles should be unique on the internet at the
time they’re published. I will not write a tutorial on some topic if
there already exist good, reliable tutorials. If I notice a gap on a
topic when learning it myself, then later, once I get the hang of it,
I’ll fill that gap by publishing an article or two.
This blog is 100% transparent. Its complete source is in a Git
repository. From there you can see every single correction and
update I make.
Open Source Projects
Here are some of the more well known open source projects I’ve started.
w64devkit: a portable C and C++ development kit for Windows. It
includes every tool you need to comfortably build anything
from high performance data crunchers to graphical games.
Elfeed: an extensible syndication feed (RSS, Atom) reader
for Emacs. I’ve written lots of articles about it.
Endlessh: an SSH tarpit. It keeps hostile bots harmlessly
tied up doing nothing while your server goes about its normal
Enchive: encrypted personal archives. I’ve written about
the purpose behind this tool.
Am I Shadowbanned?: test if your reddit account has been
shadowbanned. Not nearly as important as it once was, but still
binitools: an old modding tool for the Freelancer space
flight sim. I wrote it in college before starting this blog. There are
still old copies floating around in various modding tool collections.
The version linked here is a much more recent rewrite. The original
source is still there, but on its own branch.
synSpace Map Editor: a map editor for an old-school 2D
space shooter game. I initially developed this when I was a
high school student, which is why it’s written in Visual Basic 5.0. In
college I made major updates to the interface, and that’s what is in
the repository. This was the first tool I ever wrote that was actually
used productively by other people.
I have hundreds more open source projects, but these are the
most popular ones.
I’m a strong believer in the public domain. A healthy society needs a
rich and growing public domain.
Software licenses annoy me and cause significant, unnecessary
friction. Whenever possible, I put public domain dedications on
all my open source projects, generally via the Unlicense.
This very blog has a public domain dedication notice at the bottom of
each page. Even my personal dotfiles are in the public
If you use my work I do appreciate getting credit, but I do not legally
Most Popular Articles
These are my ten most visited articles. Some of these articles are
popular enough to have been translated.
- Raw Linux Threads via System Calls
- Interactive Programming in C
- A GPU Approach to Path Finding
- A GPU Approach to Particle Physics
- C11 Lock-free Stack
- Switching to the Mutt Email Client
- Minimalist C Libraries
- Small, Freestanding Windows Executables
- Leaving Gmail Behind
- A Basic Just-In-Time Compiler
These are not necessarily my personal favorites, but they do seem to be
what others find most useful.
I also have a published paper: ROP Gadget Prevalence and Survival under
Compiler-based Binary Diversification Schemes
Occasionally someone is particularly happy with my open source work or
articles, and they’ll ask if they can somehow donate money in support. I
make a very comfortable living outside of my blog, so such donations are
neither needed nor motivating. I’d much prefer your donation go to more
beneficial and effective causes than be wasted on a stingy miser like
me. So, instead, donate to GiveWell. It’s a sort of
meta-charity that continuously analyzes where donations will have the
greatest impact in the world and directs your money in that direction.
In general I stick to smaller, simpler tools — especially those I can
modify and compile for myself. Sometimes this isn’t possible (e.g. web
browsers), so I just use what’s popular despite it being neither.
My preferred operating system is Debian. It has a great philosophy and
rock solid package ecosystem. Since I don’t like software changing
underneath me, I strictly run the stable distribution. Of course I can
still be productive on other Linux distributions or even any of the
various BSDs. My dotfiles are quite portable and mostly work across all
Despite all my articles about Emacs over the years, I actually do most
of my work in Vim, including writing blog articles and email. Like
a vice, I pretty much only use Emacs for writing Emacs extensions.
I use Openbox as my window manager, and without any extra
adornments (panels, taskbar, etc.).
My favorite programming language is C. It’s fast, simple, and
compiles very quickly. Unlike many other languages, it’s quite
reasonable for an individual to have a comprehensive understanding of the
entire language. C is my default choice unless something else is
particularly better suited (Go, Python, shell script, etc.). My second
favorite language is Go: it has most of C’s strengths and the best
tooling of any language. There’s also a special place in my
heart for Emacs Lisp, a venerable goofball language that’s so much fun to
My preferred build tool is plain old POSIX
make. If this sounds
strange, then it’s probably cleaner and more capable than you
realize. There’s little need for GNU Autoconf and friends when
you write portable code.
I use Mutt for reading email. It’s not perfect, but it’s close
enough. OpenPGP and email encryption are a technological dead end, so I
don’t bother with it. I’ve never needed end-to-end encrypted
communication with strangers, so I haven’t investigated the
For consuming multimedia, I use mpv. I love how I can drive it
completely and precisely from the keyboard. If anything, its minimal
interface is still too cluttered for my tastes. Combined with
youtube-dl (and my front-end), I watch more
(ad-free) YouTube than is probably healthy.
In years past I may have proudly listed my favorite source control tool,
but these days you have to be a little nutty not to have already
surrendered to Git’s dominance.
For most email related to my blog and projects, I have a public
inbox serving as a public forum. Consider using this first.
For private or personal messages, use my personal email address listed
at the top of this page.
I accept patches in both my private and public inboxes. This
means you can contribute changes without, say, a GitHub account.
This is the key I use to sign important pieces of information, such as
Git tags and software releases. It interoperates perfectly with my
-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----
Isn’t that a little short for a PGP key?
- It’s an elliptic curve key, which has better security in a smaller
package. You’ll need newer software in order to use it.
- It’s a sign-only primary key with no subkeys. If you want to send me
an encrypted message, I’ll send you a short-term encryption subkey
- I generated this key using my own software, so it lacks the
unnecessary cruft normally attached to public keys. Further, the
secret key is never stored in any medium and is instead generated on
demand when computing signatures.
Here’s an example cleartext signature to try it out.
-----BEGIN PGP SIGNED MESSAGE-----
My website: https://nullprogram.com/
My GitHub account: https://github.com/skeeto
My favorite color: Orange
-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
It’s wonderful having such concise keys and signatures!