<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Open Source &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 05 May 2026 15:19:13 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>Open Source &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[NHS Goes To War Against Open Source]]></title>
		<link>https://shkspr.mobi/blog/2026/05/nhs-goes-to-war-against-open-source/</link>
					<comments>https://shkspr.mobi/blog/2026/05/nhs-goes-to-war-against-open-source/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 01 May 2026 11:44:04 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[nhs]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[politics]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=70760</guid>

					<description><![CDATA[The NHS is preparing to close nearly all of its Open Source repositories.  Throughout my time working for the UK Government - in GDS, NHSX, i.AI, and others - I championed Open Source. I spoke to dozens of departments about it, wrote guidance still in use today, and briefed Ministers on why it was so important.  That&#039;s why I&#039;m beyond disappointed at recent moves from NHS England to backtrack on…]]></description>
										<content:encoded><![CDATA[<p>The NHS is preparing to close nearly <em>all</em> of its Open Source repositories.</p>

<p>Throughout my time working for the UK Government - in GDS, NHSX, i.AI, and others - I championed Open Source. I spoke to dozens of departments about it, wrote guidance still in use today, and briefed Ministers on why it was so important.</p>

<p>That's why I'm beyond disappointed at recent moves from NHS England to backtrack on all the previous commitments they've made about the value of open source to the UK's health service.</p>

<p>It's rare that multiple people leak the same story to me, but that's what gives me confidence that lots of people within the NHS are aghast at this news.</p>

<p>A few days ago, I was sent this quote which was attributed to a senior technical person in NHS England.</p>

<blockquote><p>We are obviously looking at things like Mythos, which is more sophisticated at finding vulnerabilities. In the next week or so, we will be changing our tack on coding the open and making our code public until we're on top of that risk.</p>

<p>Most of our repos, unless they're essential, will be removed for security reasons.</p></blockquote>

<p>As I've written before, <a href="https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/">this is not the correct response to the purported threat by Mythos</a>.  Neither the AI Safety Institute nor the NCSC recommend this action.  While there may be some increase in risk from AI security scanners, to shutter everything would be a gross overreaction.</p>

<p>Nevertheless, that's what the NHS is preparing to do.</p>

<p>On the 29th of April, guidance note SDLC-8 was sent out. Here's what it says:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/SDLC-8.webp" alt="All source code repositories must be private by default. Repositories may be internal where there is a legitimate need for visibility within the enterprise. Repositories must not be public unless there is an explicit and exceptional need, and public access has been formally approved by the Engineering Board. Purpose Public repositories materially increase the risk of unintended disclosure of source code, architectural decisions, configuration detail, and contextual information that may be exploited — particularly given rapid advancements in Al models capable of large-scale code ingestion, inference, and reasoning (e.g. developments such as the Mythos model). This red line establishes a default-closed posture for code while the organisation assesses the impact of these changes and ensures that any public publication of code is a deliberate, reviewed, and justified decision. • For P&amp;P Public repositories we will switch to Private on Monday the 11th May 2026 • Teams that have a need for an exemption need to declare this to the Engineering mailbox by COP Wednesday 6th May 2026 • Teams can change to private at any time ahead of this • Central tracking of public repositories: NHSE public repositories.xlsx" width="1400" height="400" class="aligncenter size-full wp-image-70761">

<p>The majority of <a href="https://github.com/nhsuk/">code repos published by the NHS</a> are not meaningfully affected by any advance in security scanning. They're mostly data sets, internal tools, guidance, research tools, front-end design and the like. There is <em>nothing</em> in them which could realistically lead to a security incident.</p>

<p>When I was working at NHSX during the pandemic, we were so confident of the safety and necessity of open source, we made sure <a href="http://web.archive.org/web/20230122050346/https://transform.england.nhs.uk/blogs/code-behind-nhs-covid-19-app/">the Covid Contact Tracing app was open sourced the minute it was available to the public</a>. That was a nationally mandated app, installed on millions of phones, subject to intense scrutiny from hostile powers - and yet, despite publishing the code, architecture and documentation, the open source code caused <strong>zero</strong> security incidents.</p>

<p>Furthermore, this new guidance is in direct contradiction to the UK's <a href="https://www.gov.uk/guidance/the-technology-code-of-practice#be-open-and-use-open-source">Tech Code of Practice point 3 "Be open and use open source"</a> which insists on code being open.</p>

<p>Similarly, the <a href="https://www.gov.uk/service-manual/technology/making-source-code-open-and-reusable">Service Standard says</a>:</p>

<blockquote><p>There are very few examples of code that must not be published in the open.</p>

<p>The main reason for code to be closed source is when it relates to policy that has not yet been announced. In this case, you must make the code open as soon as possible after the policy is published.</p>

<p>You may also need to keep some code closed for security reasons, for example code that protects against fraud. Follow the guidance on <a href="https://gov.uk/government/publications/open-source-guidance/when-code-should-be-open-or-closed">code you should keep closed</a> and <a href="https://gov.uk/government/publications/open-source-guidance/security-considerations-when-coding-in-the-open">security considerations for open code</a>.</p></blockquote>

<p>There's also the DHSC policy "<a href="https://www.gov.uk/government/publications/data-saves-lives-reshaping-health-and-social-care-with-data/data-saves-lives-reshaping-health-and-social-care-with-data">Data saves lives: reshaping health and social care with data</a>":</p>

<blockquote><p>Commitment 601 – completed May 2022</p>

<p>We will publish a digital playbook on how to open source your code for health and care organisations</p></blockquote>

<p>And, here's NHS Digital's stance on open source in their <a href="https://github.com/NHSDigital/software-engineering-quality-framework/blob/main/practices/open-source.md">Software Engineering Quality Framework</a>:</p>

<blockquote><p>The position of all three of these documents is that we should code in the open by default.</p></blockquote>

<p>All of which is reflected in the <a href="https://service-manual.nhs.uk/standards-and-technology/service-standard-points/12-make-new-source-code-open">NHS service standard</a>:</p>

<blockquote><p>Public services are built with public money. So unless there's a good reason not to, the code they're based should be made available for other people to reuse and build on.</p></blockquote>

<p>All of which is to say - open source should be baked into the DNA of the NHS by now. There are <em>thousands</em> of NHS repositories on GitHub. The work undertaken to assess all of them and then close them will be massive. And for what?</p>

<p>Even if we ignore the impracticality of closing all the code - it is too late! All that code has already been slurped up. If Mythos really is the ultimate hacker, hiding the code now does nothing. It has likely already retained copies of the repositories.</p>

<p>And if it were both practical and effective to hide source code - that doesn't matter. These AI tools are just as effective against closed-source. They can analyse binaries and probe websites with ease.</p>

<p>There are tens of thousands of NHS website pages which <a href="https://duckduckgo.com/?q=github+site%3Anhs.uk">refer to their GitHub repos</a> - will they all need to be updated? What's the cost of that?</p>

<p>I've no idea what led to NHS England making this retrograde decision - <a href="https://www.whatdotheyknow.com/request/information_relating_to_guidance_2">so I've send a Freedom of Information request to find out</a>.</p>

<p>I am convinced that closing all their excellent open source work is the wrong move for the NHS. I hope they see sense and reverse course.</p>

<p>Until then, I've helped make sure that <em>every single NHS repository</em> has been backed up and, because the software licence permits it, can be re-published if the original is closed.</p>

<p>In the meantime, <a href="https://www.writetothem.com/">you should email your MP</a> and tell them that the NHS is wrong to shutter its world-leading open source repositories.</p>

<p>Don't let them take away your right to see the code which underpins our nation's healthcare.</p>

<hr>

<h3 id="further-reading"><a href="https://shkspr.mobi/blog/2026/05/nhs-goes-to-war-against-open-source/#further-reading">Further Reading</a></h3>

<ul>
<li>I'm quoted in this <a href="https://www.newscientist.com/article/2524962-nhs-england-rushes-to-hide-software-over-ai-hacking-fears/">article from The New Scientist</a>.</li>
<li><a href="https://www.linkedin.com/feed/update/activity:7456332994920837120?trk=feed_main-feed-card_social-actions-comments">Matt Hancock on the issue</a></li>
<li><a href="https://www.linkedin.com/posts/jessicarosemorley_i-have-been-a-long-time-champion-for-open-ugcPost-7457048384449761280-6_Xg">Discussion by Jessica Morley, PhD</a></li>
<li><a href="https://fsfe.org/news/2026/news-20260504-01.en.html">Free Software Foundation Europe press release</a></li>
<li><a href="https://www.newscientist.com/article/2525315-backlash-builds-over-nhs-plan-to-hide-source-code-from-ai-hacking-risk/">Further commentary from New Scientist</a></li>
<li><a href="https://keepthingsopen.com/">Petition - Keep Things Open</a></li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70760&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/05/nhs-goes-to-war-against-open-source/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Does Mythos mean you need to shut down your Open Source repositories?]]></title>
		<link>https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/</link>
					<comments>https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 11:34:30 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=70599</guid>

					<description><![CDATA[Much Sturm und Drang in the world of Open Source with the announcement that the &#34;Mythos&#34; AI is now the ultimate hacker and is poised to unleash havoc on every code base.  So should you close all your Open Source projects to make them safe?  No.  Firstly, all your Open Source code has already been slurped up.  It was all ingested for &#34;training purposes&#34; years ago. If it was moderately interesting…]]></description>
										<content:encoded><![CDATA[<p>Much <i lang="de">Sturm und Drang</i> in the world of Open Source with the announcement that <a href="https://www.scientificamerican.com/article/what-is-mythos-and-why-are-experts-worried-about-anthropics-ai-model/">the "Mythos" AI is now the ultimate hacker</a> and is poised to unleash havoc on every code base.</p>

<p>So should you close all your Open Source projects to make them safe?</p>

<p>No.</p>

<p>Firstly, all your Open Source code has <em>already</em> been slurped up.</p>

<p>It was all ingested for "training purposes" years ago. If it was moderately interesting then it was backed-up by a digital hoarder. It has been archived by various digital libraries. Anyone who wants to do research on your code base can.</p>

<p>Closing now doesn't meaningfully protect you.</p>

<p>Secondly, most of the security holes in your systems are <em>probably</em> not in your code. Vulnerabilities exist throughout your supply chain. All the dependencies - your OS, libraries, and even hardware - are all richer targets for hackers. Finding a CVE in a popular library is almost certainly more worthwhile than investigating <em>your</em> Open Source code.</p>

<p>The bigger risk comes not from subtle logic bugs but from phishers, poor password hygiene, and insider threats. Securing your existing systems provides more protection than rushing to close-source your code.</p>

<p>Finally, closing the source of something doesn't protect you. These new AI models can easily investigate and your closed source systems and potentially penetrate them. It has always been possible to analyse websites and binaries. AI doesn't change that - although it might accelerate it.</p>

<p>Open Source does have risks but AI doesn't upend decades of evidence that closed-source is just as vulnerable to attackers.</p>

<p>In cases where the state creates code using public money, <a href="https://publiccode.eu/en/">it has a responsibly to share that code</a>. Automated threat analysis - even by hypercapabe AI - doesn't change that.</p>

<p>I would strongly recommend reading the UK's AI Safety Institute's <a href="https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities">evaluation of Claude Mythos Preview’s cyber capabilities</a> and the <a href="https://www.ncsc.gov.uk/blogs/why-cyber-defenders-need-to-be-ready-for-frontier-ai">NCSC's advice</a>. Neither of them recommend closing down Open Source code.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70599&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How Can Governments Pay Open Source Maintainers?]]></title>
		<link>https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/</link>
					<comments>https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 12:34:42 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=53267</guid>

					<description><![CDATA[When I worked for the UK Government I was once asked if we could find a way to pay for all the Open Source Software we were using. It is a surprisingly hard problem and I want to talk about some of the issues we faced.  The UK Government publishes a lot of Open Source code - nearly everything developed in-house by the state is available under an OSI Approved licence. The UK is generally pretty…]]></description>
										<content:encoded><![CDATA[<p>When I worked for the UK Government I was once asked if we could find a way to pay for all the Open Source Software we were using. It is a surprisingly hard problem and I want to talk about some of the issues we faced.</p>

<p>The <a href="https://github.com/alphagov/">UK Government publishes a </a><em><a href="https://github.com/alphagov/">lot</a></em><a href="https://github.com/alphagov/"> of Open Source code</a> - nearly everything developed in-house by the state is available under an OSI Approved licence. The UK is generally pretty relaxed about people, companies, and states re-using its code. There's no desire and little capability to monetise what has been developed with <a href="https://publiccode.eu/en/">public money so it becomes public code.</a></p>

<p>What about the Open Source that UK Government <em>uses</em>?</p>

<p>The state uses <a href="https://digital.leadershipacademy.nhs.uk/digital-capabilities/websites/nightingale-theme-user-guide/">big projects like WordPress</a>, as well as <a href="https://github.com/alphagov/govuk-diff/blob/b62aba29f50915c9388110c2baed132b9f9f32df/diffgovuk.py#L81">moderately popular NPM packages</a>, and <a href="https://github.com/alphagov/ckanext-datagovuk/blob/1548325b7e28dd658f26ac68ba7ba990726ab485/bin/python_scripts/find_invalid_tags.py#L11">small Python libraries</a> and everything in between. But can it pay the maintainers of that software?</p>

<p><small>A version of this blog post was <a href="https://hackernoon.com/how-can-governments-pay-open-source-maintainers">originally published on Hackernoon</a>.</small></p>

<h2 id="fixing-the-plumbing"><a href="https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/#fixing-the-plumbing">Fixing The Plumbing</a></h2>

<p>Open Source is facing a crisis. The code that the world relies on is often developed by underpaid engineers on the brink of burn-out.  While I don't think anyone wants Open Source to have a paywall, it seems obvious that large organisation should pay their way and not rely solely on volunteer labour.</p>

<p>Here are some of the problems I faced when trying to get the UK Government to pay for OSS and how <em>you</em> as a maintainer can help make it easier for large organisations to pay you.</p>

<p>Firstly, lots of OSS doesn't have a well defined owner; so who gets the money?</p>

<p>I'm not saying that every little library you create needs to be published by a registered company, nor am I suggesting that you should remove your anonymity. But Governments and other organisations need to know <em>who</em> they are funding and <em>where</em> the money is going. The danger of accidentally funnelling money to a sanctioned state or person is just too big a risk for most organisations.</p>

<p>If you want to receive funding - make it <em>really</em> clear who you are.</p>

<h2 id="what-can-you-offer"><a href="https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/#what-can-you-offer">What Can You Offer?</a></h2>

<p>Even when there is an owner, there often isn't an easy mechanism for paying people. Donation sites like GitHub Sponsors, Ko-Fi, and Patreon are great for individuals who want to throw a small amount of money to creators but they can be problematic for larger organisations.  Many OSS projects get around this by offering support contracts. It makes it much easier for an organisation to justify their spend because they're no longer donating to something which can be obtained for free; they're paying for a service.</p>

<p>This doesn't have to be a contract offering a 24/7 response and guaranteed SLA. It can be as simple as offering best-effort email support.</p>

<p>The important thing is to offer an <em>easy</em> way for a larger organisation to buy your services. Many organisations have corporate credit cards for lower-cost discretionary spending which doesn't require a full business-case.  How easily could a manager buy a £500 support contact from your site?</p>

<p>Maintainers don't only have to offer support contracts. Many choose to offer training packages which are a good way to raise money <em>and</em> get more people using your product. Some project maintainers will speak at your conference for a suitable fee.</p>

<p>Again, the aim here is for maintainers to offer a <em>plausible</em> reason for a payment to be made.</p>

<h2 id="playing-well-with-others"><a href="https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/#playing-well-with-others">Playing Well With Others</a></h2>

<p>Open Source has a brilliant culture of allowing multiple (often anonymous) contributors. That's fine when there's no money involved, but how does a moderately sized project decide who receives what share of the funding? Services like <a href="https://opencollective.com/">OpenCollective</a> can make it easier to show <em>where</em> the money is going but it is better to discuss in advance with all contributors what they expect as a share.</p>

<p>If people think they're being taken advantage of, or that a project maintainer is unjustly enriching themselves, it can cause arguments.  Be very clear to contributors what the funding is for and whether they're entitled to any of it.</p>

<p>Finally, we faced the issue that some OSS projects didn't <em>want</em> to take money from the "big bad state". They were worried that if people saw "Sponsored by the Government" they would assume that there were backdoors for spies, or that the developer might give in to pressure to add unwanted features.  This (usually) isn't the case but it is easy to see why having a single large organisation as the main donor could give the impression of impropriety.</p>

<p>The best defence against this is to have <em>lot</em> of paying sponsors! Having the state as one of many partners makes it clear that a project isn't beholden to any one customer.</p>

<p>It isn't impossible to get Governments to spend on Open Source. But state spending is heavily scrutinised and, bluntly, they aren't set up to pay <i lang="la">ad hoc</i> amounts to non-suppliers, who aren't charging money.  While large projects often have the resources to apply for Government grants and contracts, smaller projects rarely have the time or expertise. It is critical that maintainers remove the barriers which make it too hard for organisations to pay them.</p>

<h2 id="in-summary"><a href="https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/#in-summary">In Summary</a></h2>

<ul>
<li>Make it easy for Governments and other large organisations to pay you.</li>
<li>Be as obvious as possible that you are able to accept payments from them.</li>
<li>Don't be afraid to put a large price on your talents.</li>
<li>Offer multiple paid-for options like speaker fees, support, and feature development funding.</li>
<li>Talk with your contributors to let them know how any funding will be shared.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=53267&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: Diversifying Open Source - An Open Standards Playbook for Inclusive and Equitable Tech Projects by Paloma Oliveira ★★★★☆]]></title>
		<link>https://shkspr.mobi/blog/2026/02/book-review-diversifying-open-source-an-open-standards-playbook-for-inclusive-and-equitable-tech-projects-by-paloma-oliveira/</link>
					<comments>https://shkspr.mobi/blog/2026/02/book-review-diversifying-open-source-an-open-standards-playbook-for-inclusive-and-equitable-tech-projects-by-paloma-oliveira/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 06 Feb 2026 12:34:05 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[equality]]></category>
		<category><![CDATA[justice]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=67555</guid>

					<description><![CDATA[It is refreshing to read a political polemic which contains useful actions the reader can take. Too many books about the social problems with technology end up being a diagnosis with no cure.  Paloma Oliveira&#039;s new book (with technical review by my friend Dawn Foster) is a deep dive into how we can all make Open Source more inclusive and equitable.  Unlike most tech books, it doesn&#039;t follow the …]]></description>
										<content:encoded><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/02/opensource.webp" alt="Book cover featuring a colourful bird." width="200" class="alignleft size-full wp-image-67558">

<p>It is refreshing to read a political polemic which contains <em>useful</em> actions the reader can take. Too many books about the social problems with technology end up being a diagnosis with no cure.</p>

<p>Paloma Oliveira's new book (with technical review by my friend <a href="https://fastwonder.com/">Dawn Foster</a>) is a deep dive into how we can all make Open Source more inclusive and equitable.</p>

<p>Unlike most tech books, it doesn't follow the usual pattern of restricting itself to the US hegemony. It is very focussed on the EU and the needs of people around the world. It is clear in identifying many of the problems which arise when people say they just want to focus on tech, not politics:</p>

<blockquote><p>When projects focus purely on technical excellence without considering accessibility, they create implicit barriers. Documentation written only in English, community discussions held during North American business hours, or development environments that require high-end hardware all reflect choices that determine who can participate—though these choices often remain unexamined.</p></blockquote>

<p>This is profoundly important. The book isn't afraid to be challenging. It links the way companies extract value from the commons to the way colonisers extracted value from the lands they "discovered".</p>

<p>There are a few missteps which I didn't care for. While it starts as very casually written, it quickly finds itself getting into the weeds of political philosophy. I think that's a necessary evil. But I don't know how easily people will be convinced by passages like:</p>

<blockquote><p>Bratton notes secessionist withdrawal in traditional territories and consolidation domains in stacked hemispheric, the continuing expansions of nebular sovereignties, and the reform of conventional States into regional platforms.</p></blockquote>

<p>Similarly, there are a few "just-so" stories which are fictional parables. I think they would have been more convincing as actual case-studies.</p>

<p>I did find myself skipping some of the background in order to get to the parts I found more interesting. The chapter on "Political Rhetoric and Institution Validation" felt a bit out of place and I didn't get much from it.</p>

<p>But, after all that theory, there is a <em>lot</em> of practical advice. From how to structure your README to how to communicate change to your community. Even better, <a href="https://github.com/Apress/Diversifying-Open-Source">all the templates and resources are on GitHub</a>.</p>

<p>It is thoroughly referenced and gave me lots of new rabbit-holes to follow Rather pleasingly, it cites my 2020 blog post "<a href="https://shkspr.mobi/blog/2020/09/please-stop-inventing-new-software-licences/">Please Stop Inventing New Software Licences</a>" as an example of the ways in which corporates often try to stifle open source.</p>

<p>If you want to help Open Source succeed, you owe it to yourself to grab a copy of this book.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=67555&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/02/book-review-diversifying-open-source-an-open-standards-playbook-for-inclusive-and-equitable-tech-projects-by-paloma-oliveira/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Peaceful Transfer of Power in Open Source Projects]]></title>
		<link>https://shkspr.mobi/blog/2025/11/the-peaceful-transfer-of-power-in-open-source-projects/</link>
					<comments>https://shkspr.mobi/blog/2025/11/the-peaceful-transfer-of-power-in-open-source-projects/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 19 Nov 2025 12:34:27 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[BDFL]]></category>
		<category><![CDATA[mastodon]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[oss]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=65112</guid>

					<description><![CDATA[Most of the people who run Open Source projects are mortal.  Recent history shows us that they will all eventually die, or get bored, or win the lottery, or get sick, or be conscripted, or lose their mind.  If you&#039;ve ever visited a foreign country&#039;s national history museum, I guarantee you&#039;ve read this little snippet:  King Whatshisface was a wise and noble ruler who bought peace and prosperity…]]></description>
										<content:encoded><![CDATA[<p>Most of the people who run Open Source projects are mortal.  Recent history shows us that they will all eventually die, or get bored, or win the lottery, or get sick, or be conscripted, or lose their mind.</p>

<p>If you've ever visited a foreign country's national history museum, I guarantee you've read this little snippet:</p>

<blockquote><p>King Whatshisface was a wise and noble ruler who bought peace and prosperity to all the land.</p>

<p>Upon his death, his heirs waged bloody war over rightful succession which plunged the country into a hundred years of hardship.</p></blockquote>

<p>The great selling point of democracy is that it allows for the peaceful transition of power. Most modern democracies have rendered civil war almost unthinkable. Sure, you might not like the guy currently in charge, but there are well established mechanisms to limit their power and kick them out if they misbehave. If they die in office, there's an obvious and understood hierarchy for who follows them.</p>

<p>Most Open Source projects start small - just someone in their spare room tinkering for fun. Unexpectedly, they grow into a behemoth which now powers half the world. These mini-empires are <em>fragile</em>. The most popular method of governance is the Benevolent Dictator For Life model. The founder of the project controls <em>everything</em>.  But, as I've said before, BDFL only works if the D is genuinely B. Otherwise the FL becomes FML.</p>

<p>The last year has seen several BDFLs act like Mad Kings. They become tyrannical despots, lashing out at their own volunteers. They execute takeovers of community projects. They demand fealty and tithes.  Like dragons, they become quick to anger when their brittle egos are tested. Spineless courtiers carry out deluded orders while pilfering the coffers.</p>

<p>Which is why I am <em>delighted</em> that the Mastodon project has shown a better way to behave.</p>

<p>In "<a href="https://blog.joinmastodon.org/2025/11/the-future-is-ours-to-build-together/">The Future is Ours to Build - Together</a>" they describe <em>perfectly</em> how to gracefully and peacefully transfer power. There are no VCs bringing in their MBA-brained lackeys to extract maximum value while leaving a rotting husk.  No one is seizing community assets and jealously hoarding them. Opaque financial structures and convoluted agreements are prominent in their absence.</p>

<p>Eugen Rochko, the outgoing CEO, has <a href="https://blog.joinmastodon.org/2025/11/my-next-chapter-with-mastodon/">a remarkably honest blog post about the transition</a>. I wouldn't wish success on my worst enemy. He talks plainly about the reality of dealing with the pressure and how he might have been a limiting factor on Mastodon's growth.  That's a far step removed from the ego-centric members of The Cult of The Founder with their passionate belief in the Divine Right of Kings.</p>

<p>Does your tiny OSS script need a succession plan? Probably not. Do you have several thousand NPM installs per day? It might be worth working out who you can share responsibility with if you are unexpectedly raptured. Do you think that your project is going to last for a thousand years? Build an organisation which won't crumble the moment its founder is arrested for their predatory behaviour on tropical islands.</p>

<p>I'm begging project leaders everywhere - please read up on the social contract and the consent of the governed. Or, if reading is too woke, just behave like grown-ups rather than squabbling tweenagers.</p>

<p>It is a sad inevitability that, eventually, we will all be nothing but memories. The bugs that we create live after us, the patches are oft interrèd with our code. Let it be so with all Open Source projects.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=65112&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/11/the-peaceful-transfer-of-power-in-open-source-projects/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How to *actually* test your readme]]></title>
		<link>https://shkspr.mobi/blog/2025/10/how-to-actually-test-your-readme/</link>
					<comments>https://shkspr.mobi/blog/2025/10/how-to-actually-test-your-readme/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 07 Oct 2025 11:34:08 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=62224</guid>

					<description><![CDATA[If you&#039;ve spent any time using Linux, you&#039;ll be used to installing software like this:  The README says to download from this link. Huh, I&#039;m not sure how to unarchive .tar.xz files - guess I&#039;ll search for that. Right, it says run setup.sh hmm, that doesn&#039;t work. Oh, I need to set the permissions. What was the chmod command again? OK, that&#039;s working. Wait, it needs sudo. Let me run that again.…]]></description>
										<content:encoded><![CDATA[<p>If you've spent any time using Linux, you'll be used to installing software like this:</p>

<blockquote><p>The README says to download from this link. Huh, I'm not sure how to unarchive .tar.xz files - guess I'll search for that. Right, it says run <code>setup.sh</code> hmm, that doesn't work. Oh, I need to set the permissions. What was the <code>chmod</code> command again? OK, that's working. Wait, it needs <code>sudo</code>. Let me run that again. Hang on, am I in the right directory? Here it goes. What, it crapped out. I don't have some random library - how the hell am I meant to install that? My distro has v21 but this requires &lt;=19. Ah, I also need to upgrade something which isn't supplied by repo. Nearly there, just need to compile this obscure project from SourceForge which was inexplicably installed on the original dev's machine and then I'll be good to go. Nope. Better raise an issue on GitHub. Oh, look, it is tomorrow.</p></blockquote>

<p>As a developer, you probably don't want to answer dozens of tickets complaining that users are frustrated with your work. You thought you made the README really clear and - hey! - it works on your machine.</p>

<p>There are various solutions to this problem - developers can release AppImages, or Snaps, or FlatPaks, or Docker or whatever. But that's a bit of stretch for a solo dev who is slinging out a little tool that they coded in their spare time. And, even those don't always work as seamlessly as you'd hope.</p>

<p>There's an easier solution:</p>

<ol>
<li>Follow the steps in your README</li>
<li>See if they work.</li>
<li>…</li>
<li>That's it.</li>
</ol>

<p>OK, that's a bit reductive! There are a million variables which go into a test - so I'm going to introduce you to a secret <em>zeroth</em> step.</p>

<ol start="0">
<li>Spin up a fresh Virtual Machine with a recent-ish distro.</li>
</ol>

<p>If you are a developer, your machine probably has a billion weird configurations and obscure libraries installed on it - things which <em>definitely</em> aren't on your users' machines. Having a box-fresh VM means than you are starting with a blank-slate. If, when following your README, you discover that the app doesn't install because of a missing dependency, you can adjust your README to include <code>apt install whatever</code>.</p>

<h2 id="ok-but-how"><a href="https://shkspr.mobi/blog/2025/10/how-to-actually-test-your-readme/#ok-but-how">OK, but how?</a></h2>

<p>Personally, I like <a href="https://flathub.org/apps/org.gnome.Boxes">Boxes</a> as it gives you a simple choice of VMs - but there are plenty of other Virtual Machine managers out there.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/OS-Selection.webp" alt="List of Linux OSes." width="801" height="728" class="aligncenter size-full wp-image-62227">

<p>Pick a standard OS that you like. I think the latest Ubuntu Server is pretty lightweight and is a good baseline for what people are likely to have. But feel free to pick something with a GUI or whatever suits your audience.</p>

<p>Once your VM is installed and set up for basic use, take a snapshot.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/revert.webp" alt="Pop up showing a snapshot of a virtual machine." width="692" height="628" class="aligncenter size-full wp-image-62228">

<p>Every time you want to test or re-test a README, revert back to the <em>original</em> state of your box. That way you won't have odd half-installed packages laying about.</p>

<p>Your next step is to think about how much hand-holding do you want to do?</p>

<p>For example, the default Debian doesn't ship with git. Does your README need to tell people to <code>sudo apt install git</code> and then walk them through configuring it so that they can <code>git clone</code> your repo?</p>

<p>Possibly! Who is your audience? If you've created a tool which is likely to be used by newbies who are just getting started with their first Raspberry Pi then, yeah, you probably will need to include that. Why? Because it will save you from receiving a lot of repeated questions and frustrated emails.</p>

<p>OK, but most developers will have <code>gcc</code> installed, right? Maybe! But it doesn't do any harm to include it in a long list of <code>apt get …</code> anyway, does it? Similarly, does everyone know how to upgrade to the very latest npm?</p>

<p>If your software is designed for people who are experienced computer touchers, don't fall into the trap of thinking that they know everything you do.  I find it best to assume people are intelligent but not experienced; it doesn't hurt to give <em>slightly</em> too much detail.</p>

<p>The best way to do this is to record <em>everything</em> you do after logging into the blank VM.</p>

<ol start="0">
<li>Restore the snapshot.</li>
<li>Log in.</li>
<li>Run all the commands you need to get your software working.</li>
<li>Once done, run <code>history -w history.txt</code>

<ul>
<li>That will print out <em>every</em> command you ran.</li>
</ul></li>
<li>Copy that text into your README.</li>
</ol>

<p>Hey presto! You now have README instructions which have been tested to work. Even on the most bare-bones machine, you can say that your README will allow the user to get started with your software with the minimum amount of head-scratching.</p>

<p>Now, this isn't foolproof. Maybe the user has an ancient operating system running on obsolete hardware which is constantly bombarded by cosmic rays. But at least this way your issues won't be clogged up by people saying their install failed because <code>lib-foobar</code> wasn't available or that <code>./configure</code> had fatal errors.</p>

<p>A great example is <a href="https://github.com/xiph/opus/blob/main/README">the Opus Codec README</a>.  I went into a fresh Ubuntu machine, followed the readme, ran the above history command, and got this:</p>

<pre><code class="language-_">sudo apt-get install git autoconf automake libtool gcc make
git clone https://gitlab.xiph.org/xiph/opus.git
cd opus
./autogen.sh
./configure
make
sudo make install
</code></pre>

<p>Everything worked! There was no missing step or having to dive into another README to figure out how to bind flarg 6.9 with schnorp-unstable.</p>

<p>So that's my plea to you, dear developer friend. Make sure your README contains both the necessary <em>and</em> sufficient information required to install your software. For your sake, as much as mine!</p>

<h2 id="wait-you-didnt-follow-your-own-advice"><a href="https://shkspr.mobi/blog/2025/10/how-to-actually-test-your-readme/#wait-you-didnt-follow-your-own-advice">Wait! You didn't follow your own advice!</a></h2>

<p>You're quite right. Feel free to send a pull request to correct this post - as I shall be doing with any unhelpful READMEs I find along the way.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=62224&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/10/how-to-actually-test-your-readme/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[I'm never going back to Matrix]]></title>
		<link>https://shkspr.mobi/blog/2025/07/im-never-going-back-to-matrix/</link>
					<comments>https://shkspr.mobi/blog/2025/07/im-never-going-back-to-matrix/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 29 Jul 2025 11:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[rant]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=62087</guid>

					<description><![CDATA[I should love Matrix. It is a decentralised, privacy preserving, multi-platform chat tool. Goodbye Slack and your ridiculous free limits. Adiós Discord and your weird gamification. Suck it IRC with your obscure syntax and faint stench of BO. WhatsApp and Telegram can stick their heads in a bucket of lukewarm sick and sing sea shanties! Let&#039;s join the future!  The problem is - Matrix is shit. Not …]]></description>
										<content:encoded><![CDATA[<p>I should love Matrix. It is a decentralised, privacy preserving, multi-platform chat tool. Goodbye Slack and your ridiculous free limits. Adiós Discord and your weird gamification. Suck it IRC with your obscure syntax and faint stench of BO. WhatsApp and Telegram can stick their heads in a bucket of lukewarm sick and sing sea shanties! Let's join the future!</p>

<p>The problem is - Matrix is shit. Not just on a protocol level, but on an organisational level as well.</p>

<p>I joined Matrix at FOSDEM - the largest gathering of open source nerds in Europe. We were all encouraged to use it - every talk had its own channel, all the official comms came from there, I was even invited to a top-secret private channel for speakers. This was going to be epic! Viva la rèvölūçïón, right? Wrong.</p>

<p>It was dead. Even among the most seasoned geeks on the planet, most people preferred to use other services like Signal, Telegram, and Slack. Why? Because those other tools <em>actually</em> work.</p>

<p>Matrix has two official Android apps - one of which is old and unsupported, the other is new and doesn't work with many of the basic chat features.</p>

<p>I want to be absolutely clear about this - the company behind Matrix have put out an app which doesn't work with their own product!  Lest you think I'm exaggerating, here's a typical view of the official FOSDEM speaker room, using the official Matrix app:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/Matrix-Unsupported-event.webp" alt="A list of errors saying &quot;Unsupported Event&quot;." width="504" height="1122" class="aligncenter size-full wp-image-62099">

<p>It was <strong>embarrassing</strong>. People would pipe up in channels and say "this doesn't work" only to be told they were using the wrong app and should go back to the one marked unsupported. So they left, never to return. Even in the large talks, where people were encouraged to use the official Matrix chat, most of the conversation happened on other platforms. It was just too hard to use Matrix.</p>

<p>A few thousands geeks, all used to recompiling their own kernels and participating in the Fediverse, and most thought that Matrix was too much of a faff.</p>

<p>After FOSDEM, I kept the Matrix app on my phone. Occasionally receiving a ping from some long-forgotten channel.</p>

<p>And then, one day, I got hit with the most vile spam. A dozen notifications suddenly appeared on my phone with abuse, torture, and transphobic slurs in them.</p>

<p><a href="https://mastodon.social/@Edent/114539443582952334">You can view the screenshot</a> - but, fair warning, it is grim.</p>

<p>This shouldn't be possible. It doesn't take an expensive team of moderators to add some keyword monitoring. It doesn't take a massive AI model to work out that a stranger shouldn't be able to bombard users with multiple notifications. You don't have to sacrifice your dream of a decentralised future - you just need to care about your users.</p>

<p>This stuff is <em>basic</em>.</p>

<p>I moaned about it on Mastdon and was surprised to receive a private reply from the <em>official</em> Matrix account.</p>

<blockquote><p>Please do not encourage the spammer by giving them a platform and propagating their spam; you may want to consider deleting your post.</p></blockquote>

<p>This is classic victim blaming. It is my fault for giving the spammer attention. I am the one who needs to take responsibility and delete the evidence. I shouldn't warn people that Matrix is actively dangerous to use.</p>

<p>Bullshit.</p>

<p>Here's what I <em>expected</em> them to say:</p>

<blockquote><p>"We're sorry you had such a bad experience on Matrix. Rest assured we're working hard to block these spammers - here's a link to show what we're doing. You can protect your account further by doing x, y and z. Once again, sorry and we hope we can win back your trust."</p></blockquote>

<p>I'm not saying scrappy open source projects have to hire anodyne corporate communications specialists; they just need to have a <em>little</em> empathy.</p>

<p>But, no, just constant whining about how it isn't their fault and how <strong>I</strong> am the one who needs to change my behaviour.</p>

<p>This is pretty typical behaviour from the team. Find any post complaining about some aspect of Matrix and you'll see their instant woe-is-me replies.</p>

<p>So I deleted the app. I would have liked to have nuked my account <a href="https://github.com/matrix-org/synapse/issues/1941">but apparently that's not possible</a>.</p>

<p>I'm not the only one who feels like this. <a href="https://マリウス.com/giving-up-on-element-and-matrixorg/">Here's an epic post by Marius</a>, which concludes:</p>

<blockquote><p>Between the slow performance, the increasing amount of spam, the miserable web client, and the unfinished state of Element X, the Matrix.org network is not something I am willing to continue to recommend, especially to non-technical users. Normal people are simply tolerating it to communicate with idealistic nerds like myself who insist(ed) on using it.</p></blockquote>

<p>Matrix just isn't focussed on users. I'm not talking about user-experience tweaks like which shade of cornflower blue to use - I mean basic user needs like apps that work and a way to combat spam.</p>

<p>There's a <a href="https://telegra.ph/why-not-matrix-08-07">long list of ways the protocol contributes to a poor user experience</a>. It almost seems designed without regard for how it will actually be used.</p>

<p>While the protocol may be conceptually interesting and their intentions noble, I'm not prepared to suffer abuse in the name of technical purity.</p>

<p>Open Source and Open Standards nerds like me ought to know by now that the protocol is the <em>least</em> compelling thing about a service.  Who cares if your home is built using only Stallman-blessed tools, when the walls are full of rats?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=62087&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/07/im-never-going-back-to-matrix/feed/</wfw:commentRss>
			<slash:comments>58</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Towards a test-suite for TOTP codes]]></title>
		<link>https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/</link>
					<comments>https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 02 Mar 2025 12:34:39 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[2fa]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[HTOP]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[totp]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=58593</guid>

					<description><![CDATA[Because I&#039;m a massive nerd, I actually try to read specification documents. As I&#039;ve ranted ad nauseam before, the current TOTP spec is irresponsibly obsolete.  The three major implementations of the spec - Google, Apple, and Yubico - all subtly disagree on how it should be implemented. Every other MFA app has their own idiosyncratic variants. The official RFC is infuriatingly vague. That&#039;s no…]]></description>
										<content:encoded><![CDATA[<p>Because I'm a massive nerd, I <em>actually try to read</em> specification documents. As I've ranted <i lang="la">ad nauseam</i> before, the current TOTP<sup id="fnref:totp"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#fn:totp" class="footnote-ref" title="Time-based One Time Passwords. Not the TV show you remember from your youth, grandad." role="doc-noteref">0</a></sup> spec is <a href="https://shkspr.mobi/blog/2025/02/the-least-secure-totp-code-possible/">irresponsibly obsolete</a>.</p>

<p>The three major implementations of the spec - <a href="https://github.com/google/google-authenticator/wiki/Key-Uri-Format">Google</a>, <a href="https://developer.apple.com/documentation/authenticationservices/securing-logins-with-icloud-keychain-verification-codes#3795996">Apple</a>, and <a href="https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html">Yubico</a> - all subtly disagree on how it should be implemented. Every other MFA app has their own idiosyncratic variants. The <a href="https://datatracker.ietf.org/doc/html/rfc6238">official RFC is infuriatingly vague</a>. That's no good for a security specification. Multiple implementations are great, multiple interpretations are not.</p>

<p>So I've <a href="https://edent.codeberg.page/TOTP_Test_Suite/">built a nascent test suite</a> - you can use it to see if your favourite app can correctly implement the TOTP standard.</p>

<p><a href="https://edent.codeberg.page/TOTP_Test_Suite/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/03/TOTP-Tests-fs8.png" alt="Screenshot showing a QR code and numeric codes." width="1024" height="813" class="aligncenter size-full wp-image-58598"></a></p>

<p>Please do contribute tests and / or feedback.</p>

<p>Here's what the standard <em>actually</em> says - see if you can find apps which don't implement it correctly.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#background">Background</a></h2>

<p>Time-based One Time Passwords are based on HOTP - HMAC-Based One-Time Password.</p>

<p>HOTP uses counters; a new password is regularly generated. TOTP uses time as the counter. At the time of writing this post, there have been about 1,740,800,000 seconds since the UNIX Epoc. So a TOTP with an period of 30 seconds is on counter (1,740,800,000 ➗ 30) = 58,026,666.  Every 30 seconds, that counter increments by one.</p>

<h3 id="number-of-digits"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#number-of-digits">Number of digits</a></h3>

<p>How many digits should your 2FA token have? Google says 6 or 8. YubiCo graciously allows 7. Why those limits? Who knows!?</p>

<p><a href="https://datatracker.ietf.org/doc/html/rfc4226#section-5.4">The HOTP specification gives an <em>example</em> of 6 digits</a>.  The example generates a code of <code>0x50ef7f19</code> which, in decimal, is <code>1357872921</code>. It then takes the last 6 digits to produce the code <code>872921</code>.</p>

<p>The TOTP RFC says:</p>

<blockquote><p>Basically, the output of the HMAC-SHA-1 calculation is truncated to obtain user-friendly values</p>

<p><a href="https://datatracker.ietf.org/doc/html/rfc6238#section-1.2">1.2. Background</a></p></blockquote>

<p>But doesn't say how far to truncate.</p>

<p>There's nothing I can see in the spec that <em>prevents</em> an implementer using all 10.  The HOTP spec, however, <em>does</em> place a minimum requirement - but no maximum:</p>

<blockquote><p>Implementations MUST extract a 6-digit code at a minimum and possibly 7 and 8-digit code.
Depending on security requirements, Digit = 7 or more SHOULD be considered in order to extract a longer HOTP value.
<a href="https://datatracker.ietf.org/doc/html/rfc4226#section-5.3">RFC 4226 - 5.3. Generating an HOTP Value</a></p></blockquote>

<p>(As a minor point, the first digit is restricted to 0-2, so being 10 digits long isn't significantly stronger than 9 digits.)</p>

<p>Is a 4 digit code acceptable? The security might be weaker, but the usability is greater. Most apps will allow a <em>one</em> digit code to be returned. If no digits are specified, what should the default be?</p>

<h3 id="algorithm"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#algorithm">Algorithm</a></h3>

<p>The given algorithm in the HOTP spec is SHA-1.</p>

<blockquote><p>In order to create the HOTP value, we will use the HMAC-SHA-1 algorithm
<a href="https://datatracker.ietf.org/doc/html/rfc4226#section-5.2">RFC 4226 - 5.2.  Description</a></p></blockquote>

<p>As we now know, SHA-1 has some fundamental weaknesses. The spec comments (perhaps somewhat naïvely) about SHA-1:</p>

<blockquote><p>The new attacks on SHA-1 have no impact on the security of HMAC-SHA-1.
<a href="https://datatracker.ietf.org/doc/html/rfc4226#appendix-B.2">RFC 4226 - B.2.  HMAC-SHA-1 Status</a></p></blockquote>

<p>I daresay that's accurate. But the TOTP authors disagree and allow for some different algorithms to be used. The specification for HMAC says:</p>

<blockquote><p>HMAC can be used with <em>any</em> iterative cryptographic hash function, e.g., MD5, SHA-1
[Emphasis added]
<a href="https://datatracker.ietf.org/doc/html/rfc2104">RFC 2104 - HMAC: Keyed-Hashing for Message Authentication</a></p></blockquote>

<p>So most TOTP implementation allow SHA-1, SHA-256, and SHA-512.</p>

<blockquote><p>TOTP implementations MAY use HMAC-SHA-256 or HMAC-SHA-512 functions […] instead of the HMAC-SHA-1 function that has been specified for the HOTP computation
<a href="https://datatracker.ietf.org/doc/html/rfc6238#section-1.2">RFC 6238 - TOTP: Time-Based One-Time Password Algorithm</a></p></blockquote>

<p>But the HOTP spec goes on to say:</p>

<blockquote><p>Current candidates for such hash functions include SHA-1, MD5, RIPEMD-128/160.
These different realizations of HMAC will be denoted by HMAC-SHA1, HMAC-MD5, HMAC-RIPEMD
<a href="https://datatracker.ietf.org/doc/html/rfc2104#section-1">RFC 2104 - Introduction</a></p></blockquote>

<p>So, should your TOTP app be able to handle an MD5 HMAC, or even SHA3-384? Will it?  If no algorithm is specified, what should the default be?</p>

<h3 id="period"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#period">Period</a></h3>

<p>As discussed, this is what increments the counter for HOTP. The <a href="https://github.com/google/google-authenticator/wiki/Key-Uri-Format">Google Spec</a> says:</p>

<blockquote><p>The period parameter defines a period that a TOTP code will be valid for, in seconds. The default value is 30.</p></blockquote>

<p>The TOTP RFC says:</p>

<blockquote><p>We RECOMMEND a default time-step size of 30 seconds
<a href="https://datatracker.ietf.org/doc/html/rfc6238#section-5.2">5.2. Validation and Time-Step Size</a></p></blockquote>

<p>It doesn't make sense to have a negative number of second. But what about one second? What about a thousand? Lots of apps artificially restrict TOTP codes to 15, 30, or 60 seconds. But there's no specification to define a maximum or minimum value.</p>

<p>A user with mobility difficulties or on a high-latency connection probably wants a 5 minute validity period. Conversely, machine-to-machine communication can probably be done with a single-second (or lower) time period.</p>

<h3 id="secret"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#secret">Secret</a></h3>

<p>Google says the secret is</p>

<blockquote><p>an arbitrary key value encoded in Base32 according to RFC 3548. The padding specified in RFC 3548 section 2.2 is not required and should be omitted.</p></blockquote>

<p>Whereas Apple says it is:</p>

<blockquote><p>An arbitrary key value encoded in Base32. Secrets should be at least 160 bits.</p></blockquote>

<p>Can a shared secret be a single character? What about a thousand? Will padding characters cause a secret to be rejected or can they be safely stripped?</p>

<h3 id="label"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#label">Label</a></h3>

<p>The label allows you to have multiple codes for the same service. For example <code>Big Bank:Personal Account</code> and <code>Big Bank:Family Savings</code>.  The Google spec is slightly confusing:</p>

<blockquote><p>The issuer prefix and account name should be separated by a literal or url-encoded colon, and optional spaces may precede the account name. Neither issuer nor account name may themselves contain a colon.</p></blockquote>

<p>What happens if they are <em>not</em> URl encoded? What about Matrix accounts which use a colon in their account name? Why are spaces allowed to precede the account name? Is there any practical limit to the length of these strings?</p>

<p>If no label is specified, what should the default be?</p>

<h3 id="issuer"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#issuer">Issuer</a></h3>

<p>Google says this parameter is:</p>

<blockquote><p><strong>Strongly Recommended</strong> The issuer parameter is a string value indicating the provider or service this account is associated with, URL-encoded according to RFC 3986. If the issuer parameter is absent, issuer information may be taken from the issuer prefix of the label. If both issuer parameter and issuer label prefix are present, they should be equal.</p></blockquote>

<p>Apple merely says:</p>

<blockquote><p>The domain of the site or app. The password manager uses this field to suggest credentials when setting up a new code generator.</p></blockquote>

<p>Yubico equivocates with</p>

<blockquote><p>The issuer parameter is recommended, but it can be absent. Also, the issuer parameter and issuer string in label should be equal.</p></blockquote>

<p>If it isn't a domain, will Apple reject it? What happens if the issuer and the label don't match?</p>

<h2 id="next-steps"><a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#next-steps">Next Steps</a></h2>

<ul>
<li>If you're a user, <a href="https://codeberg.org/edent/TOTP_Test_Suite">please contribute tests</a> or give feedback.</li>
<li>If you're a developer, please check your app conforms to the specification.</li>
<li>If you're from Google, Apple, Yubico, or another security company - wanna help me write up a proper RFC so this doesn't cause issues in the future?</li>
</ul>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:totp">
<p>Time-based One Time Passwords. Not the TV show you remember from your youth, grandad.&nbsp;<a href="https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/#fnref:totp" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=58593&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/03/towards-a-test-suite-for-totp-codes/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[A small contribution to curl]]></title>
		<link>https://shkspr.mobi/blog/2025/02/a-small-contribution-to-curl/</link>
					<comments>https://shkspr.mobi/blog/2025/02/a-small-contribution-to-curl/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 11 Feb 2025 12:34:13 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=58048</guid>

					<description><![CDATA[The venerable curl is one of the most fundamental pieces of code in the modern world.  A seemingly simply utility - it enables other programs to interact with URls - it runs on millions of cars, is inside nearly every TV, used by billions of people, and is even in use on Mars.  And, as of last week, features a small contribution by me!  Look, I&#039;m not an experienced bit-twiddler. I can&#039;t…]]></description>
										<content:encoded><![CDATA[<p>The venerable <a href="https://curl.se/">curl</a> is one of the most fundamental pieces of code in the modern world.  A seemingly simply utility - it enables other programs to interact with URls - it runs on <a href="https://daniel.haxx.se/blog/2018/08/12/a-hundred-million-cars-run-curl/">millions of cars</a>, is inside nearly every TV, used by <a href="https://daniel.haxx.se/blog/2021/04/22/so-what-exactly-is-curl/">billions of people</a>, and is even <a href="https://daniel.haxx.se/blog/2021/04/19/mars-2020-helicopter-contributor/">in use on Mars</a>.</p>

<p>And, as of last week, features a small contribution by me!</p>

<p>Look, I'm not an experienced bit-twiddler. I can't micro-optimise algorithms or spot intricate C-based memory leaks. What I <em>can</em> do is get annoyed at poor documentation!</p>

<p>You see, documentation and code comments are vitally important. Poor spelling might trip up non-native speakers, bad examples confuse learners, and ambiguous wording is a barrier to understanding.</p>

<p>As was written by the sages:</p>

<blockquote><p>a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, <strong>programs must be written for people to read, and only incidentally for machines to execute</strong>.
<cite>Abelson, Sussman, and Sussman <a href="https://web.mit.edu/6.001/6.037/sicp.pdf">Structure and Interpretation of Computer Programs</a></cite></p></blockquote>

<p>So, what did I fix? A few years ago, I noticed <a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/">Google's documentation used example domains it didn't control</a>. The same thing was happening in the curl source code.</p>

<p>One example domain used was <code>"HTTPS://your.favourite.ssl.site"</code> - when that code was written 23 years ago, the .site TLD didn't exist. <a href="https://radix.website/dot-site">Now it does</a>.</p>

<p>Is there a serious risk that someone will register <code>ssl.site</code> and use it to take over the machine of anyone who unthinkingly follows that example? Probably not. But it also isn't terribly clear that it <em>is</em> an example. So I changed it to <code>secure.site.example</code> which uses the reserved <a href="https://en.wikipedia.org/wiki/.example"><code>.example</code></a> TLD.</p>

<p>That should make it clear to everyone that it is a placeholder example and will prevent anyone from misusing that domain.</p>

<p>Similarly, there were a few comments which used <code>domain.com</code> as an example. However, <a href="https://www.domain.com/">that's a real website</a> - so I updated those to <a href="https://example.com"><code>example.com</code></a>.</p>

<p>I was <em>delighted</em> to see the changes accepted.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/curl-fs8.png" alt="daniel stenberg saying &quot;Welcome Terence Eden as #curl commit author 1342&quot;" width="1328" height="988" class="aligncenter size-full wp-image-58050">

<p>And I was only <em>slightly</em> disappointed to have narrowly missed out on being <a href="https://daniel.haxx.se/blog/2025/01/29/a-1337-curl-author/">contributor 1337</a>, but being number 1342 ain't so bad 😄</p>

<p>You can <a href="https://github.com/curl/curl/pull/16270/files">see the full list of changes on GitHub</a>.</p>

<p>Much like my <a href="https://lkml.org/lkml/2014/11/17/617">patch to the Linux Kernel</a> this might be considered a <a href="https://shkspr.mobi/blog/2014/04/submitting-trivial-linux-kernel-patches/">trivial matter</a> - but I honestly believe that clear and accurate documentation can be as important as the code itself.</p>

<p>Huge thanks to Daniel for creating curl, for making such a welcoming environment for new contributors, and for handing out such brilliant stickers at FOSDEM!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/laptop-stickers.webp" alt="A laptop covered with stickers - prominent is curl." width="1024" height="768" class="aligncenter size-full wp-image-58150">
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=58048&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/02/a-small-contribution-to-curl/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Talking Contact Tracing at FOSDEM]]></title>
		<link>https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/</link>
					<comments>https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 06 Feb 2025 12:34:19 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[covid19]]></category>
		<category><![CDATA[fosdem]]></category>
		<category><![CDATA[nhsx]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[presentation]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=55573</guid>

					<description><![CDATA[I was delighted to be invited to speak at FOSDEM. And I was not at all intimidated to be speaking on the cavernous Janson stage.  The audience were lovely, asked interesting questions, and - most importantly - laughed in all the right places 😅.  Regular readers will recognise this as being an updated version of the talk I gave at EMF 2024 - feel free to watch that one if you want to see if I&#039;ve im…]]></description>
										<content:encoded><![CDATA[<p>I was delighted to be invited to speak at FOSDEM. And I was <em>not at all intimidated</em> to be speaking on the cavernous Janson stage.  The audience were lovely<sup id="fnref:heckle"><a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fn:heckle" class="footnote-ref" title="Except for one weird heckler who shouted out something incomprehensible." role="doc-noteref">0</a></sup>, asked interesting questions<sup id="fnref:what"><a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fn:what" class="footnote-ref" title="Well, one guy came up afterwards and asked &quot;What exactly is Covid? Can you explain?&quot; I politely suggested he speak to a medical professional." role="doc-noteref">1</a></sup>, and - most importantly - laughed in all the right places 😅.</p>

<p>Regular readers will recognise this as being an updated<sup id="fnref:👕"><a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fn:👕" class="footnote-ref" title="But, yes, still wearing the same t-shirt!" role="doc-noteref">2</a></sup> version of the talk I gave at <a href="https://shkspr.mobi/blog/2024/06/emf-2024-a-quick-retrospective/">EMF 2024</a> - feel free to <a href="https://media.ccc.de/v/emf2024-16-lessons-learned-open-sourcing-the-uks-covid-tracing-app">watch that one</a> if you want to see if I've improved.</p>

<video controls="" preload="metadata" width="1920" height="1080" poster="https://shkspr.mobi/blog/wp-content/uploads/2025/02/fosdemposter.webp">
  <source src="https://video.fosdem.org/2025/janson/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app.mp4" type="video/mp4">
  <source src="https://video.fosdem.org/2025/janson/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app.av1.webm" type="video/webm">
  <track label="English" kind="subtitles" srclang="en" src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app.vtt" default="">
</video>

<p>Huge thanks to the AV team and the video-wizards behind the FOSDEM infrastructure.</p>

<p>As I say in my introduction, these are my <em>personal</em> recollections. I no longer work for the Government, so feel free to send any complaints to <a href="https://en.wiktionary.org/wiki/circular_file">the circular file</a>.</p>

<h2 id="feedback"><a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#feedback">Feedback</a></h2>

<p>A few pieces of public feedback I got after the talk.</p>

<blockquote class="social-embed" id="social-embed-113936721095521370" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://fosstodon.org/@sxa" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://cdn.fosstodon.org/accounts/avatars/109/383/142/552/399/684/original/b9232241b6c1b0b1.png" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@sxa@fosstodon.org</p>Stewart X Addison</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p>There's nothing like <a href="https://fosstodon.org/tags/FOSDEM" class="mention hashtag" rel="tag">#<span>FOSDEM</span></a>. Maybe if you're in a particular community that doesn't have a devroom  so doesn't attract so many people it's not the same but finding people you know face to face and making new contacts is so valuable.  But there's something for every open source developer. </p><p>Talk highlight? I've got to go with <span class="h-card" translate="no"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> on the UK COVID tracing app. Even if you're not UK based it was a lesson in how government works and dealing with the abuse on Twitter. Superbly presented too.</p><div class="social-embed-media-grid"></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://fosstodon.org/@sxa/113936721095521370"><span aria-label="10 likes" class="social-embed-meta">❤️ 10</span><span aria-label="3 replies" class="social-embed-meta">💬 3</span><span aria-label="5 reposts" class="social-embed-meta">🔁 5</span><time datetime="2025-02-02T22:46:33.670Z" itemprop="datePublished">22:46 - Sun 02 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-113934522894861651" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://fosstodon.org/@JimMadge" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://cdn.fosstodon.org/accounts/avatars/111/885/308/389/321/814/original/837c91da2e7e51f8.jpg" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@JimMadge@fosstodon.org</p>Jim Madge</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p>This <a href="https://fosstodon.org/tags/FOSDEM" class="mention hashtag" rel="tag">#<span>FOSDEM</span></a> I've learned that <span class="h-card" translate="no"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span>, who up to now I have known for <span class="h-card" translate="no"><a href="https://bot.openbenches.org/openbenches" class="u-url mention">@<span>openbenches</span></a></span>, championed making the NHS covid app open source 🤯🚀.</p><p>Watch his excellent talk <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/" target="_blank" rel="nofollow noopener noreferrer" translate="no"><span class="invisible">https://</span><span class="ellipsis">fosdem.org/2025/schedule/event</span><span class="invisible">/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/</span></a></p><div class="social-embed-media-grid"></div><a href="https://fosdem.org/2025/schedule/event/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/" class="social-embed-card"><div class="social-embed-media-grid"><img src="data:image/webp;base64,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" alt="" class="social-embed-media"></div><br>FOSDEM 2025 - Lessons learned Open Sourcing the UK's Covid Tracing App<br><br></a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://fosstodon.org/@JimMadge/113934522894861651"><span aria-label="4 likes" class="social-embed-meta">❤️ 4</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2025-02-02T13:27:31.794Z" itemprop="datePublished">13:27 - Sun 02 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-113951862513279711" lang="fr" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://mastodon.social/@johra" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://files.mastodon.social/accounts/avatars/111/654/631/752/418/073/original/2f0a4f48773a5298.png" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@johra@mastodon.social</p>Johra 🌈</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p><span class="h-card" translate="no"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> your talk was part of the wonderful things in this year’s FOSDEM. I look forward to more on health from the perspective of those who understand what’s behind the technology</p><div class="social-embed-media-grid"></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://mastodon.social/@johra/113951862513279711"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2025-02-05T14:57:13.372Z" itemprop="datePublished">14:57 - Wed 05 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-113934702527798738" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://mas.to/@rhazn" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://files.mastodon.social/cache/accounts/avatars/109/524/093/685/460/542/original/a1b93eabd94e24ff.jpg" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@rhazn@mas.to</p>philip</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p>That's a wrap of <a href="https://mas.to/tags/FOSDEM" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FOSDEM</span></a> for me, saw lots of great talks. If you have time to watch only two, consider <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">fosdem.org/2025/schedule/event</span><span class="invisible">/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/</span></a> by <span class="h-card" translate="no"><a href="https://mastodon.social/@Edent" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>Edent</span></a></span> and <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-4233-privacy-first-architecture-alternatives-to-gdpr-popup-and-local-first/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">fosdem.org/2025/schedule/event</span><span class="invisible">/fosdem-2025-4233-privacy-first-architecture-alternatives-to-gdpr-popup-and-local-first/</span></a> by <span class="h-card" translate="no"><a href="https://mastodon.social/@sitnik_en" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>sitnik_en</span></a></span>. I found them inspiring for being a good human and I learned something new in both 🤩.</p><div class="social-embed-media-grid"></div><a href="https://fosdem.org/2025/schedule/event/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app/" class="social-embed-card"><div class="social-embed-media-grid"><img src="data:image/webp;base64,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" alt="" class="social-embed-media"></div><br>FOSDEM 2025 - Lessons learned Open Sourcing the UK's Covid Tracing App<br><br></a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://mas.to/@rhazn/113934702505117565"><span aria-label="2 likes" class="social-embed-meta">❤️ 2</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="2 reposts" class="social-embed-meta">🔁 2</span><time datetime="2025-02-02T14:13:12.000Z" itemprop="datePublished">14:13 - Sun 02 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-113934618437636519" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://mastodon.social/@simon_lucy" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://files.mastodon.social/accounts/avatars/108/194/513/977/756/967/original/7fda7cc9a1191850.png" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@simon_lucy@mastodon.social</p>Simon Lucy</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p>An excellent talk and performance by <span class="h-card" translate="no"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> on open sourcing the NHS COVID app at <a href="https://mastodon.social/tags/fosdem2025" class="mention hashtag" rel="tag">#<span>fosdem2025</span></a> <a href="https://mastodon.social/tags/StreamingFosdem" class="mention hashtag" rel="tag">#<span>StreamingFosdem</span></a></p><div class="social-embed-media-grid"></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://mastodon.social/@simon_lucy/113934618437636519"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2025-02-02T13:51:49.661Z" itemprop="datePublished">13:51 - Sun 02 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-1886050273983950978" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/CoolSWEng" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRgIDAABXRUJQVlA4IPYCAADwDQCdASowADAAPq1GmUmmI6IhMdzMAMAViWQArDLi1J/m/MBzFSCbqvqvgXVjxAu1d+OVnwR41PAPwqmrv16hlZ+xsHljV2FSwR1Wm+3sW6dElopfqxW920bDqkPE6YNrcpkzym7A7QF6nBL0c/fWtTmRsggmyWAA/vZ1eHmIt0nBShe/tIm4axUvW2VQGkP9aCrkqc//zmAL94UHBVmAnv//mXu1Jwak6B6soam1cF5LrEv07g/7w75l/kkexH8k+I70u+GSPYX3tCnhTICQP2PWpmBXsPgpQMkHCcew2o+AF/jDykJGoQhNUPRyzkOhhGmxXO2GT3Yim1sweMTcvMijcROCcAX2ogWn03pQFto3w8/scaIL+i1nbqKFWDepUYlRoPAXEkdqaMFALVDmGY55mpQevSmV33MbCAvU3o371gl34M4QY7xP1GJs+6kuuTR47hM5xoZHFagv+EcFuR7Yd37obhb636GxuRZLAHpoMsDqmUihp9JUgKz/9Be+IQ4ozKnsdu9O6cFniF6XrQ9e9rdce0wgyavKMFCQRUJI+MQngO5iD2B6il9vqkDXngfRPhd6aU3Q/RDEDQx0Y8tB+YmxybmPGkEzTE/XJemR47pMiIAZX0cROiomtEUAGzZ2N1NSMVGvLNBAJPrxkinpkhhzIzhbaFpXKg6RIL5yYgsEhrXeI05MsTRg3KxHMT0uGY17gvS8y8RAyGCyS28DXm/jVmZz+zBGf+z57PtzOWya/PKrfcyXfsm7L6aWnXdJY3lWsN316j2aHa5R+jJxc81heEf9dwXRVp2crPm7llIZ+jbgR2MumRT/WK911lbVqA3FX9T1ctgUGCugocojQeUfCR9tO75TfjkqdREbciYVzR8ci/UHNPYe+RTUav9gOTnyt/YW/RugRmVcaBqd+GpbOjMTBXFtd89ZWUuY4xz1RklKYTN9tNWprCjes1N4ioTddt3jHhb+swUjhgStjc+x/nZC4PVAEn+GieDkuAAAAA==" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Diomidis Spinellis</p>@CoolSWEng</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Pragmatic insights (with which the audience's majority also agreed) by Terence Eden from open sourcing UK's COVID tracing app at <a href="https://twitter.com/hashtag/FOSDEM">#FOSDEM</a>: Used MIT license because other departments already used it and it was short and easy for lawyers and the public to understand,</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/CoolSWEng/status/1886050273983950978"><span aria-label="6 likes" class="social-embed-meta">❤️ 6</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2025-02-02T13:53:21.000Z" itemprop="datePublished">13:53 - Sun 02 February 2025</time></a></footer></blockquote>

<blockquote class="social-embed" id="social-embed-1886050279239323945" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-1886050276659880324" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/CoolSWEng" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRgIDAABXRUJQVlA4IPYCAADwDQCdASowADAAPq1GmUmmI6IhMdzMAMAViWQArDLi1J/m/MBzFSCbqvqvgXVjxAu1d+OVnwR41PAPwqmrv16hlZ+xsHljV2FSwR1Wm+3sW6dElopfqxW920bDqkPE6YNrcpkzym7A7QF6nBL0c/fWtTmRsggmyWAA/vZ1eHmIt0nBShe/tIm4axUvW2VQGkP9aCrkqc//zmAL94UHBVmAnv//mXu1Jwak6B6soam1cF5LrEv07g/7w75l/kkexH8k+I70u+GSPYX3tCnhTICQP2PWpmBXsPgpQMkHCcew2o+AF/jDykJGoQhNUPRyzkOhhGmxXO2GT3Yim1sweMTcvMijcROCcAX2ogWn03pQFto3w8/scaIL+i1nbqKFWDepUYlRoPAXEkdqaMFALVDmGY55mpQevSmV33MbCAvU3o371gl34M4QY7xP1GJs+6kuuTR47hM5xoZHFagv+EcFuR7Yd37obhb636GxuRZLAHpoMsDqmUihp9JUgKz/9Be+IQ4ozKnsdu9O6cFniF6XrQ9e9rdce0wgyavKMFCQRUJI+MQngO5iD2B6il9vqkDXngfRPhd6aU3Q/RDEDQx0Y8tB+YmxybmPGkEzTE/XJemR47pMiIAZX0cROiomtEUAGzZ2N1NSMVGvLNBAJPrxkinpkhhzIzhbaFpXKg6RIL5yYgsEhrXeI05MsTRg3KxHMT0uGY17gvS8y8RAyGCyS28DXm/jVmZz+zBGf+z57PtzOWya/PKrfcyXfsm7L6aWnXdJY3lWsN316j2aHa5R+jJxc81heEf9dwXRVp2crPm7llIZ+jbgR2MumRT/WK911lbVqA3FX9T1ctgUGCugocojQeUfCR9tO75TfjkqdREbciYVzR8ci/UHNPYe+RTUav9gOTnyt/YW/RugRmVcaBqd+GpbOjMTBXFtd89ZWUuY4xz1RklKYTN9tNWprCjes1N4ioTddt3jHhb+swUjhgStjc+x/nZC4PVAEn+GieDkuAAAAA==" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Diomidis Spinellis</p>@CoolSWEng</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/CoolSWEng/status/1886050273983950978">Replying to @CoolSWEng</a></small>adopt Apple's contact tracing API, host on GitHub, squash individual commits between releases (security &amp; privacy).<br><br>Also: open source at the day of release rather than from the beginning (reduce noise).</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/CoolSWEng/status/1886050276659880324"><span aria-label="2 likes" class="social-embed-meta">❤️ 2</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="2 reposts" class="social-embed-meta">🔁 2</span><time datetime="2025-02-02T13:53:21.000Z" itemprop="datePublished">13:53 - Sun 02 February 2025</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/CoolSWEng" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRgIDAABXRUJQVlA4IPYCAADwDQCdASowADAAPq1GmUmmI6IhMdzMAMAViWQArDLi1J/m/MBzFSCbqvqvgXVjxAu1d+OVnwR41PAPwqmrv16hlZ+xsHljV2FSwR1Wm+3sW6dElopfqxW920bDqkPE6YNrcpkzym7A7QF6nBL0c/fWtTmRsggmyWAA/vZ1eHmIt0nBShe/tIm4axUvW2VQGkP9aCrkqc//zmAL94UHBVmAnv//mXu1Jwak6B6soam1cF5LrEv07g/7w75l/kkexH8k+I70u+GSPYX3tCnhTICQP2PWpmBXsPgpQMkHCcew2o+AF/jDykJGoQhNUPRyzkOhhGmxXO2GT3Yim1sweMTcvMijcROCcAX2ogWn03pQFto3w8/scaIL+i1nbqKFWDepUYlRoPAXEkdqaMFALVDmGY55mpQevSmV33MbCAvU3o371gl34M4QY7xP1GJs+6kuuTR47hM5xoZHFagv+EcFuR7Yd37obhb636GxuRZLAHpoMsDqmUihp9JUgKz/9Be+IQ4ozKnsdu9O6cFniF6XrQ9e9rdce0wgyavKMFCQRUJI+MQngO5iD2B6il9vqkDXngfRPhd6aU3Q/RDEDQx0Y8tB+YmxybmPGkEzTE/XJemR47pMiIAZX0cROiomtEUAGzZ2N1NSMVGvLNBAJPrxkinpkhhzIzhbaFpXKg6RIL5yYgsEhrXeI05MsTRg3KxHMT0uGY17gvS8y8RAyGCyS28DXm/jVmZz+zBGf+z57PtzOWya/PKrfcyXfsm7L6aWnXdJY3lWsN316j2aHa5R+jJxc81heEf9dwXRVp2crPm7llIZ+jbgR2MumRT/WK911lbVqA3FX9T1ctgUGCugocojQeUfCR9tO75TfjkqdREbciYVzR8ci/UHNPYe+RTUav9gOTnyt/YW/RugRmVcaBqd+GpbOjMTBXFtd89ZWUuY4xz1RklKYTN9tNWprCjes1N4ioTddt3jHhb+swUjhgStjc+x/nZC4PVAEn+GieDkuAAAAA==" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Diomidis Spinellis</p>@CoolSWEng</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/CoolSWEng/status/1886050276659880324">Replying to @CoolSWEng</a></small>Other lessons: bring-in professional moderators for discussions, be careful about controversial code comments, create a foundation for closing-down the system, open source is about community.</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/CoolSWEng/status/1886050279239323945"><span aria-label="2 likes" class="social-embed-meta">❤️ 2</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2025-02-02T13:53:22.000Z" itemprop="datePublished">13:53 - Sun 02 February 2025</time></a></footer></blockquote>

<p><a href="https://bsky.app/profile/pewari.bsky.social/post/3lh7choz7oc2k"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/pewari-fs8.png" alt="Best talk at #FOSDEM this year was from 
@edent.tel
 - I hadn’t realised quite how much shit was flung at the Covid Tracing App team. Really engaging talk with great use of slides and humour." width="1440" height="312" class="aligncenter size-full wp-image-57996"></a></p>

<p><a href="https://bsky.app/profile/hallny.bsky.social/post/3lh76ewbfws23"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/hallny.webp" alt="@edent.tel
 Loved your talk! Reading of the devs comment in the voice of conspi was brilliant 😂

One to recommend when the video is out." width="1440" height="993" class="aligncenter size-full wp-image-57997"></a></p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:heckle">
<p>Except for one weird heckler who shouted out something incomprehensible.&nbsp;<a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fnref:heckle" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:what">
<p>Well, one guy came up afterwards and asked "What exactly <em>is</em> Covid? Can you explain?" I politely suggested he speak to a medical professional.&nbsp;<a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fnref:what" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:👕">
<p>But, yes, still wearing the same t-shirt!&nbsp;<a href="https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/#fnref:👕" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=55573&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/02/talking-contact-tracing-at-fosdem/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		<enclosure url="https://video.fosdem.org/2025/janson/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app.mp4" length="0" type="video/mp4" />
<enclosure url="https://video.fosdem.org/2025/janson/fosdem-2025-4411-lessons-learned-open-sourcing-the-uk-s-covid-tracing-app.av1.webm" length="0" type="video/webm" />

			</item>
		<item>
		<title><![CDATA[Working around an old and buggy HTML Tidy in PHP]]></title>
		<link>https://shkspr.mobi/blog/2024/08/working-around-and-old-and-buggy-html-tidy-in-php/</link>
					<comments>https://shkspr.mobi/blog/2024/08/working-around-and-old-and-buggy-html-tidy-in-php/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 17 Aug 2024 11:34:50 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=51208</guid>

					<description><![CDATA[Dan Q very kindly shared his script to make WordPress do good HTML. But I couldn&#039;t get it working.  Looking at the HTML it was spitting out, the meta generator said it was HTML Tidy version 5.6.0.  That&#039;s quite old!  I confirmed this by running:  echo tidy_get_release();   Which spat out 2017/11/25. Aha!  There are a few bugs in this version of HTML Tidy, some of which are fixed in later…]]></description>
										<content:encoded><![CDATA[<p>Dan Q very kindly shared his <a href="https://github.com/Dan-Q/wp-htmltidy-hack-demo">script to make WordPress do good HTML</a>. But I couldn't get it working.</p>

<p>Looking at the HTML it was spitting out, the meta generator said it was HTML Tidy version 5.6.0.  That's quite old!  I confirmed this by running:</p>

<pre><code class="language-php">echo tidy_get_release();
</code></pre>

<p>Which spat out <code>2017/11/25</code>. Aha!</p>

<p>There are a few bugs in this version of HTML Tidy, some of which are fixed in later versions.</p>

<p>Here's how to fix them.</p>

<p><a href="https://www.php.net/manual/en/tidy.examples.basic.php#107877">Auto Indent doesn't work</a>. This is fixed by manually specifying <code>"indent" =&gt; 2</code></p>

<p><a href="https://github.com/htacg/tidy-html5/issues/1107">Indent with tabs doesn't work</a>.  So I told it to indent with 8 spaces using <code>"indent-spaces"       =&gt; 8,</code></p>

<p>Then I used a regex (<a href="https://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not">naughty!</a>) to replace 8 spaces with a tab.</p>

<pre><code class="language-php">$tidy = preg_replace( '/        /', "\t", $tidy );
</code></pre>

<p>Older versions of Tidy <a href="https://github.com/htacg/tidy-html5/issues/1097">don't support newer HTML elements like <code>&lt;search&gt;</code></a>.  This can be fixed with <code>"new-blocklevel-tags" =&gt; "search",</code></p>

<p><a href="https://github.com/htacg/tidy-html5/issues/895">The <code>&lt;summary&gt;</code> element isn't closed properly</a>. This was an annoying one. I had to manually rewrite my HTML to remove an <code>&lt;h2&gt;</code> element from inside the summary.</p>

<p>Although not really a bug, I like to have HTML comments on a newline.</p>

<pre><code class="language-php">$tidy = preg_replace( '/&gt;&lt;!--/', "&gt;\n&lt;!--", $tidy );
</code></pre>

<p>Sadly, <a href="https://github.com/htacg/tidy-html5/releases">the last release of HTML Tidy was back in 2021</a>. While some of the above bugs are fixed, <a href="https://github.com/htacg/tidy-html5/issues">there are more piling up</a>.</p>

<p>So I'll continue with these workarounds for now. Hit "view source" and tell me what you think!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=51208&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/08/working-around-and-old-and-buggy-html-tidy-in-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Can you trust ProtonApps.com?]]></title>
		<link>https://shkspr.mobi/blog/2024/03/can-you-trust-protonapps-com/</link>
					<comments>https://shkspr.mobi/blog/2024/03/can-you-trust-protonapps-com/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 11 Mar 2024 12:34:41 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[Proton]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49864</guid>

					<description><![CDATA[I&#039;ve recently signed up to the privacy-preserving service Proton.  All the email, calendar, drive, VPN, and other services seem to hang off the proton.me domain.  I wanted to download the Android apps to my phone - without using the Google Play Store.  The VPN app is on F-Droid but none of the others are. So, because I&#039;m lazy, I Googled &#34;Download Proton Mail&#34;.  I landed on…]]></description>
										<content:encoded><![CDATA[<p>I've recently signed up to the privacy-preserving service <a href="https://proton.me/">Proton</a>.  All the email, calendar, drive, VPN, and other services seem to hang off the proton.<strong>me</strong> domain.</p>

<p>I wanted to download the Android apps to my phone - without using the Google Play Store.  The <a href="https://f-droid.org/en/packages/ch.protonvpn.android/">VPN app is on F-Droid</a> but none of the others are. So, because I'm lazy, I Googled "Download Proton Mail".</p>

<p>I landed on <a href="https://protonapps.com/"></a><a href="https://protonapps.com/">https://protonapps.com/</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/03/protonapps-fs8.png" alt="Screenshot of the ProtonApps page." width="929" height="593" class="aligncenter size-full wp-image-49867">

<p>It <em>looks</em> like a genuine site. But is it?  .me is signed by Let's Encrypt, whereas .com is signed by Amazon. There is <strong>no link</strong> from Proton.me to ProtonApps.com.  There's nothing I can find that shows it is genuine.</p>

<p>But, let's assume for the moment, that it is legitimate.  What happens when you try to download the Android apps from it?</p>

<ul>
<li><p>The <a href="https://protonapps.com/protonmail-android">email app page</a> links to the <a href="https://github.com/ProtonMail/proton-mail-android/releases">ProtonMail repository on GitHub</a> - there's no link from the .me site to their GitHub. But I'm reasonably sure that's them.</p></li>
<li><p>The <a href="https://protonapps.com/protonvpn-android">VPN app page</a> leads to a <a href="https://github.com/ProtonVPN/android-app/releases"><em>different</em> GitHub organisation</a>! I don't know why they're different organisation. It isn't linked to from the the .me site, nor from the <a href="https://protonvpn.com/"></a><a href="https://protonvpn.com/">https://protonvpn.com/</a> site (yet another domain!)</p></li>
<li><p>The <a href="https://protonapps.com/protoncalendar-android">calendar app page</a> links to <a href="https://protonmail.com/download/CalendarAndroid/ProtonCalendar-Android.apk">ProtonMail.<strong>com</strong></a> - is that them?  The .com redirects to the .me, but anyone can set up a redirect.</p></li>
<li><p>The <a href="https://protonapps.com/protondrive-android">drive app page</a> and the <a href="https://protonapps.com/protonpass-android">Pass app page</a> do both link to Proton.me!</p></li>
</ul>

<p>So there are multiple domains - Proton.me, ProtonApps.com, ProtonMail.com, ProtonVPN.com - and there are at least 2 different GitHub organisations.</p>

<p>How do you tell which ones are legitimate? I signed up and paid on the .me page - so I have high confidence in it.</p>

<p>The <a href="https://mastodon.social/@protonmail/112053863641320051">official Proton Mastodon account</a> says the ProtonApps.com site is legitimate (and the Mastodon account is verified by the .me site).  But you can't expect users to chase through a dozen different pages and enquire on social media just to verify which page is safe.</p>

<p>This is my plea to <em>all</em> developers - simplify your customer-facing infrastructure to make your domains consistent &amp; trustworthy.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49864&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/03/can-you-trust-protonapps-com/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Seven Levels of Open Source]]></title>
		<link>https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/</link>
					<comments>https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 08 Feb 2024 12:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=48953</guid>

					<description><![CDATA[This isn&#039;t an original idea, but I needed to get it out of my brain.  There are many different definitions of what &#34;Open Source&#34;. We can have a lovely argument over a pint as to whether GPLv3 is too open or if a licence which hasn&#039;t been validated by the OSI counts. But, more fundamentally, I think Open Source roughly falls into seven levels.  These aren&#039;t in any particular order of importance.…]]></description>
										<content:encoded><![CDATA[<p>This isn't an original idea, but I needed to get it out of my brain.</p>

<p>There are many different definitions of what "Open Source". We can have a lovely argument over a pint as to whether GPLv3 is <em>too</em> open or if a licence which hasn't been validated by the OSI counts. But, more fundamentally, I think Open Source roughly falls into <a href="https://www.nme.com/news/music/paul-mccartney-12-1188735">seven levels</a>.</p>

<p>These aren't in any particular order of importance. And feel free to argue in the comments if you think I've radically misunderstood something.</p>

<h2 id="1-look-but-dont-touch"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#1-look-but-dont-touch">1. Look but don't touch</a></h2>

<p>This is the bare minimum. The source is "open" in that you can look at it, examine it, and possibly even learn from it. But that' is <em>it</em>.</p>

<p>You can't redistribute it. You can't edit it. You can't build on it.  But you can see it.</p>

<h2 id="2-do-what-thou-wilt"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#2-do-what-thou-wilt">2. Do What Thou Wilt</a></h2>

<p>The source is yours to do with as you please.  You can distribute it, build on it, print it out, eat it, use it in a weapons system.  There are no restriction.</p>

<p>Have fun!</p>

<h2 id="3-do-as-you-would-be-done-by"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#3-do-as-you-would-be-done-by">3. Do As You Would Be Done By</a></h2>

<p>There is ponderous legal language, but it all adds up to one thing - you have to comply with our requirements.</p>

<p>Perhaps they say "only redistribute with this licence" or maybe "you must make everything this touches open".  Either way, you aren't quite as free to do what you want.</p>

<p>Have fun - but don't piss off anyone.</p>

<h2 id="4-id-rather-you-didnt"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#4-id-rather-you-didnt">4. I'd rather you didn't</a></h2>

<p>These are less often seen, but becoming more common.  You are free to do anything you want with this code... unless you're someone we don't like.</p>

<p>Some code says you can't use it for military purposes, others restrict its usage if you're going to be racist with it, and some say it can only be used by a particular class of people.</p>

<p>These licences are controversial. Openness means this is for everybody.  Sure, no one likes the thought of their code being in a bomb. But your agents of imperial oppression are my freedom fighters.</p>

<h2 id="5-contributors-welcome"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#5-contributors-welcome">5. Contributors Welcome</a></h2>

<p>We're on GitHub! We actively want you to participate!  Not only is the code open - but so is the community!  Anyone with an IDE and an idea is welcome to pitch in!</p>

<p>Come play!</p>

<h2 id="6-blessed-contributors"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#6-blessed-contributors">6. Blessed Contributors</a></h2>

<p>We're open! But only certain people are allowed to contribute.  All others will be shunned.</p>

<p>This is the model Google takes with Android - fully open, but good luck getting even a comma changed.  There's also a popular open source project which requires its contributors to be religious!</p>

<p>This is open; but only for the chosen few.</p>

<h2 id="7-the-future"><a href="https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/#7-the-future">7. The Future</a></h2>

<p>There is something coming that you and I cannot understand. Deep in the darkest trenches of the Internet comes a new breed of hacker. Their social norms diverge from ours. They aren't beholden to the old ways and care not for our pettifogging traditions.</p>

<p>The are building a new form of Open Source. Something that reflects the needs and concerns of their generation, rather than the tired problems of ours. Old farts will harrumph and grumble about how it isn't <em>proper</em> Open Source - and moan that the youngling don't fear their elders any more.</p>

<p>But, make no mistake, the future is coming and it doesn't need your old-fashioned opinions.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=48953&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/02/the-seven-levels-of-open-source/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The (theoretical) risks of open sourcing (imaginary) Government LLMs]]></title>
		<link>https://shkspr.mobi/blog/2024/01/the-theoretical-risks-of-open-sourcing-imaginary-government-llms/</link>
					<comments>https://shkspr.mobi/blog/2024/01/the-theoretical-risks-of-open-sourcing-imaginary-government-llms/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 23 Jan 2024 12:34:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49367</guid>

					<description><![CDATA[Last week I attended an unofficial discussion group about the future of AI in Government. As well as the crypto-bores who have suddenly pivoted their &#34;expertise&#34; into AI, there were lots of thoughtful suggestions about what AI could do well at a state level.  Some of it is trivial - spell check is AI. Some of it is a dystopian hellscape of racist algorithms being confidently incorrect.  The…]]></description>
										<content:encoded><![CDATA[<p>Last week I attended an <em>unofficial</em> discussion group about the future of AI in Government. As well as the crypto-bores who have suddenly pivoted their "expertise" into AI, there were lots of thoughtful suggestions about what AI could do well at a state level.</p>

<p>Some of it is trivial - spell check is AI. Some of it is a dystopian <a href="https://shkspr.mobi/blog/2020/08/book-review-race-after-technology-abolitionist-tools-for-the-new-jim-code/">hellscape of racist algorithms</a> being confidently incorrect.  The reality is likely to be somewhat prosaic.</p>

<p>Although I'm no longer a civil servant, I still enjoy going to these events and saying "But what about open source, eh?" - then I stroke my beard in a wise-looking fashion and help facilitate the conversation.</p>

<p>For many years, my role in Cabinet Office and DHSC was to shout the words "OPEN SOURCE" at anyone who would listen. Then patiently demolish their arguments when they refused to release something on GitHub.  But I find myself somewhat troubled when it comes to AI models.</p>

<p>Let's take a theoretical example. Suppose the Government trains an AI to assess appeals to, say, benefits sanctions. An AI is fed the text of all the written appeals and told which ones are successful and which ones aren't. It can now read a new appeal and decide whether it is successful of not.  Now let's open source it.</p>

<p><mark>For the hard of thinking - this is not something that exists. It is not official policy. It was not proposed as a solution. I am using it as a made-up example.</mark></p>

<p>What does it mean to open source an AI?  Generally speaking, it means releasing some or all of the following.</p>

<ol>
<li>The training data.</li>
<li>The weights assigned to the training data.</li>
<li>The final model.</li>
</ol>

<p>I think it is fairly obvious that releasing the training data of this hypothetical example is a bad idea. Appellants have not consented to having their correspondence published. It may contain deeply personal and private information.  Releasing this data is <em>not</em> ethical.</p>

<p>Releasing how the data is trained is probably fine. It would allow observers to see what biases the model has encoded in it. Other departments could use the model to train their own AI. So I (cautiously) support the opening of that code.</p>

<p>But training weights <em>without</em> the associated data is kind of useless. Without the data, you're unable to understand what's going on behind the scenes.</p>

<p>Lastly, the complete model. Again, I find this problematic. There are two main risks. The first is that someone can repeatedly test the model to find weaknesses. I don't believe in "security through obscurity" - but allowing someone to play "Groundhog Day" with a model is risky. It could allow someone to hone their answers to guarantee that their appeal would be successful. Or, more worryingly, it could find a lexical exploit which can <a href="https://shkspr.mobi/blog/2017/03/how-to-hypnotise-an-artificial-intelligence/">hypnotise the AI into producing unwanted results</a>.</p>

<p>Even if that weren't a concern, it appears some AI models can be coerced into regurgitating their training data - as discovered by the New York Times:</p>

<blockquote>
<p>  The complaint cited examples of OpenAI’s GPT-4 spitting out large portions of news articles from the Times ... It also cited outputs from Bing Chat that it said included verbatim excerpts from Times articles. 
</p><p>  <a href="https://arstechnica.com/tech-policy/2023/12/ny-times-sues-open-ai-microsoft-over-copyright-infringement/">NY Times copyright suit wants OpenAI to delete all GPT instances</a>
</p></blockquote>

<p>Even if a Government department didn't release its training data - those data are still embedded in the model and it may be able to reconstruct them.  So any sensitive or personal training data <em>might</em> be able to be reconstructed.</p>

<p><mark>Once again, to be crystal clear, the system I am describing doesn't exist. No one has commissioned it. This is a thought experiment by people who do not work in Government.</mark></p>

<p>So where does that leave us?</p>

<p>I am 100% a staunch advocate for open source. Public Money means Public Code. Make Things Open It Makes Things Better.</p>

<p>But...</p>

<p>It seems clear to me that releasing training data is probably not possible - unless the AI is trained on data which is entirely safe / legal to make public.</p>

<p>Without the training data, the <em>way</em> it is trained is of limited use. It should <em>probably</em> be opened, but would be hard to assess.</p>

<p>The final model can only be safely released if the training data is safe to release.</p>

<h2 id="what-next"><a href="https://shkspr.mobi/blog/2024/01/the-theoretical-risks-of-open-sourcing-imaginary-government-llms/#what-next">What next?</a></h2>

<p>I'll admit, this troubles me.</p>

<p>I want to live in a world where the data and algorithms which rule the world are transparent to us. There will be plenty of AI systems which <em>can</em> and <em>should</em> be completely open - nose-to-tail.  But there will be algorithms trained on sensitive data - and I can't see any safe, legal, or moral way of opening them.</p>

<p>Again, I want to stress that this particular example is a figment of my imagination.  But at some point this will have to be reckoned with.</p>

<p>I'm glad this isn't my problem any more!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49367&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/01/the-theoretical-risks-of-open-sourcing-imaginary-government-llms/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Keeping a side project alive with t-shirts and cash]]></title>
		<link>https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/</link>
					<comments>https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 20 Jul 2023 11:34:29 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenBenches]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46293</guid>

					<description><![CDATA[My wife and I run a side project called OpenBenches.org - it is a fun little crowd-sourced memorial bench site.  It&#039;s mostly fun, except when the bills come due!  Most hobby sites and side projects don&#039;t cost a lot to run. Lots of services have generous free tiers to (ab)use, and they can pay well in &#34;exposure&#34;. But OpenBenches is reaching a tipping point where it is slowly overwhelming us. …]]></description>
										<content:encoded><![CDATA[<p>My wife and I run a side project called <a href="https://OpenBenches.org">OpenBenches.org</a> - it is a fun little crowd-sourced memorial bench site.  It's <em>mostly</em> fun, except when the bills come due!</p>

<p>Most hobby sites and side projects don't cost a lot to run. Lots of services have generous free tiers to (ab)use, and they can pay well in "exposure". But OpenBenches is reaching a tipping point where it is slowly overwhelming us.</p>

<p>We've now got nearly 300GB of photos - which means our storage and bandwidth costs are on the high side. Yes, we could losslessly transcode them all (which takes up compute resources) or store them in Glacier (which involves transit costs) and get a better CDN (as opposed to using free tiers). Similarly, we do a lot of forward and reverse geo-coding, OCR, map drawing, and other little bits and pieces.</p>

<p>Basically, assuming we value our time at zero, OpenBenches costs us about £250 per year.</p>

<p>Now, that's not extravagant, but it's also not nothing. So, how do we make it cost neutral to us?</p>

<p>Having a paywall is the antithesis of open data.</p>

<p>Placing adverts next to memorials and expressions of grief feels grim, so we've decided against advertising.</p>

<p>We don't think that a VC is going to invest a million bucks into this. But, hey, if someone out there wants to make us an offer...</p>

<p>That leaves us with merchandising and sponsorship.</p>

<h2 id="merch"><a href="https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/#merch">Merch!</a></h2>

<p>We've <a href="https://openbenches.myspreadshop.co.uk/">opened a shop on Spreadshirt</a>.</p>

<p><a href="https://openbenches.myspreadshop.co.uk/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2023/07/merch.jpg" alt="A selection of hats, t-shirts, mugs, and waterbottles with our logo." width="1024" height="652" class="aligncenter size-full wp-image-46294"></a></p>

<p>Spreadshirt is pretty easy to use. Upload a graphic, select your products, launch. Each t-shirt brings us in about £4 after VAT. So far we've sold half a dozen things. Early days, but promising. It's a fairly low effort way to (hopefully) get in a trickle of cash.</p>

<h2 id="sponsorship"><a href="https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/#sponsorship">Sponsorship</a></h2>

<p>Perhaps you have enough t-shirts from random websites? Wouldn't you prefer a shout out on the website and unending gratitude?</p>

<p>We've set up <a href="https://github.com/sponsors/openbenches">GitHub sponsors</a> but, infuriatingly, it only accepts donations in USD - which means hefty foreign-exchange fees. Luckily, <a href="https://opencollective.com/openbenches">Open Collective</a> accepts payment in GBP which is a lot easier to manage.</p>

<p>Between the two of them, we've had about £175 so far this year. Again, a promising start.</p>

<h2 id="other-plans"><a href="https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/#other-plans">Other plans</a></h2>

<p>I'm not (para)social enough to do a Patreon. I don't want a job of delivering monthly newsletters, livestreaming my coding, or keeping the hype train running. I don't want <a href="https://kk.org/thetechnium/1000-true-fans/">1,000 True Fans</a>.  In short, we're not trying to make a profit out of this.</p>

<p>We just want to keep the site running for the foreseeable future and, hopefully, pay a bit forward to the brilliant Open Source projects we're built on.</p>

<p>For now we'll stick with those and see how the year plays out. If you have any clever ideas for how to make the site more self-sustaining, please let us know.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46293&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/keeping-a-side-project-alive-with-t-shirts-and-cash/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Discord is not Documentation]]></title>
		<link>https://shkspr.mobi/blog/2023/07/discord-is-not-documentation/</link>
					<comments>https://shkspr.mobi/blog/2023/07/discord-is-not-documentation/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 16 Jul 2023 11:34:04 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[watchy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46240</guid>

					<description><![CDATA[I&#039;m going to be slightly contrarian and say that I like Discord. It&#039;s great to be able to get real-time help on a problem. And it is fun to see, again in real-time, what other people are working on and struggling with.  In truth, Discord is no harder to sign up to than Slack, Matrix, Gitter, IRC, or whatever. And of course Open Source projects will follow the maxim of &#34;go where your audience…]]></description>
										<content:encoded><![CDATA[<p>I'm going to be slightly contrarian and say that I <em>like</em> Discord. It's great to be able to get real-time help on a problem. And it is fun to see, again in real-time, what other people are working on and struggling with.</p>

<p>In truth, Discord is no harder to sign up to than Slack, Matrix, Gitter, IRC, or whatever. And of course Open Source projects will follow the maxim of "go where your audience are". There's no point posting everything to MySpace when everyone's already on Facebook.</p>

<p>Do I care that Discord isn't open source? Well, kinda. But I can open it in Firefox and it works just fine.</p>

<p>Discord is perfect for <em>ephemeral</em> communications.</p>

<p>But it is not a fucking substitute for documentation!</p>

<p>I'm currently getting started, and increasingly frustrated, with the <a href="https://watchy.sqfmi.com/">Watchy</a> development platform. They've effectively said "here's a barebones guide to setting it up - anything else, ask on Discord" - and it fucking sucks.</p>

<p>There's no API documentation - I have to scroll through a million messages to find anything.</p>

<p>I can't use search, because people don't know how to thread. So I can see questions but not replies.</p>

<p>When I do find replies, it's hard to know how relevant they are.  A typical Discord chat looks like:</p>

<ul>
<li>Alice: What's the command to go fullscreen?</li>
<li>Bob: Anyone know how I irrevocably format my disk without confirmation?</li>
<li>Carol: Oh, yeah, it's easy. Just pass the <code>-f</code> flag.</li>
</ul>

<p>Errrr...</p>

<p>And then you get the people who get snippy with newbie for asking a question which is frequently seen!  So infuriating.</p>

<p>I'm not necessarily advocating for <a href="https://documentation.divio.com/">the Four-Document Model</a> - which has <a href="https://www.hillelwayne.com/post/problems-with-the-4doc-model/">some critics</a> - but I just don't understand why wouldn't at least collate all of the common questions and put the answers in one place.</p>

<p>Look, writing a FAQ is probably not the right way to approach comprehensive documentation. But if you can't even be bothered to do that, perhaps you shouldn't be releasing a product in the first place?</p>

<p>/rant</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46240&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/discord-is-not-documentation/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Review: AntiSpam Bee WordPress Plugin ★★★★☆]]></title>
		<link>https://shkspr.mobi/blog/2023/06/review-antispam-bee-wordpress-plugin/</link>
					<comments>https://shkspr.mobi/blog/2023/06/review-antispam-bee-wordpress-plugin/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 19 Jun 2023 11:34:28 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45797</guid>

					<description><![CDATA[Someone recently complained that using JetPack&#039;s Akismet anti-spam plugin wasn&#039;t very privacy friendly.  So, because I take every minor complaint as a personal rebuke, I decided to switch to AntiSpam Bee - an open source and local antispam solution.  And... it&#039;s pretty good! There is the occasional false negative - but not significantly worse than JetPack.  Most of the false negatives are from…]]></description>
										<content:encoded><![CDATA[<p>Someone recently complained that using JetPack's Akismet anti-spam plugin <a href="https://mastodon.social/@kraftner/110354503779454638">wasn't very privacy friendly</a>.</p>

<p>So, because I take every minor complaint as a personal rebuke, I decided to switch to <a href="https://wordpress.org/plugins/antispam-bee/">AntiSpam Bee</a> - an open source and <em>local</em> antispam solution.</p>

<p>And... it's pretty good! There is the occasional false negative - but not significantly worse than JetPack.</p>

<p>Most of the false negatives are from non-English language comments:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/05/Japanese-lovedoll-spam.png" alt="Comment with Japanese text. The email address is for an emergency locksmith, the link goes to a sex-doll emporium." width="777" height="212" class="aligncenter size-full wp-image-45837">

<p>There are settings so that you can reject comments which aren't in your native language. But <a href="https://antispambee.pluginkollektiv.org/documentation/#allow-comments-only-in-certain-language">that comes with privacy implications</a>.</p>

<p>I didn't spot any false positives - but I get hundreds of spam comments per day.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/Spam-Per-Day-fs8.png" alt="Screenshot showing a graph of spam comments per day." width="556" height="238" class="aligncenter size-full wp-image-45930">

<p>It's a little more fiddly than Akismet. But, as a power user, I appreciate that. It's also less reliant on a centralised service - who knows what weird AI grab Akismet will do with all the comments it moderates?</p>

<p>You can <a href="https://github.com/pluginkollektiv/antispam-bee">grab the source code from GitHub</a></p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45797&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/06/review-antispam-bee-wordpress-plugin/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Do open source licences cover the Ship of Theseus?]]></title>
		<link>https://shkspr.mobi/blog/2023/06/do-open-source-licences-cover-the-ship-of-theseus/</link>
					<comments>https://shkspr.mobi/blog/2023/06/do-open-source-licences-cover-the-ship-of-theseus/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 09 Jun 2023 11:34:19 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45934</guid>

					<description><![CDATA[I recently downloaded a single-page HTML template for a project I was working on. I wanted a good-looking scaffold to help me getting running quickly. The code had an attribution licence which I was happy to comply with.  I ended up removing about a whole bunch of the HTML that I didn&#039;t need. That also allowed me to remove the majority of the CSS which was unused. I deleted all the JavaScript. I…]]></description>
										<content:encoded><![CDATA[<p>I recently downloaded a single-page HTML template for a project I was working on. I wanted a good-looking scaffold to help me getting running quickly. The code had an attribution licence which I was happy to comply with.</p>

<p>I ended up removing about a whole bunch of the HTML that I didn't need. That also allowed me to remove the majority of the CSS which was unused. I deleted all the JavaScript. I added some semantic markup and updated a few of the outdated coding conventions. Newer CSS was also added to support modern features. And I replaced all the default images and fonts with something I preferred.</p>

<p>In total, 75% of the HTML was rewritten and 61% of the CSS had changed.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/Changed-fs8.png" alt="Screenshot from GitLab showing 2 files with 167 additions and 562 deletions." width="811" height="252" class="aligncenter size-full wp-image-45935">

<p>Is there enough of the original files left to warrant attribution according to the licence terms?</p>

<p>Let's take it to an extreme. Suppose I <em>really</em> loved the background colour used by a piece of free software. If all I copied was <code>body { background: #6082B6; }</code> would that require attribution?</p>

<p>I think there's a reasonable argument that <a href="https://www.lexisnexis.co.uk/legal/glossary/de-minimis"><i lang="la">de minimis non curat lex</i></a> - the law cares not for small things. Is anyone <em>seriously</em> going to argue that I stole half a dozen bytes? Could they prove that I copied that single line from them? Would anyone care?</p>

<p>And yet, morally, I feel that I <em>should</em> give credit.</p>

<p>Much like the apocryphal sculptor, <a href="https://quoteinvestigator.com/2014/06/22/chip-away/">I have removed everything that wasn't necessary</a>. But I think the poor sod who lugged the block of marble deserves acknowledgment.</p>

<p>At what point do you say "this has changed so much that it is no longer necessary to abide by the original licence"?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45934&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/06/do-open-source-licences-cover-the-ship-of-theseus/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Can you follow your own getting started guide?]]></title>
		<link>https://shkspr.mobi/blog/2023/06/can-you-follow-your-own-getting-started-guide/</link>
					<comments>https://shkspr.mobi/blog/2023/06/can-you-follow-your-own-getting-started-guide/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 07 Jun 2023 11:34:55 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45808</guid>

					<description><![CDATA[I was trying to install a new open source project and was having a hell of a time. Nothing seemed to be working despite me following the tutorial to the letter. I was getting the most bizarre error messages and was on the verge of quitting to become a goat farmer, when I threw one last dice... I read the tutorial.  Previously I&#039;d been copying and pasting the instructions as I went.  One step said …]]></description>
										<content:encoded><![CDATA[<p>I was trying to install a new open source project and was having a <em>hell</em> of a time. Nothing seemed to be working despite me following the tutorial to the letter. I was getting the most bizarre error messages and was on the verge of quitting to become a goat farmer, when I threw one last dice... I <em>read</em> the tutorial.</p>

<p>Previously I'd been copying and pasting the instructions as I went.  One step said "Make sure the bauxite configuration command is set to true" but the code provided said <code>./configure --magic M --more-magic QxZp --bauxite false --turnip green -z</code></p>

<p>And there is was! I changed a false to a true and everything started working.  Being the good netizen that I am, I sent a pull request to fix the documentation.</p>

<p>And then it struck me.</p>

<p>There's no CI/CD for documentation.</p>

<p>Oh, don't get me wrong. Things like OpenAPI can auto-generate documentation based on your code - but it can't write a "getting started" tutorial.</p>

<p>Looking back through the documentaion I'd encountered, it was clear that the tutorial had been wrong for a few years. It was a small project, so it wasn't hugely surprising that hordes of users hadn't complained. But, to me, it points to a general problem. I find this issue <em>all the bloody time!</em>  Whether it is a big established project or a little indie gadget - I follow a tutorial only to find out it is missing a step, or assumes I have a library installed, or hasn't been updated for the latest version.</p>

<p>This is my plea to all developers. Spin up a fresh machine - without anything installed other than the base OS - and see if you can follow your own tutorial.</p>

<p>If you can't, rewrite it <em>step-by-step</em> until it works.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45808&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/06/can-you-follow-your-own-getting-started-guide/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[So, farewell then COVID-19 App]]></title>
		<link>https://shkspr.mobi/blog/2023/04/so-farewell-then-covid-19-app/</link>
					<comments>https://shkspr.mobi/blog/2023/04/so-farewell-then-covid-19-app/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 27 Apr 2023 11:34:29 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[covid19]]></category>
		<category><![CDATA[nhsx]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45453</guid>

					<description><![CDATA[Today is a day of mixed emotions for me.  The UK&#039;s COVID tracing app is finally closing.    The app was, by any reasonable measure, a success.  A team of experts at the Pandemic Sciences Institute at the University of Oxford and Department of Statistics at the University of Warwick estimate the NHS COVID-19 app prevented around 1 million cases, 44,000 hospitalisations and 9,600 deaths during its…]]></description>
										<content:encoded><![CDATA[<p>Today is a day of mixed emotions for me.  The UK's COVID tracing app is finally closing.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/03/covid-fs8.png" alt="Pop up notification saying the NHS covid app is shutting down." width="540" class="aligncenter size-full wp-image-45454">

<p>The app was, by any reasonable measure, a success.</p>

<blockquote><p>A team of experts at the Pandemic Sciences Institute at the University of Oxford and Department of Statistics at the University of Warwick estimate the NHS COVID-19 app prevented around 1 million cases, 44,000 hospitalisations and 9,600 deaths during its first year.</p>

<p><a href="https://www.ox.ac.uk/news/2023-02-22-nhs-covid-19-app-saved-estimated-10000-lives-its-first-year-research-finds">Source</a></p></blockquote>

<p>Earlier this year, I recorded a short video about what it was like working on the app and making it Open Source.</p>

<iframe title="Terence Eden - State of Open: The UK 2023" width="620" height="349" src="https://www.youtube.com/embed/rh1XrYEWsI0?list=PL0U2cL1JGPZfdho3HYArJ-8Kwj2sVF6Lm" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>I kept a detailed diary of my experiences working at NHSX. It was a surreal time - I went from one day casually presenting PowerPoints to the next day urgently briefing Chief Scientific Advisors. I worked longer and harder than I ever had before.</p>

<p>I had prominent members of the commentariat accuse me of being an overpaid, Eton-educated, management consultant (wrong on all three counts!) I was told I was helping usher in mass surveillance while, simultaneously, being criticised for not getting the app out sooner. I had to tell some rather strong personalities that what they wanted wasn't technically possible - and then work out why what <em>should</em> have worked wasn't working.</p>

<p>Memorably, someone told me that open-sourcing the app was irresponsible because Open Source was just <a href="https://en.wikipedia.org/wiki/Shareware">ShareWare</a>! Yeah, I don't understand that either...</p>

<p>Our work was mentioned on national - and international - broadcasts. It was literally front-page news.</p>

<p>And now... it's over.</p>

<p>Have we beaten COVID? It'll probably never be eradicated, but <a href="https://coronavirus.data.gov.uk">the data are looking hopeful</a>.</p>

<p>I'm so proud of what the whole team accomplished. I'm grateful that I had a chance to help build something so effective <em>and</em> <a href="https://web.archive.org/web/20220430132932/https://www.nhsx.nhs.uk/blogs/code-behind-nhs-covid-19-app/">make it open source</a>.</p>

<p>I know it is a little weird to think of an app like this as a start-up. But that's how it felt at the time. And I know all good products are eventually obsolete. But I'm still a little sad that it's over.</p>

<p>So tonight I'll be drinking a toast to the app - and all those who worked so hard on it.</p>

<p>All <a href="https://www.nhs.uk/live-well/alcohol-advice/">within the NHS's alcohol consumption guidance</a> of course!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45453&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/04/so-farewell-then-covid-19-app/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
