Drew DeVault

  1. Unionize or die

    Tech workers have long resisted the suggestion that we should be organized into unions. The topic is consistently met with a cold reception by tech workers when it is raised, and no big tech workforce is meaningfully organized. This is a fatal mistake – and I don’t mean “fatal” in the figurative sense…

    Published

  2. The British Airways position on various border disputes

    My spouse and I are on vacation in Japan, spending half our time seeing the sights and the other half working remotely and enjoying the experience of living in a different place for a while. To get here, we flew on British Airways from London to Tokyo, and I entertained myself on the long flight by browsing…

    Published

  3. Resistance from the tech sector

    As of late, most of us have been reading the news with a sense of anxious trepidation. At least, those of us who read from a position of relative comfort and privilege. Many more read the news with fear. Some of us are already no longer in a position to read the news at all, having become the unfortunate…

    Published

  4. A Firefox addon for putting prices into perspective

    I had a fun idea for a small project this weekend, and so I quickly put it together over the couple of days. The result is Price Perspective. Humor me: have you ever bought something, considered the price, and wondered how that price would look to someone else? Someone in the developing world, or a billionaire…

    Published

  5. Using linkhut to signal-boost my bookmarks

    It must have been at least a year ago that I first noticed linkhut, and its flagship instance at ln.ht, appear on SourceHut, where it immediately caught my attention for its good taste in inspirations. Once upon a time, I had a Pinboard account, which is a similar concept, but I never used it for anything…

    Published

  6. Please stop externalizing your costs directly into my face

    This blog post is expressing personal experiences and opinions and doesn’t reflect any official policies of SourceHut. Over the past few months, instead of working on our priorities at SourceHut, I have spent anywhere from 20-100% of my time in any given week mitigating hyper-aggressive LLM crawlers…

    Published

  7. A holistic perspective on intellectual property, part 1

    I’d like to write about intellectual property in depth, in this first of a series of blog posts on the subject. I’m not a philosopher, but philosophy is the basis of reasonable politics so buckle up for a healthy Friday afternoon serving of it. To understand intellectual property, we must first establish…

    Published

  8. Join us to discuss transparency and governance at FOSDEM '25

    Good news: it appears that Jack Dorsey’s FOSDEM talk has been cancelled! This is a follow up to two earlier posts, which you can read here: one and two. I say it “appears” so, because there has been no official statement from anyone to that effect. There has also been no communication from staff to the…

    Published

  9. FOSDEM '25 protest

    Update: Dorsey’s talk was cancelled! See the update here. Last week, I wrote to object to Jack Dorsey and his company, Block, Inc., being accepted as main track speakers at FOSDEM, and proposed a protest action in response. FOSDEM issued a statement about our plans on Thursday. Today, I have some updates…

    Published

  10. No billionaires at FOSDEM

    Update: Dorsey’s talk was cancelled! See the update here. Jack Dorsey, former CEO of Twitter, ousted board member of BlueSky, and grifter extraordinaire to the tune of a $5.6B net worth, is giving a keynote at FOSDEM. The FOSDEM keynote stage is one of the biggest platforms in the free software community…

    Published

  11. Neurodivergence and accountability in free software

    In November of last year, I wrote Richard Stallman’s political discourse on sex, which argues that Richard Stallman, the founder of and present-day voting member of the board of directors of the Free Software Foundation (FSF), endorses and advocates for a harmful political agenda which legitimizes adult…

    Published

  12. Rust for Linux revisited

    Ugh. Drew’s blogging about Rust again. – You I promise to be nice. Two years ago, seeing the Rust-for-Linux project starting to get the ball rolling, I wrote “Does Rust belong in the Linux kernel?”, penning a conclusion consistent with Betteridge’s law of headlines. Two years on we have a lot of experience…

    Published

  13. So you want to compete with or replace open source

    We are living through an interesting moment in source-available software.1 The open source movement has always had, and continues to have, a solid grounding in grassroots programmers building tools for themselves and forming communities around them. Some looming giants brought on large sums of money…

    Published

  14. Writing a Unix clone in about a month

    I needed a bit of a break from “real work” recently, so I started a new programming project that was low-stakes and purely recreational. On April 21st, I set out to see how much of a Unix-like operating system for x86_64 targets that I could put together in about a month. The result is Bunnix. Not including…

    Published

  15. Copyleft licenses are not “restrictive”

    One may observe an axis, or a “spectrum”, along which free and open source software licenses can be organized, where one end is “permissive” and the other end is “copyleft”. It is important to acknowledge, however, that though copyleft can be found at the opposite end of an axis with respect to permissive…

    Published

  16. FDO's conduct enforcement actions regarding Vaxry

    freedesktop(.org), aka FDO, recently banned Hyprland maintainer Vaxry from the FDO community, and in response Vaxry has taken his case to the court of public opinion, publishing their email exchanges and writing about it on his blog. It saddens me to bear witness to these events today. I wrote in September…

    Published

  17. Why Prusa is floundering, and how you can avoid their fate

    Prusa is a 3D printer manufacturer which has a long history of being admired by the 3D printing community for high quality, open source printers. They have been struggling as of late, and came under criticism for making the firmware of their Mk4 printer non-free.1 Armin Ronacher uses Prusa as a case…

    Published

  18. Richard Stallman's political discourse on sex

    Richard Stallman, the founder of the Free Software Foundation, has been subject to numerous allegations of misconduct. He stepped down in 2019, and following his re-instatement in 2021, a famous open letter was published in which numerous organizations and individuals from throughout the Free Software…

    Published

  19. Can I be on your podcast?

    I am working on rousing the Hare community to get the word out about our work. I have drafted the Hare evangelism guidelines to this effect, which summarizes how we want to see our community bringing Hare to more people. We’d like to spread the word in a way which is respectful of the attention of others…

    Published

  20. On "real name" policies

    Some free software projects reject anonymous or pseudonymous contributions, requiring you to author patches using your “real name”. Such projects have a so-called “real name” policy; Linux is one well-known example.1 The root motivations behind such policies vary, but in my experience the most often…

    Published

  21. Going off-script

    There is a phenomenon in society which I find quite bizarre. Upon our entry to this mortal coil, we are endowed with self-awareness, agency, and free will. Each of the 8 billion members of this human race represents a unique person, a unique worldview, and a unique agency. Yet, many of us have the same…

    Published

  22. The forbidden topics

    There are forbidden topics in the hacker community. One is sternly reprimanded for bringing them up, by their peers, their leaders, and the community at large. In private, one can expect threats and intimidation; in public, outcry and censorship. The forbidden topics are enforced by the moderators of…

    Published

  23. Hyprland is a toxic community

    Hyprland is an open source Wayland compositor based on wlroots, a project I started back in 2017 to make it easier to build good Wayland compositors. It’s a project which is loved by its users for its emphasis on customization and “eye candy” – beautiful graphics and animations, each configuration tailored…

    Published

  24. AI crap

    There is a machine learning bubble, but the technology is here to stay. Once the bubble pops, the world will be changed by machine learning. But it will probably be crappier, not better. Contrary to the AI doomer’s expectations, the world isn’t going to go down in flames any faster thanks to AI. Contemporary…

    Published

  25. Hello from Ares!

    I am pleased to be writing today’s blog post from a laptop running Ares OS. I am writing into an ed(1) session, on a file on an ext4 filesystem on its hard drive. That’s pretty cool! It seems that a lot of interesting stuff has happened since I gave that talk on Helios at FOSDEM in February. The talk…

    Published

  26. The rc shell and its excellent handling of whitespace

    This blog post is a response to Mark Dominus’ “The shell and its crappy handling of whitespace”. I’ve been working on a shell for Unix-like systems called rc, which draws heavily from the Plan 9 shell of the same name. When I saw Mark’s post about the perils of whitespace in POSIX shells (or derived…

    Published

  27. Alpine Linux does not make the news

    My Linux distribution of choice for several years has been Alpine Linux. It’s a small, efficient distribution which ships a number of tools I appreciate for their simplicity, such as musl libc. It has a very nice package manager, apk, which is fast and maintainable. The development community is professional…

    Published

  28. Seriously, don't sign a CLA

    SourceGraph is making their product closed source, abandoning the Apache 2.0 license it was originally distributed under, so once again we convene in the ritual condemnation we offer to commercial products that piss in the pool of open source. Invoking Bryan Cantrill once more: Bryan Cantrill on OpenSolaris…

    Published

  29. Social media and "parasocial media"

    A few months ago, as Elon Musk took over Twitter and instituted polices that alienated many people, some of these people fled towards federated, free software platforms like Mastodon. Many people found a new home here, but there is a certain class of refugee who has not found it to their liking. I got…

    Published

  30. Burnout and the quiet failures of the hacker community

    This has been a very challenging year for me. You probably read that I suffered from burnout earlier in the year. In some respects, things have improved, and in many other respects, I am still haunted. You might not care to read this, and so be it, take your leave if you must. But writing is healing…

    Published

  31. Reforming the free software message

    Several weeks ago, I wrote The Free Software Foundation is dying, wherein I enumerated a number of problems with the Free Software Foundation. Some of my criticisms focused on the message: fsf.org and gnu.org together suffer from no small degree of incomprehensibility and inaccessibility which makes…

    Published

  32. Throwing in the towel on mobile Linux

    I have been tinkering with mobile Linux – a phrase I will use here to describe any Linux distribution other than Android running on a mobile device – as my daily driver since about 2019, when I first picked up the PinePhone. For about 3 years I have run mobile Linux as my daily driver on my phone, and…

    Published

  33. How to go to war with your employer

    There is a power differential between you and your employer, but that doesn’t mean you can’t improve your working conditions. Today I’d like to offer a little bit of advice on how to frame your relationship with your employer in terms which empower you and afford you more agency. I’m going to talk about…

    Published

  34. Burnout

    It kind of crept up on me. One day, sitting at my workstation, I stopped typing, stared blankly at the screen for a few seconds, and a switch flipped in my head. On the night of New Year’s Eve, my backpack was stolen from me on the train from Berlin to Amsterdam, and with it about $2000 worth of equipment…

    Published

  35. Who should lead us?

    Consider these two people, each captured in the midst of delivering a technical talk. .images { display: flex; } Based on appearances alone, what do you think of them? The person on the left is a woman. She’s also pretty young, one might infer something about her level of experience accordingly. I imagine…

    Published

  36. rc: a new shell for Unix

    rc is a Unix shell I’ve been working on over the past couple of weeks, though it’s been in the design stages for a while longer than that. It’s not done or ready for general use yet, but it is interesting, so let’s talk about it. As the name (which is subject to change) implies, rc is inspired by the…

    Published

  37. The Free Software Foundation is dying

    The Free Software Foundation is one of the longest-running missions in the free software movement, effectively defining it. It provides a legal foundation for the movement and organizes activism around software freedom. The GNU project, closely related, has its own long story in our movement as the coding…

    Published

  38. Writing Helios drivers in the Mercury driver environment

    Helios is a microkernel written in the Hare programming language and is part of the larger Ares operating system. You can watch my FOSDEM 2023 talk introducing Helios on PeerTube. Let’s take a look at the new Mercury driver development environment for Helios. As you may remember from my FOSDEM talk,…

    Published

  39. When to comment that code

    My software tends to have a surprisingly low number of comments. One of my projects, scdoc, has 25 comments among its 1,133 lines of C code, or 2%, compared to the average of 19%.1 Naturally, I insist that my code is well-written in spite of this divergence from the norm. Allow me to explain. The philosophy…

    Published

  40. Porting Helios to aarch64 for my FOSDEM talk, part one

    Helios is a microkernel written in the Hare programming language, and the subject of a talk I did at FOSDEM earlier this month. You can watch the talk here if you like: A while ago I promised someone that I would not do any talks on Helios until I could present them from Helios itself, and at FOSDEM…

    Published

  41. Should private platforms engage in censorship?

    Private service providers are entitled to do business with whom they please, or not to. Occasionally, a platform will take advantage of this to deny service to a particular entity on any number of grounds, often igniting a flood of debate online regarding whether or not censorship in this form is just…

    Published

  42. My plans at FOSDEM: SourceHut, Hare, and Helios

    FOSDEM is right around the corner, and finally in person after long years of dealing with COVID. I’ll be there again this year, and I’m looking forward to it! I have four slots on the schedule (wow! Thanks for arranging these, FOSDEM team) and I’ll be talking about several projects. There is a quick…

    Published

  43. Setting a new focus for my blog

    Just shy of two months ago, I published I shall toil at a reduced volume, which addressed the fact that I’m not getting what I want from my blog anymore, and I would be taking an indefinite break. Well, I am ready to resume my writing, albeit with a different tone and focus than before. Well, that was…

    Published

  44. I shall toil at a reduced volume

    Over the last nine years I have written 300,000 words for this blog on the topics which are important to me. I am not certain that I have much left to say. I can keep revisiting these topics for years, each time adding a couple more years of wisdom and improvements to my writing skills to present my…

    Published

  45. Codegen in Hare v2

    I spoke about code generation in Hare back in May when I wrote a tool for generating ioctl numbers. I wrote another code generator over the past few weeks, and it seems like a good time to revisit the topic on my blog to showcase another approach, and the improvements we’ve made for this use-case. In…

    Published

  46. In praise of Plan 9

    Plan 9 is an operating system designed by Bell Labs. It’s the OS they wrote after Unix, with the benefit of hindsight. It is the most interesting operating system that you’ve never heard of, and, in my opinion, the best operating system design to date. Even if you haven’t heard of Plan 9, the designers…

    Published

  47. Notes from kernel hacking in Hare, part 3: serial driver

    Today I would like to show you the implementation of the first userspace driver for Helios: a simple serial driver. All of the code we’re going to look at today runs in userspace, not in the kernel, so strictly speaking this should be “notes from OS hacking in Hare”, but I won’t snitch if you don’t.…

    Published

  48. TOTP for 2FA is incredibly easy to implement. So what's your excuse?

    Time-based one-time passwords are one of the more secure approaches to 2FA — certainly much better than SMS. And it’s much easier to implement than SMS as well. The algorithm is as follows: Divide the current Unix timestamp by 30 Encode it as a 64-bit big endian integer Write the encoded bytes to a SHA…

    Published

  49. Status update, October 2022

    After a few busy and stressful months, I decided to set aside October to rest. Of course, for me, rest does not mean a cessation of programming, but rather a shift in priorities towards more fun and experimental projects. Consequently, it has been a great month for Helios! Hare upstream has enjoyed some…

    Published

  50. In praise of ffmpeg

    My last “In praise of” article covered qemu, a project founded by Fabrice Bellard, and today I want to take a look at another work by Bellard: ffmpeg. Bellard has a knack for building high-quality software which solves a problem so well that every other solution becomes obsolete shortly thereafter, and…

    Published

  51. Does Rust belong in the Linux kernel?

    I am known to be a bit of a polemic when it comes to Rust. I will be forthright with the fact that I don’t particularly care for Rust, and that my public criticisms of it might set up many readers with a reluctance to endure yet another Rust Hot Take from my blog. My answer to the question posed in the…

    Published

  52. Notes from kernel hacking in Hare, part 2: multi-threading

    I have long promised that Hare would not have multi-threading, and it seems that I have broken that promise. However, I have remained true to the not-invented-here approach which is typical of my style by introducing it only after designing an entire kernel to implement it on top of.1 For some background…

    Published

  53. The phrase "open source" (still) matters

    In 1988, “Resin Identification Codes” were introduced by the plastic industry. These look exactly like the recycling symbol ♺, which is not trademarked or regulated, except that a number is enclosed within the triangle. These symbols simply identify what kind of plastic was used. The vast majority of…

    Published

  54. Status update, September 2022

    I have COVID-19 and I am halfway through my stockpile of tissues, so I’m gonna keep this status update brief. In Hare news, I finally put the last pieces into place to make cross compiling as easy as possible. Nothing else particularly world-shattering going on here. I have a bunch of new stuff in my…

    Published

  55. Notes from kernel hacking in Hare, part 1

    One of the goals for the Hare programming language is to be able to write kernels, such as my Helios project. Kernels are complex beasts which exist in a somewhat unique problem space and have constraints that many userspace programs are not accustomed to. To illustrate this, I’m going to highlight a…

    Published

  56. In praise of qemu

    qemu is another in a long line of great software started by Fabrice Bellard. It provides virtual machines for a wide variety of software architectures. Combined with KVM, it forms the foundation of nearly all cloud services, and it runs SourceHut in our self-hosted datacenters. Much like Bellard’s ffmpeg…

    Published

  57. powerctl: A small case study in Hare for systems programming

    powerctl is a little weekend project I put together to provide a simple tool for managing power states on Linux. I had previously put my laptop into suspend with a basic “echo mem | doas tee /sys/power/state”, but this leaves a lot to be desired. I have to use doas to become root, and it’s annoying to…

    Published

  58. A review of postmarketOS on the Xiaomi Poco F1

    I have recently had cause to start looking into mainline Linux phones which fall outside of the common range of grassroots phones like the PinePhone (which was my daily driver for the past year). The postmarketOS wiki is a great place to research candidate phones for this purpose, and the phone I landed…

    Published

  59. PINE64 has let its community down

    Context for this post: Pine64 should re-evaluate their community priorities The Pine Formula Why I left PINE64 A response to Martijn’s blog I know that apologising and taking responsibility for your mistakes is difficult. It seems especially difficult for commercial endeavours, which have fostered a…

    Published

  60. Status update, August 2022

    It is a blessedly cool morning here in Amsterdam. I was busy moving house earlier this month, so this update is a bit quieter than most. For a fun off-beat project this month, I started working on a GameBoy emulator written in Hare. No promises on when it will be functional or how much I plan on working…

    Published

  61. How I wish I could organize my thoughts

    I keep a pen & notebook on my desk, which I make liberal use of to jot down my thoughts. It works pretty well: ad-hoc todo lists, notes on problems I’m working on, tables, flowcharts, etc. It has some limitations, though. Sharing anything out of my notebook online is an awful pain in the ass. I can’t…

    Published

  62. Conciseness

    Conciseness is often considered a virtue among hackers and software engineers. FOSS maintainers in particular generally prefer to keep bug reports, questions on mailing lists, discussions in IRC channels, and so on, close to the point and with minimal faff. It’s not considered impolite to skip the formalities…

    Published

  63. Code review at the speed of email

    I’m a big proponent of the email workflow for patch submission and code review. I have previously published some content (How to use git.sr.ht’s send-email feature, Forks & pull requests vs email, git-send-email.io) which demonstrates the contributor side of this workflow, but it’s nice to illustrate…

    Published

  64. The past and future of open hardware

    They say a sucker is born every day, and at least on the day of my birth, that certainly may have been true. I have a bad habit of spending money on open hardware projects that ultimately become vaporware or seriously under-deliver on their expectations. In my ledger are EOMA68, DragonBox Pyra, the Jolla…

    Published

  65. Status update, July 2022

    Hello there! It’s been a hot July week in Amsterdam, and I expect hotter days are still to come. I wish air conditioning was more popular in Europe, but alas. This month of FOSS development enjoyed a lot of small improvements in a lot of different projects. For Hare, I have introduced a number of improvements…

    Published

  66. The Fediverse can be pretty toxic

    Mastodon, inspired by GNU social, together with Pleroma, form the most popular components of what we know as the “Fediverse” today. All of them are, in essence, federated, free software Twitter clones, interoperable with each other via the ActivityPub protocol. In many respects, the Fediverse is a liberating…

    Published

  67. Porting Doom to Helios

    Doom was an incredibly popular video game by Id software which, six years following its release, was made open source under the GPLv2 license. Thanks to this release, combined with the solid software design and lasting legacy of backwards compatibility in C, Doom has been ported to countless platforms…

    Published

  68. GitHub Copilot and open source laundering

    Disclaimer: I am the founder of a company which competes with GitHub. I am also a long-time advocate for and developer of free and open source software, with a broad understanding of free and open source software licensing and philosophy. I will not name my company in this post to reduce the scope of…

    Published

  69. Introducing the Himitsu keyring & password manager for Unix

    Himitsu is a new approach to storing secret information on Unix systems, such as passwords or private keys, and I released version 0.1 this morning. It’s available on Alpine Linux community and the Arch User Repository, with more distributions hopefully on the way soon. So, what is Himitsu and what makes…

    Published

  70. Status update, June 2022

    Hello again! I would like to open this post by acknowledging the response to my earlier post, “bleh”. Since it was published, I have received several hundred emails expressing support and kindness. I initially tried to provide these with thoughtful replies, then shorter replies, then I had to stop replying…

    Published

  71. The Helios microkernel

    I’ve been working on a cool project lately that I’d like to introduce you to: the Helios microkernel. Helios is written in Hare and currently targets x86_64, and riscv64 and aarch64 are on the way. It’s very much a work-in-progress: don’t expect to pick this up and start building anything with it today…

    Published

  72. bleh

    A few weeks ago, the maintainer of a project on SourceHut stepped down from their work, citing harassment over using SourceHut as their platform of choice. It was a difficult day when I heard about that. Over the past few weeks, I have been enduring a bit of a depressive episode. It’s a complex issue…

    Published

  73. Google has been DDoSing SourceHut for over a year

    Just now, I took a look at the HTTP logs on git.sr.ht. Of the past 100,000 HTTP requests received by git.sr.ht (representing about 2½ hours of logs), 4,774 have been requested by GoModuleProxy — 5% of all traffic. And their requests are not cheap: every one is a complete git clone. They come in bursts…

    Published

  74. Status update, May 2022

    This was an exciting month: the Hare programming language is a secret no more! You can now try out the programming language I first teased over a year ago and tell me what you think. I hope you like it! I’m quite pleased with it so far. One thing Hare has done is allow me to unshelve several projects…

    Published

  75. A Hare code generator for finding ioctl numbers

    Modern Unix derivatives have this really bad idea called ioctl. It’s a function which performs arbitrary operations on a file descriptor. It is essentially the kitchen sink of modern Unix derivatives, particularly Linux, in which they act almost like a second set of extra syscalls. For example, to get…

    Published

  76. When will we learn?

    Congratulations to Rust for its first (but not its last) supply-chain attack this week! They join a growing club of broken-by-design package managers which publish packages uploaded by vendors directly, with no review step, and ship those packages directly to users with no further scrutiny. Timeline…

    Published

  77. Implementing an SSH agent in Hare

    Cross-posted from the Hare blog In the process of writing an SSH agent for Himitsu, I needed to implement many SSH primitives from the ground up in Hare, now available via hare-ssh. Today, I’m going to show you how it works! Important: This blog post deals with cryptography-related code. The code you’re…

    Published

  78. Announcing the Hare programming language

    The “secret programming language” I have been teasing for several months now is finally here! It is called Hare, and you can read about it on the Hare blog: https://harelang.org/blog/2022-04-25-announcing-hare/ Check it out!

    Published

  79. Status update, April 2022

    This month marked my first time filing taxes in two countries, and I can assure you it is the worst. I am now a single-issue voter in the US: stop taxing expats! You can get some insight into the financials of SourceHut in the recently-published financial report. But let’s get right into the fun stuff…

    Published

  80. Announcing git snail-mail

    You’ve heard of git-over-email thanks to git send-email — now you can enjoy git snail-mail: a new tool making it easier than ever to print out git commits on paper and mail them to your maintainers. Running git snail-mail HEAD~2.. prepares the last two commits for post and sends them directly to the…

    Published

  81. It is important for free software to use free software infrastructure

    Disclaimer: I founded a project and a company that focuses on free software infrastructure. I will elect not to name them in this post, and will only recommend solutions I do not have a vested interest in. Free and open source software (FOSS) projects need infrastructure. Somewhere to host the code,…

    Published

  82. The Netherlands so far

    I moved to Amsterdam in July 2021, and now that I’ve had some time to settle in I thought I’d share my thoughts on how it’s been so far. In short: I love it here! I did end up finding housing through the hacker community thanks to my earlier post, which was a great blessing. I am renting an apartment…

    Published

  83. Status update, March 2022

    Greetings! The weather is starting to warm up again, eh? I’m a bit disappointed that we didn’t get any snow this winter. Yadda yadda insert intro text here. Let’s get down to brass tacks. What’s new this month? I mainly focused on the programming language this month. I started writing a kernel, which…

    Published

  84. It takes a village

    As a prolific maintainer of several dozen FOSS projects, I’m often asked how I can get so much done, being just one person. The answer is: I’m not just one person. I have enjoyed the help of thousands of talented people who have contributed to these works. Without them, none of the projects I work on…

    Published

  85. Why am I building a programming language in private?

    As many readers are aware, I have been working on designing and implementing a systems programming language. This weekend, I’ve been writing a PNG file decoder in it, and over the past week, I have been working on a simple kernel with it as well. I’m very pleased with our progress so far — I recently…

    Published

  86. Open Source is defined by the OSI's Open Source Definition

    The Open Source Initiative (OSI) publishes a document called the Open Source Definition (OSD), which defines the term “open source”. However, there is a small minority of viewpoints within the software community which wishes that this were not so. The most concerning among them are those who wish open…

    Published

  87. Plaid is an evil nightmare product from Security Hell

    Plaid is a business that has built a widget that can be embedded in any of their customer’s websites which allows their customers to configure integrations with a list of third-party service providers. To facilitate this, Plaid pops up a widget on their customer’s domain which asks the end-user to type…

    Published

  88. Status update, February 2022

    Hello once again! Another month of free software development goes by with lots of progress in all respects. I will open with some news about godocs.io: version 1.0 of our fork of gddo has been released! Big thanks to Adnan Maolood for his work on this. I’m very pleased that, following our fork, we were…

    Published

  89. Framing accessibility in broader terms

    Upon hearing the term “accessibility”, many developers call to mind the HTML ARIA attributes and little else. Those who have done some real accessibility work may think of the WCAG guidelines. Some FOSS developers1 may think of AT-SPI. The typical user of these accessibility features is, in the minds…

    Published

  90. Free software licenses explained: MIT

    This is the first in a series of posts I intend to write explaining how various free and open source software licenses work, and what that means for you as a user or developer of that software. Today we’ll look at the MIT license, also sometimes referred to as the X11 or Expat license. The MIT license…

    Published

  91. Implementing a MIME database in XXXX

    This is a (redacted) post from the internal blog of a new systems programming language we’re developing. The project is being kept under wraps until we’re done with it, so for this post I’ll be calling it XXXX. If you are interested in participating, send me an email with some details about your background…

    Published

  92. Pine64 should re-evaluate their community priorities

    Pine64 has a really interesting idea: make cheap hardware with low margins, get it into the hands of the FOSS community, and let them come up with the software. No one has ever done this before, at least not on this scale, and it’s a really neat idea! Pine64 is doing a lot to support the FOSS community…

    Published

  93. Status update, January 2022

    Happy New Year! I had a lovely time in Amsterdam. No one had prepared me for the (apparently infamous) fireworks culture of the Netherlands. I thought it was really cool. Our programming language continues to improve apace. Our cryptography suite now includes Argon2, Salsa20/XSalsa20, ChaCha20/XChaCha20…

    Published

  94. The RISC-V experience

    I’m writing to you from a Sway session on Alpine Linux, which is to say from a setup quite similar to the one I usually write blog posts on, save for one important factor: a RISC-V CPU. I’ll state upfront that what I’m using is not a very practical system. What I’m going to describe is all of the impractical…

    Published

  95. Breaking down a small language design proposal

    .redacted { background: black; color: black; } We are developing a new systems programming language. The name is a secret, so we’ll call it xxxx instead. In xxxx, we have a general requirement that all variables must be initialized. This is fine for the simple case, such as “let x: int = 10”. But, it…

    Published

  96. Please don't use Discord for FOSS projects

    Six years ago, I wrote a post speaking out against the use of Slack for the instant messaging needs of FOSS projects. In retrospect, this article is not very good, and in the years since, another proprietary chat fad has stepped up to bat: Discord. It’s time to revisit this discussion. In short, using…

    Published

  97. Please use me as a resource

    I write a lot of blog posts about my ideas,1 some of which are even good ideas. Some of these ideas stick, and many readers have attempted to put them into practice, taking on challenges like starting a business in FOSS or stepping up to be leaders in their communities. It makes me proud to see the difference…

    Published

  98. Sustainable creativity in a world without copyright

    I don’t believe in copyright. I argue that we need to get rid of copyright, or at least dramatically reform it. The public domain has been stolen from us, and I want it back. Everyone reading this post has grown up in a creative world defined by capitalism, in which adapting and remixing works — a fundamental…

    Published

  99. On commercial forks of FOSS projects

    The gaming and live streaming industry is a lucrative and rapidly growing commercial sector with a unique understanding of copyright and intellectual property, and many parties with conflicting interests and access to different economic resources. The understanding of intellectual property among gamers…

    Published

  100. Status update, December 2021

    Greetings! It has been a cold and wet month here in Amsterdam, much like the rest of them, as another period of FOSS progress rolls on by. I have been taking it a little bit easier this month, and may continue to take some time off in the coming weeks, so I can have a bit of a rest for the holidays.…

    Published

  101. Impressions of Linux Mint & elementary OS

    In a recent post, I spoke about some things that Linux distros need to do better to accommodate end-users. I was reminded that there are some Linux distros which are, at least to some extent, following my recommended playbook, and have been re-evaluating two of them over the past couple of weeks: Linux…

    Published

  102. How new Linux users can increase their odds of success

    The Linus Tech Tips YouTube channel has been putting out a series of videos called the Switching to Linux Challenge that has been causing a bit of a stir in the Linux community. I’ve been keeping an eye on these developments, and thought it was a good time to weigh in with my thoughts. This article focuses…

    Published

  103. What desktop Linux needs to succeed in the mainstream

    The Linus Tech Tips YouTube channel has been putting out a series of videos called the Switching to Linux Challenge that has been causing a bit of a stir in the Linux community. I’ve been keeping an eye on these developments, and thought it was a good time to weigh in with my thoughts. This article focuses…

    Published

  104. postmarketOS revolutionizes smartphone hacking

    I briefly mentioned postmarketOS in my Pinephone review two years ago, but after getting my Dutch SIM card set up in my Pinephone and having another go at using postmarketOS, I reckon they deserve special attention. Let’s first consider the kind of ecosystem into which postmarketOS emerged: smartphone…

    Published

  105. My philosophy for productive instant messaging

    We use Internet Relay Chat (IRC) extensively at sourcehut for real-time group chats and one-on-one messaging. The IRC protocol is quite familiar to hackers, who have been using it since the late 80’s. As chat rooms have become more and more popular among teams of both hackers and non-hackers in recent…

    Published

  106. I will pay you cash to delete your npm module

    npm’s culture presents a major problem for global software security. It’s grossly irresponsible to let dependency trees grow to thousands of dependencies, from vendors you may have never heard of and likely have not critically evaluated, to solve trivial tasks which could have been done from scratch…

    Published

  107. Python: Please stop screwing over Linux distros

    Linux distributions? Oh, those things we use to bootstrap our Docker containers? Yeah, those are annoying. What were you complaining about again? The Python community is obsessed with reinventing the wheel, over and over and over and over and over and over again. distutils, setuptools, pip, pipenv, tox…

    Published

  108. Status update, November 2021

    Hello again! Following a spooky month, we find ourselves again considering the progress of our eternal march towards FOSS world domination. I’ll first address SourceHut briefly: today is the third anniversary of the opening of the public alpha! I have written a longer post for sourcehut.org which I encourage…

    Published

  109. Breaking down Apollo Federation's anti-FOSS corporate gaslighting

    Gather around, my friends, for there is another company which thinks we are stupid and we enjoy having our faces spat in. Apollo Federation1 has announced that they will switch to a non-free license. Let’s find out just how much the Elastic license really is going to “protect the community” like they…

    Published

  110. GitHub stale bot considered harmful

    Disclaimer: I work for a GitHub competitor. One of GitHub’s “recommended” marketplace features is the “stale” bot. The purpose of this bot is to automatically close GitHub issues after a period of inactivity, 60 days by default. You have probably encountered it yourself in the course of your work. This…

    Published

  111. How SmarterEveryDay's 4privacy can, and cannot, meet its goals

    I don’t particularly find myself to be a fan of the SmarterEveryDay YouTube channel, simply for being outside of Destin’s target audience most of the time. I understand that Destin, the channel’s host, is a friendly person and a great asset to his peers, and that he generally strives to do good. When…

    Published

  112. Software developers have stopped caring about reliability

    Of all the principles of software engineering which has fallen by the wayside in the modern “move fast and break things” mentality of assholes modern software developers, reliability is perhaps the most neglected, along with its cousin, robustness. Almost all software that users encounter in $CURRENTYEAR…

    Published

  113. Status update, October 2021

    On this dreary morning here in Amsterdam, I’ve made my cup of coffee and snuggled my cat, and so I’m pleased to share some FOSS news with you. Some cool news today! We’re preparing for a new core product launch at sr.ht, cool updates for our secret programming language, plus news for visurf. Simon Ser…

    Published

  114. How reflection works in ****

    Note: this is a redacted copy of a blog post published on the internal development blog of a new systems programming language. The name of the project and further details are deliberately being kept in confidence until the initial release. You may be able to find it if you look hard enough — you have…

    Published

  115. Developers: Let distros do their job

    I wrote a post some time ago titled Developers shouldn’t distribute their own software, and after a discussion on the sr.ht IRC channel today, the topic seems worthy of renewed mention. Let’s start with this: what exactly is a software distribution, anyway? I use “software distribution” here, rather…

    Published

  116. Nitter and other Internet reclamation projects

    The world wide web has become an annoying, ultra-commercialized space. Many websites today are prioritizing the interests of the company behind the domain, at the expense of the user’s experience and well-being. This has been a frustrating problem for several years, but lately there’s been a heartwarming…

    Published

  117. Status update, September 2021

    It’s a quiet, foggy morning here in Amsterdam, and here with my fresh mug of coffee and a cuddly cat in my lap, I’d like to share the latest news on my FOSS efforts with you. Grab yourself a warm drink and a cat of your own and let’s get started. First, a new project: visurf. I announced this a few days…

    Published

  118. visurf, a web browser based on NetSurf

    I’ve started a new side project that I would like to share with you: visurf. visurf, or nsvi, is a NetSurf frontend which provides vi-inspired key bindings and a lightweight Wayland UI with few dependencies. It’s still a work-in-progress, and is not ready for general use yet. I’m letting you know about…

    Published

  119. Status update, August 2021

    Greetings! It’s shaping up to be a beautiful day here in Amsterdam, and I have found the city much to my liking so far. If you’re in Amsterdam and want to grab a beer sometime, send me an email! I’ve been making a lot of new friends here. Meanwhile, I’ve also enjoyed a noticable increase in my productivity…

    Published

  120. Tips for debugging your new programming language

    Say you’re building a new (compiled) programming language from scratch. You’ll inevitably have to debug programs written in it, and worse, many of these problems will lead you into deep magic, as you uncover problems with your compiler or runtime. And as you find yourself diving into the arcane arts…

    Published

  121. Police to begin regular, warrant-free searches of homes for child abuse material

    The Federal Bureau of Investigations announced a new initiative today to combat the proliferation of child sexual abuse materials (CSAM) in the United States. Starting next year, police will be conducting regular searches of US homes, as often as once or twice per week per home, to find child sexual…

    Published

  122. proxy.golang.org allows many Go packages to be silently broken

    GOPROXY (or proxy.golang.org) is a service through which all “go get” commands (and other module downloads) are routed. It may speed up some operations by providing a cache, and it publishes checksums and an “index” of all Go packages; but this is done at the cost of sending details of all of your module…

    Published

  123. In praise of PostgreSQL

    After writing Praise for Alpine Linux, I have decided to continue writing more articles in praise of good software. Today, I’d like to tell you a bit about PostgreSQL. Many people don’t understand how old Postgres truly is: the first release1 was in July of 1996. It used this logo: After 25 years of…

    Published

  124. My wish-list for the next YAML

    YAML is both universally used, and universally reviled. It has a lot of problems, but it also is so useful in solving specific tasks that it’s hard to replace. Some new kids on the block (such as TOML) have successfully taken over a portion of its market share, but it remains in force in places where…

    Published

  125. Status update, July 2021

    Hallo uit Nederland! I’m writing to you from a temporary workstation in Amsterdam, pending the installation of a better one that I’ll put together after I visit a furniture store today. I’ve had to slow a few things down somewhat while I prepare for this move, and I’ll continue to be slower for some…

    Published

  126. Is GitHub a derivative work of GPL'd software?

    GitHub recently announced a tool called Copilot, a tool which uses machine learning to provide code suggestions, inciting no small degree of controversy. One particular facet of the ensuing discussion piques my curiosity: what happens if the model was trained using software licensed with the GNU General…

    Published

  127. How does IRC's federation model compare to ActivityPub?

    Today’s federated revolution is led by ActivityPub, leading to the rise of services like Mastodon, PeerTube, PixelFed, and more. These new technologies have a particular approach to federation, which is coloring perceptions on what it actually means for a system to be federated at all. Today’s post will…

    Published

  128. You can't capture the nuance of my form fields

    Check out this text box: textarea { width: 100%; } Consectetur qui consequatur voluptatibus voluptatem sit sint perspiciatis. Eos aspernatur ad laboriosam quam numquam quo. Quia reiciendis illo quo praesentium. Dolor porro et et sit dolorem quisquam totam quae. Ea molestias a aspernatur dignissimos suscipit…

    Published

  129. A finger client

    This is a short follow-up to the io_uring finger server article posted about a month ago. In the time since, we have expanded our language with a more complete networking stack, most importantly by adding a DNS resolver. I have used these improvements to write a small client implementation of the finger…

    Published

  130. Status update, June 2021

    Hiya! Got another status update for you. First, let me share this picture that my dad and I took on our recent astronomy trip (click for full res): Bonus Venus: So, what’s new? With SourceHut, there are a few neat goings-on. For one, thanks to Michael Forney putting the finishing touches on the patchset…

    Published

  131. Provided "as is", without warranty of any kind

    The MIT license contains the following text, in all uppercase no less: THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. The BSD licenses, GPL family…

    Published

  132. I will be moving to the Netherlands

    I had been planning a move to the Netherlands for a while, at least until a large COVID-shaped wrench was thrown into the gears. However, I was fully vaccinated by early April, and there are signs of the border opening up now, so my plans have been slowly getting back on track. I sent off my visa application…

    Published

  133. Build your project in our new language

    Do you have a new systems programming project on your todo list? If you’re feeling adventurous, I would like you to give it a crack in our new systems programming language, and to use it to drive improvements in the less-developed areas of our standard library. Note: we have enough projects on board…

    Published

  134. Using io_uring to make a high-performance... finger server

    I’m working on adding a wrapper for the Linux io_uring interface to my secret programming language project. To help learn more about io_uring and to test out the interface I was designing, I needed a small project whose design was well-suited for the value-add of io_uring. The Finger protocol is perfect…

    Published

  135. How to write release notes

    Release notes are a concept most of us are familiar with. When a new software release is prepared, the release notes tell you what changed, so you understand what you can expect and how to prepare for the update. They are also occasionally used to facilitate conversations: Many of the people tasked with…

    Published

  136. aerc, mbsync, and postfix for maximum comfy offline email

    I am the original author of the aerc mail client, though my official relationship with it today is marginal at best. I think that, with hindsight, I’ve come to understand that the “always online” approach of aerc’s IMAP implementation is less than ideal. The next email client (which will exist at some…

    Published

  137. Status update, May 2021

    Hello! This update is a bit late. I was travelling all day yesterday without internet, so I could not prepare these. After my sister and I got vaccinated, I took a trip to visit her at her home in beautiful Hawaii — it felt great after a year of being trapped within these same four walls. I hope you…

    Published

  138. Pinebook Pro review

    I received the original Pinebook for free from the good folks at Pine64 a few years ago, when I visited Berlin to work with the KDE developers. Honestly, I was underwhelmed. The performance was abysmal and ARM is a nightmare to work with. For these reasons, I was skeptical when I bought the Pinebook…

    Published

  139. I try not to make unlikable software (and features)

    I am writing to you from The Sky. On my flight today, I noticed an example of “unlikable” software — something I’ve been increasingly aware of recently — inspiring me to pull out my laptop and write. On this plane, there are displays in the back of each seat which provides entertainment for the person…

    Published

  140. godocs.io six months later

    We’re six months on from forking godoc.org following its upstream deprecation, and we’ve made a lot of great improvements since. For those unaware, the original godoc.org was replaced with pkg.go.dev, and a redirect was set up. The new website isn’t right for many projects — one of the most glaring issues…

    Published

  141. In praise of Alpine Linux

    Note: this blog post was originally only available via Gemini, but has been re-formatted for the web. The traits I prize most in an operating system are the following: Simplicity Stability Reliability Robustness As a bonus, I’d also like to have: Documentation Professionalism Performance Access to up…

    Published

  142. Cryptocurrency is an abject disaster

    This post is long overdue. Let’s get it over with. 🛑 Hey! If you write a comment about this article online, disclose your stake in cryptocurrency. I will explain why later in this post. For my part, I held Starting on May 1st, users of sourcehut’s CI service will be required to be on a paid account…

    Published

  143. Recommended read: Why Lichess will always be free

    Signal-boosting this excellent article from Lichess: Why Lichess will always be free.

    Published

  144. Parsers all the way down: writing a self-hosting parser

    One of the things we’re working on in my new programming language is a self-hosting compiler. Having a self-hosted compiler is a critical step in the development of (some) programming languages: it signals that the language is mature enough to be comfortably used to implement itself. While this isn’t…

    Published

  145. Status update, April 2021

    Another month goes by! I’m afraid that I have very little to share this month. You can check out the sourcehut “what’s cooking” post for sourcehut news, but outside of that I have focused almost entirely on the programming language project this month, for which the details are kept private. The post…

    Published

  146. The Developer Certificate of Origin is a great alternative to a CLA

    Today Amazon released their fork of ElasticSearch, OpenSearch, and I want to take a moment to draw your attention to one good decision in particular: its use of the Developer Certificate of Origin (or “DCO”). Previously: ElasticSearch does not belong to Elastic Open source means surrendering your monopoly…

    Published

  147. What should the next chat app look like?

    As you’re surely aware, Signal has officially jumped the shark with the introduction of cryptocurrency to their chat app. Back in 2018, I wrote about my concerns with Signal, and those concerns were unfortunately validated by this week’s announcement. Moxie’s insistence on centralized ownership, governance…

    Published

  148. Go is a great programming language

    No software is perfect, and thus even for software I find very pleasant, I can usually identify some problems in it — often using my blog to do so. Even my all-time favorite software project, Plan 9, has some painful flaws! For some projects, it may be my fondness for them that drives me to criticise…

    Published

  149. The world's stupidest IRC bot

    I’m an IRC power user, having been hanging out in 200+ channels on 10+ networks 24/7 for the past 10 years or so. Because IRC is standardized and simple, a common pastime for IRC enthusiasts is the creation of bots. In one of the social channels I hang out in, we’ve spent the past 6 years gradually building…

    Published

  150. The complete guide for open sourcing video games

    Video games are an interesting class of software. Unlike most software, they are a creative endeavour, rather than a practical utility. Where most software calls for new features to address practical needs of their users, video games call for new features to serve the creative vision of their makers…

    Published

  151. We are building a new systems programming language

    It’s an open secret: the “secret project” I’ve been talking about is a new systems programming language. It’s been underway since December ‘19, and we hope to release the first version in early 2022. The language is pretty small — we have a mostly complete specification which clocks in at 60 pages. It…

    Published

  152. Status update, March 2021

    After the brief illusion of spring, this morning meets us with a cold apartment indoors and fierce winds outdoors. Today concludes a productive month, mainly for the secret project and for sourcehut, but also marked by progress in some smaller projects as well. I’ll start with those smaller projects…

    Published

  153. The corporate surveillance machine is killing people

    I have never been angrier about the corporate surveillance complex, which I have rallied against for years, than I am today. Buying and selling user’s private information on the open market is bad enough for the obvious reasons, but today, I learned that the depths of depravity this market will descend…

    Published

  154. To make money in FOSS, build a business first

    I’ve written about making money in free and open source software before, but it’s a deep topic that merits additional discussion. While previously I focused on what an individual can do in order to build a career in FOSS, but today I want to talk about how you can build a sustainable business in FOSS…

    Published

  155. Gmail is a huge source of spam

    5× as many spam registrations on sourcehut are from gmail than from the second-largest offender. # SELECT SPLIT_PART(email, '@', 2) as domain, count(*) as count FROM "user" WHERE user_type = 'suspended' GROUP BY domain ORDER BY count DESC; domain | count ---------------------------+------- gmail.com…

    Published

  156. A great alternative is rarely fatter than what it aims to replace

    This is not always true, but in my experience, it tends to hold up. We often build or evaluate tools which aim to replace something kludgy^Wvenerable. Common examples include shells, programming languages, system utilities, and so on. Rust, Zig, etc, are taking on C in this manner; so too does zsh, fish…

    Published

  157. Status update, February 2021

    Salutations! It's officially a year of pandemic life. I hear the vaccine distribution is going well, so hopefully there won't be another year of this. In the meanwhile, I've been working hard on free software, what with having little else to do. However, I'm afraid I cannot tell you about most of it…

    Published

  158. How to make your downstream users happy

    There are a number of things that your FOSS project can be doing which will make the lives of your downstream users easier, particularly if you’re writing a library or programmer-facing tooling. Many of your downstreams (Linux distros, pkgsrc, corporate users, etc) are dealing with lots of packages,…

    Published

  159. Use open platforms — or else

    The ongoing events around /r/wallstreetbets teaches us, once again, about the value of open platforms, and the tremendous risk involved in using proprietary platforms. The economic elites who control those proprietary platforms, backed by their venture capital interests, will shut us down if we threaten…

    Published

  160. Open source means surrendering your monopoly over commercial exploitation

    Participation in open source requires you to surrender your monopoly over commercial exploitation. This is a profound point about free and open source software which seems to be causing a lot of companies to struggle with their understanding of the philosophy of FOSS, and it’s worth addressing on its…

    Published

  161. Elasticsearch does not belong to Elastic

    Elasticsearch belongs to its 1,573 contributors, who retain their copyright, and granted Elastic a license to distribute their work without restriction. This is the loophole which Elastic exploited when they decided that Elasticsearch would no longer be open source, a loophole that they introduced with…

    Published

  162. Spooky action at a distance

    Einstein famously characterized the strangeness of quantum mechanics as “spooky action at a distance”, which, if I had to pick one phrase about physics to be my favorite, would be a strong contender. I like to relate this to programming language design: there are some language features which are similarly…

    Published

  163. Status update, January 2021

    Hello from the future! My previous status update was last year, but it feels like it was only a month ago. I hope you didn't miss my crappy jokes too much during the long wait. One of the advancements that I would like to mention this month is the general availability of godocs.io, which is a replacement…

    Published

  164. History will not remember us fondly

    Today, we recall the Middle Ages as an unenlightened time (quite literally, in fact). We view the Middle Ages with a critical eye towards its brutality, lack of individual freedoms, and societal and technological regression. But we rarely turn that same critical lens on ourselves to consider how we’ll…

    Published

  165. Fostering a culture that values stability and reliability

    There’s an idea which encounters a bizarre level of resistance from the broader software community: that software can be completed. This resistance manifests in several forms, perhaps the most common being the notion that a git repository which doesn’t receive many commits is abandoned or less worthwhile…

    Published

  166. A megacorp is not your dream job

    Megacorporations1 do not care about you. You’re worth nothing to them. Google made $66 billion in 2014 — even if you made an exorbitant $500K salary, you only cost them .00075% of that revenue. They are not invested in you. Why should you invest in them? Why should you give a company that isn’t invested…

    Published

  167. How to design a new programming language from scratch

    There is a long, difficult road from vague, pie-in-the-sky ideas about what would be cool to have in a new programming language, to a robust, self-consistent, practical implementation of those ideas. Designing and implementing a new programming language from scratch is one of the most challenging tasks…

    Published

  168. godocs.io is now available

    Due to the coming sunsetting of godoc.org in favor of pkg.go.dev, I’m happy to announce that godocs.io is now available as a replacement. We have forked the codebase and cleaned things up quite a bit, removing lots of dead or obsolete features, cleaning out a bunch of Google-specific code and analytics…

    Published

  169. Status update, December 2020

    Happy holidays! I hope everyone’s having a great time staying at home and not spending any time with your families. It’s time for another summary of the month’s advances in FOSS development. Let’s get to it! One of my main focuses has been on sourcehut’s API 2.0 planning. This month, the meta.sr.ht and…

    Published

  170. Become shell literate

    Shell literacy is one of the most important skills you ought to possess as a programmer. The Unix shell is one of the most powerful ideas ever put to code, and should be second nature to you as a programmer. No other tool is nearly as effective at commanding your computer to perform complex tasks quickly…

    Published

  171. Web analytics should at least meet the standards of informed consent

    Research conducted on human beings, at least outside of the domain of technology, has to meet a minimum standard of ethical reasoning called informed consent. Details vary, but the general elements of informed consent are: Disclosure of the nature and purpose of the research and its implications (risks…

    Published

  172. A few ways to make money in FOSS

    I work on free and open-source software full time, and I make a comfortable living doing it. And I don’t half-ass it: 100% of my code is free and open-source. There’s no proprietary add-ons, no periodic code dumps, just 100% bona-fide free and open source software. Others have often sought my advice…

    Published

  173. We can do better than DuckDuckGo

    DuckDuckGo is one of the long-time darlings of the technophile’s pro-privacy recommendations, and in fact the search engine that I use myself on the daily. They certainly present a more compelling option than many of the incumbents, like Google or Bing. Even so, DuckDuckGo is not good enough, and we…

    Published

  174. Status update, November 2020

    Greetings, humanoids! Our fleshy vessels have aged by 2.678×10⁶ seconds, and you know what that means: time for another status update! Pour a cup of your favorite beverage stimulant and gather ‘round for some news. First off, today is the second anniversary of SourceHut’s alpha being opened to the public…

    Published

  175. Utility vs usability

    In many fields, professional-grade tooling requires a high degree of knowledge and training to use properly, usually more than is available to the amateur. The typical mechanic’s tool chest makes my (rather well-stocked, in my opinion) tool bag look quite silly. A racecar driver is using a vehicle which…

    Published

  176. What is this Gemini thing anyway, and why am I excited about it?

    I’ve been writing about some specific topics in the realm of Gemini on my blog over the past two months or so, but I still haven’t written a broader introduction to Gemini, what I’m doing with it, and why you should be excited about it, too. Let’s do that today! Gemini is a network protocol for exchanging…

    Published

  177. I'm handing over maintenance of wlroots and sway to Simon Ser

    Over the past several months, I’ve been gradually weaning down my role in both projects, and as a contributor to Wayland in general. I feel that I’ve already accomplished everything I set out to do with Wayland — and more! I have been happily using sway as my daily driver for well over a year with no…

    Published

  178. Firefox: The Jewel^WEmbarassment of Open Source

    Circa 2006, the consensus on Firefox was concisely stated by this classic xkcd: This feeling didn’t last. In 2016, I wrote In Memoriam - Mozilla, and in 2017, Firefox is on a slippery slope. Well, I was right, and Firefox (and Mozilla) have only become worse since. The fuck-up culture is so ingrained…

    Published

  179. Status update, October 2020

    I’m writing this month’s status update from a brand-new desktop workstation (well, I re-used the GPU), my first new workstation in about 10 years. I hope this new one lasts for another decade! I aimed for something smaller and lightweight this time — it’s a Mini-ITX build. I’ve only been running this…

    Published

  180. Four principles of software engineering

    Software should be robust. It should be designed to accommodate all known edge cases. In practice, this means predicting and handling all known error cases, enumerating and addressing all classes of user inputs, reasoning about and planning for the performance characteristics of your program, and so…

    Published

  181. Spamtoberfest

    As I’ve written before, the best contributors to a FOSS project are intrinsically motivated to solve problems in your software. This sort of contribution is often fixing an important problem and places a smaller burden on maintainers to spend their time working with the contributor. I’ve previously contrasted…

    Published

  182. A tale of two libcs

    I received a bug report from Debian today, who had fed some garbage into scdoc, and it gave them a SIGSEGV back. Diving into this problem gave me a good opportunity to draw a comparison between musl libc and glibc. Let’s start with the stack trace: ==26267==ERROR: AddressSanitizer: SEGV on unknown address…

    Published

  183. TOFU recommendations for Gemini

    I will have more to say about Gemini in the future, but for now, I wanted to write up some details about one thing in particular: the trust-on-first-use algorithm I implemented for my client, gmni. I think you should implement this algorithm, too! First of all, it’s important to note that the Gemini…

    Published

  184. The unrealized potential of federation

    There are some major problems on the internet which may seem intractable. How do we prevent centralization of our communication tools under the authority of a few, whose motivations may not align with our interests? How do we build internet-scale infrastructure without a megacorp-scale budget? Can we…

    Published

  185. Status update, September 2020

    A mercifully cool September is upon us, and after years of searching, I finally was able to secure Club Mate in the US. Let’s decant a bottle and recant the story of this month’s progress in free software development. First of all, I’ve been able to put a pin on operations work on SourceHut for the time…

    Published

  186. Linux development is distributed - profoundly so

    The standard introduction to git starts with an explanation of what it means to use a “distributed” version control system. It’s pointed out that every developer has a complete local copy of the repository and can work independently and offline, often contrasting this design with systems like SVN and…

    Published

  187. Embrace, extend, and finally extinguish - Microsoft plays their hand

    GitHub took a note out of the Microsoft “EEE” playbook when designing their git services. They embraced git, and then rather than building an interface on top of email — the collaboration mechanism that git was designed to use, and which is still used for Linux kernel development1 — they built their…

    Published

  188. Alice in Wonderland and the theft of the public domain

    Disney’s Alice in Wonderland is one of my favorite movies and an undisputed classic. After its release in 1951, Alice holds a fond place in billions of children’s hearts, over almost four generations. And it has been stolen from those generations, as part of the theft of one of these generations’ greatest…

    Published

  189. Software engineers solve problems

    Software engineers solve problems. A problem you may have encountered is, for example, “this function has a bug”, and you’re probably already more or less comfortable solving these problems. Here are some other problems you might encounter on the way: Actually, the bug ultimately comes from a third-party…

    Published

  190. Status update, August 2020

    Greetings! Today is another rainy day here in Philadelphia, which rather sours my plans of walking over to the nearby cafe to order some breakfast to-go. But I am tired, and if I’m going to make it to the end of this blog post in one piece, I’m gonna need a coffee. brb. Hey, that was actually pretty…

    Published

  191. Web browsers need to stop

    Enough is enough. The web and web browsers have become Lovecraftian horrors of an unprecedented scale. They’ve long since left “scope creep” territory and entered “oh my god please just stop” territory, and are trucking on through to hitherto unexplored degrees of obscene scope. And we don’t want what…

    Published

  192. I want to contribute to your project, how do I start?

    I get this question a lot! The answer is usually… don’t. If you already know what you want to do, then the question doesn’t need to be asked.1 But, if you don’t already know what you want to do, then your time might be better spent elsewhere! The best contributors are always intrinsically motivated.…

    Published

  193. pkg.go.dev is more concerned with Google's interests than good engineering

    pkg.go.dev sucks. It’s certainly prettier than godoc.org, but under the covers, it’s a failure of engineering characteristic of the Google approach. Go is a pretty good programming language. I have long held that this is not attributable to Google’s stewardship, but rather to a small number of language…

    Published

  194. The falsehoods of anti-AGPL propaganda

    Google is well-known for forbidding the use of software using the GNU Affero General Public License, commonly known as “AGPL”. Google is also well-known for being the subject of cargo-culting by fad startups. Unfortunately, this means that they are susceptible to what is ultimately anti-AGPL propaganda…

    Published

  195. Status update, July 2020

    Hello again! Another month of FOSS development behind us, and we’re back again to share the results. I took a week off at the end of June, so my progress this month is somewhat less than usual. Regardless, I have some updates for you, mainly in the domain of SourceHut work. But before we get to that…

    Published

  196. March 2nd, 1943

    It’s March 2nd, 1943. The user asks your software to schedule a meeting with Acmecorp at “9 AM on the first Monday of next month”. [6:17:45] homura ~ $ cal -3 2 March 1943 February 1943 March 1943 April 1943 Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3…

    Published

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

    There have, historically, been two kinds of operating systems: general-purpose, and special-purpose. These roles are defined by the function they serve for the user. Examples of general-purpose operating systems include Unix (Linux, BSD, etc), Solaris, Haiku, Plan 9, and so on. These are well-suited…

    Published

  198. Introducing the BARE message encoding

    I like stateless tokens. We started with stateful tokens: where a generated string acts as a unique identifier for a resource, and the resource itself is looked up separately. For example, your sr.ht OAuth token is a stateful token: we just generate a random number and hand it to you, something like…

    Published

  199. Status update, June 2020

    Like last month, I am writing to you from the past, preparing this status update a day earlier than usual. This time it’s because I expect to be busy with planned sr.ht maintenance tomorrow, so I’m getting the status updates written ahead of time. aerc has seen lots of patches merged recently thanks…

    Published

  200. Can we talk about client-side certificates?

    I’m working on improving the means by which API users authenticate with the SourceHut API. Today, I was reading RFC 6749 (OAuth2) for this purpose, and it got me thinking about the original OAuth spec. I recalled vaguely that it had the API clients actually sign every request, and… yep, indeed it does…

    Published

  201. Add a "contrib" directory to your projects

    There’s a common pattern among free- and open-source software projects to include a “contrib” directory at the top of their source code tree. I’ve seen this in many projects for many years, but I’ve seen it discussed only rarely — so here we are! The contrib directory is used as an unorganized (or, at…

    Published

  202. Status update, May 2020

    Hello, future readers! I am writing to you from one day in the past. I finished my plans for today early and thought I’d get a head start on writing the status updates for tomorrow, or rather, for today. From your reference frame, that is. Let’s start with Wayland. First, as you might have heard, The…

    Published

  203. We are complicit in our employer's deeds

    Tim Bray’s excellent “Bye Amazon” post inspired me to take this article off of my backlog, where it has been sitting for a few weeks. I applaud Tim for stepping down from a company that has demonstrated itself incompatible with his sense of right and wrong, and I want to take a moment to remind you that…

    Published

  204. How to store data forever

    As someone who has been often maligned by the disappearance of my data for various reasons — companies going under, hard drive failure, etc — and as someone who is responsible for the safekeeping of other people’s data, I’ve put a lot of thought into solutions for long-term data retention. There are…

    Published

  205. Configuring aerc for git via email

    I use aerc as my email client (naturally — I wrote it, after all), and I use git send-email to receive patches to many of my projects. I designed aerc specifically to be productive for this workflow, but there are a few extra things that I use in my personal aerc configuration that I thought were worth…

    Published

  206. Status update, April 2020

    Wow, it’s already time for another status update? I’m starting to lose track of the days stuck inside. I have it easier than many - I was already used to working from home before any of this began. But, weeks and weeks of not spending IRL time with anyone else is starting to get to me. Remember to call…

    Published

  207. My unorthodox, branchless git workflow

    I have been using git for a while, and I took the time to learn about it in great detail. Equipped with an understanding of its internals and a comfortable familiarity with tools like git rebase — and a personal, intrinsic desire to strive for minimal and lightweight solutions — I have organically developed…

    Published

  208. Designing and 3D printing a new part for my truck

    I drove a car daily for many years while I was living in Colorado, California, and New Jersey, but since I moved to Philadelphia I have not needed a car. The public transit here is not great, but it’s good enough to get where I need to be and it’s a lot easier than worrying about parking a car. However…

    Published

  209. The reckless, infinite scope of web browsers

    Since the first browser war between Netscape and Internet Explorer, web browsers have been using features as their primary means of competing with each other. This strategy of unlimited scope and perpetual feature creep is reckless, and has been allowed to go on for far too long. I used wget to download…

    Published

  210. GitHub's new notifications: a case of regressive design

    Disclaimer: I am the founder of a company which competes with GitHub. However, I still use tools like GitHub, GitLab, and so on, as part of regular contributions to projects all over the FOSS ecosystem. I don’t dislike GitHub, and I use it frequently in my daily workflow. GitHub is rolling out a new…

    Published

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

    To Senator Bob Casey, I’m writing this open letter. As your constituent, someone who voted for you in 2018, and an expert in software technology, I am disappointed in your support of the EARN IT Act. I am aware that encryption is a challenging technology to understand, even for us software engineers…

    Published

  212. The Abiopause

    The sun has an influence on its surroundings. One of these is in the form of small particles that are constantly ejected from the sun in all directions, which exerts an outward pressure, creating an expanding sphere of particles that moves away from the sun. These particles are the solar wind. As the…

    Published

  213. Thoughts on performance & optimization

    The idea that programmers ought to or ought not to be called “software engineers” is a contentious one. How you approach optimization and performance is one metric which can definitely push my evaluation of a developer towards the engineering side. Unfortunately, I think that a huge number of software…

    Published

  214. Fucking laptops

    The best laptop ever made is the ThinkPad X200, and I have two of them. The caveats are: I get only 2-3 hours of battery life even with conservative use; and it struggles to deal with 1080p videos. The integrated GPU, Bluetooth and WiFi, internal sensors, and even the fingerprint reader can all be driven…

    Published

  215. Status update, February 2020

    Today I thought it’d try out something new: I have an old family recipe simmering on the stove right now, but instead of beef I’m trying out impossible beef. It cooked up a bit weird — it doesn’t brown up in the same way I expect of ground beef, and it made a lot more fond than I expected. Perhaps the…

    Published

  216. Dependencies and maintainers

    I’m 34,018 feet over the Atlantic at the moment, on my way home from FOSDEM. It was as always a lovely event, with far too many events of interest for any single person to consume. One of the few talks I was able to attend1 left a persistent worm of thought in my brain. This talk was put on by representatives…

    Published

  217. KnightOS was an interesting operating system

    KnightOS is an operating system I started writing about 10 years ago, for Texas Instruments line of z80 calculators — the TI-73, TI-83+, TI-84+, and similar calculators are supported. It still gets the rare improvements, but these days myself and most of the major contributors are just left with starry…

    Published

  218. The happinesses and stresses of full-time FOSS work

    In the past few days, several free software maintainers have come out to discuss the stresses of their work. Though the timing was suggestive, my article last week on the philosophy of project governance was, at best, only tangentially related to this topic - I had been working on that article for a…

    Published

  219. A philosophy of project governance

    I’ve been in the maintainer role for dozens of projects for a while now, and have moderated my fair share of conflicts. I’ve also been on the other side, many times, as a minor contributor watching or participating in conflict within other projects. Over the years, I’ve developed an approach to project…

    Published

  220. Status update, January 2020

    I forgot to write this post this morning, and I’m on cup 3 of coffee while knee-deep in some arcane work with tarballs in Python. Forgive the brevity of this introduction. Let’s get right into the status update. First of all, FOSDEM 2020 is taking place on February 1st and 2nd, and I’m planning on being…

    Published

  221. Following up on "Hello world"

    This is a follow-up to my last article, Hello world, which is easily the most negatively received article I’ve written — a remarkable feat for someone who’s written as much flame bait as me. Naturally, the fault lies with the readers. All jokes aside, I’ll try to state my point better. The “Hello world…

    Published

  222. Hello world

    Let’s say you ask your programming language to do the simplest possible task: print out “hello world”. Generally this takes two syscalls: write and exit. The following assembly program is the ideal Linux x86_64 program for this purpose. A perfect compiler would emit this hello world program for any language…

    Published

  223. Managing my dotfiles as a git repository

    There are many tools for managing your dotfiles - user-specific configuration files. GNU stow is an example. I’ve tried a few solutions over the years, but I settled on a very simple system several years ago which has served me very well in the time since: my $HOME is a git repository. This repository…

    Published

  224. PinePhone review

    tl;dr: Holy shit! This is the phone I have always wanted. I have never been this excited about the mobile sector before. However: the software side is totally absent — phone calls are very dubious, SMS is somewhat dubious, LTE requires some hacks, and everything will have to be written from the ground…

    Published

  225. Status update, December 2019

    It’s December 15th and it still hasn’t snowed here. Why did I move to this godforsaken den of unholy heat and rain? I think I have chosen a latitude just southerly enough to deprive me of the climate I yearn for. I take some comfort in the knowledge that I’m travelling home to see the family in a couple…

    Published

  226. Developers shouldn't distribute their own software

    An oft-heard complaint about Linux is that software distribution often takes several forms: a Windows version, a macOS version, and… a Debian version, an Ubuntu version, a Fedora version, a CentOS version, an openSUSE version… but these complaints miss the point. The true distributable form for Linux…

    Published

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

    As many of you have no doubt heard, control of the .org registry has been sold to private interests. There have been attempts to call them to reason, like Save .ORG, but let’s be realistic: they knew what they’re doing is wrong, the whole time. If they were a commercial entity, our appeals would fall…

    Published

  228. Software developers should avoid traumatic changes

    A lot of software has gone through changes which, in retrospect, I would describe as “traumatic” to their communities. I recognize these sorts of changes by their effect: we might have pulled through in the end, but only after a lot of heartbreak, struggle, and hours of wasted hacking; but the change…

    Published

  229. China

    This article will be difficult to read and was difficult to write. I hope that you can stomach the uncomfortable nature of this topic and read my thoughts in earnest. I usually focus on technology-related content, but at the end of the day, this is my personal blog and I feel that it would betray my…

    Published

  230. Status update, November 2019

    Today’s update is especially exciting, because today marks the 1 year anniversary of Sourcehut opening it’s alpha to public registration. I wrote a nice long article which goes into detail about what Sourcehut accomplished in 2019, what’s to come for 2020, and it lays out the entire master plan for your…

    Published

  231. An old-school shell hack on a line printer

    It’s been too long since I last did a good hack, for no practical reason other than great hack value. In my case, these often amount to a nostalgia for an age of computing I wasn’t present for. In a recent bid to capture more of this nostalgia, I recently picked up a dot matrix line printer, specifically…

    Published

  232. Status update, October 2019

    Last month, I gave you an update at the conclusion of a long series of travels. But, I wasn’t done yet - this month, I spent a week in Montreal for XDC. Simon Ser put up a great write-up which goes over a lot of the important things we discussed there. It was a wonderful conference and well worth the…

    Published

  233. How to fuck up software releases

    I manage releases for a bunch of free & open-source software. Just about every time I ship a release, I find a novel way to fuck it up. Enough of these fuck-ups have accumulated now that I wanted to share some of my mistakes and how I (try to) prevent them from happening twice. At first, I did everything…

    Published

  234. RaptorCS's redemption: the POWER9 machine works

    This is a follow-up to my earlier article, “RaptorCS POWER9 Blackbird PC: An expensive mistake”. Since I published that article, I’ve been in touch with Raptor and they’ve been much more communicative and helpful. I now have a working machine! Update Feb. 2024: Seems the improvements I asked for may…

    Published

  235. Why Collabora really added Digital Restrictions Management to Weston

    A recent article from Collabora, Why HDCP support in Weston is a good thing, proports to offer a lot of insight into why HDCP - a Digital Restrictions Management (DRM) related technology - was added to Weston - a well known basic Wayland compositor which was once the reference compositor for Wayland…

    Published

  236. RaptorCS POWER9 Blackbird PC review

    November 2018: Ordered Basic Blackbird Bundle w/32 GB RAM: $1,935.64 Update 2019-12-23: This article was originally titled “RaptorCS POWER9 Blackbird PC: An expensive mistake”. Please read the follow-up article, published 2019-10-10: RaptorCS’s redemption: the POWER9 machine works June 2019 Order ships…

    Published

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

    There is a difference between free software and open-source software. But you have to squint to see it. Software licenses which qualify for one title but not the other are exceptionally rare. A fascination with linguistics is common among hackers, and I encourage and participate in language hacking myself…

    Published

  238. Status update, September 2019

    Finally home again after a long series of travels! I spent almost a month in Japan, then visited my sister’s new home in Hawaii on the way eastwards, then some old friends in Seattle, and finally after 5½ long weeks, it’s home sweet home here in Philadelphia. At least until I leave for XDC in Montreal…

    Published

  239. How I decide between many programming languages

    I have a few old standards in my toolbelt that I find myself calling upon most often, but I try to learn enough about many programming languages to reason about whether or not they’re suitable to any use-case I’m thinking about. The best way is to learn by doing, so getting a general impression of the…

    Published

  240. Building interactive SSH applications

    After the announcement of shell access for builds.sr.ht jobs, a few people sent me some questions, wondering how this sort of thing is done. Writing interactive SSH applications is actually pretty easy, but it does require some knowledge of the pieces involved and a little bit of general Unix literacy…

    Published

  241. Shell access for builds.sr.ht CI

    Have you ever found yourself staring at a failed CI build, wondering desperately what happened? Or, have you ever needed a fresh machine on-demand to test out an idea in? Have you been working on Linux, but need to test something on OpenBSD? Starting this week, builds.sr.ht can help with all of these…

    Published

  242. Status update, August 2019

    Outside my window, the morning sun can be seen rising over the land of the rising sun, as I sip from a coffee purchased at the konbini down the street. I almost forgot to order it, as the staffer behind the counter pointed out with a smile and a joke that, having been told in Japanese, mostly went over…

    Published

  243. DRM leasing: VR for Wayland

    As those who read my status updates have been aware, recently I’ve been working on bringing VR to Wayland (and vice versa). The deepest and most technical part of this work is DRM leasing (Direct Rendering Manager, not Digital Restrictions Management), and I think it’d be good to write in detail about…

    Published

  244. FOSS contributor tracks

    Just like many companies have different advancement tracks for their employees (for example, a management track and an engineering track), similar concepts exist in free software projects. One of the roles of a maintainer is to help contributors develop into the roles which best suit them. I’d like to…

    Published

  245. Status update, July 2019

    Today I received the keys to my new apartment, which by way of not being directly in the middle of the city1 saves me a decent chunk of money - and allows me to proudly announce that I have officially broken even on doing free software full time! I owe a great deal of thanks to all of you who have donated…

    Published

  246. Announcing code annotations for SourceHut

    Today I’m happy to announce that code annotations are now available for SourceHut! These allow you to decorate your code with arbitrary links and markdown. The end result looks something like this: NOTICE: Annotations were ultimately removed from sourcehut. SourceHut is the "hacker's forge", a 100% open…

    Published

  247. Absence of certain features in IRC considered a feature

    The other day a friend of mine (an oper on Freenode) wanted to talk about IRC compared to its peers, such as Matrix, Slack, Discord, etc. The ensuing discussion deserves summarization here. In short: I’m glad that IRC doesn’t have the features that are “showstoppers” for people choosing other platforms…

    Published

  248. Status update, June 2019

    Summer is in full swing here in Philadelphia. Last night I got great views of Jupiter and a nearly-full Moon, and my first Saturn observation of the year. I love astronomy on clear Friday nights, there’s always plenty of people coming through the city. And today, on a relaxing lazy Saturday, waiting…

    Published

  249. My personal journey from MIT to GPL

    As I got started writing open source software, I generally preferred the MIT license. I actually made fun of the “copyleft” GPL licenses, on the grounds that they are less free. I still hold this opinion today: the GPL license is less free than the MIT license - but today, I believe this in a good way…

    Published

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

    After years of painfully slow development, the aerc email client has seen a huge boost in its pace of development recently. This leads to today’s announcement: aerc 0.1.0 is now available! After my transition to working on free software full time allowed me to spend more time on more projects, I was…

    Published

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

    The fork button on GitHub - with the little number next to it for depositing dopamine into your brain - is a bit misleading. GitHub co-opted the meaning of “fork” to trick you into participating in their platform more. They did this in a well-intentioned way, for the sake of their pull requests feature…

    Published

  252. Status update, May 2019

    This month, it seems the most exciting developments again come from the realm of email. I’ve got cool email-related news to share for aerc, lists.sr.ht, and todo.sr.ht, and many cool developments in my other projects to share. Let’s start with lists.sr.ht: I have broken ground on the web-based patch…

    Published

  253. Webcast: Reviewing git & mercurial patches with email

    With the availability of new resources like git-send-email.io, I’ve been working on making the email-based workflow more understandable and accessible to the world. One thing that’s notably missing from this tutorial, however, is the maintainer side of the work. I intend to do a full write-up in the…

    Published

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

    In January 2018, I wrote a blog post which included a fee calculator. Patreon changes their fee model tomorrow, and it’s time for an updated calculator. I’m grandfathered into the old fees, so not much has changed for me, but I want to equip Patreon users - creators and supporters - with more knowledge…

    Published

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

    For a few hours here and there over the past few months, I’ve been working on a side project: Wio. I’ll just let the (3 minute) screencast do the talking first: Note: this video begins with several seconds of grey video. This is normal. In short, Wio is a Wayland compositor based on wlroots which has…

    Published

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

    So you’re starting a new website, and you open the first CSS file. What style do you use? Well, you hate indenting with spaces passionately. You know tabs are right because they’re literally made for this, and they’re only one byte, and these god damn spaces people with their bloody spacebars… Shut up…

    Published

  257. Using Cage for a seamless remote Wayland session

    Congratulations to Jente Hidskes on the first release of Cage! Cage is a Wayland compositor designed for kiosks - though, as you’ll shortly find out, is useful in many unexpected ways. It launches a single application, in fullscreen, and exits the compositor when that application exits. This lets you…

    Published

  258. Choosing a VPN service is a serious decision

    There’s a disturbing trend in the past year or so of various VPN companies advertising to the general, non-technical public. It’s great that the general public is starting to become more aware of their privacy online, but I’m not a fan of these companies exploiting public paranoia to peddle their wares…

    Published

  259. Announcing first-class Mercurial support on Sourcehut

    I’m pleased to announce that the final pieces have fallen into place for Mercurial support on SourceHut, which is now on-par with our git offering. Special thanks are owed to SourceHut contributor Ludovic Chabant, who has been instrumental in adding Mercurial support to SourceHut. You may have heard…

    Published

  260. Status update, April 2019

    Spring is here, and I’m already miserable in the heat. Crazy weather here in Philadelphia - I was woken up at 3 AM by my phone buzzing, telling me to take immediate shelter from a tornado. But with my A/C cranked up and the tornado safely passed, I’ve been able to get a lot of work done. The project…

    Published

  261. NewPipe represents the best of FOSS

    NewPipe is a free and open-source Android application for browsing & watching YouTube. In my opinion, NewPipe is a perfect case-study in why free & open source software is great and how our values differ from proprietary software in important ways. There’s one simple reason: it’s better than the proprietary…

    Published

  262. Rust is not a good C replacement

    I have a saying that summarizes my opinion of Rust compared to Go: “Go is the result of C programmers designing a new programming language, and Rust is the result of C++ programmers designing a new programming language”. This isn’t just a metaphor - Go was designed by plan9 alumni, an operating system…

    Published

  263. Status update, March 2019

    My todo list is getting completed at a pace it’s never seen before, and growing at a new pace, too. This full-time FOSS gig is really killing it! As the good weather finally starts to roll in, it’s time for March’s status update. Note: I posted updates on Patreon before, but will start posting here instead…

    Published

  264. Announcing the release of sway 1.0

    1,315 days after I started the sway project, it’s finally time for sway 1.0! I had no idea at the time how much work I was in for, or how many talented people would join and support the project with me. In order to complete this project, we have had to rewrite the entire Linux desktop nearly from scratch…

    Published

  265. Sourcehut's spartan approach to web design

    Sourcehut is known for its brutalist design, with its mostly shades-of-gray appearance, conservative color usage, and minimal distractions throughout. This article aims to share some insights into the philosophy that guides this design, both for the curious reader and for the new contributor to the open…

    Published

  266. Tips for a disciplined git workflow

    Basic git usage involves typing a few stock commands to “sync everyone up”. Many people who are frustrated with git become so because they never progress beyond this surface-level understanding of how it works. However, mastering git is easily worth your time. How much of your day is spent using git…

    Published

  267. Generics aren't ready for Go

    In the distance, a gradual roar begins to grow in volume. A dust cloud is visible over the horizon. As it nears, the shouts of the oncoming angry mob can be heard. Suddenly, it stops, and a brief silence ensues. Then the air is filled with the clackings of hundreds of keyboards, angrily typing the owner’s…

    Published

  268. Wayland misconceptions debunked

    This article has been on my backburner for a while, but it seems Wayland FUD is making the news again recently, so I’ve bumped up the priority a bit. For those new to my blog, I am the maintainer of wlroots, a library which implements much of the functionality required of a Wayland compositor and is…

    Published

  269. My experiences at FOSDEM 2019

    Currently in a plane on my way home from FOSDEM and, as seems to be a recurring pattern when I fly long distances home after attending a conference, a recap is readily flowing from my fingertips. This was my first year at FOSDEM, and I’m glad that I came. I’m already excited for next year! It was also…

    Published

  270. Why I chose Flask to build sr.ht's mini-services

    sr.ht is a large, production-scale suite of web applications (I call them “mini-services”, as they strike a balance between microservices and monolithic applications) which are built in Python with Flask. David Lord, one of the maintainers of Flask, reached out to me when he heard about sr.ht and saw…

    Published

  271. Why I use old hardware

    Recently I was making sure my main laptop is ready for travel1, which mostly just entails syncing up the latest version of my music collection. This laptop is a Thinkpad X200, which turns 11 years old in July and is my main workstation away from home (though I bring a second monitor and an external keyboard…

    Published

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

    Sorry for posting two articles so close to each other - but this is important! As I’m certain many of you know, I maintain a large collection of free software projects, including sway, wlroots, sr.ht, scdoc, aerc, and many, many more. I contribute to more still, working on projects like Alpine Linux…

    Published

  273. Backups & redundancy at sr.ht

    sr.ht1 is 100% open source and I encourage people to install it on their own infrastructure, especially if they’ll be sending patches upstream. However, I am equally thrilled to host sr.ht for you on the “official” instance, and most users find this useful because the maintenance burden is non-trivial…

    Published

  274. Patches welcome

    Happy new year! This is always a weird “holiday” for me, since all of the fun happened last night. Today is just kind of… I guess a chance for everyone to sober up before work tomorrow? It does tend to invite a sense of reflection and is the ideal time to plan for the year ahead. One of my goals in 2019…

    Published

  275. Anatomy of a shell

    I’ve been contributing where I can to Simon Ser’s mrsh project, a work-in-progress strictly POSIX shell implementation. I worked on some small mrsh features during my holiday travels and it’s in the forefront of my mind, so I’d like to share some of its design details with you. There are two main components…

    Published

  276. Porting Alpine Linux to RISC-V

    I recently received my HiFive Unleashed, after several excruciating months of waiting, and it’s incredibly cool. For those unaware, the HiFive Unleashed is the first consumer-facing Linux-capable RISC-V hardware. For anyone who’s still lost, RISC-V is an open, royalty-free instruction set architecture…

    Published

  277. How to abandon a FLOSS project

    It’s no secret that maintaining free and open source software is often a burdensome and thankless job. I empathise with maintainers who lost interest in a project, became demotivated by the endless demands of users, or are no longer blessed with enough free time. Whatever the reason, FLOSS work is volunteer…

    Published

  278. sr.ht, the hacker's forge, now open for public alpha

    I’m happy to announce today that I’m opening sr.ht (pronounced “sir hat”, or any other way you want) to the general public for the remainder of the alpha period. Though it’s missing some of the features which will be available when it’s completed, sr.ht today represents a very capable software forge…

    Published

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

    Unfortunately, I find myself writing about the Commons Clause again. For those not in the know, the Commons Clause is an addendum designed to be added to free software licenses. The restrictions it imposes (you cannot sell the software) makes the resulting franken-license nonfree. I’m not going to link…

    Published

  280. How does virtual memory work?

    Virtual memory is an essential part of your computer, and has been for several decades. In my earlier article on pointers, I compared memory to a giant array of octets (bytes), and explained some of the abstractions we make on top of that. In actual fact, memory is more complicated than a flat array…

    Published

  281. Sway 1.0-beta.1 release highlights

    1,173 days ago, I wrote sway’s initial commit, and 8,269 commits followed1, written by hundreds of contributors. What started as a side project became the most fully featured and stable Wayland desktop available, and drove the development of what has become the dominant solution for building Wayland…

    Published

  282. Go 1.11 got me to stop ignoring Go

    I took a few looks at Go over the years, starting who knows when. My first serious attempt to sit down and learn some damn Go was in 2014, when I set a new personal best at almost 200 lines of code before I got sick of it. I kept returning to Go because I could see how much potential it had, but every…

    Published

  283. Don't sign a CLA

    A large minority of open-source projects come with a CLA, or Contributor License Agreement, and require you to sign one before they’ll merge your patch. These agreements typically ask you to go above and beyond the rights you afford the project by contributing under the license the software is distributed…

    Published

  284. Sway & wlroots at XDC 2018

    Just got my first full night of sleep after the return flight from Spain after attending XDC 2018. It was a lot of fun! I attended along with four other major wlroots contributors. Joining me were Simon Ser (emersion) (a volunteer) and Scott Anderson (ascent12) of Collabora, who work on both wlroots…

    Published

  285. Getting started with qemu

    I often get asked questions about using my software, particularly sway, on hypervisors like VirtualBox and VMWare, as well as for general advice on which hypervisor to choose. My answer is always the same: qemu. There’s no excuse to use anything other than qemu, in my books. But I can admit that it might…

    Published

  286. Conservative web development

    Today I turned off my ad blocker, enabled JavaScript, opened my network monitor, and clicked the first link on Hacker News - a New York Times article. It started by downloading a megabyte of data as it rendered the page over the course of eight full seconds. The page opens with an advertisement 281 pixels…

    Published

  287. How to make a self-hosted video livestream

    I have seen some articles in the past which explain how to build the ecosystem around your video streaming, such as live chat and forums, but which leave the actual video streaming to Twitch.tv. I made a note the last time I saw one of these articles to write one of my own explaining the video bit. As…

    Published

  288. The Commons Clause will destroy open source

    An alarmist title, I know, but it’s true. If the Commons clause were to be adopted by all open source projects, they would cease to be open source1, and therefore the Commons clause is trying to destroy open source. When this first appeared I spoke out about it in discussion threads around the net, but…

    Published

  289. I don't trust Signal

    Occasionally when Signal is in the press and getting a lot of favorable discussion, I feel the need to step into various forums, IRC channels, and so on, and explain why I don’t trust Signal. Let’s do a blog post instead. Off the bat, let me explain that I expect a tool which claims to be secure to actually…

    Published

  290. Setting up a local dev mail server

    As part of my work on lists.sr.ht, it was necessary for me to configure a self-contained mail system on localhost that I could test with. I hope that others will go through a similar process in the future when they set up the code for hacking on locally or when working on other email related software…

    Published

  291. Writing a Wayland compositor with wlroots: shells

    I apologise for not writing about wlroots more frequently. I don’t really enjoy working on the McWayface codebase this series of blog posts was originally about, so we’re just going to dismiss that and talk about the various pieces of a Wayland compositor in a more free-form style. I hope you still find…

    Published

  292. Git is already federated & decentralized

    There have always been murmurs about “replacing GitHub with something decentralized!”, but in the wake of the Microsoft acquisition these murmurs have become conversations. In particular, this blog post is a direct response to forge-net (formerly known as GitPub). They want to federate and decentralize…

    Published

  293. Input handling in wlroots

    I’ve said before that wlroots is a “batteries not included” kind of library, and one of the places where that is most apparent is with our approach to input handling. We implemented a very hands-off design for input, in order to support many use-cases: desktop input, phones with and without USB-OTG HIDs…

    Published

  294. Simple, correct, fast: in that order

    The single most important quality in a piece of software is simplicity. It’s more important than doing the task you set out to achieve. It’s more important than performance. The reason is straightforward: if your solution is not simple, it will not be correct or fast. Given enough time, you’ll find that…

    Published

  295. The advantages of an email-driven git workflow

    git 2.18.0 has been released, and with it my first contribution to git has shipped! My patch was for a git feature which remains disappointingly obscure: git send-email. I want to introduce my readers to this feature and speak to the benefits of using an email-driven git workflow - the workflow git was…

    Published

  296. A quick review of my Let's Encrypt setup

    Let’s Encrypt makes TLS much easier for pretty much everyone, but can still be annoying to use. It took me a while to smooth over the cracks in my Let’s Encrypt configuration across my (large) fleet of different TLS-enabled services. I wanted to take a quick moment to share setup with you. 2020-01-02…

    Published

  297. Should you move from GitHub to sr.ht

    I’m not terribly concerned about Microsoft’s acquisition of GitHub, but I don’t fault those who are worried. I’ve been working on my alternative platform, sr.ht, for quite a while. I’m not about to leave GitHub because of Microsoft alone. I do have some political disagreements with GitHub and Microsoft…

    Published

  298. How I maintain FOSS projects

    Today’s is another blog post which has been on my to-write list for a while. I have hesitated a bit to write about this, because I’m certain that my approach isn’t perfect. I think it’s pretty good, though, and people who work with me in FOSS agreed after a quick survey. So! Let’s at least put it out…

    Published

  299. Embedding files in C programs with koio

    Quick blog post today to introduce a new tool I wrote: koio. This is a small tool which takes a list of files and embeds them in a C file. A library provides an fopen shim which checks the list of embedded files before resorting to the real filesystem. I made this tool for chopsui, where I eventually…

    Published

  300. Why did we replace wlc?

    For a little over a year, I’ve been working with a bunch of talented C developers to build a replacement for the wlc library. The result is wlroots, and we’re still working on completing it and updating our software to use it. The conventional wisdom suggests that rewriting your code from scratch is…

    Published

  301. Introducing scdoc, a man page generator

    A man page generator is one of those tools that I’ve said I would write for a long time, being displeased with most of the other options. For a while I used asciidoc, but was never fond of it. There are a few things I want to see in a man page generator: A syntax which is easy to read and write Small…

    Published

  302. Redirecting stderr of a running process

    During the KDE sprint in Berlin, Roman Gilg leaned over to me and asked if I knew how to redirect the stderr of an already-running process to a file. I Googled it and found underwhelming answers using strace and trying to decipher the output by reading the write syscalls. Instead, I thought a gdb based…

    Published

  303. Google embraces, extends, and extinguishes

    Microsoft infamously coined the euphemism “embrace, extend, extinguish” to describe their strategy for disrupting markets dominated by open standards. These days, Microsoft seems to have turned the other leaf, contributing to a huge amount of open source and supporting open standards, and is becoming…

    Published

  304. Sway reporting in from KDE's Berlin development sprint

    I’m writing to you from an airplane on my way back to Philadelphia, after spending a week in Berlin working with the KDE team. It was great to meet those folks and work with them for a while. It’ll take me some time to get the taste of C++ out of my mouth, though! In all seriousness, it was a very productive…

    Published

  305. Achtung! Decentralize, decentralize, decentralize!

    I can hardly believe it, but the media is finally putting Facebook’s feet to the fire! No longer is it just the weird paranoid kids shouting at everyone to stop giving all of their information to these companies. We need to take this bull by the horns and drive it in a productive direction, and for that…

    Published

  306. Hack everything without fear

    We live in a golden age of open source, and it can sometimes be easy to forget the privileges that this affords us. I’m writing this article with vim, in a terminal emulator called urxvt, listening to music with mpv, in a Sway desktop session, on the Linux kernel. Supporting this are libraries like glibc…

    Published

  307. How to write an IRC bot

    My disdain for Slack and many other Silicon Valley chat clients is well known, as is my undying love for IRC. With Slack making the news lately after their recent decision to disable the IRC and XMPP gateways in a classic Embrace Extend Extinguish move, they’ve been on my mind and I feel like writing…

    Published

  308. Writing a Wayland Compositor, Part 3: Rendering a window

    This is the third in a series of articles on the subject of writing a Wayland compositor from scratch using wlroots. Check out the first article if you haven’t already. We left off with a Wayland server which accepts client connections and exposes a handful of globals, but does not do anything particularly…

    Published

  309. The path to sustainably working on FOSS full-time

    This is an article I didn’t think I’d be writing any time soon. I’ve aspired to work full-time on my free and open source software projects for a long time now, but I have never expected that it could work. However, as of this week, I finally have enough recurring donation revenue to break even on FOSS…

    Published

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

    This is the second in a series of articles on the subject of writing a Wayland compositor from scratch using wlroots. Check out the first article if you haven’t already. Last time, we ended up with an application which fired up a wlroots backend, enumerated output devices, and drew some pretty colors…

    Published

  311. Writing a Wayland Compositor, Part 1: Hello wlroots

    This is the first in a series of many articles I’m writing on the subject of building a functional Wayland compositor from scratch. As you may know, I am the lead maintainer of sway, a reasonably popular Wayland compositor. Along with many other talented developers, we’ve been working on wlroots over…

    Published

  312. The last years

    August 14th, 2019 PYONGYANG IN CHAOS AS PANDEMIC DECIMATES LEADERSHIP. Sources within the country have reported that a fast-acting and deadly infectious disease has suddenly infected the population of Pyongyang, the capital city of North Korea, where most of the country’s political elite live. Unconfirmed…

    Published

  313. Introduction to POSIX shell

    What the heck is the POSIX shell anyway? Well, the POSIX (the Portable Operating System Interface) shell is the standard Unix shell - standard meaning it was formally defined and shipped in a published standard. This makes shell scripts written for it portable, something no other shell can lay claim…

    Published

  314. Sway and client side decorations

    You may have recently seen an article from GNOME on the subject of client side decorations (CSD) titled Introducing the CSD Initiative. It states some invalid assumptions which I want to clarify, and I want to tell you Sway’s stance on the subject. I also speak for the rest of the projects involved in…

    Published

  315. Fee breakdown for various donation platforms

    Understanding fees are a really confusing part of supporting creators of things you like. I provide a few ways for people to support my work, and my supporters can struggle to understand the differences between them. It comes down to fees, of which there are several kinds (note: I just made these terms…

    Published

  316. Learn about your package manager

    Tools like virtualenv, rbenv, and to a lesser extent npm and pip, are occasionally useful in development but encourage bad practices in production. Many people forget that their distro already has a package manager! And there’s more– you, the user, can write packages for it! Your distro’s package repositories…

    Published

  317. fork is not my favorite syscall

    This article has been on my to-write list for a while now. In my opinion, fork is one of the most questionable design choices of Unix. I don’t understand the circumstances that led to its creation, and I grieve over the legacy rationale that keeps it alive to this day. Let’s set the scene. It’s 1971…

    Published

  318. wlroots whitepaper available

    View PDF

    Published

  319. Firefox is on a slippery slope

    For a long time, it was just setting the default search provider to Google in exchange for a beefy stipend. Later, paid links in your new tab page were added. Then, a proprietary service, Pocket, was bundled into the browser - not as an addon, but a hardcoded feature. In the past few days, we’ve discovered…

    Published

  320. A history of emergent intelligence

    As you all know, the simulation of universe 2813/9301 is now coming to a close. This simulation is notable for being the first simulated universe suitable for hosting intelligent life, but yesterday the simulation reached a state where we believe no additional intelligences will emerge. It seems the…

    Published

  321. On taking good care of your phone

    I just finished replacing the micro-USB daughterboard on my Samsung Galaxy S5, which involved taking the phone most of the way apart, doing the replacement, and putting it back together. This inspired me to write about my approach to maintaining my cell phone. I’ve had this phone for a while and I have…

    Published

  322. Portability matters

    There are many kinds of “portability” in software. Portability refers to the relative ease of “porting” a piece of software to another system. That platform might be another operating system, another CPU architecture, another web browser, another filesystem… and so on. More portable software uses the…

    Published

  323. Nvidia sucks and I'm sick of it

    There’s something I need to make clear about Nvidia. Sway 1.0, which is the release after next, is not going to support the Nvidia proprietary driver, EGLStreams, or any other proprietary graphics APIs. The only supported driver for Nvidia cards will be the open source nouveau driver. I will explain…

    Published

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

    Today I’ve released sway 0.15-rc1, the first release candidate for the final 0.x release of sway. That’s right - after sway 0.15 will be sway 1.0. After today, no new features are being added to sway until we complete the migration to our new plumbing library, wlroots. This has been a long time coming…

    Published

  325. Analyzing HN moderation & censorship

    Hacker News is a popular “hacker” news board. One thing I love about HN is that the moderation generally does an excellent job. The site is free of spam and the conversations are usually respectful and meaningful (if pessimistic at times). However, there is always room for improvement, and moderation…

    Published

  326. Killing ants with nuclear weapons

    Complexity is quickly becoming an epidemic. In this developer’s opinion, complexity is the ultimate enemy - the final boss - of good software design. Complicated software generally has complicated bugs. Simple software generally has simple bugs. It’s as easy as that. It’s for this reason that I strongly…

    Published

  327. When not to use a regex

    The other day, I saw Learn regex the easy way. This is a great resource, but I felt the need to pen a post explaining that regexes are usually not the right approach. Let’s do a little exercise. I googled “URL regex” and here’s the first Stack Overflow result: https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#…

    Published

  328. State of Sway August 2017

    Is it already time to write another one of these? Phew, time flies. Sway marches ever forward. Sway 0.14.0 was recently released, adding much asked-after support for tray icons and fixing some long-standing bugs. As usual, we already have some exciting features slated for 0.15.0 as well, notably some…

    Published

  329. Archive it or you will miss it

    Let’s open with some quotes from the Wikipedia article on link rot: In 2014, bookmarking site Pinboard’s owner Maciej Cegłowski reported a “pretty steady rate” of 5% link rot per year… approximately 50% of the URLs in U.S. Supreme Court opinions no longer link to the original information… (analysis of…

    Published

  330. An introduction to Wayland

    Wayland is the new hotness on the Linux graphics stack. There are plenty of introductions to Wayland that give you the high level details on how the stack is laid out how applications talk directly to the kernel with EGL and so on, but that doesn’t give you much practical knowledge. I’d like to instead…

    Published

  331. Limited "generics" in C without macros or UB

    I should start this post off by clarifying that what I have to show you today is not, in fact, generics. However, it’s useful in some situations to solve the same problems that generics might. This is a pattern I’ve started using to reduce the number of void* pointers floating around in my code: multiple…

    Published

  332. Rotating passwords in bulk in the wake of security events

    I’ve been putting this post off for a while. Do you remember the CloudFlare security problem that happened a few months ago? This is the one that disclosed huge amounts of sensitive information for huge numbers websites. When this happened, your accounts on thousands of websites were potentially compromised…

    Published

  333. Building a "real" Linux distro

    I recently saw a post on Hacker News: “Build yourself a Linux”, a cool project that guides you through building a simple Linux system. It’s similar to Linux from Scratch in that it helps you build a simple Linux system for personal use. I’d like to supplement this with some insight into my experience…

    Published

  334. State of Sway April 2017

    Development on Sway continues. I thought we would have slowed down a lot more by now, but every release still comes with new features - Sway 0.12 added redshift support and binary space partitioning layouts. Sway 0.13.0 is coming soon and includes, among other things, nvidia proprietary driver support…

    Published

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

    I heard about CVE-2016-10229 earlier today. In a nutshell, it allows for arbitrary code execution via UDP traffic if userspace programs are using MSG_PEEK in their recv calls. I quickly updated my kernels and rebooted any boxes where necessary, but when I read the discussions on this matter I saw people…

    Published

  336. Principles for C programming

    In the words of Doug Gwyn, “Unix was not designed to stop you from doing stupid things, because that would also stop you from doing clever things”. C is a very powerful tool, but it is to be used with care and discipline. Learning this discipline is well worth the effort, because C is one of the best…

    Published

  337. Compiler devnotes: Machine specs

    I have a number of long-term projects that I plan for on long timelines, on the order of decades or more. One of these projects is cozy, a C toolchain. I haven’t talked about this project in public before, so I’ll start by introducing you to the project. The main C toolchains in the “actually usable…

    Published

  338. Lessons to learn from C

    C is my favorite language, though I acknowledge that it has its warts. I’ve tried looking at languages people hope will replace C (Rust, Go, etc), and though they’ve improved on some things they won’t be supplanting C in my life any time soon. I’ll share with you what makes C a great language to me.…

    Published

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

    I’ve found myself explaining Python 3’s str to people online more and more often lately. There’s this ridiculous claim about that Python 3’s string handling is broken or somehow worse than Python 2, and today I intend to put that myth to rest. Python 2 strings are broken, and Python 3 strings are sane…

    Published

  340. Actually, you CAN do it

    I maintain a lot of open source projects. In order to do so, I have to effectively manage my time. Most of my projects follow this philosophy: if you want something changed, send a patch. If you are running into an annoying bug, fix it and send a patch. If you want a new feature, implement it and send…

    Published

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

    Earlier today I released sway 0.11, which (along with lots of the usual new features and bug fixes) introduces support for security policies that can help realize the promise of a secure Wayland desktop. We also just started a bounty program that lets you sponsor the things you want done and rewards…

    Published

  342. A broad intro to networking

    Disclaimer: I am not a network engineer. That’s the point of this blog post, though - I want to share with non-networking people enough information about networking to get by. Hopefully by the end of this post you’ll know enough about networking to keep up with a conversation on networking, or know what…

    Published

  343. Electron considered harmful

    Yeah, I know that “considered harmful” essays are allegedly considered harmful. If it surprises you that I’m writing one, though, you must be a new reader. Welcome! Let’s get started. If you’re unfamiliar with Electron, it’s some hot new tech that lets you make desktop applications with HTML+CSS+JavaScript…

    Published

  344. Getting on without Google

    I used Google for a long time, but have waned myself off of it over the past few years, and I finally deleted my account a little over a month ago. I feel so much better about my privacy now that I’ve removed Google from the equation, and self hosting my things affords me a lot of flexibility and useful…

    Published

  345. I'm losing faith in America

    I recently quit my job at Linode and started looking for something else to do. For the first time in my career, I’m seriously considering opportunities abroad. Sorry for the politically charged post - I promise to get back to tech stuff right away. On November 8th, I’m going to step into the voting booth…

    Published

  346. Using the right tool for the job

    One of the most important choices you’ll make for the software you write is what you write it in, what frameworks you use, the design methodologies to subscribe to, and so on. This choice doesn’t seem to get the respect it’s due. These are some of the only choices you’ll make that you cannot change.…

    Published

  347. What motivates the authors of the software you use?

    We face an important choice in our lives as technophiles, hackers, geeks: the choice between proprietary software and free/open source software. What platforms we choose to use are important. We have a choice between Windows, OS X, and Linux (not to mention the several less popular choices). We choose…

    Published

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

    window.HELP_IMPROVE_VIDEOJS = false; After my blog post emphasizing the importance of taking control of your privacy, I’ve decided to make a few more posts going over detailed instructions on how to actually do so. Today we have a video that goes over the process of installing Arch Linux with full disk…

    Published

  349. Sway 0.9 & One year of Sway

    Today marks one year since the initial commit of Sway. Over the year since, we’ve written 1,823 commits by 54 authors, totalling 16,601 lines of C (and 1,866 lines of header files). This was written over the course of 515 pull requests and 300 issues. Today, most i3 features are supported. In fact, as…

    Published

  350. Using -Wl,--wrap for mocking in C

    One of the comforts I’ve grown used to in higher level languages when testing my code is mocking. The idea is that in order to test some code in isolation, you should “mock” the behavior of things it depends on. Let’s see a (contrived) example: int read_to_end(FILE *f, char *buf) { int r = 0, l; while…

    Published

  351. Life, liberty, and the pursuit of privacy

    Privacy is my hobby, and should be a hobby of every technically competent American. Within the eyes of the law I have a right to secure the privacy of my information. At least that’s the current law - many officials are trying to subvert that right. I figure that we’d better exercise that right while…

    Published

  352. Understanding pointers

    table { border-spacing: 0; width: 100%; } th, td { border-bottom: 1px solid black; } I was recently chatting with a new contributor to Sway who is using the project as a means of learning C, and he had some questions about what void** meant when he found some in the code. It became apparent that this…

    Published

  353. In Memoriam - Mozilla

    Today we look back to the life of Mozilla, a company that was best known for creating the Firefox web browser. I remember a company that made the web better and more open by providing a browser that was faster and more customizable than anyone had ever seen, and by making that browser free and open source…

    Published

  354. State of Sway - April 2016

    Since the previous State of Sway, we have accomplished quite a bit. We are now shipping versioned releases of sway, which include support for window borders, input device configuration, more new features, and many bug fixes and stability improvements. I’m also happy to say that Sway 0.5 has landed in…

    Published

  355. How to write a better bloom filter in C

    This is in response to How to write a bloom filter in C++, which has good intentions, but is ultimately a less than ideal bloom filter implementation. I put together a better one in C in a few minutes, and I’ll explain the advantages of it. The important differences are: You bring your own hashing functions…

    Published

  356. Please use text/plain for email

    A lot of people have come to hate email, and not without good reason. I don’t hate using email, and I attribute this to better email habits. Unfortunately, most email clients these days lead users into bad habits that probably contribute to the sad state of email in 2016. The biggest problem with email…

    Published

  357. Integrating a VT220 into my life

    I bought a DEC VT220 terminal a while ago, and put it next to my desk at work. I use it to read emails on mutt now, and it’s actually quite pleasant. There was some setup involved in making it as comfortable as possible, though. Here’s the terminal up close: Hardware First, I have several pieces of hardware…

    Published

  358. State of Sway - December 2015

    I wrote sway’s initial commit 4 months ago, on August 4th. At the time of writing, there are now 1,070 commits from 29 different authors, totalling 10,682 lines of C (and 1,176 lines of header files). This has been done over the course of 256 pull requests and 118 issues. Of the 73 i3 features we’re…

    Published

  359. Bring more Tor into your life

    Tor is a project that improves your privacy online by encrypting and bouncing your connection through several nodes before leaving for the outside world. It makes it much more difficult for someone spying on you to know who you’re talking to online and what you’re saying to them. Many people use it with…

    Published

  360. Please don't use Slack for FOSS projects

    I’ve noticed that more and more projects are using things like Slack as the chat medium for their open source projects. In the past couple of days alone, I’ve been directed to Slack for Babel and Bootstrap. I’d like to try and curb this phenomenon before it takes off any more. Problems with Slack Slack…

    Published

  361. A practical understanding of Flux

    React.js and the Flux are shaping up to be some of the most important tools for web development in the coming years. The MVC model was strong on the server when we decided to take the frontend seriously, and it was shoehorned into the frontend since we didn’t know any better. React and Flux challenge…

    Published

  362. osu!web - WebGL & Web Audio

    I’ve taken a liking to a video game called osu! over the past few months. It’s a rhythm game where you use move your mouse to circles that appear with the beat, and click (or press a key) at the right time. It looks something like this: The key of this game is that the “beatmaps” (a song plus notes to…

    Published

  363. Hooks - running stuff on Github hooks

    I found myself in need of a simple tool for deploying a project on every git commit, but I didn’t have a build server set up. This led to Hooks - a very simple tool that allows you to run arbitrary commands when Github’s hooks execute. The configuration is very simple. In /etc/hooks.conf, write: [truecraft…

    Published

  364. Porting an assembler, debugger, and more to WebAssembly

    WebAssembly is pretty cool! It lets you write portable C and cross-compile it to JavaScript so it’ll run in a web browser. As the maintainer of KnightOS, I looked to WASM as a potential means of reducing the cost of entry for new developers hoping to target the OS. Note: this article uses JavaScript…

    Published

  365. On the profitability of image hosting websites

    I’ve been doing a lot of thought about whether or not it’s even possible to both run a simple website and turn a profit from it and maintain a high quality of service. In particular, I’m thinking about image hosts, considering that I run one (a rather unprofitable one, too), but I would think that my…

    Published

  366. Process scheduling and multitasking in KnightOS

    I’m going to do some blogging about technical decisions made with KnightOS. It’s an open-source project I’ve been working on for the past four years to build an open-source Unix-like kernel for TI calculators (in assembly). It’s been a cool platform on top of which I can research low level systems concepts…

    Published

  367. Python's datetime sucks

    I’ve been playing with Python for about a year now, and I like pretty much everything about it. There’s one thing that’s really rather bad and really should not be that bad, however - date & time support. It’s ridiculous how bad it is in Python. This is what you get with the standard datetime module…

    Published

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

    I’ll open up by saying that I am not a language designer, and I do like a lot of things about Go. I just recently figured out how to describe why Go’s error handling mechanics don’t sit right with me. If you aren’t familiar with Go, here’s an example of how Go programmers might do error handling: result…

    Published

  369. Hacking on your TI calculator

    I’ve built the KnightOS kernel, an open-source OS that runs on several TI calculator models, including the popular TI-83+ family, and recently the new TI-84+ Color Silver Edition. I have published some information on how to build your own operating sytsems for these devices, but I’ve learned a lot since…

    Published

  370. The bug that hides from breakpoints

    This is the story of the most difficult bug I ever had to solve. See if you can figure it out before the conclusion. Background For some years now, I’ve worked on a kernel for Texas Instruments calculators called KnightOS. This kernel is written entirely in assembly, and targets the old-school z80 processor…

    Published

  371. Custom Music Syncing on Android

    I have an HTC One, with CyanogenMod installed. I usually use Spotify, but I’ve been wanting to move away from it for a while. The biggest thing keeping me there was the ease of syncing up with my phone - I added music on my PC and it just showed up on my phone. So, I finally decided to make it work on…

    Published

  372. You don't need jQuery

    It’s true. You really don’t need jQuery. Modern web browsers can do most of what you want from jQuery, without jQuery. For example, take MediaCrush. It’s a website I spent some time working on with a friend. It’s actually quite sophisticated - drag-and-drop uploading, uploading via a hidden form, events…

    Published