About Me

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 visualization.

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.

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 domain.

If you use my work I do appreciate getting credit, but I do not legally mandate it.

These are my ten most visited articles. Some of these articles are popular enough to have been translated.

  1. Raw Linux Threads via System Calls
  2. Interactive Programming in C
  3. A GPU Approach to Path Finding
  4. A GPU Approach to Particle Physics
  5. C11 Lock-free Stack
  6. Switching to the Mutt Email Client
  7. Minimalist C Libraries
  8. Small, Freestanding Windows Executables
  9. Leaving Gmail Behind
  10. 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.

Software Preferences

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 of them.

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 discuss.

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 alternatives.

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.

Cryptographic Identity

This is the key I use to sign important pieces of information, such as Git tags and software releases. It interoperates perfectly with my verification script.



Isn’t that a little short for a PGP key?

  1. It’s an elliptic curve key, which has better security in a smaller package. You’ll need newer software in order to use it.
  2. 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 first.
  3. 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.

Hash: SHA256

My website: https://nullprogram.com/
My GitHub account: https://github.com/skeeto
My favorite color: Orange



It’s wonderful having such concise keys and signatures!

null program

Chris Wellons

wellons@nullprogram.com (PGP)
~skeeto/public-inbox@lists.sr.ht (view)