Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

George Lund

@georgelund.urbanists.social.ap.brid.gy
12 followers 2 following 33 posts

Software engineer; liberal; cyclist; parent. [bridged from urbanists.social/@georgelund on the fediverse by fed.brid.gy ]

PostsRepliesMedia
Reposted by George Lund
Martin Paul Eve @mpe.hcommons.social.ap.brid.gy · 22h
"QS had expressed concern that Romi would get an unfair advantage over other candidates" SHE HAS TO WRITE BY BLINKING. WHAT ADVANTAGE? www.bbc.co.uk/news/articles/c6zxj8g… This is a very typical response to disability accommodations. They are seen as giving the disabled person an […]
hcommons.social
Original post on hcommons.social
0014 14
Reposted by George Lund
Mark O’Neill 🐻 @radiobeartime.com · 16/10/2026
Capita don't give a fuck because a) HMG are picking up the costs for dealing with the chaos and b) are still giving Capita massive new contracts for similar services. The NAO needs to ask some very serious questions of Cabinet Office. @hetanshah.bsky.social
4103 10
Reposted by George Lund
Prof Heino Falcke @hfalcke.mastodon.social.ap.brid.gy · 03/10/2026
RE: idf.social/@arjen/117364443241316215 So, number of first year computer science students has halved (!) at some universities within two years - likely due to being scared by AI. (We don’t see this in physics and astronomy).
5124 24
George Lund @georgelund.urbanists.social.ap.brid.gy · 02/10/2026
It's wild that drivers of diesel vehicles are worrying if they can afford to go wherever at all, but smug people like me with my #ev are calculating exactly how far we can go on the free Happy Hour electricity we'll get Sunday when it's windy. #uk #energytransition
020 2
Reposted by George Lund
bob @bob.mastodon.me.uk.ap.brid.gy · 21/09/2026
videos from @DevOpsDaysLondon 2026 are slowly leaking out as our speakers approve them. like share and subscribe at youtube.com/@devopsdayslondon #DevOps #DevOpsDays #DevOpsDaysLondon
012 2
Reposted by George Lund
myrmepropagandist @futurebird.sauropods.win.ap.brid.gy · 18/09/2026
I'm watching a video of a guy using "agentic linux" and instead of going into the terminal and typing what he wants installed he just ask Claude to do it with natural language. As someone who only uses Linux off and on I sometimes need to look up commands so at first this seemed kind of neat […]
sauropods.win
Original post on sauropods.win
103 3
Reposted by George Lund
Mark O’Neill 🐻 @radiobeartime.com · 08/09/2026
I was unable to register for the new website for months. Not access it, just register. After 5 months I managed to register. The reason why I could not register turned out to be that the system had my name wrong. In migrating the data from the old system to the new my name was corrupted.
481 8
Reposted by George Lund
Jon PENNYCOOK @jonpsp.mstdn.social.ap.brid.gy · 05/09/2026
Tell me why the Government regards environmental (and other) protests as terrorism, but if you have a race-related protest blocking our busiest international ferry port, where intimidating people are dressed like terrorists from 80s TV news, it's just disruption? […]
mstdn.social
Original post on mstdn.social
002 2
George Lund @georgelund.urbanists.social.ap.brid.gy · 18/08/2026
Disaster, I have caught up with #Silo .. Maybe I'll just have to watch from the top after all
010 1
George Lund @georgelund.urbanists.social.ap.brid.gy · 09/08/2026
Hummingbird hawk moth #naturephotography
Photo of a hummingbird hawk moth feeding with its king proboscis from a valerian flower.
011 1
Reposted by George Lund
Andrew Nesbitt @andrewnez.mastodon.social.ap.brid.gy · 04/08/2026
brew install actions/checkout - Using Homebrew's tap machinery as a curated distribution layer for GitHub Actions. nesbitt.io/2026/08/04/brew-install-…
nesbitt.io
brew install actions/checkout
In December I went through why `uses:` is a package manager with no lockfile, no integrity hashes and no transitive visibility, and in April through the run of incidents that followed from that. GitHub’s 2026 security roadmap has since committed to a lockfile, now in preview as `gh-actions-lock`, and made immutable actions the preferred resolution path. Neither of those changes adds any review between an action author tagging a release and the runner executing it. Homebrew has run that kind of curated index for fifteen years and, as of the immutable-actions rollout, stores its artifacts as OCI manifests on ghcr.io alongside the actions themselves, so I spent some time working out how much of a GitHub Actions registry you could assemble from Homebrew parts. ### Shared storage Immutable actions and Homebrew bottles are both OCI artifacts on ghcr.io: `actions/publish-immutable-action` tars the action directory, pushes it as a layer with `artifactType: application/vnd.github.actions.package.v1+json`, attaches a sigstore bundle through the OCI referrers API, and tags the manifest with the semver, after which a workflow referencing `actions/[email protected]` resolves through `pkg.actions.githubusercontent.com` instead of the git tarball. `brew pr-pull` pushes bottles under the same manifest schema at `ghcr.io/homebrew/core/<name>` with a `com.github.package.type: homebrew_bottle` annotation and a sigstore attestation that `brew verify` checks against Homebrew’s CI identity, so `crane manifest ghcr.io/homebrew/core/jq:1.7.1` and `crane manifest ghcr.io/actions/checkout:4.2.2` return the same document type, as you’d expect from last week’s post. The comparison table in the December post marked Actions ✗ on integrity hashes, transitive visibility, dependency-tree inspection and immutable versions, and homebrew-core provides all four for its 8,400 formulae through the index rather than the storage: each formula pins a source URL to a sha256, declares dependencies that `brew deps --tree` can walk, passes `brew audit` and human review on every change, gets autobumped by `livecheck` when upstream tags a release, and can carry `deprecate!` or `disable!` when it shouldn’t be installed. ### A tap of actions The index can be a tap, with each formula pinning an action tarball by SHA-256: class ActionsCheckout < Formula desc "Checks out a repository for a GitHub Actions workflow" homepage "https://github.com/actions/checkout" url "https://github.com/actions/checkout/archive/refs/tags/v4.2.2.tar.gz" sha256 "63e9c07ff6c9ddf3a3b39d30e59f0bf3a..." license "MIT" livecheck do url :stable strategy :github_latest end def install prefix.install Dir.children(".") end end For a JavaScript action that ships a built `dist/` in its release tarball, that’s sufficient: the tarball is pinned to a content hash, `brew audit` and `brew verify` apply as they would to any formula, and `brew bump-formula-pr` opens a reviewed PR when checkout tags v4.2.3. Everything above `def install` is already static data. Homebrew is in the middle of migrating install hooks to declarative steps so that bottle and cask installs need no Ruby evaluation at all, at which point an actions tap could be `.json` files with no code execution on install. The transitive problem is specific to composite actions, whose `action.yml` carries its own `uses:` lines that the runner re-resolves at execution time regardless of how the outer action was pinned. In a formula those become `depends_on` entries plus an `inreplace` at build time. For a composite that internally calls `actions/cache@v4`: depends_on "actions-cache" def install inreplace "action.yml", "uses: actions/cache@v4", "uses: ./.brew-actions/actions-cache" prefix.install Dir.children(".") end The resulting bottle has no floating refs left in it, `brew deps --tree` prints the transitive graph that no runner command exposes today, and the tap’s git log records which `actions-cache` revision the composite was built against. Moving that pin requires a reviewed PR; an action author cannot change it with `git tag -f` in someone else’s repository. Every incident in the weakest-link post would have required a reviewed change to that index before reaching downstream users, where an npm-style per-project lockfile would only have reduced the number of downstream repositories exposed. A workflow that pins `@v4` today has already delegated the version decision to whoever can push a tag to the action repo, and a tap moves that delegation to a reviewer instead. It also matches Homebrew’s rolling-release design, where `Brewfile.lock.json` was removed in November 2024 and per-project pinning is currently out of scope. I’d like to see the lockfile come back this year, and until it does a workflow that needs stricter reproducibility than the tap’s HEAD can pin the tap itself to a commit. An `audit_formula` extension for the tap would run zizmor over the extracted `action.yml` and reject anything that trips `dangerous-triggers` or `template-injection`, and reject composites whose internal `uses:` lines aren’t fully covered by `depends_on`. The Marketplace’s “verified creator” badge checks the publisher’s identity and nothing about the action’s contents, so a static-analysis gate at index time would be new. Bottles built from the tap are attested by the tap’s CI the same way homebrew-core bottles are. Each formula’s `url` points at a GitHub repository, which is the input `brew vulns` already keys OSV lookups on, so an advisory against `actions/download-artifact` surfaces through the same path as one against `openssl`. ### Getting the runner to use it The runner has three `ActionSourceType` values in `ActionStepDefinitionReference.cs` (repository, container registry, script) and none of them is “an installed package on disk”, so consuming a Homebrew-installed action means picking one of three integration points at increasing cost. The runner accepts `uses: ./path/to/action` relative to `$GITHUB_WORKSPACE`. The prototype tap at andrew/homebrew-actions packages `actions/checkout`, `actions/cache`, `pre-commit/action` and `actions/first-interaction`. Its setup action runs `brew bundle --file .github/Actionfile` and copies each keg into `./.brew-actions/<name>`, which is where the formula’s `inreplace` above pointed the composite’s dependency. The Actionfile is a normal Brewfile: tap "andrew/actions" brew "andrew/actions/pre-commit-action" steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: andrew/homebrew-actions@7def8ee0f83dbb7850e9029c9e0e6ccbafdd209e - uses: ./.brew-actions/pre-commit-action The four formulae pass `brew audit`, install and test on hosted macOS and Ubuntu runners, and the integration job runs the copied `pre-commit/action` composite through to its rewritten `actions/cache` step. It still costs one round-trip to fetch the setup action itself the old way, and `checkout` stays on a plain SHA pin because it runs before the workspace has anything in it to `uses: ./` from. Because `./` is anchored at `$GITHUB_WORKSPACE`, the setup action has to copy each keg there and `checkout` has to run first. Runner 2.336.0 added a `$/` prefix that anchors at the repository containing the defining file, resolved at the running commit: in a workflow `$/` is readable before any step has run, and it’s also valid for reusable workflows (`uses: $/.github/workflows/foo.yml`), which `./` never supported. `gh-actions-lock` rewrites existing `./` references to `$/` by default and treats the result as inherently pinned, so no lockfile entry is generated for it. Inside a composite loaded via `uses: ./path`, though, `$/` still resolves against the workflow’s repository rather than the copied directory: an earlier iteration of the prototype rewrote the composite’s `uses:` to `$/../actions-cache` and the runner attempted to fetch `andrew/homebrew-actions/../actions-cache@<sha>`. So the setup step can’t use `$/` to point at `$(brew --prefix)/opt`, and the `.brew-actions` destination has to be baked into the formula’s `inreplace`. On self-hosted runners, `ActionManager.cs` reads `ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE` and, if `<owner>_<repo>/<resolved-sha>.tar.gz` exists there, skips the download. A `brew bundle` on the runner host could populate that directory from the tap. GitHub’s server-side resolver has already chosen the SHA used as the cache key, so this only controls where its bytes come from. It provides an offline mirror but cannot override `@v4` resolution. A fourth `ActionSourceType` could read a formula’s JSON from `formulae.brew.sh` (or any tap’s API endpoint), verify the bottle attestation, and extract to `_actions/`. Hosted runners resolve refs to tarballs through the server-side `ResolveActionsDownloadInfoAsync` call, so a client-side patch would affect self-hosted runners and compatible forks such as act and Forgejo’s runner, with no GitHub backend changes. `$/` covers the same-repo case. The setup-step option would also need a similar anchor rooted in a runner-side directory outside any repository. Reusable workflows referenced across repositories (`uses: org/repo/.github/workflows/foo.yml@ref`) go through a different loader and have no local-path form even with `$/`, so the setup step cannot load them. They require the runner patch. Docker actions already resolve through a container registry and get whatever pinning the image reference carries. ### Built in GitHub could integrate the tap into its resolver and leave `uses: actions/checkout@v4` unchanged. An organisation or repository setting alongside the existing action allowlists would name the index the resolver consults, and that index would map `actions/checkout` to a bottle manifest digest instead of a git ref. The runner would pull the layer from ghcr.io, verify the attestation against the tap’s CI identity, and extract to `_actions/`. Because a composite’s internal refs were rewritten at bottling time, the index response could carry the resolved dependency closure, making the whole transitive tree one index query plus N content-addressed blob fetches. Re-running last week’s job against an unchanged tap commit would produce identical bytes. Switching an organisation from GitHub’s default index to a community tap or an internal one with stricter audit rules would be a settings change, roughly the choice apt users make between Debian stable and a private mirror. An alternative to a settings toggle is package URLs in the `uses:` line itself (`pkg:brew/actions-setup-python`, or `pkg:oci/...@sha256:...` for a direct digest pin), with org policy allowlisting which types and namespaces are permitted. Either way Homebrew’s role is producing one index in the formulae.brew.sh JSON schema, and once the declarative-install work above lands the tap and the index are the same JSON, so any other curator could produce a compatible one without going near Homebrew’s Ruby. ### Prototype I generated draft formulae for the 70 actions in ecosyste.ms’ current critical set. The pinned sources are 55 JavaScript actions, nine composites and six Docker actions; the JavaScript group is 30 Node 24, 19 Node 20 and six still on Node 12, and all 71 declared `pre`, `main` and `post` entrypoints were present in the archives. Seven of the composites declare external actions, giving seven dependency edges into five repositories, four of which are already in the 70. The two Gradle compatibility actions both depend on subdirectories of `gradle/actions`, so closing the first-level graph takes one extra formula for 71 in all. Running zizmor 1.28.0 over the extracted `action.yml` files, as the audit extension above would, reported 61 findings across seven of the 70. 45 are high-severity, high-confidence findings in five actions: 40 template-injection and five unpinned-uses. Five of the six Docker actions also reference their image or Dockerfile base image by tag rather than digest. The generator hit a few ecosyste.ms data issues on the way (two conda-forge packages whose latest release is recorded as `master` with codeload URLs that now 404 though the stored commit SHAs still fetch, and `conda-forge/webservices-dispatch-action` classified as composite when the pinned source is a Docker action), and one action, `Platane/snk`, has no license file for `brew audit` to accept. The parser, formula emitter and dependency rewrite are in `bin/generate-formulae` and stayed short because the community lockfile tools already do the same `action.yml` walk. Getting from the generated drafts to a usable tap needs the `audit_formula` hook wrapping zizmor and the `depends_on` coverage check, plus a Windows path for the setup step, which can’t run `brew` and would have to pull the bottles as plain OCI blobs instead. Gitea’s `act_runner` and Forgejo’s runner implement the same `uses:` semantics with no closed server-side resolution call, so the setup-step path works on them today and either of the built-in forms above could land there without a GitHub backend change. Codeberg, Forgejo and Gitea each already maintain an `actions` org (codeberg.org/actions, code.forgejo.org/actions, gitea.com/actions) that mirrors a hand-picked subset of upstream actions so their users’ workflows resolve without touching github.com. Those orgs are the curated index a tap would produce, maintained by hand, and the Forgejo maintainers have been vocal about wanting something better than inheriting GitHub’s resolution model.
012 2
George Lund @georgelund.urbanists.social.ap.brid.gy · 04/08/2026
Very impressive advice here for charities dealing with the #Beacon CRM #CyberSecurity incident > Your CRM provider has had a security incident. What now? - Nebula Design nebula.design/security/your-crm-pro…
nebula.design
Your CRM provider has had a security incident. What now? - Nebula Design
Your CRM provider is the processor. You are the controller, so the ICO obligation is yours. A plain-English checklist for UK charities, in five minutes.
001 1
Reposted by George Lund
Andrew Nesbitt @andrewnez.mastodon.social.ap.brid.gy · 24/07/2026
Interview with a Maintainer nesbitt.io/2026/07/24/interview-wit…
nesbitt.io
Interview with a Maintainer
_The following is a transcript of episode 214 of Green Squares, a podcast about building in public and staying green. It has been lightly edited for length and clarity. Transcription by OpenClaw-4.2._ **TYLER:** Welcome back to Green Squares, I’m Tyler. Longtime listeners know I came up doing Proof of Work, rest in peace, and one thing I carried over from that show is a belief that the most interesting people in tech are the ones holding up infrastructure you’ve never heard of. You’ve all seen the xkcd. The whole internet, balanced on one project, maintained by some guy in Nebraska. Today we’ve got that guy. Erin Marsh maintains libcapstan, the reference implementation of the Capstan protocol. If you’ve ever resumed a download, synced a device, or updated an app on a bad connection, you’ve run her code. Erin, welcome to the show. **ERIN:** Thanks for having me. **TYLER:** So let’s do the numbers, because they’re wild. Eighty million downloads a month. Something like forty thousand packages depend on you. And it’s basically just you? **ERIN:** There were three of us until 2023. One co-maintainer left when he had kids. The other stepped back last year, he has a farm now. So mostly me, yes. **TYLER:** Incredible. And you’re calling in from New Zealand, which means it’s currently, what, **ERIN:** Six in the morning. **TYLER:** The dedication. OK, origin story. How does one person end up maintaining a foundational protocol library? **ERIN:** I reported some bugs in it. This was 2019, we used it at work, and the resume logic could corrupt files on flaky connections. I sent a report with a reproduction and a suggested fix, and the maintainer at the time said this was exactly the kind of energy the project needed, and gave me commit access. About a month later I got a repository transfer invitation. I accepted it. It seemed like the polite thing to do. **TYLER:** He saw something in you. **ERIN:** He’d moved onto a sailboat. **TYLER:** Love that for him. So let’s get into the AI of it all, because that’s really why I wanted you on. You’re one person supporting this enormous surface area. The new tooling has to be a huge unlock, right? Are you using any of the agents day to day? **ERIN:** I’ve tried things. I had a Copilot subscription for a while. **TYLER:** How was it? **ERIN:** Mixed. The codebase is C from 2011, which the tooling has opinions about. In April I asked it to add a bounds check, and it reformatted the file from tabs to spaces on the way through. The linter flagged that, so it saw the failure and reformatted back to tabs. That introduced trailing whitespace, which the linter also flags. It went around that loop until my included tokens ran out. Nothing came back. I wrote the bounds check myself. **TYLER:** Growing pains. But the trajectory is what excites me. What about the contribution side? Because the dream is that agents pick up the long tail, right, the issues no human wants to do. **ERIN:** We get a lot of agent contributions now. Last month it was around sixty pull requests a week. They’re polite, well formatted, and they come with tests. Most of them do something we don’t want. There’s an issue from 2016 about symlink handling where we’ve explained our position maybe two hundred times, and the agents find that issue and fix it, and each one has to be told separately. We added an AGENTS.md at the root of the repo asking automated contributors to check the tracker before opening anything. It’s now the most edited file in the repository. They send fixes for it. One of the typos was real, so I merged that one. **TYLER:** Sixty a week, though. Some of that has to be gold. **ERIN:** Three were useful this year. One was excellent, actually, a race in the retry logic that none of us had caught in a decade. I’d like to thank whoever ran that agent, but the account was already deleted. **TYLER:** So what would actually move the needle for you? If the people building these tools are listening, and they do listen, what do you want the agents doing? **ERIN:** Review is the bottleneck, not code. What I’d really love is **TYLER:** Hold that thought, because we have to pay some bills. This episode of Green Squares is brought to you by Foreman. You know the feeling. It’s Sunday night, your contribution graph has a gap, and the side project isn’t going to build itself. Foreman is the autonomous engineer that ships while you sleep. Point it at any repository, yours or anyone’s, and Foreman finds the open issues, writes the fix, opens the pull request, and replies to review comments in your voice until it gets merged. Foreman users open an average of 340 pull requests a month across more than two thousand open source projects. Go to tryforeman.dev/green for twenty percent off your first three months. Foreman. Keep shipping. And we’re back. Erin, you were saying, what would help? **ERIN:** I don’t remember where I was going with that. **TYLER:** It’ll come back to you. Let’s talk security, because libcapstan is in everything, and everything means exposure. Walk me through what happens when a report comes in. **ERIN:** We get about ten a month now, up from one or two a few years ago. Most are automated, a scanner finding, wrapped in a model-written report. The reports are long and very confident, and roughly one in fifteen describes a real problem. So the actual work is verification, and that part stays with me, because it’s the one thing you have to get right. **TYLER:** See, this feels like exactly what frontier models are for. Have you tried throwing AI at the verification itself? **ERIN:** I did, last November. I set up an agent to take each incoming report, build the affected version, and try to reproduce the exploit in a sandbox. It worked well for two weeks. **TYLER:** And then? **ERIN:** The account was banned. Reproducing an exploit looks the same as developing one from the provider’s side. I appealed, and the appeal form asks you to describe what you were doing, and describing it triggered the same filter. So the appeal got me banned as well. **TYLER:** [laughs] There’s got to be a path though. A research tier, something. **ERIN:** There’s a form. It asks for your institution. **TYLER:** What about the human researchers? The security community catches so much these days, that relationship has to be valuable. **ERIN:** The individuals are mostly great. The companies are harder. In February a vendor found a real issue in our header parsing, a bad one, and their analysis was good. They also filed it directly on the public issue tracker, proof of concept included, on a Tuesday. The writeup was scheduled for their blog that Wednesday, and their policy is ninety days or publication, whichever comes first. The vulnerability had a name and a logo before I finished reading the report. There was a countdown clock. I shipped the fix in twenty-six hours, and their post described that as an encouraging response from a historically under-resourced project. Then their sales team emailed companies that depend on us, offering a hardened version of libcapstan. **TYLER:** Hardened how? **ERIN:** As far as I can tell it’s our releases with my security patches applied. They’re on the embargo list, so they can ship my fix a few days before I do. **TYLER:** I want to get to sustainability, but first, flip side. You’re a downstream consumer too. You have your own dependency tree. What does that look like from where you sit? **ERIN:** We have four dependencies. We had six. Last year I audited them and found problems in one, a checksum library, and reported everything upstream with patches. The maintainer thanked me, merged all of it, and two weeks later there was a transfer invitation waiting. I knew what it was this time. We depend on the library, so. **TYLER:** Again? **ERIN:** It’s the second time it’s happened. I now maintain a good chunk of my own dependency tree. I’ve stopped reporting bugs upstream. **TYLER:** And you said six down to four. **ERIN:** The other one we removed was a small library we’d depended on since 2014 for one function, so I inlined the function. And then I got a long email from its maintainer, because there’s a company called WaveRiser that pays maintainers based on their position in dependency trees. Being removed from ours dropped him under some threshold, and he lost about four hundred dollars a month. He was apologetic about it. He offered me a hundred and fifty a month to add it back. **TYLER:** Did you take it? **ERIN:** It would have been the project’s largest source of income. **TYLER:** OK, that is actually a perfect segue, because, full disclosure, listeners already know this. This episode is also sponsored by WaveRiser. If your business runs on open source, and it does, WaveRiser makes sure the maintainers behind your stack are taken care of. Their dependency intelligence engine maps every package in your tree, scores each one for criticality, and routes funding automatically to the projects that matter most. No invoices, no phone calls with maintainers, no overhead. Enterprise plans start at ninety-nine dollars a seat. WaveRiser, the supply chain, sustained. And Erin, you must be glad they exist, honestly. **ERIN:** They’ve never contacted me. **TYLER:** Well, it’s automatic. That’s the whole product. It routes to the projects that matter most. **ERIN:** Yes. **TYLER:** While we’re on money. You know my history, I spent three years in web3, and I’m curious whether any of that ever reached you. Token models for funding infrastructure, that whole thesis. **ERIN:** It reached me once. In 2022 someone launched CapstanCoin. I learned about it eight months later, from the emails, because it had collapsed and the treasury had been drained, and some of the holders found my address in the git log. The website had a roadmap with my name on it. There was a whitepaper citing my commit history as proof of ongoing development, which I suppose it was. About two million dollars went through it, none of it to me, and for a while I was getting demands for refunds. One man emailed me for a year. He was always polite. He’d retired on the strength of it. **TYLER:** Early days. The space matured a lot after that, though. Honestly the part that went mainstream is prediction markets. Does that world ever touch yours? **ERIN:** There’s a market on whether I’ll step down before the end of the year. I found out about it when a stranger messaged me asking if I could hold on until January, because of the resolution date. And during the February disclosure there was one on how fast we’d patch. The vendor traded it before their post went out. **TYLER:** Efficient markets. OK, I want to ask about capstan-rs, because I know it’s a sensitive one. For listeners: last year a developer rewrote libcapstan in Rust over a weekend, capstan-rs, blazingly fast resumable transfers, that was the tagline, and it hit forty thousand stars in a month. Which, Erin, I checked, is ten times your stars. In a month. What did that feel like? **ERIN:** The benchmarks measured throughput on a warm cache with resume disabled. Resume is the hard part. It’s all edge cases, which is why the library exists. Rewrites get to skip that. **TYLER:** Very gracious. **ERIN:** He was hired by the company behind OpenClaw off the back of it, and the repository was archived in March. We still get issues asking when libcapstan is migrating to it. **TYLER:** And then there’s the fork. I debated even bringing this up. **ERIN:** It’s fine. Earlier this year we started blocking OpenClaw agents from the repo, because we kept getting pull requests that added the agent’s operator to the copyright headers. So we blocked the traffic, and about six weeks later OpenClaw announced a clean-room implementation of the Capstan protocol, written, according to the announcement, without reference to our code. **TYLER:** Competition keeps everyone sharp though, right? **ERIN:** It reproduces a bug we’ve had open since 2021. Byte for byte, the same wrong output. We have a regression test for it, named after the issue number, and their test suite has a test with the same name that asserts the wrong output is correct. I filed an issue about it. Their tracker has about five thousand open, mostly from other agents, and the triage bot answers them in order. It hasn’t got to mine yet. **TYLER:** OK, sustainability, properly this time. Because I hear all of this and I think, this is a funding problem, and there is more money pointed at open source than ever. Foundations, the sovereign tech funds, all of it. Have you gone after any? **ERIN:** I applied for a grant last year. The protocol is being extended for multipath, and libcapstan is the reference implementation, so whatever we ship becomes the standard in practice. I asked for six months of funding to do the design work properly, with a spec, instead of at eleven at night. **TYLER:** Slam dunk, surely. **ERIN:** Declined. The criteria weight participation in the standards process, and I’ve never been able to join the working group. The working group meets on a video platform that doesn’t work in Firefox, and I use Firefox. I raised it, and the group agreed it was a problem, and raised it with the platform, and the platform’s position is that Firefox is not a supported enterprise browser. So on paper I have no standards experience. The reviewers said the implementation work was impressive, but that implementation is not participation. **TYLER:** Couldn’t you just use Chrome for the calls? **ERIN:** I’ve considered it. **TYLER:** All right, closing questions, we do these with every guest. Five years from now, where’s libcapstan? **ERIN:** Still underneath everything, I expect. It’s very hard to remove. **TYLER:** And where are you? **ERIN:** My old co-maintainer’s farm is doing well. Sixty goats now, and the cheese has a waiting list. I joined it. **TYLER:** [laughs] Amazing. Erin, this was fantastic. Where do people go to support the project? **ERIN:** There’s a sponsors link in the readme. **TYLER:** Perfect, we’ll put it in the show notes. And before we go, a quick one from our friends at AgentDays, September 14th to 16th in Austin. Conference season is rough when you’re heads down, so this year, register your agents and they attend for you. Every talk published as structured context, and a networking layer where your agents take meetings while you sleep. Erin, this might be one for you, honestly. **ERIN:** Mm. **TYLER:** Agent passes start at forty-nine dollars, humans get in free with any agent pass, code SQUARES for ten percent off. And you can support this show at patreon.com/greensquares, we just crossed four thousand patrons, which is very cool of you all. That’s the episode. If you got value out of this one, the single best thing you can do is share it with a friend. Next week I sit down with the founder of Foreman to talk about the future of autonomous contribution. Until then. Keep shipping.
2314 14
Reposted by George Lund
abadidea @0xabad1dea.infosec.exchange.ap.brid.gy · 24/07/2026
Amsterdam murder rate: extremely low Amsterdam drunk man attempts to relieve himself into canal, falls in, hits his head and drowns rate: extremely high Plan your tourism accordingly. This is not a joke, this is literally true. Amsterdam is probably the only place that has ever built more […]
infosec.exchange
Original post on infosec.exchange
81591 91
Reposted by George Lund
Bob Downie @geomannie.mastodon.scot.ap.brid.gy · 11/07/2026
Possibly the funniest satire I've seen in a long time. I don't believe it's actually endorsed by #CountBinFace but it's political punch is huge. Watch & enjoy! #UK #politics #satire m.youtube.com/watch?v=iNp16EPj1Us
001 1
George Lund @georgelund.urbanists.social.ap.brid.gy · 10/07/2026
Mmm #BackToThe80s 🎶 🎸 🎹 🎶 #EppingForest #LeeValleyWhitewaterCentre
000 0
Reposted by George Lund
Mastodon @mastodon.mastodon.social.ap.brid.gy · 07/07/2026
RE: mastodon.social/@dansup/11687887763… Congratulations to @dansup on the new and improved fediverse.info! Make sure to check it out, and while you're at it, share it with 5 people who haven't joined the #Fediverse yet 👀
21010 10
George Lund @georgelund.urbanists.social.ap.brid.gy · 05/07/2026
The combination of Chanel 5's highlights show plus www.youtube.com/@loveofcycling is actually a pretty good replacement for the old itv show, sad as I am at its passing. #letour #cycling
010 1
George Lund @georgelund.urbanists.social.ap.brid.gy · 04/07/2026
Tour de France highlights turn out to be on Channel 5 🇫🇷 🚴 🏔️🍻
000 0
Reposted by George Lund
George Monbiot @georgemonbiot.bsky.social · 29/06/2026
I would beg you to read the whole thread, as I think very few people have seen how fast the foundations of democracy are being torn out in the UK, and how far down the road towards authoritarianism we have already travelled. Sorry to pester you, but this could not be more important. Thanks.
17803404 803
Reposted by George Lund
Dr Grace S Peng @gspeng.bsky.social · 28/06/2026
One calculation that blew my mind: When I push a pedestrian beg button to cross an arterial road w/ 40 mph spd limit. Wait of 90 sec means a car 1 mile away gets to priority to clear the intersection before I am allowed to cross the road. I am standing roadside breathing particulates
19495131 495
Reposted by George Lund
:privTri: Volpeon :areonNSmol: @volpeon.at.icy.wyvern.rip · 26/06/2026
111749 117
George Lund @georgelund.urbanists.social.ap.brid.gy · 21/06/2026
Maybe the biggest news here is that there are in fact more stupid taxes out there. Apparently. > Stamp Duty is stupid youtube.com/shorts/dHXKqrFgWXA?is=K…
000 0
Reposted by George Lund
Jonn Elledge @jonnelledge.bsky.social · 28/05/2026
guys I just tried googling this to find the exact Andor quote and jesus fucking christ guys what the fuck is happening here
1412785661 2.8K
Reposted by George Lund
abadidea @0xabad1dea.infosec.exchange.ap.brid.gy · 24/05/2026
如囊萤如映雪 家虽贫学不辍 如负薪如挂角 身虽劳犹苦卓 Read by the glow of fireflies, Read by the sheen of snow; No child is too poor to learn, To study hard, and grow. While gathering the firewood, While tending herds in fields; When work is hard, read further still And reap the harvest's yields. A verse of the Three […]
infosec.exchange
Original post on infosec.exchange
147 7
Reposted by George Lund
Mark Taylor @emarktaylor.bsky.social · 23/05/2026
#UKPol #GreenEnergy Wow!
031 3
Reposted by George Lund
Trish Greenhalgh @trishgreenhalgh.bsky.social · 23/05/2026
Every summer I repost this article on how to spot drowning. Please read it and pass on. In the last few years I’ve had SIX messages from people who saved a kid’s life after clicking on the link from my feed. slate.com/technology/2...
slate.com
Drowning Doesn’t Look Like Drowning
Drowning is not the violent, splashing call for help that most people expect.
253133969734 13.4K
George Lund @georgelund.urbanists.social.ap.brid.gy · 20/05/2026
💯 🔰 Scrap stamp duty and council tax to fix London housing crisis, thinktank says | Housing market | The Guardian www.theguardian.com/business/2026/m…
theguardian.com
Scrap stamp duty and council tax to fix London housing crisis, thinktank says
Centre for London report finds levy on property wealth would free up homes, fund social housing and help renters save for deposits
000 0
Reposted by George Lund
Terence Eden @edent.mastodon.social.ap.brid.gy · 12/05/2026
Here's a list of the ~160 GitHub repos the NHS have closed down due to security fears. github.com/orgs/uk-gov-mirror/repos… #OpenSource #CyberSecurity #Mythos
github.com
[Unofficial] UK Government Mirror
An unofficial mirror of every UK Government Github repository, to preserve repositories that are removed or made private. Updated at least weekly. - [Unofficial] UK Government Mirror
027 7
Reposted by George Lund
abadidea @0xabad1dea.infosec.exchange.ap.brid.gy · 29/04/2026
the ghost of Beethoven: tell me, how fares the future? do people still enjoy my music? me: oh yes, quite often actually. and sometimes creative young composers intentionally mislabel their work as yours, so that the robots which patrol our libraries day and night don't burn the manuscripts […]
infosec.exchange
Original post on infosec.exchange
11324 24
Reposted by George Lund
fraggle @fraggle.social.coop.ap.brid.gy · 01/04/2026
So y'all really believe that github had 100% uptime before 2019?
101 1
George Lund @georgelund.urbanists.social.ap.brid.gy · 16/03/2026
Apparently Urban Cookie Collective weren't allowed to release their version of Champagne Supernova, it excellent youtu.be/bD1QsNeeeeU?si=rPqX0JxCpql…
001 1
Reposted by George Lund
Tommaso Gagliardoni @tomgag.infosec.exchange.ap.brid.gy · 04/03/2026
Hard LOL www.bye-dubai.com
bye-dubai.com
Bye Dubai — Special Repatriation Programme 2026 | EU Council of Finance Ministers
EU citizens in Dubai? We're bringing you back. Provided you bring back your tax returns.
003 3
George Lund @georgelund.urbanists.social.ap.brid.gy · 03/03/2026
Have become obsessed with finding all the Google Maps photos of coffee shops in US military bases around the world
000 0
George Lund @georgelund.urbanists.social.ap.brid.gy · 24/02/2026
Watching the United Nations Security Council Meeting on #Ukraine #geeklife www.bbc.co.uk/iplayer/episode/l005802f via @bbciplayer (tbh no idea how long I'll last)
000 0
George Lund @georgelund.urbanists.social.ap.brid.gy · 23/02/2026
This is quite something to watch ♥️ > ‘Profoundly moving’: Netflix’s posthumous celebrity interview series is a marvel | Television | The Guardian www.theguardian.com/tv-and-radio/20…
theguardian.com
‘Profoundly moving’: Netflix’s posthumous celebrity interview series is a marvel
Famous Last Words is a series of interviews conducted with notable names and only released after their death and is offers an incredible opportunity
000 0
Reposted by George Lund
Andrew Nesbitt @andrewnez.mastodon.social.ap.brid.gy · 21/02/2026
What happens when a large open source project dies? nesbitt.io/2026/02/21/whale-fall.ht…
nesbitt.io
Whale Fall
When a whale dies in the open ocean, its carcass sinks to the abyssal floor and becomes an ecosystem. Marine biologists call this a whale fall, and the body sustains life in three overlapping stages: mobile scavengers strip the soft tissue over months, enrichment opportunists colonise the bones and surrounding sediment for years, and chemosynthetic bacteria feed on the skeleton itself for decades, converting the lipids stored in bone into energy that supports entire communities of specialised organisms. A single whale fall can sustain life on an otherwise barren ocean floor for fifty years. Michael Winser mentioned whale fall offhand while we were talking about what happens to the dependency graphs of abandoned projects, and it won’t leave my head. A large open source project goes unmaintained. Maybe the maintainer burns out, maybe the company behind it pivots. The project stops getting updates but doesn’t disappear. It sits on GitHub accumulating issues, its last commit receding further into the past, and somebody forks it to start merging the most urgent patches. If the project was popular enough, multiple forks appear, competing for users the way hagfish compete for blubber, though most die quickly and one or two survive on the strength of someone with enough time or institutional support to keep going. OpenOffice became LibreOffice this way, MySQL became MariaDB, Hudson became Jenkins, each a scavenger fork that grew into the canonical replacement through a familiar sequence of fork announcement, migration guide, and “why you should switch” blog posts. Smaller projects then start extracting specific modules or building tools that target the dead project’s data formats. Google Reader wasn’t open source, but the same thing happened when it shut down: Feedly, Miniflux, FreshRSS, Tiny Tiny RSS, and a dozen others rushed to fill the vacuum, several of them implementing the Google Reader API or the Fever API not because those were good APIs but because years of RSS clients had been built to speak them. The licence didn’t matter. The interfaces were public, other software depended on them, and that was enough. And then the structural skeleton, the protocols and file formats and API contracts, goes on supporting specialised communities that may not even know where the bones came from. OpenDocument Format has outlasted the OpenOffice community that created it, sustained by document format libraries across dozens of language ecosystems. Docker donated its container runtime and image format to the Open Container Initiative in 2015. The OCI spec now defines how containers work regardless of runtime. Docker’s own dominance faded; the spec didn’t. Tree-sitter was built for Atom, and after GitHub archived Atom it became the syntax engine inside Zed, Neovim, Helix, and most editors shipped in the last few years. ### Succession The pattern I keep noticing with unmaintained libraries is successive recolonisation. A project goes quiet, someone forks it, other projects start depending on the fork, and then that fork maintainer burns out too and the whole cycle repeats at a smaller scale. Each generation of fork is typically smaller than the last, with fewer contributors and a narrower user base, until eventually the idea itself migrates rather than the code. Someone in another language ecosystem looks at the accumulated wreckage and decides to rewrite the concept from scratch, carrying the design forward but leaving the implementation behind. Sass went through this. The original reference implementation was a Ruby gem. When Ruby’s performance became a bottleneck, LibSass rewrote it in C++, and the `sassc` gem wrapped that for Ruby users. Then LibSass itself was deprecated in favour of Dart Sass, which is now the canonical implementation. The concept migrated from Ruby to C++ to Dart across a decade, each rewrite benefiting from the accumulated bug reports and design arguments of its predecessors, and at each stage there were wrapper libraries in other ecosystems feeding on the structural skeleton of the Sass language spec. Most people writing Sass today have no idea it started as a Ruby gem. Successive recolonisation has a nasty failure mode. Edera discovered a differential parsing bug in Rust’s tar-rs library that affected every fork downstream: tar-rs itself, async-tar, tokio-tar, and multiple internal forks maintained by companies like Astral (whose fork ships inside the uv package manager). Coordinated disclosure meant contacting around twenty entities across a fragmented fork graph where three of the four library versions were unmaintained and several maintainers were unreachable. The vulnerability existed because the code had been copied forward through successive forks without anyone re-auditing the PAX header parsing that all of them inherited from the original. The bug had been sitting in the bones the whole time, inherited by every fork. Discovering which forks of a package are affected by an advisory is a problem I’m working on separately, because right now nobody has good tooling for it. CentOS after the Stream pivot is the same pattern at operating system scale: Rocky Linux and AlmaLinux forked, smaller RHEL-compatible rebuilds appeared in the enrichment layer around them, and the structural skeleton underneath, RPM packaging, systemd conventions, filesystem hierarchy, persisted unchanged regardless of which particular distribution is alive or dead at any given moment. ### Licence changes When a project switches from an open source licence to a source-available one, the scavenger stage triggers almost immediately, often before the change even takes effect. Redis to Valkey, Elasticsearch to OpenSearch, Terraform to OpenTofu, the pattern by now is familiar enough that the community has it down to a routine: rush to fork the last open commit, compete briefly, and consolidate around one or two survivors. The organism isn’t exactly dead in these cases. Redis the product still has revenue and a roadmap. But from the perspective of the open source ecosystem the body of code has stopped accepting outside contributions, and the forks start drifting from the original the way MariaDB drifted from MySQL. The abstraction layers are the part that lasts. Every project that integrated with the open version faces a choice between following the proprietary version or switching to the fork, and plenty of them just build a compatibility shim instead. Those shims tend to outlast the controversy that created them, feeding quietly on the skeleton of the original API years after the licence debate has cooled off. ### Sun Microsystems Oracle’s acquisition of Sun in 2010 was less a single whale fall than an entire pod dying at sea simultaneously. Java, Solaris, ZFS, DTrace, VirtualBox, NetBeans, GlassFish, Hudson, MySQL, each sank to a separate ocean floor and spawned its own succession. Some produced single dominant forks (Hudson to Jenkins, ZFS to OpenZFS), others scattered into competing lineages (MySQL alone fed MariaDB, Percona, and briefly Drizzle, which itself became a smaller whale fall when it was abandoned), and some bounced between foundations before settling (NetBeans to Apache, GlassFish to Payara and the broader Jakarta EE ecosystem). The structural skeletons underneath all of it, the JVM bytecode format, the ZFS on-disk format, the MySQL wire protocol, are still load-bearing in projects whose developers have never heard of Sun. ### Shallow water Some projects die in shallow water where the carcass gets recycled quickly. Acqui-hires work this way: the company gets absorbed, the code goes proprietary or gets archived, and the knowledge disperses with the people rather than accumulating in a public carcass that others can feed on. Corporate consolidation has a similar effect, because when a large independent project gets folded into a platform company’s proprietary service, the nutrients get recycled in the water column rather than sinking deep enough for succession to happen. I think the current trend of consolidation under cloud providers is reducing the whale fall rate in open source, and that this has second-order effects on ecosystem diversity that nobody is tracking. You could measure it: look at the fork and dependency graphs of dead projects over time, count how many new projects cite a dead dependency, compare the half-life of a whale fall in npm versus crates versus rubygems. Do some ecosystems have deeper ocean floors, slower decomposition, longer-lasting structural influence? The data exists in package registries and forge APIs, but I haven’t seen anyone ask the question. An open source ecosystem where every large project is owned by a platform company, maintained indefinitely or quietly absorbed on death, is one where those enrichment and chemosynthetic stages rarely get a chance to develop, and the small specialised organisms that depend on whale falls for food never get a chance to evolve. The healthiest ecosystems have a steady supply of whale falls, which is an odd thing to root for since it means wishing for the death of large projects, except that the deep ocean floor has no other food source.
3245 45
Reposted by George Lund
Devorppa @devorppa.aus.social.ap.brid.gy · 15/02/2026
Yes, you may be killed by falling human made space junk, but the odds remain small(ish) that will occur. The (almost inevitable) #KesslerSyndrome may also prevent future #space flights if all those #satellites in Low Earth Orbit start colliding, creating countless debris. However, we *ALL* have […]
aus.social
Original post on aus.social
2177 77
George Lund @georgelund.urbanists.social.ap.brid.gy · 13/02/2026
Tales from the (spoiler alert) wonderful #NHS. I had to wait a few weeks for my GP appointment cos it wasn't urgent. But today I went straight from a phone call, to the GP office for a consult, then: got booked in for bloods; physio booked; x-rays done at the hospital. All within the space of a […]
urbanists.social
Original post on urbanists.social
000 0
George Lund @georgelund.urbanists.social.ap.brid.gy · 11/02/2026
Brilliant www.bbc.co.uk/sport/videos/cx2j5j8z…
bbc.co.uk
Winter Olympics 2026: Minion mayhem on the Olympic ice
Spain's Tomas-Llorenc Guarino Sabate skates to minion music in his Short Program routine despite copyright worries earlier in the week.
000 0
Reposted by George Lund
:privTri: Volpeon :areonNSmol: @volpeon.at.icy.wyvern.rip · 29/01/2026
How to make your home more thrilling
Photo of the inside of a very minimalistic house. In the center of the floor are stairs leading downward with walls on the sides. Sandwiched between the walls, and thus right above the stairs, is a boulder.
21317 17
George Lund @georgelund.urbanists.social.ap.brid.gy · 29/01/2026
How about a whole hour or more of good news about #energy pca.st/episode/e494900c-696d-45a2-8…
pocketcasts.com
Global Electricity Review 2025 (Lagniappe edition)
Happy new year! To close out 2025, by popular demand, we’re lifting the paywall on Episode #254, our comprehensive review of the state of the global energy transition with Ember’s Nic Fulghum. This…
000 0
Reposted by George Lund
Deborah Rose ❌👑 @deberupts.mastodon.social.ap.brid.gy · 23/01/2026
California to join the World Health Organization after the Trump administration pulls out.
2119 19
Reposted by George Lund
Glyph @glyph.im · 17/01/2026
we all need a little less raging against the dying of the light and a little more coordinated tactical assault on the darkness factory
135129 129
Reposted by George Lund
Matt Edgar @mattedgar.social.coop.ap.brid.gy · 17/01/2026
Nostalgic flick through my 2016 photo archive. I have no recollection of this #UserStoriesNoContext
Index card with writing in black felt tip pen, all caps:
"AS A SHIPWRECKEE
I WANT THE GDS SERVICE STANDARD
SO I CAN PREPARE FOR MY LIFE AFTER RESCUE"
132 3
Reposted by George Lund
Zone of Ghosts @zoneghost.theforkiverse.com.ap.brid.gy · 14/01/2026
Police used co-pilot to write an intelligence report to MPs, and it just made stuff up. Because of course it did, this is how AI works, it's a "yes, and" machine. It shouldn't be anywhere near the criminal justice system unless you want it reckoning-that-guys-name-sounds-criminal all over the […]
theforkiverse.com
Original post on theforkiverse.com
000 0
Reposted by George Lund
Shoq 🌿 @shoq.mastodon.social.ap.brid.gy · 07/01/2026
It takes a Canadian pundit to nail it down this well: Occam’s kazoo: When it comes to Trump’s behavior, the most plausible explanation is the stupidest.” www.theglobeandmail.com/opinion/art…
Say hello to Occam’s kazoo: the principle that the most plausible explanation, so far as Mr. Trump is involved, is invariably the stupidest. To understand his motives in any given situation, pick the most aggressively simple-minded, crudely self-serving, absurdly moronic rationale you can think of. You will not be far wrong.
1019 19
Reposted by George Lund
Martin Costello 🏳️‍🌈🇪🇺🪿 @martincostello.com · 31/12/2025
Have reached this stage of the season:
Amy Adams in Arrival holding a dry-wipe board that says "When is bins?"
282 8
Reposted by George Lund
Matt Blaze @mattblaze.federate.social.ap.brid.gy · 14/12/2025
Just to be clear: should I have the terrible misfortune to be killed in a mass shooting, please feel free to politicize the hell out of it. And go ahead and do so immediately. No time will be “too soon”.
12378 78