Drew DeVault's blog

December 25, 2020 H0 H0 H0 [what is gemini://?]
December 25, 2020 How to design a new programming language from scratch
December 18, 2020 godocs.io is now available
December 15, 2020 Status update, December 2020
December 12, 2020 Become shell literate
December 4, 2020 Web analytics should at least meet the standards of informed consent
November 29, 2020 俺のスカイツリー旅行 [what is gemini://?]
November 20, 2020 A few ways to make money in FOSS
November 17, 2020 We can do better than DuckDuckGo
November 15, 2020 Status update, November 2020
November 12, 2020 Copying ain't stealing [what is gemini://?]
November 10, 2020 My experience as a poll worker in Pennsylvania [what is gemini://?]
November 8, 2020 Hacker News over Gemini [what is gemini://?]
November 6, 2020 Utility vs usability
November 1, 2020 What is this Gemini thing anyway, and why am I excited about it?
October 23, 2020 I'm handing over maintenance of wlroots and sway to Simon Ser
October 22, 2020 Firefox: The Jewel^WEmbarassment of Open Source
October 18, 2020 New workstation [what is gemini://?]
October 15, 2020 Status update, October 2020
October 11, 2020 Kineto: An HTTP to Gemini proxy [what is gemini://?]
October 9, 2020 Four principles of software engineering
October 1, 2020 Spamtoberfest
September 27, 2020 Gemini and Hugo [what is gemini://?]
September 25, 2020 A tale of two libcs
September 21, 2020 TOFU recommendations for Gemini
September 20, 2020 The unrealized potential of federation
September 15, 2020 Status update, September 2020
September 2, 2020 Linux development is distributed - profoundly so
August 27, 2020 Embrace, extend, and finally extinguish - Microsoft plays their hand
August 24, 2020 Alice in Wonderland and the theft of the public domain
August 17, 2020 Software engineers solve problems
August 16, 2020 Status update, August 2020
August 13, 2020 Web browsers need to stop
August 10, 2020 I want to contribute to your project, how do I start?
August 1, 2020 pkg.go.dev is more concerned with Google's interests than good engineering
July 27, 2020 The falsehoods of anti-AGPL propaganda
July 15, 2020 Status update, July 2020
July 14, 2020 March 2nd, 1943
June 26, 2020 General-purpose OS, special-purpose OS, and now: vendor-purpose OS
June 21, 2020 Introducing the BARE message encoding
June 19, 2020 Email service provider recommendations
June 15, 2020 Status update, June 2020
June 12, 2020 Can we talk about client-side certificates?
June 6, 2020 Add a "contrib" directory to your projects
May 15, 2020 Status update, May 2020
May 5, 2020 We are complicit in our employer's deeds
April 22, 2020 How to store data forever
April 20, 2020 Configuring aerc for git via email
April 15, 2020 Status update, April 2020
April 6, 2020 My unorthodox, branchless git workflow
March 25, 2020 Designing and 3D printing a new part for my truck
March 18, 2020 The reckless, infinite scope of web browsers
March 13, 2020 GitHub's new notifications: a case of regressive design
March 7, 2020 An open letter to Senator Bob Casey on end-to-end encryption
March 3, 2020 The Abiopause
February 21, 2020 Thoughts on performance & optimization
February 18, 2020 Fucking laptops
February 15, 2020 Status update, February 2020
February 6, 2020 Dependencies and maintainers
January 27, 2020 KnightOS was an interesting operating system
January 21, 2020 The happinesses and stresses of full-time FOSS work
January 17, 2020 A philosophy of project governance
January 15, 2020 Status update, January 2020
January 8, 2020 Following up on "Hello world"
January 4, 2020 Hello world
December 30, 2019 Managing my dotfiles as a git repository
December 18, 2019 PinePhone review
December 9, 2019 Developers shouldn't distribute their own software
November 29, 2019 Take action to save .org and prosecute those who sold out the internet
November 26, 2019 Software developers should avoid traumatic changes
November 20, 2019 China
November 15, 2019 Status update, November 2019
October 30, 2019 An old-school shell hack on a line printer
October 15, 2019 Status update, October 2019
October 12, 2019 How to fuck up software releases
October 10, 2019 RaptorCS's redemption: the POWER9 machine works
October 7, 2019 Why Collabora really added Digital Restrictions Management to Weston
September 23, 2019 RaptorCS POWER9 Blackbird PC review
September 17, 2019 Don't sacrifice the right ideas to win the right words
September 15, 2019 Status update, September 2019
September 8, 2019 How I decide between many programming languages
September 2, 2019 Building interactive SSH applications
August 19, 2019 Shell access for builds.sr.ht CI
August 15, 2019 Status update, August 2019
August 9, 2019 DRM leasing: VR for Wayland
July 29, 2019 FOSS contributor tracks
July 15, 2019 Status update, July 2019
July 8, 2019 Announcing code annotations for SourceHut
July 1, 2019 Absence of certain features in IRC considered a feature
June 15, 2019 Status update, June 2019
June 13, 2019 My personal journey from MIT to GPL
June 3, 2019 Initial pre-release of aerc: an email client for your terminal
May 24, 2019 What is a fork, really, and how GitHub changed its meaning
May 15, 2019 Status update, May 2019
May 13, 2019 Webcast: Reviewing git & mercurial patches with email
May 6, 2019 Calculating your donation's value following Patreon's fee changes
May 1, 2019 Announcing Wio: A clone of Plan 9's Rio for Wayland
April 29, 2019 The "shut up and get back to work" coding style guide
April 23, 2019 Using Cage for a seamless remote Wayland session
April 19, 2019 Choosing a VPN service is a serious decision
April 15, 2019 Announcing first-class Mercurial support on Sourcehut
April 15, 2019 Status update, April 2019
April 2, 2019 NewPipe represents the best of FOSS
March 25, 2019 Rust is not a good C replacement
March 15, 2019 Status update, March 2019
March 11, 2019 Announcing the release of sway 1.0
March 4, 2019 Sourcehut's spartan approach to web design
February 25, 2019 Tips for a disciplined git workflow
February 18, 2019 Generics aren't ready for Go
February 10, 2019 Wayland misconceptions debunked
February 5, 2019 My experiences at FOSDEM 2019
January 30, 2019 Why I chose Flask to build sr.ht's mini-services
January 23, 2019 Why I use old hardware
January 15, 2019 I'm going to work full-time on free software
January 13, 2019 Backups & redundancy at sr.ht
January 1, 2019 Patches welcome
December 28, 2018 Anatomy of a shell
December 20, 2018 Porting Alpine Linux to RISC-V
December 4, 2018 How to abandon a FLOSS project
November 15, 2018 sr.ht, the hacker's forge, now open for public alpha
October 30, 2018 It's not okay to pretend your software is open source
October 29, 2018 How does virtual memory work?
October 20, 2018 Sway 1.0-beta.1 release highlights
October 8, 2018 Go 1.11 got me to stop ignoring Go
October 5, 2018 Don't sign a CLA
September 30, 2018 Sway & wlroots at XDC 2018
September 10, 2018 Getting started with qemu
September 4, 2018 Conservative web development
August 26, 2018 How to make a self-hosted video livestream
August 22, 2018 The Commons Clause will destroy open source
August 8, 2018 I don't trust Signal
August 5, 2018 Setting up a local dev mail server
July 29, 2018 Writing a Wayland compositor with wlroots: shells
July 23, 2018 Git is already federated & decentralized
July 17, 2018 Input handling in wlroots
July 9, 2018 Simple, correct, fast: in that order
July 2, 2018 The advantages of an email-driven git workflow
June 27, 2018 A quick review of my Let's Encrypt setup
June 5, 2018 Should you move from GitHub to sr.ht
June 1, 2018 How I maintain FOSS projects
May 29, 2018 Embedding files in C programs with koio
May 27, 2018 Why did we replace wlc?
May 13, 2018 Introducing scdoc, a man page generator
May 4, 2018 Redirecting stderr of a running process
May 3, 2018 Google embraces, extends, and extinguishes
April 28, 2018 Sway reporting in from KDE's Berlin development sprint
March 24, 2018 Achtung! Decentralize, decentralize, decentralize!
March 17, 2018 Hack everything without fear
March 10, 2018 How to write an IRC bot
February 28, 2018 Writing a Wayland Compositor, Part 3: Rendering a window
February 24, 2018 The path to sustainably working on FOSS full-time
February 22, 2018 Writing a Wayland Compositor, Part 2: Rigging up the server
February 17, 2018 Writing a Wayland Compositor, Part 1: Hello wlroots
February 13, 2018 The last years
February 5, 2018 Introduction to POSIX shell
January 27, 2018 Sway and client side decorations
January 16, 2018 Fee breakdown for various donation platforms
January 10, 2018 Learn about your package manager
January 2, 2018 fork is not my favorite syscall
December 28, 2017 wlroots whitepaper available
December 16, 2017 Firefox is on a slippery slope
December 2, 2017 A history of emergent intelligence
November 24, 2017 On taking good care of your phone
November 13, 2017 Portability matters
October 26, 2017 Nvidia sucks and I'm sick of it
October 9, 2017 The future of Wayland, and sway's role in it
September 13, 2017 Analyzing HN moderation & censorship
September 8, 2017 Killing ants with nuclear weapons
August 13, 2017 When not to use a regex
August 9, 2017 State of Sway August 2017
June 19, 2017 Archive it or you will miss it
June 10, 2017 An introduction to Wayland
June 5, 2017 Limited "generics" in C without macros or UB
May 11, 2017 Rotating passwords in bulk in the wake of security events
May 5, 2017 Building a "real" Linux distro
April 29, 2017 State of Sway April 2017
April 13, 2017 MSG_PEEK is pretty common, CVE-2016-10229 is worse than you think
March 15, 2017 Principles for C programming
February 22, 2017 Compiler devnotes: Machine specs
January 30, 2017 Lessons to learn from C
January 13, 2017 The only problem with Python 3's str is that you don't grok it
January 6, 2017 Actually, you CAN do it
December 27, 2016 State of Sway December 2016 - secure your Wayland desktop, get paid to work on Sway
December 6, 2016 A broad intro to networking
November 24, 2016 Electron considered harmful
November 16, 2016 Getting on without Google
November 5, 2016 I'm losing faith in America
September 17, 2016 Using the right tool for the job
September 9, 2016 What motivates the authors of the software you use?
August 18, 2016 [VIDEO] Arch Linux with full disk encryption in (about) 15 minutes
August 2, 2016 Sway 0.9 & One year of Sway
July 19, 2016 Using -Wl,--wrap for mocking in C
June 29, 2016 Life, liberty, and the pursuit of privacy
May 28, 2016 Understanding pointers
May 11, 2016 In Memoriam - Mozilla
April 20, 2016 State of Sway - April 2016
April 12, 2016 How to write a better bloom filter in C
April 11, 2016 Please use text/plain for email
March 22, 2016 Integrating a VT220 into my life
December 20, 2015 State of Sway - December 2015
November 11, 2015 Bring more Tor into your life
November 1, 2015 Please don't use Slack for FOSS projects
July 20, 2015 A practical understanding of Flux
June 14, 2015 osu!web - WebGL & Web Audio
April 19, 2015 Hooks - running stuff on Github hooks
November 30, 2014 Porting an assembler, debugger, and more to WebAssembly
October 10, 2014 On the profitability of image hosting websites
September 2, 2014 Process scheduling and multitasking in KnightOS
June 28, 2014 Python's datetime sucks
June 7, 2014 Go's error handling doesn't sit right with me
February 25, 2014 Hacking on your TI calculator
February 2, 2014 The bug that hides from breakpoints
August 24, 2013 Custom Music Syncing on Android
August 19, 2013 You don't need jQuery