on Drew DeVault's blog

General-purpose OS, special-purpose OS, and now: vendor-purpose OS

Introducing the BARE message encoding

Email service provider recommendations

Status update, June 2020

Can we talk about client-side certificates?

Add a "contrib" directory to your projects

Status update, May 2020

We are complicit in our employer's deeds

How to store data forever

Configuring aerc for git via email

Status update, April 2020

My unorthodox, branchless git workflow

Designing and 3D printing a new part for my truck

The reckless, infinite scope of web browsers

Status update, March 2020

GitHub's new notifications: a case of regressive design

An open letter to Senator Bob Casey on end-to-end encryption

The Abiopause

Thoughts on performance & optimization

Fucking laptops

Status update, February 2020

Dependencies and maintainers

KnightOS was an interesting operating system

The happinesses and stresses of full-time FOSS work

A philosophy of project governance

Status update, January 2020

Following up on "Hello world"

Hello world

Managing my dotfiles as a git repository

PinePhone review

Status update, December 2019

Developers shouldn't distribute their own software

Take action to save .org and prosecute those who sold out the internet

Software developers should avoid traumatic changes


Status update, November 2019

An old-school shell hack on a line printer

Status update, October 2019

How to fuck up software releases

RaptorCS's redemption: the POWER9 machine works

Why Collabora really added Digital Restrictions Management to Weston

RaptorCS POWER9 Blackbird PC review

Don't sacrifice the right ideas to win the right words

Status update, September 2019

How I decide between many programming languages

Building interactive SSH applications

Shell access for CI

Status update, August 2019

DRM leasing: VR for Wayland

FOSS contributor tracks

Status update, July 2019

Announcing code annotations for SourceHut

Absence of certain features in IRC considered a feature

Status update, June 2019

My personal journey from MIT to GPL

Initial pre-release of aerc: an email client for your terminal

What is a fork, really, and how GitHub changed its meaning

Status update, May 2019

Webcast: Reviewing git & mercurial patches with email

Calculating your donation's value following Patreon's fee changes

Announcing Wio: A clone of Plan 9's Rio for Wayland

The "shut up and get back to work" coding style guide

Using Cage for a seamless remote Wayland session

Choosing a VPN service is a serious decision

Status update, April 2019

Announcing first-class Mercurial support on Sourcehut

NewPipe represents the best of FOSS

Rust is not a good C replacement

Status update, March 2019

Announcing the release of sway 1.0

Sourcehut's spartan approach to web design

Tips for a disciplined git workflow

Generics aren't ready for Go

Wayland misconceptions debunked

My experiences at FOSDEM 2019

Why I chose Flask to build's mini-services

Why I use old hardware

I'm going to work full-time on free software

Backups & redundancy at

Patches welcome

Anatomy of a shell

Porting Alpine Linux to RISC-V

How to abandon a FLOSS project, the hacker's forge, now open for public alpha

It's not okay to pretend your software is open source

How does virtual memory work?

Sway 1.0-beta.1 release highlights

Go 1.11 got me to stop ignoring Go

Don't sign a CLA

Sway & wlroots at XDC 2018

Getting started with qemu

Conservative web development

How to make a self-hosted video livestream

The Commons Clause will destroy open source

I don't trust Signal

Setting up a local dev mail server

Writing a Wayland compositor with wlroots: shells

Git is already federated & decentralized

Input handling in wlroots

Simple, correct, fast: in that order

The advantages of an email-driven git workflow

A quick review of my Let's Encrypt setup

Should you move from GitHub to

How I maintain FOSS projects

Embedding files in C programs with koio

Why did we replace wlc?

Introducing scdoc, a man page generator

Redirecting stderr of a running process

Google embraces, extends, and extinguishes

Sway reporting in from KDE's Berlin development sprint

Achtung! Decentralize, decentralize, decentralize!

Hack everything without fear

How to write an IRC bot

Writing a Wayland Compositor, Part 3: Rendering a window

The path to sustainably working on FOSS full-time

Writing a Wayland Compositor, Part 2: Rigging up the server

Writing a Wayland Compositor, Part 1: Hello wlroots

The last years

Introduction to POSIX shell

Sway and client side decorations

Fee breakdown for various donation platforms

Learn about your package manager

fork is not my favorite syscall

wlroots whitepaper available

Firefox is on a slippery slope

A history of emergent intelligence

On taking good care of your phone

Portability matters

Nvidia sucks and I'm sick of it

The future of Wayland, and sway's role in it

Analyzing HN moderation & censorship

Killing ants with nuclear weapons

When not to use a regex

State of Sway August 2017

Archive it or you will miss it

An introduction to Wayland

Limited "generics" in C without macros or UB

Rotating passwords in bulk in the wake of security events

Building a "real" Linux distro

State of Sway April 2017

MSG_PEEK is pretty common, CVE-2016-10229 is worse than you think

Principles for C programming

Compiler devnotes: Machine specs

Lessons to learn from C

The only problem with Python 3's str is that you don't grok it

Actually, you CAN do it

State of Sway December 2016 - secure your Wayland desktop, get paid to work on Sway

A broad intro to networking

Electron considered harmful

Getting on without Google

I'm losing faith in America

Using the right tool for the job

What motivates the authors of the software you use?

[VIDEO] Arch Linux with full disk encryption in (about) 15 minutes

Sway 0.9 & One year of Sway

Using -Wl,--wrap for mocking in C

Life, liberty, and the pursuit of privacy

Understanding pointers

In Memoriam - Mozilla

State of Sway - April 2016

How to write a better bloom filter in C

Please use text/plain for email

Integrating a VT220 into my life

State of Sway - December 2015

Bring more Tor into your life

Please don't use Slack for FOSS projects

A practical understanding of Flux

osu!web - WebGL & Web Audio

Hooks - running stuff on Github hooks

Porting an assembler, debugger, and more to WebAssembly

On the profitability of image hosting websites

Process scheduling and multitasking in KnightOS

Python's datetime sucks

Go's error handling doesn't sit right with me

Hacking on your TI calculator

The bug that hides from breakpoints

Custom Music Syncing on Android

You don't need jQuery