Packaging software is notoriously tricky. Every language, framework, and build system has its quirks, and the variety of artifact types — from Debian packages to OCI images and cloud images — only adds to the complexity. This blog is a deep-dive on Canonical’s “craft” tools, how they evolved, and how to use them to simplify package maintenance.| Jon Seager
This article was originally posted on the Ubuntu Discourse, and is reposted here. I welcome comments and further discussion in that thread. Earlier this year, Canonical’s Ubuntu Engineering organisation gained a new team, seeded with some of our most prolific contributors to Ubuntu. Debcrafters is a new team dedicated to the maintenance of the Ubuntu Archive. The team’s primary goal is to maintain the health of the Ubuntu Archive, but its unique construction aims to attract a broad range ...| Jon Seager
This year, I moved from NixOS to Ubuntu. This post outlines my experience through that process, as well as a new philosophy for how I manage my machine and configuration which embraces the defaults and more contemporary applications.| Jon Seager
We’re building a new, automated release system for Ubuntu to make releases more reliable, observable, and testable. To better inform the design of that process, we’re introducing monthly snapshot releases.| jnsgr.uk
A follow up to “Carefully But Purposefully Oxidising Ubuntu” in which I describe the plan to migrate to sudo-rs by default in Ubuntu 25.10. Additionally, I cover some updates on the progress with uutils coreutils, and future plans for SequoiaPGP in APT and Ubuntu.| jnsgr.uk
An article outlining my plan to revamp Ubuntu’s ‘project documentation’, illuminating the path for new contributors and enabling better distributed decision making.| jnsgr.uk
Managing your time can be hard, particularly when occupying leadership positions. This is exacerbated by remote work, where the importance of owning your calendar is paramount both for you, and the people working with you. A departure from my usual technical content, this post covers my lessons learned in managing my time, and my calendar while working remotely at Canonical over the past 4 years.| jnsgr.uk
This post explores modern equivalents of foundational system utilities such as coreutils and sudo, introduces an experimental utility for testing them, and maps out a path to their widespread adoption in Ubuntu.| jnsgr.uk
In the last week of January 2025, I was appointed VP Engineering for Ubuntu at Canonical, meaning I’ll oversee the Ubuntu Foundations, Server and Desktop teams going forward. This post outlines my vision for that role, and how I hope to evolve the distribution, the engineering practices behind it, and the community over the coming years.| jnsgr.uk
Multipass’ GUI application recently got a huge rework. Implemented in Flutter, the GUI provides a much improved way to manage VMs. This post outlines the work I did to update the Multipass package in nixpkgs to build and include the Flutter application, which should serve as a useful reference for anyone looking to package a native Linux Flutter application in with Nix.| jnsgr.uk
A post outlining my journey into Rust, and how I reimplemented the server that powers this very website in Rust, then benchmarked both the old and new implementation with K6, investigated a performance issue with Parca and then automated the whole lot using Nix!| jnsgr.uk
A short blog post explaining how I replaced a proprietary wireless temperature monitor for my hot tub, with a simple ESP32 based micro-controller and a cheap bluetooth pool thermometer, all linked up with Home Assistant.| jnsgr.uk
Part 2 of a micro-series of blog posts that outlines my journey toward authoring a Home Assistant Core integration for the Roth Touchline SL heating system. This post covers the actual build and upstream contribution of the Home Assistant Core integration.| jnsgr.uk
Part 1 of a micro-series of blog posts that outlines my journey toward authoring a Home Assistant Core integration for the Roth Touchline SL heating system. This first post covers the design and build of a Python API client for Roth’s upstream API that controls the underfloor heating systems.| Jon Seager
A deep dive into my home grown cocktail recipe app which speaks Tailscale natively using tsnet, and serves up delicious drinks direct to your tailnet. Libations is built with Go, Nix and Vanilla Framework.| jnsgr.uk
An extended “uses” post that outlines the hardware I’m currently using, the software and tools that I use to get things done, and how I configure things.| jnsgr.uk
An overview of Multipass and LXD, and how I use them for creating, managing and enjoying virtual machines on my workstations and servers. I use Multipass for creating ‘headless’ development machines, and I break out to LXD for more complex scenarios like booting and testing desktop distributions.| jnsgr.uk
A walkthrough of a simple release & CI tracking system I built for keeping track of the various teams I manage at Canonical using a small Go application, Hugo and Github Actions| jnsgr.uk
An explanation of how to enable secure boot on NixOS, using a community project named ‘Lanzaboote’, and further how to automatically unlock a LUKS-encrypted disk using a TPM with systemd-cryptenroll.| jnsgr.uk
The community-led organisation Snapcrafters maintains hundreds of Snap packages, with hundreds of thousands of users. This post looks at an upgraded test/release process with automated screenshotting of GUI apps, and a new Github Actions based workflow.| jnsgr.uk
The homepage-dashboard NixOS service previously enabled the deployment of the wonderful homepage dashboard, but its configuration was not handled natively in Nix by the module. This post shows how I added support for native configuration, and how you can migrate.| jnsgr.uk
A follow on from my last post, outlining the process of upstreaming Scrutiny to nixpkgs to make it easier to consume, and have it included in future NixOS releases.| jnsgr.uk
A detailed walkthrough how I packaged Scrutiny, a S.M.A.R.T disk monitoring tool, for NixOS. Includes details of creating a NixOS module and using the NixOS testing framework to validate its functionality.| jnsgr.uk
(Repost) A write-up of my adventures with Parca, and building a Snap package, as well as a set of charms for driving Parca and profiling applications run with Juju on machines and Kubernetes.| Jon Seager
(Repost) Building a zero-trust, serverless authentication system for SSH on Microsoft Azure, complete with custom ssh-agent and serverless certificate authority.| jnsgr.uk
Documenting how I render, serve, build and deploy my personal website and blog using a combination of Go, Hugo, Nix and Fly.io.| jnsgr.uk
A write up of how I boot KVM accelerated NixOS VMs on Github Actions runners in order to run end-to-end tests for my packages.| jnsgr.uk