<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Alexandre Dulaunoy - adulau - Home Page</title>
    <description>Personal webpage of Alexandre Dulaunoy - from information security to open source and art</description>
    <link>https://www.foo.be/</link>
    <atom:link href="https://www.foo.be/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 16 Aug 2026 08:48:34 +0200</pubDate>
    <lastBuildDate>Sun, 16 Aug 2026 08:48:34 +0200</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
      <item>
        <title>How mature is this repository? My long quest for open-source software metrics</title>
        <description>&lt;h1 id=&quot;how-mature-is-this-repository-my-long-quest-for-open-source-software-metrics&quot;&gt;How mature is this repository? My long quest for open-source software metrics&lt;/h1&gt;

&lt;p&gt;For years, I have been looking for a reasonable answer to a deceptively simple question:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;When I discover an open-source software project for the first time, how can I estimate whether it is mature, healthy and usable?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Usually the first encounter is a repository on GitHub, GitLab, Codeberg or another forge. And usually we start looking at the obvious things.&lt;/p&gt;

&lt;p&gt;How many stars does it have? When was the last commit? How many contributors are there? Are there recent releases? Are issues being answered?&lt;/p&gt;

&lt;p&gt;Those indicators are useful. But none of them answers the question.&lt;/p&gt;

&lt;p&gt;A project with 20,000 GitHub stars can be abandoned. A project with 20 stars can be a boring but essential component maintained for fifteen years. A project with hundreds of commits per week may simply have a lot of automated dependency updates. A project with very few commits might actually be finished and extremely stable.&lt;/p&gt;

&lt;p&gt;Even GitHub describes stars primarily as a way to bookmark repositories and, at best, as an approximate indication of interest.&lt;sup id=&quot;fnref:github-stars&quot;&gt;&lt;a href=&quot;#fn:github-stars&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;So the problem is not the absence of metrics.&lt;/p&gt;

&lt;p&gt;The problem is that there are &lt;strong&gt;far too many metrics&lt;/strong&gt;, they measure different things, and combining them into something meaningful is surprisingly difficult.&lt;/p&gt;

&lt;h2 id=&quot;metrics-everywhere&quot;&gt;Metrics everywhere&lt;/h2&gt;

&lt;p&gt;There has been a lot of excellent work in this area.&lt;/p&gt;

&lt;p&gt;CHAOSS develops metrics and metric models specifically for understanding open-source community health and sustainability.&lt;sup id=&quot;fnref:chaoss&quot;&gt;&lt;a href=&quot;#fn:chaoss&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Its catalogue contains metrics ranging from release frequency and time to first response to Contributor Absence Factor, organizational diversity, project burnout, documentation accessibility and licensing.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Apereo OSS Health and Sustainability Rubric&lt;/strong&gt; takes another approach and groups more than forty criteria into broad areas covering Community, Governance, Development, Support and Security/Privacy.&lt;sup id=&quot;fnref:apereo&quot;&gt;&lt;a href=&quot;#fn:apereo&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The Apache Software Foundation has its own &lt;strong&gt;Project Maturity Model&lt;/strong&gt;, covering code, licensing, releases, quality, community, consensus building, independence and governance.&lt;sup id=&quot;fnref:apache&quot;&gt;&lt;a href=&quot;#fn:apache&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;For security there is the &lt;strong&gt;OpenSSF Scorecard&lt;/strong&gt;, which automatically evaluates a repository against security-related heuristics.&lt;sup id=&quot;fnref:scorecard&quot;&gt;&lt;a href=&quot;#fn:scorecard&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; OpenSSF also maintains its Best Practices Badge programme, which combines automatically verifiable information with information supplied by maintainers.&lt;sup id=&quot;fnref:best-practices&quot;&gt;&lt;a href=&quot;#fn:best-practices&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;There is even an OpenSSF &lt;strong&gt;Criticality Score&lt;/strong&gt;, which tries to estimate how important an open-source project is using signals such as project age, contributor count, organizations involved, commit frequency, releases, issue activity and dependency information.&lt;sup id=&quot;fnref:criticality&quot;&gt;&lt;a href=&quot;#fn:criticality&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Academic research reaches the same conclusion from another direction: OSS health is inherently multidimensional. One literature review identified more than one hundred characteristics distributed over fifteen themes.&lt;sup id=&quot;fnref:oss-health-paper&quot;&gt;&lt;a href=&quot;#fn:oss-health-paper&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;So we have metrics.&lt;/p&gt;

&lt;p&gt;Lots of metrics.&lt;/p&gt;

&lt;p&gt;What we don’t really have is a simple answer when encountering an unknown repository for the first time.&lt;/p&gt;

&lt;h2 id=&quot;the-trl-idea&quot;&gt;The TRL idea&lt;/h2&gt;

&lt;p&gt;For many years, in various discussions around open-source projects, we came back to the idea of reusing &lt;strong&gt;Technology Readiness Levels&lt;/strong&gt;, or TRLs.&lt;/p&gt;

&lt;p&gt;TRL is the familiar scale from &lt;strong&gt;1 to 9&lt;/strong&gt;, first developed in the NASA context and later reused by ESA, the European Commission and many research programmes.&lt;sup id=&quot;fnref:nasa-trl&quot;&gt;&lt;a href=&quot;#fn:nasa-trl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&quot;fnref:esa-trl&quot;&gt;&lt;a href=&quot;#fn:esa-trl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Anyone involved in European research projects has probably encountered TRLs in one proposal or another. Horizon Europe continues to use the concept to describe the maturity expected from research and innovation activities.&lt;sup id=&quot;fnref:horizon&quot;&gt;&lt;a href=&quot;#fn:horizon&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Of course, applying traditional TRL directly to open-source software doesn’t really work.&lt;/p&gt;

&lt;p&gt;A Git repository cannot tell us whether a technology has been demonstrated in an operational environment. GitHub cannot reliably tell us how many hospitals, companies, CERTs, universities or spacecraft are actually using a piece of software.&lt;/p&gt;

&lt;p&gt;But I still like one property of TRL:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;everybody understands a progression from 1 to 9.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So perhaps we could reuse the &lt;em&gt;idea&lt;/em&gt; of TRL without pretending that repository metrics are equivalent to NASA’s technology assessment.&lt;/p&gt;

&lt;p&gt;This became &lt;strong&gt;OSSTRL — Open Source Software Technology Readiness Level&lt;/strong&gt;.&lt;sup id=&quot;fnref:osstrl&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;osstrl&quot;&gt;OSSTRL&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/adulau/osstrl&quot;&gt;OSSTRL&lt;/a&gt; is an experiment.&lt;/p&gt;

&lt;p&gt;Its goal is to estimate an &lt;strong&gt;open-source software readiness level from 1 to 9 using evidence that can be automatically collected from a GitHub repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The current prototype borrows heavily from the structure of the Apereo OSS Health and Sustainability Rubric and groups evidence into:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Community;&lt;/li&gt;
  &lt;li&gt;Governance;&lt;/li&gt;
  &lt;li&gt;Development;&lt;/li&gt;
  &lt;li&gt;Support;&lt;/li&gt;
  &lt;li&gt;Security and Privacy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It collects things such as repository age, contributors, activity, releases, documentation, governance files, CI, tests, security policies and responsiveness.&lt;/p&gt;

&lt;p&gt;Those individual observations produce a weighted evidence score, which is mapped to an OSSTRL level.&lt;/p&gt;

&lt;p&gt;But there are two important twists.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;coverage/confidence is reported separately from the score&lt;/strong&gt;. If something cannot be measured from GitHub, it should not silently become a zero.&lt;/p&gt;

&lt;p&gt;Second, there are &lt;strong&gt;readiness gates&lt;/strong&gt;. A repository cannot reach a high level merely by collecting enough cheap points. For example, higher OSSTRL levels progressively expect evidence such as active development, releases, several contributors, governance, a security policy, CI and tests.&lt;sup id=&quot;fnref:osstrl:1&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;This is deliberately imperfect.&lt;/p&gt;

&lt;p&gt;And that’s actually part of the experiment.&lt;/p&gt;

&lt;h2 id=&quot;what-can-we-measure&quot;&gt;What can we measure?&lt;/h2&gt;

&lt;p&gt;While working on OSSTRL, I started compiling the metrics that &lt;em&gt;could&lt;/em&gt; be useful when evaluating an open-source project.&lt;/p&gt;

&lt;p&gt;The following catalogue is intentionally broad. Some metrics overlap. Some are good indicators, some are terrible indicators when used alone, and some are almost impossible to automate correctly.&lt;/p&gt;

&lt;p&gt;I use three rough classes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Automatable&lt;/strong&gt; — normally obtainable from a forge, repository, package ecosystem or automated analysis.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Partially automatable&lt;/strong&gt; — useful evidence can be collected automatically, but interpretation is required.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Human/external evidence&lt;/strong&gt; — usually requires maintainers, users or external verification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These categories are intentionally approximate. Even an apparently simple automated metric can become ambiguous once different development models, mirrors, bots or external infrastructure enter the picture.&lt;/p&gt;

&lt;h3 id=&quot;repository-identity-and-discoverability&quot;&gt;Repository identity and discoverability&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Repository age&lt;/strong&gt; — time since repository creation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Public accessibility&lt;/strong&gt; — whether the authoritative source repository is publicly accessible.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Archived status&lt;/strong&gt; — whether the repository is explicitly archived.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] README presence&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] README completeness&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Project description present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Homepage/project website configured&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Repository topics/tags&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Documentation directory present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Documentation discoverability&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Documentation usability&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Documentation accessibility&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Installation instructions present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Developer setup instructions present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Examples/tutorials present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] API documentation artifacts&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CHANGELOG/history present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CONTRIBUTING file present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Code of Conduct present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Issue templates present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pull-request templates present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SECURITY policy present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Governance documentation present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Maintainer list present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CODEOWNERS present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Roadmap present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Funding metadata present&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub itself exposes a community-profile API based on several of these repository artefacts, such as the presence of a README, licence, Code of Conduct and contribution documentation.&lt;sup id=&quot;fnref:github-community&quot;&gt;&lt;a href=&quot;#fn:github-community&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;These metrics are useful because they are easy to collect. They are also dangerous because the existence of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GOVERNANCE.md&lt;/code&gt; does not prove that governance works, just as the existence of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SECURITY.md&lt;/code&gt; does not prove that vulnerabilities are handled properly.&lt;/p&gt;

&lt;h3 id=&quot;popularity-visibility-and-adoption&quot;&gt;Popularity, visibility and adoption&lt;/h3&gt;

&lt;p&gt;This is the category where misleading metrics are especially common.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Star count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Star growth/velocity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Watchers/subscribers&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Fork count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Active forks&lt;/strong&gt; rather than merely created forks.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Repository clones&lt;/strong&gt; where statistics are available.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Unique cloners&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Repository page views&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Unique visitors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Package downloads&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of distinct package versions downloaded&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Container image pulls&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of downstream dependencies/dependents&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Reverse dependency count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Inclusion in operating-system distributions&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of integration projects&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of plugins/extensions built around the project&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of known installations&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of production installations&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of distinct user organisations&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of public references/case studies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Academic citations&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Conference/tutorial references&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] External community activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Project popularity/recommendability&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stars are therefore one metric among many, not a maturity level.&lt;sup id=&quot;fnref:github-stars:1&quot;&gt;&lt;a href=&quot;#fn:github-stars&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The same is true of downloads. A dependency may be downloaded millions of times because it is part of automated build systems, while another project may have a few hundred downloads but be deployed on extremely important infrastructure.&lt;/p&gt;

&lt;h3 id=&quot;development-activity&quot;&gt;Development activity&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time since last commit&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time since last push&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Commits during the last 30/90/365 days&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Commit frequency&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Active development days per month&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of active branches&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Branch lifecycle/duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Code churn&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Lines added/removed&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Burstiness of activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Development velocity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Periods without development activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Ratio of maintenance commits to feature development&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Ratio of human to bot activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Bot activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Technical forks&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Development activity trend&lt;/strong&gt; — growing, stable or declining.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Absolute activity is less useful than the &lt;strong&gt;trend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A project going from fifty active contributors to five tells us something very different from a project that has operated happily with five people for ten years.&lt;/p&gt;

&lt;p&gt;Even commit counts are not straightforward. A repository can contain generated code, automated dependency-update commits, vendored source or extremely granular commits. GitHub exposes many useful repository statistics through its APIs, but interpretation remains the difficult part.&lt;sup id=&quot;fnref:github-metrics&quot;&gt;&lt;a href=&quot;#fn:github-metrics&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;contributors-and-community-sustainability&quot;&gt;Contributors and community sustainability&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of unique contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of non-bot contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Active contributors during a defined period&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] New contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Returning contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Occasional contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Inactive contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Contributor growth rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Contributor retention&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Contributor churn&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Contribution frequency per contributor&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Distribution of contributions between contributors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Contributor Absence Factor&lt;/strong&gt; — the smallest number of contributors responsible for a given proportion of contributions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Elephant Factor&lt;/strong&gt; — organizational concentration of contributions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Bus factor&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Organizational diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Organizational influence&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Contributor location diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Time-zone diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Types of contributions&lt;/strong&gt; — code, documentation, issues, reviews, translations, community work, etc.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Labor investment&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Contributor recognition&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Contributor satisfaction&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Newcomer experience&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Psychological safety&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Project burnout&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Mentorship activity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Job opportunities around the project&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Sponsorship of contributors&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CHAOSS is particularly valuable here because it explicitly treats community health as more than commit counting.&lt;sup id=&quot;fnref:chaoss:1&quot;&gt;&lt;a href=&quot;#fn:chaoss&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;A repository with one thousand historical contributors may today be maintained by one exhausted person. Conversely, a highly focused library maintained by two people for twenty years may be perfectly sustainable.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;distribution&lt;/em&gt; and &lt;em&gt;evolution&lt;/em&gt; of contributions often tell us more than the absolute number.&lt;/p&gt;

&lt;h3 id=&quot;issues-and-bug-management&quot;&gt;Issues and bug management&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of open issues&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] New issues per period&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Closed issues per period&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Active issues&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Issue closure ratio&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Median issue age&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Age of oldest unresolved issue&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time to first response&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Issue response time distribution&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time to close&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Issue resolution duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Defect resolution duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Percentage of issues receiving a human response&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Backlog growth rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Stale issue ratio&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Label quality/consistency&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Ratio of bugs/features/questions&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] New contributors successfully closing issues&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Time to first response is particularly interesting because it can be measured fairly consistently and says something about whether someone arriving at the project will encounter an active community.&lt;/p&gt;

&lt;p&gt;CHAOSS includes response and closure metrics in its starter health model alongside release frequency and contributor-concentration metrics.&lt;sup id=&quot;fnref:chaoss-starter&quot;&gt;&lt;a href=&quot;#fn:chaoss-starter&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;15&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;But even here context matters. A project deliberately using a mailing list instead of GitHub Issues may look completely unresponsive if we only inspect the forge.&lt;/p&gt;

&lt;h3 id=&quot;pull-requests-and-code-review-practices&quot;&gt;Pull requests and code-review practices&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of change requests/pull requests&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Accepted pull requests&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Declined pull requests&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pull-request acceptance ratio&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pull-request closure ratio&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pull-request duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time to first review&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Review duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of review cycles&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Reviews per pull request&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Commits per pull request&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of distinct reviewers&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Self-merge rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Percentage of changes reviewed by another person&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Stale pull-request count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pull-request backlog trend&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Contribution attribution quality&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These metrics help distinguish “many contributors exist in Git history” from “there is still a functioning collaborative development process”.&lt;/p&gt;

&lt;p&gt;Review practices are also relevant from a security perspective. OpenSSF Scorecard, for example, includes code review as one of its checks because independent review reduces the risk associated with direct, unreviewed changes.&lt;sup id=&quot;fnref:scorecard-checks&quot;&gt;&lt;a href=&quot;#fn:scorecard-checks&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;16&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;releases&quot;&gt;Releases&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of stable releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Release frequency&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Time since latest release&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Releases during the last 12/24 months&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Median interval between releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Release cadence regularity/variance&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Presence of prereleases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Semantic-version-like tags&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Semantic Versioning compliance&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Release notes present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Changelog present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Backwards-incompatible changes documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Supported release branches&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Length of support window&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Security release latency&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Release artifacts available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Packages generated by CI/CD&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Cryptographically signed releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Checksums supplied for releases&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Release frequency should not automatically reward projects that release every Tuesday.&lt;/p&gt;

&lt;p&gt;A small, stable library might legitimately release once every few years. A web application exposed to an evolving ecosystem might need a much faster cadence.&lt;/p&gt;

&lt;p&gt;Regularity and recency are useful observations, but they should not automatically become universal requirements.&lt;/p&gt;

&lt;h3 id=&quot;code-and-engineering-quality&quot;&gt;Code and engineering quality&lt;/h3&gt;

&lt;p&gt;Repository metadata alone is insufficient here, but a local checkout and CI results provide many additional metrics.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Lines of code&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Programming-language distribution&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Code-change volume&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of tests&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Automated test suite present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Unit-test coverage&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Integration-test coverage&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] End-to-end tests present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CI configured&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CI success rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Build success rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Build duration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number/rate of flaky tests&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Static-analysis findings&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Linter warnings/errors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Type-checking coverage&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Cyclomatic complexity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Maintainability index&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Code duplication percentage&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Function/method size distribution&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Defect density&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Fuzzing present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Fuzzing coverage&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Performance benchmarks&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Performance regression rate&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Reproducible builds&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test coverage is itself a nice example of the general problem: 90% coverage tells us something, but it certainly doesn’t mean that 90% of the bugs have disappeared.&lt;/p&gt;

&lt;p&gt;Similarly, code complexity has very different meanings across languages and project types.&lt;/p&gt;

&lt;p&gt;These metrics are often useful for comparisons &lt;strong&gt;within the same project over time&lt;/strong&gt;, but are less reliable when ranking unrelated projects.&lt;/p&gt;

&lt;h3 id=&quot;dependencies-and-software-supply-chain&quot;&gt;Dependencies and software supply chain&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of direct dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of transitive dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Dependency depth&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Upstream dependency count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Outdated dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Dependency age / Libyears&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pinned build dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Automated dependency-update tooling&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Lock files present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SBOM present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SBOM published with releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SPDX document present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CycloneDX/SPDX validity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Build provenance present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] SLSA build level&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Reproducible build evidence&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Package published through CI&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Artifact signing/attestation&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The number of dependencies is not inherently good or bad. Reusing a well-maintained library is usually preferable to reimplementing it badly.&lt;/p&gt;

&lt;p&gt;But dependency depth, outdated components and supply-chain provenance can expose risks that do not appear in ordinary source-code activity metrics.&lt;/p&gt;

&lt;p&gt;SLSA is interesting here because it defines increasing guarantees around software build integrity and provenance.&lt;sup id=&quot;fnref:slsa&quot;&gt;&lt;a href=&quot;#fn:slsa&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;17&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;SPDX provides a standardized representation for software components, licences, copyrights and relationships, making some supply-chain and legal information machine readable.&lt;sup id=&quot;fnref:spdx&quot;&gt;&lt;a href=&quot;#fn:spdx&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;18&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;security&quot;&gt;Security&lt;/h3&gt;

&lt;p&gt;Security deserves its own set of metrics, and OpenSSF Scorecard already demonstrates how much can be checked automatically.&lt;sup id=&quot;fnref:scorecard:1&quot;&gt;&lt;a href=&quot;#fn:scorecard&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Candidate signals include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] SECURITY.md present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Clear vulnerability disclosure process&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Security contact available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Supported versions documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Disclosure timeline documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Security advisories published&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Known unfixed vulnerabilities&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Vulnerable dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Vulnerability backlog&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Mean vulnerability remediation time&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Time from disclosure to fixed release&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Dependency-update automation&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Static Application Security Testing (SAST)&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Fuzzing&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Secret scanning/security automation&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Branch protection&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Code review before merge&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Dangerous CI workflow patterns&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Workflow token permissions&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Pinned build dependencies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Checked-in binary artifacts&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Signed releases&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SBOM publication&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] OpenSSF Scorecard score&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] OpenSSF Best Practices level&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Independent security audit&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Security-review history&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Evidence of an operational CVD/PSIRT process&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The OpenSSF approach is useful precisely because it does &lt;strong&gt;not&lt;/strong&gt; reduce everything to “does &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SECURITY.md&lt;/code&gt; exist?”. Its checks include code review, dangerous workflows, dependency updates, fuzzing, pinned dependencies, SAST, token permissions, signed releases and known vulnerabilities, among other signals.&lt;sup id=&quot;fnref:scorecard-checks:1&quot;&gt;&lt;a href=&quot;#fn:scorecard-checks&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;16&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;OpenSSF’s Best Practices programme provides another useful model because it mixes observable properties with declarations from maintainers.&lt;sup id=&quot;fnref:best-practices:1&quot;&gt;&lt;a href=&quot;#fn:best-practices&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That hybrid model is probably unavoidable if we want to evaluate things such as actual vulnerability-handling practices.&lt;/p&gt;

&lt;h3 id=&quot;licensing-and-legal-clarity&quot;&gt;Licensing and legal clarity&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] License file present&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Recognized SPDX license identifier&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] OSI-approved license&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] License coverage across source files&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] REUSE specification compliance&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Copyright statements&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Copyright ownership clarity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Dependency-license compatibility&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] SPDX document available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Contributor License Agreement process&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Developer Certificate of Origin/sign-off process&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Third-party code attribution&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] NOTICE/attribution completeness&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A top-level &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LICENSE&lt;/code&gt; file is valuable evidence, but it is not sufficient to establish the legal status of every file and dependency.&lt;/p&gt;

&lt;p&gt;The REUSE specification is particularly interesting for automation because it aims to make copyright and licensing information unambiguous and machine readable on a per-file basis.&lt;sup id=&quot;fnref:reuse&quot;&gt;&lt;a href=&quot;#fn:reuse&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;19&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;SPDX provides another important building block by defining standardized identifiers and document formats for communicating software licensing and component information.&lt;sup id=&quot;fnref:spdx:1&quot;&gt;&lt;a href=&quot;#fn:spdx&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;18&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;governance&quot;&gt;Governance&lt;/h3&gt;

&lt;p&gt;This is where repository automation starts becoming much less reliable.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] GOVERNANCE document exists&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Maintainers documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] CODEOWNERS documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Decision-making process documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Contributor-to-maintainer promotion process&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Voting/consensus rules&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Conflict-resolution process&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Public decision records&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Communication transparency&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Roadmap publication&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Roadmap freshness&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Leadership diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Board/council diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Organizational concentration of decision power&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Organizational concentration of commits&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Organizational concentration of funding&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Maintainer succession plan&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Trademark/branding ownership clarity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Effective independence from a single vendor&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Whether documented governance corresponds to actual practice&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Apache maturity model is especially useful here because it makes explicit that mature open source is not just code: it includes licensing, releases, community, consensus building and independence.&lt;sup id=&quot;fnref:apache:1&quot;&gt;&lt;a href=&quot;#fn:apache&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Similarly, the Apereo rubric considers governance and management alongside development activity and technical characteristics.&lt;sup id=&quot;fnref:apereo:1&quot;&gt;&lt;a href=&quot;#fn:apereo&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;This matters because an apparently healthy repository can still be fragile if every important decision, credential and release key belongs to one individual.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Public issue tracker available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Discussion forum available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Chat/community channel available&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Support channel discoverability&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Response time to questions&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Question-resolution time&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Documentation freshness&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Backwards-compatibility policy&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Upgrade/migration documentation&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Supported versions&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Support lifecycle&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Commercial support availability&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Community support capacity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Training availability&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Support is another area where external context matters.&lt;/p&gt;

&lt;p&gt;A project can look inactive on GitHub while having a very active mailing list. Another project can have hundreds of unanswered GitHub issues but excellent commercial support for production users.&lt;/p&gt;

&lt;p&gt;The repository tells us something, but rarely everything.&lt;/p&gt;

&lt;h3 id=&quot;diversity-inclusion-and-community-culture&quot;&gt;Diversity, inclusion and community culture&lt;/h3&gt;

&lt;p&gt;These metrics are difficult to collect responsibly and should not simply be scraped from contributor profiles.&lt;/p&gt;

&lt;p&gt;CHAOSS nevertheless identifies useful areas to consider as part of the health of an open-source community.&lt;sup id=&quot;fnref:chaoss:2&quot;&gt;&lt;a href=&quot;#fn:chaoss&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Potential dimensions include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Inclusive leadership&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Psychological safety&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Newcomer experience&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Inclusive issue labels and terminology&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Chat-platform inclusivity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Meeting attendance&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Meeting accessibility&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Time-zone inclusion&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Event accessibility&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H/P] Event-location inclusivity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Family friendliness of events&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Conflict resolution and mediation&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Contributor satisfaction&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some things are worth measuring precisely because they &lt;strong&gt;cannot responsibly be inferred from GitHub usernames&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is an important boundary for an automated evaluator: the existence of data does not imply that collecting or inferring it is appropriate.&lt;/p&gt;

&lt;h3 id=&quot;funding-and-economic-sustainability&quot;&gt;Funding and economic sustainability&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] Funding mechanisms documented&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A/P] GitHub Sponsors/OpenCollective/etc. configured&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of sponsors&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Sponsor diversity&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Recurring versus one-off funding&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Funding concentration&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Funding runway&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of maintainers paid to work on the project&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Percentage of maintenance work funded&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Dependency on a single employer&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Ability to finance infrastructure/security work&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Availability of long-term institutional support&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A project maintained by one developer in their spare time and a project maintained by five full-time developers may have identical GitHub activity today while having very different sustainability risks tomorrow.&lt;/p&gt;

&lt;p&gt;Funding is therefore important, but difficult to reduce to a repository metric.&lt;/p&gt;

&lt;p&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/FUNDING.yml&lt;/code&gt; file tells us that a funding mechanism exists. It says almost nothing about whether the project is economically sustainable.&lt;/p&gt;

&lt;h3 id=&quot;ecosystem-importance-and-criticality&quot;&gt;Ecosystem importance and criticality&lt;/h3&gt;

&lt;p&gt;Health and importance are also different concepts.&lt;/p&gt;

&lt;p&gt;An abandoned project with millions of dependents may be extremely important while being spectacularly unhealthy.&lt;/p&gt;

&lt;p&gt;Potential criticality metrics include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[A] Number of downstream dependents&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Transitive dependency reach&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[A] Reverse dependency centrality&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of ecosystems distributing the software&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of operating-system distributions containing it&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of organizations contributing&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Number of organizations relying on it&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] OpenSSF Criticality Score&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[P] Dependency-network centrality&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Use in critical infrastructure&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Availability of realistic substitutes&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Cost of replacing the project&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The OpenSSF Criticality Score is an interesting existing experiment. It combines a range of repository signals into an estimate intended to help identify projects that may deserve particular attention.&lt;sup id=&quot;fnref:criticality:1&quot;&gt;&lt;a href=&quot;#fn:criticality&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;criticality still doesn’t mean quality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And it doesn’t mean maturity.&lt;/p&gt;

&lt;p&gt;This distinction matters when deciding where to invest security or maintenance resources. Sometimes the project we should care most about is precisely the unhealthy one because half the software ecosystem depends on it.&lt;/p&gt;

&lt;h3 id=&quot;operational-maturity--the-missing-evidence&quot;&gt;Operational maturity — the missing evidence&lt;/h3&gt;

&lt;p&gt;And finally we reach the information that a Git repository usually cannot tell us.&lt;/p&gt;

&lt;p&gt;This is also where traditional TRL and OSSTRL diverge most strongly.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of real-world deployments&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of production deployments&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Number of independent organisations operating the software&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Years of production use&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Deployment scale&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Availability/uptime history&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Performance under realistic workloads&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Scalability evidence&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Operational incident history&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Recovery procedures tested&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Upgrade procedures tested in production&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Long-term data migration experience&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Compatibility across supported environments&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] External security assessments&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Accessibility assessments&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] User references/case studies&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;[H] Long-term support commitments&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are precisely the signals required to make statements resembling traditional high TRL levels.&lt;/p&gt;

&lt;p&gt;NASA’s TRL concept progresses toward systems demonstrated and ultimately proven in operational conditions.&lt;sup id=&quot;fnref:nasa-trl:1&quot;&gt;&lt;a href=&quot;#fn:nasa-trl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;GitHub cannot magically provide that evidence.&lt;/p&gt;

&lt;p&gt;This is probably the single biggest limitation of any attempt to derive a TRL-like value purely from repository information.&lt;/p&gt;

&lt;h2 id=&quot;automation-is-the-difficult-part&quot;&gt;Automation is the difficult part&lt;/h2&gt;

&lt;p&gt;The interesting challenge is therefore not defining another list of metrics.&lt;/p&gt;

&lt;p&gt;The challenge is deciding:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;what can be collected automatically;&lt;/li&gt;
  &lt;li&gt;what can be collected reliably;&lt;/li&gt;
  &lt;li&gt;what actually means something;&lt;/li&gt;
  &lt;li&gt;how metrics should be normalized;&lt;/li&gt;
  &lt;li&gt;how metrics should be weighted;&lt;/li&gt;
  &lt;li&gt;what information should remain explicitly &lt;strong&gt;unknown&lt;/strong&gt;;&lt;/li&gt;
  &lt;li&gt;and what combinations of evidence are required before claiming a higher level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This last point is important.&lt;/p&gt;

&lt;p&gt;Imagine a repository with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;excellent documentation;&lt;/li&gt;
  &lt;li&gt;a Code of Conduct;&lt;/li&gt;
  &lt;li&gt;issue templates;&lt;/li&gt;
  &lt;li&gt;a governance document;&lt;/li&gt;
  &lt;li&gt;a security policy;&lt;/li&gt;
  &lt;li&gt;lots of GitHub stars;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;but no release for four years.&lt;/p&gt;

&lt;p&gt;A pure weighted average could still give it a surprisingly respectable score.&lt;/p&gt;

&lt;p&gt;That feels wrong.&lt;/p&gt;

&lt;p&gt;This is why OSSTRL uses &lt;strong&gt;gates&lt;/strong&gt; in addition to weights.&lt;sup id=&quot;fnref:osstrl:2&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Some evidence should be prerequisites rather than merely additional points.&lt;/p&gt;

&lt;p&gt;For example, documentation should help a project score better, but documentation alone should not compensate indefinitely for the absence of active development, tests, stable releases or a functioning contributor community.&lt;/p&gt;

&lt;h2 id=&quot;unknown-is-not-zero&quot;&gt;Unknown is not zero&lt;/h2&gt;

&lt;p&gt;Another lesson from this exercise is that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;missing evidence and negative evidence are different things.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If GitHub doesn’t show a privacy policy, that doesn’t necessarily mean the project has no privacy policy.&lt;/p&gt;

&lt;p&gt;If there are no GitHub Releases, the project might publish through Debian, PyPI, npm, Maven, its own infrastructure or somewhere else.&lt;/p&gt;

&lt;p&gt;If we cannot discover production deployments, that doesn’t mean there are none.&lt;/p&gt;

&lt;p&gt;If the project doesn’t use GitHub Issues, it may be using Bugzilla, Jira, GitLab, a mailing list or another support system.&lt;/p&gt;

&lt;p&gt;An automated system therefore needs at least three states:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;yes
no
unknown
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And probably a fourth one:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;not applicable
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This sounds trivial, but many scoring systems effectively collapse &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unknown&lt;/code&gt; into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;no&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That creates a strange incentive: projects that expose more information can actually appear worse because there is more evidence available to evaluate them.&lt;/p&gt;

&lt;p&gt;This is also why I think an OSSTRL report should always display &lt;strong&gt;coverage/confidence next to the score&lt;/strong&gt;.&lt;sup id=&quot;fnref:osstrl:3&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;OSSTRL 7/9
score: 76%
confidence/coverage: 42%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;means something very different from:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;OSSTRL 7/9
score: 76%
confidence/coverage: 100%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first result should encourage investigation rather than confidence.&lt;/p&gt;

&lt;h2 id=&quot;repository-evidence-and-asserted-evidence&quot;&gt;Repository evidence and asserted evidence&lt;/h2&gt;

&lt;p&gt;A possible next step for OSSTRL would be to use two separate evidence channels. The first one remains completely automatic:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GitHub/GitLab/forge
        |
        v
repository evidence
        |
        v
automatic OSSTRL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A second channel could allow maintainers to provide an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;osstrl.yaml&lt;/code&gt; file containing externally verifiable evidence:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;deployments&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;known_organisations&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;27&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;references&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://example.org/case-study&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;external_audit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;2026-05-12&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;report&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://example.org/audit.pdf&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;support&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;supported_versions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;6.x&quot;&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;operations&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;production_since&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2018&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The distinction would remain explicit:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;observed evidence&lt;/strong&gt; — collected independently from the repository or other public sources;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;asserted evidence&lt;/strong&gt; — provided by the project;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;verified external evidence&lt;/strong&gt; — assertions backed by independent references.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is similar in spirit to the distinction implicit in initiatives such as the OpenSSF Best Practices programme, where some evidence can be automatically checked while other properties must be declared by the project.&lt;sup id=&quot;fnref:best-practices:2&quot;&gt;&lt;a href=&quot;#fn:best-practices&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That could bring OSSTRL closer to actual technology readiness without pretending that a GitHub API contains information it simply doesn’t have. But the reality is many projects won’t create a YAML file with the ddetails and why I kept OSSTRL&lt;sup id=&quot;fnref:osstrl:4&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; as is.&lt;/p&gt;

&lt;h2 id=&quot;different-metrics-for-different-questions&quot;&gt;Different metrics for different questions&lt;/h2&gt;

&lt;p&gt;Another conclusion from this long quest is that the question itself matters.&lt;/p&gt;

&lt;p&gt;When somebody says:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Is this a good open-source project?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;they may actually be asking several different questions.&lt;/p&gt;

&lt;h3 id=&quot;is-it-alive&quot;&gt;Is it alive?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;recent development;&lt;/li&gt;
  &lt;li&gt;recent releases;&lt;/li&gt;
  &lt;li&gt;responsiveness;&lt;/li&gt;
  &lt;li&gt;contributor activity;&lt;/li&gt;
  &lt;li&gt;backlog evolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;is-it-mature&quot;&gt;Is it mature?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;age;&lt;/li&gt;
  &lt;li&gt;release history;&lt;/li&gt;
  &lt;li&gt;documentation;&lt;/li&gt;
  &lt;li&gt;testing;&lt;/li&gt;
  &lt;li&gt;governance;&lt;/li&gt;
  &lt;li&gt;compatibility practices;&lt;/li&gt;
  &lt;li&gt;operational references.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;is-it-sustainable&quot;&gt;Is it sustainable?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;contributor concentration;&lt;/li&gt;
  &lt;li&gt;organizational diversity;&lt;/li&gt;
  &lt;li&gt;funding;&lt;/li&gt;
  &lt;li&gt;maintainer turnover;&lt;/li&gt;
  &lt;li&gt;governance;&lt;/li&gt;
  &lt;li&gt;succession;&lt;/li&gt;
  &lt;li&gt;community growth and retention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;is-it-secure&quot;&gt;Is it secure?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;vulnerability disclosure;&lt;/li&gt;
  &lt;li&gt;dependency management;&lt;/li&gt;
  &lt;li&gt;security automation;&lt;/li&gt;
  &lt;li&gt;code review;&lt;/li&gt;
  &lt;li&gt;SAST;&lt;/li&gt;
  &lt;li&gt;fuzzing;&lt;/li&gt;
  &lt;li&gt;provenance;&lt;/li&gt;
  &lt;li&gt;release signing;&lt;/li&gt;
  &lt;li&gt;known vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenSSF Scorecard focuses deliberately on this particular dimension rather than claiming to measure complete project health.&lt;sup id=&quot;fnref:scorecard:2&quot;&gt;&lt;a href=&quot;#fn:scorecard&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;is-it-important&quot;&gt;Is it important?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;dependents;&lt;/li&gt;
  &lt;li&gt;deployments;&lt;/li&gt;
  &lt;li&gt;ecosystem centrality;&lt;/li&gt;
  &lt;li&gt;downstream usage;&lt;/li&gt;
  &lt;li&gt;organizational adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is closer to what OpenSSF Criticality Score attempts to estimate.&lt;sup id=&quot;fnref:criticality:2&quot;&gt;&lt;a href=&quot;#fn:criticality&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;is-it-open&quot;&gt;Is it open?&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;licensing;&lt;/li&gt;
  &lt;li&gt;public development;&lt;/li&gt;
  &lt;li&gt;contribution process;&lt;/li&gt;
  &lt;li&gt;governance;&lt;/li&gt;
  &lt;li&gt;decision transparency;&lt;/li&gt;
  &lt;li&gt;contributor independence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;is-it-ready-for-my-use-case&quot;&gt;Is it ready for my use case?&lt;/h3&gt;

&lt;p&gt;And this one is almost impossible to answer generically. A project can be perfectly mature and still be the wrong software for your requirements. This is why there is probably no meaningful universal ranking of all open-source projects.&lt;/p&gt;

&lt;h2 id=&quot;no-magic-score&quot;&gt;No magic score&lt;/h2&gt;

&lt;p&gt;I don’t think OSSTRL will ever provide an objectively correct answer.  And I don’t think it should. There is probably no universal formula where:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;42 contributors
+ 8300 stars
+ 93% test coverage
+ SECURITY.md
= mature open-source project
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Different software has different needs. Linux, SQLite, a Python library, a Kubernetes operator, a desktop application and a twenty-line Unix tool cannot reasonably be evaluated in exactly the same way.&lt;/p&gt;

&lt;p&gt;Metrics are observations. A score is an interpretation of those observations.&lt;/p&gt;

&lt;p&gt;This distinction is visible throughout the existing work on OSS health. CHAOSS provides a large collection of metrics and metric models rather than one universal health score.&lt;sup id=&quot;fnref:chaoss:3&quot;&gt;&lt;a href=&quot;#fn:chaoss&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Apache describes maturity as a collection of characteristics instead of a numerical ranking.&lt;sup id=&quot;fnref:apache:2&quot;&gt;&lt;a href=&quot;#fn:apache&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Apereo similarly evaluates a broad set of organizational, community and technical properties.&lt;sup id=&quot;fnref:apereo:2&quot;&gt;&lt;a href=&quot;#fn:apereo&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That is probably not accidental. OSSTRL&lt;sup id=&quot;fnref:osstrl:5&quot;&gt;&lt;a href=&quot;#fn:osstrl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; is therefore best understood as a &lt;strong&gt;first-pass maturity estimator&lt;/strong&gt;: something that can quickly inspect an unfamiliar repository, expose the evidence behind its result, and highlight where we need to look deeper.&lt;/p&gt;

&lt;p&gt;The real objective is not the number.&lt;/p&gt;

&lt;p&gt;The useful part is being able to say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;This project looks mature because of these observable facts, we could not verify these other facts, and these are the areas that deserve human investigation.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That, to me, is already much more useful than counting GitHub stars.&lt;/p&gt;

&lt;p&gt;And the quest continues.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:github-stars&quot;&gt;
      &lt;p&gt;&lt;strong&gt;GitHub — Starring repositories&lt;/strong&gt;. GitHub presents starring primarily as a mechanism for users to bookmark repositories and discover projects of interest. Star counts can therefore serve as an approximate signal of visibility or interest, but they do not directly measure active usage, production deployment, software quality, maintainability, security or sustainability. Stars are especially problematic when comparing projects from different ecosystems or age groups: an old developer tool, a fashionable JavaScript project and a deeply embedded infrastructure library can have completely different star dynamics. GitHub REST API documentation for starring: &lt;a href=&quot;https://docs.github.com/en/rest/activity/starring&quot;&gt;https://docs.github.com/en/rest/activity/starring&lt;/a&gt;. &lt;a href=&quot;#fnref:github-stars&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:github-stars:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:chaoss&quot;&gt;
      &lt;p&gt;&lt;strong&gt;CHAOSS — Community Health Analytics in Open Source Software&lt;/strong&gt;. CHAOSS is a Linux Foundation project developing open methodologies, metrics and metric models for understanding the health and sustainability of open-source communities. Its work covers technical activity as well as contributor behaviour, responsiveness, organizational diversity, governance, inclusion, risk, sustainability and ecosystem characteristics. Rather than defining one universal OSS health score, CHAOSS provides a large catalogue of individual metrics and combinations of metrics intended to answer particular questions. This makes CHAOSS a useful illustration of the central problem discussed in this post: open-source health is inherently multidimensional, and metrics only become meaningful when the question being asked is clear. See the CHAOSS overview of metrics and metric models at &lt;a href=&quot;https://www.chaoss.community/kb-metrics-and-metrics-models/&quot;&gt;https://www.chaoss.community/kb-metrics-and-metrics-models/&lt;/a&gt; and the complete catalogue at &lt;a href=&quot;https://www.chaoss.community/kbtopic/all-metrics/&quot;&gt;https://www.chaoss.community/kbtopic/all-metrics/&lt;/a&gt;. &lt;a href=&quot;#fnref:chaoss&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:chaoss:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:chaoss:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:chaoss:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:apereo&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Apereo Foundation — OSS Health and Sustainability Rubric&lt;/strong&gt;. The Apereo OSS Health and Sustainability Rubric provides a structured methodology for evaluating the health and long-term sustainability of open-source software projects. The rubric contains more than forty assessment criteria spanning areas including &lt;strong&gt;Community, Governance, Development, Support, and Security/Privacy&lt;/strong&gt;. Criteria include project maturity, contributor diversity, responsiveness, governance and management practices, roadmaps, funding, development activity, release consistency, licensing, integrations, documentation, backwards compatibility, support, security review and privacy practices. A particularly useful aspect of the rubric is that it mixes properties that can be inferred from repository evidence with properties that require knowledge about real implementations, organisations, funding and community practices. OSSTRL uses the Apereo rubric as a major source of inspiration but intentionally implements only the subset for which useful evidence can currently be gathered automatically; it does not claim to reproduce an official Apereo score. The rubric is maintained openly on GitHub and is licensed under Creative Commons Attribution 4.0: &lt;a href=&quot;https://github.com/apereo/oss-rubric&quot;&gt;https://github.com/apereo/oss-rubric&lt;/a&gt;. &lt;a href=&quot;#fnref:apereo&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:apereo:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:apereo:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:apache&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Apache Software Foundation — Apache Project Maturity Model&lt;/strong&gt;. The Apache Project Maturity Model describes a collection of characteristics commonly found in mature open-source projects. Rather than reducing maturity to a numerical score, the model examines code, licensing, releases, quality, community, consensus building and independence. Its emphasis on independence and consensus is particularly relevant because technical activity alone does not guarantee a sustainable open-source project: a repository can be technically excellent while remaining completely dependent on one individual or one company. The model therefore provides a useful complement to metrics based primarily on forge activity. &lt;a href=&quot;https://community.apache.org/apache-way/apache-project-maturity-model&quot;&gt;https://community.apache.org/apache-way/apache-project-maturity-model&lt;/a&gt;. &lt;a href=&quot;#fnref:apache&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:apache:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:apache:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:scorecard&quot;&gt;
      &lt;p&gt;&lt;strong&gt;OpenSSF — Scorecard&lt;/strong&gt;. OpenSSF Scorecard is an automated security-analysis project for open-source repositories. It evaluates repository configuration and development practices using a set of security-oriented checks and produces results that can be integrated into automated workflows. Scorecard checks cover areas such as code review, branch protection, dependency updates, dangerous CI workflows, fuzzing, licences, maintained status, packaging, pinned dependencies, static analysis, security policies, signed releases, token permissions and known vulnerabilities. Scorecard is an important precedent for OSSTRL because it demonstrates that meaningful repository properties can be estimated automatically while still acknowledging that each individual check is a heuristic rather than proof of complete security. OpenSSF project page: &lt;a href=&quot;https://openssf.org/projects/scorecard/&quot;&gt;https://openssf.org/projects/scorecard/&lt;/a&gt;. Source code: &lt;a href=&quot;https://github.com/ossf/scorecard&quot;&gt;https://github.com/ossf/scorecard&lt;/a&gt;. &lt;a href=&quot;#fnref:scorecard&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:scorecard:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:scorecard:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:best-practices&quot;&gt;
      &lt;p&gt;&lt;strong&gt;OpenSSF — Best Practices Badge Program&lt;/strong&gt;. The OpenSSF Best Practices Badge programme provides projects with a structured set of criteria covering secure development, basic quality practices, change control, vulnerability reporting, build processes and documentation. Unlike a purely automated repository scanner, the badge process combines information that can be checked automatically with declarations provided by project maintainers. This hybrid model is relevant to OSSTRL because many important maturity characteristics — production deployments, support commitments, security audits, governance effectiveness or accessibility practices — cannot be reliably inferred from repository metadata alone. &lt;a href=&quot;https://openssf.org/projects/best-practices-badge/&quot;&gt;https://openssf.org/projects/best-practices-badge/&lt;/a&gt;. &lt;a href=&quot;#fnref:best-practices&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:best-practices:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:best-practices:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:criticality&quot;&gt;
      &lt;p&gt;&lt;strong&gt;OpenSSF — Criticality Score&lt;/strong&gt;. Criticality Score is an OpenSSF project designed to estimate the relative criticality or influence of open-source projects. Its model combines observable signals such as project age, contributor activity, participating organisations, commits, releases, issue activity and dependency information. The important distinction is that criticality is not equivalent to project health, quality or maturity. A poorly maintained library can have very high criticality if a large software ecosystem depends upon it, while a healthy and mature specialised project may have little ecosystem-wide criticality. OpenSSF project page: &lt;a href=&quot;https://openssf.org/projects/criticality-score/&quot;&gt;https://openssf.org/projects/criticality-score/&lt;/a&gt;. Source implementation: &lt;a href=&quot;https://github.com/ossf/criticality_score&quot;&gt;https://github.com/ossf/criticality_score&lt;/a&gt;. &lt;a href=&quot;#fnref:criticality&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:criticality:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:criticality:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:oss-health-paper&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Johan Linåker, Efi Papatheocharous and Thomas Olsson — “How to characterize the health of an Open Source Software project? A snowball literature review of an emerging practice.”&lt;/strong&gt; Published in the proceedings of OpenSym 2022, this literature review surveys research and practitioner work on open-source project health and identifies more than one hundred characteristics grouped across fifteen themes. The paper is useful evidence for the idea that there is no single natural OSS health metric: technical development, community activity, governance, ecosystem relationships, sustainability and other dimensions all contribute different information. The large number of identified characteristics also highlights the practical problem faced by automated scoring systems — selecting a meaningful subset is as important as collecting the data itself. DOI: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.1145/3555051.3555067&lt;/code&gt;. &lt;a href=&quot;https://doi.org/10.1145/3555051.3555067&quot;&gt;https://doi.org/10.1145/3555051.3555067&lt;/a&gt;. &lt;a href=&quot;#fnref:oss-health-paper&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:nasa-trl&quot;&gt;
      &lt;p&gt;&lt;strong&gt;NASA — Technology Readiness Levels (TRLs)&lt;/strong&gt;. NASA uses a nine-level scale for describing the maturity of technology, beginning with basic principles and progressing through proof of concept, validation and demonstration toward technology that has been proven in successful operational use. TRLs originated in the NASA environment before spreading to other space agencies, governments and research-funding programmes. The distinction between repository maturity and actual operational demonstration is particularly important for OSSTRL: Git repository data can provide substantial evidence about software-development maturity, but cannot by itself establish the operational evidence expected at the upper end of a traditional TRL scale. NASA overview: &lt;a href=&quot;https://www.nasa.gov/directorates/somd/space-communications-navigation-program/technology-readiness-levels/&quot;&gt;https://www.nasa.gov/directorates/somd/space-communications-navigation-program/technology-readiness-levels/&lt;/a&gt;. &lt;a href=&quot;#fnref:nasa-trl&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:nasa-trl:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:esa-trl&quot;&gt;
      &lt;p&gt;&lt;strong&gt;European Space Agency — Technology Readiness Levels&lt;/strong&gt;. ESA uses the nine-level TRL scale as part of its technology-development activities and notes that the concept was originally proposed by NASA. In the ESA context, TRLs describe progression from fundamental technology principles through validation and demonstration toward flight-proven or operational technology. The widespread reuse of this common 1-to-9 vocabulary is one reason it provides an attractive conceptual model for an OSS maturity indicator, even though repository-based evidence and traditional TRL evidence are fundamentally different. ESA, &lt;em&gt;About ESA technology programmes&lt;/em&gt;: &lt;a href=&quot;https://www.esa.int/Enabling_Support/Space_Engineering_Technology/About_ESA_technology_programmes&quot;&gt;https://www.esa.int/Enabling_Support/Space_Engineering_Technology/About_ESA_technology_programmes&lt;/a&gt;. &lt;a href=&quot;#fnref:esa-trl&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:horizon&quot;&gt;
      &lt;p&gt;&lt;strong&gt;European Commission — Horizon Europe and Technology Readiness Levels&lt;/strong&gt;. TRLs are widely used in European Union research and innovation programmes to describe the expected maturity of technologies at different stages of funded activities. Calls may specify the expected TRL at the start or end of a project, distinguishing activities oriented toward research, validation, demonstration, piloting or deployment. This repeated use in European projects makes the 1-to-9 TRL vocabulary particularly familiar to organisations participating in EU-funded research. European Commission, &lt;em&gt;Horizon Europe work programmes&lt;/em&gt;: &lt;a href=&quot;https://research-and-innovation.ec.europa.eu/funding/funding-opportunities/funding-programmes-and-open-calls/horizon-europe/horizon-europe-work-programmes_en&quot;&gt;https://research-and-innovation.ec.europa.eu/funding/funding-opportunities/funding-programmes-and-open-calls/horizon-europe/horizon-europe-work-programmes_en&lt;/a&gt;. &lt;a href=&quot;#fnref:horizon&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:osstrl&quot;&gt;
      &lt;p&gt;&lt;strong&gt;OSSTRL — Open Source Software Technology Readiness Level&lt;/strong&gt;, Alexandre Dulaunoy et al. OSSTRL is an experimental open-source application that estimates a readiness/maturity level from 1 to 9 using evidence that can be gathered automatically from a GitHub repository. The current implementation evaluates repository evidence across Community, Governance, Development, Support and Security/Privacy. It produces both a weighted score and a separate confidence/coverage value, then applies readiness gates to prevent easily observable repository artefacts from being sufficient on their own for a high maturity level. The project explicitly presents the result as an estimate rather than a replacement for a formal Technology Readiness Level assessment. Source code, methodology and examples: &lt;a href=&quot;https://github.com/adulau/osstrl&quot;&gt;https://github.com/adulau/osstrl&lt;/a&gt;. &lt;a href=&quot;#fnref:osstrl&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:osstrl:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:osstrl:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:osstrl:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:osstrl:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;5&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:osstrl:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;6&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:github-community&quot;&gt;
      &lt;p&gt;&lt;strong&gt;GitHub — Community Profile Metrics&lt;/strong&gt;. GitHub’s community-profile API reports the presence of several common repository artefacts associated with an accessible open-source project, including files such as a README, licence, Code of Conduct, contributing guidelines, issue templates and pull-request templates. These signals are attractive for automated maturity assessment because they are cheap and consistent to collect. Their limitation is equally important: the presence of documentation proves only that an artefact exists. A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CODE_OF_CONDUCT.md&lt;/code&gt; file does not demonstrate a healthy community, just as a contribution guide does not prove that external contributions are actually welcomed. GitHub REST API documentation: &lt;a href=&quot;https://docs.github.com/en/rest/metrics/community&quot;&gt;https://docs.github.com/en/rest/metrics/community&lt;/a&gt;. &lt;a href=&quot;#fnref:github-community&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:github-metrics&quot;&gt;
      &lt;p&gt;&lt;strong&gt;GitHub — Repository Metrics API&lt;/strong&gt;. GitHub exposes APIs for several categories of repository statistics, including contributor statistics, commit activity, code-frequency statistics, participation, repository traffic and community information. These APIs make it technically straightforward to collect large quantities of data about public software projects. The difficulty lies in interpretation. Commit counts may include bots or generated changes, forks may never contain original work, and repository traffic may reflect temporary publicity rather than adoption. The availability of a metric should therefore not be confused with its suitability for a maturity score. &lt;a href=&quot;https://docs.github.com/en/rest/metrics&quot;&gt;https://docs.github.com/en/rest/metrics&lt;/a&gt;. &lt;a href=&quot;#fnref:github-metrics&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:chaoss-starter&quot;&gt;
      &lt;p&gt;&lt;strong&gt;CHAOSS — Starter Project Health Metrics Model&lt;/strong&gt;. The CHAOSS Starter Project Health Metrics Model provides a deliberately small collection of metrics intended to give newcomers an initial view of project health without requiring analysis of the entire CHAOSS catalogue. It includes complementary signals such as release frequency, time to first response, change-request closure ratio and Contributor Absence Factor. The model is relevant to OSSTRL because it demonstrates that even a first-pass assessment benefits from mixing different dimensions: development activity, responsiveness and concentration of contributions reveal different kinds of project risk. &lt;a href=&quot;https://www.chaoss.community/kb/metrics-model-starter-project-health/&quot;&gt;https://www.chaoss.community/kb/metrics-model-starter-project-health/&lt;/a&gt;. &lt;a href=&quot;#fnref:chaoss-starter&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:scorecard-checks&quot;&gt;
      &lt;p&gt;&lt;strong&gt;OpenSSF Scorecard — Check Documentation&lt;/strong&gt;. The Scorecard check documentation describes the individual security properties evaluated by the tool and the evidence used to estimate each property. Examples include &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Binary-Artifacts&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Branch-Protection&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CI-Tests&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Code-Review&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Contributors&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Dangerous-Workflow&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Dependency-Update-Tool&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Fuzzing&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;License&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Maintained&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Packaging&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pinned-Dependencies&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SAST&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Security-Policy&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signed-Releases&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Token-Permissions&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vulnerabilities&lt;/code&gt;. The documentation is also a useful example of the limitations inherent in automated metrics: a detectable repository practice is normally a proxy for a desirable security property rather than definitive evidence that the project is secure. &lt;a href=&quot;https://github.com/ossf/scorecard/blob/main/docs/checks.md&quot;&gt;https://github.com/ossf/scorecard/blob/main/docs/checks.md&lt;/a&gt;. &lt;a href=&quot;#fnref:scorecard-checks&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:scorecard-checks:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:slsa&quot;&gt;
      &lt;p&gt;&lt;strong&gt;SLSA — Supply-chain Levels for Software Artifacts&lt;/strong&gt;. SLSA is a framework for strengthening the integrity of software supply chains, particularly the process by which source code is transformed into distributed software artifacts. The specification defines requirements around provenance, build environments and verification so that consumers can obtain stronger assurances about how an artifact was produced. For OSS maturity assessment, SLSA-related evidence provides information that ordinary repository activity does not: a project may maintain source code actively yet have an opaque or weak release pipeline. SLSA specification version 1.2: &lt;a href=&quot;https://slsa.dev/spec/v1.2/&quot;&gt;https://slsa.dev/spec/v1.2/&lt;/a&gt;. &lt;a href=&quot;#fnref:slsa&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:spdx&quot;&gt;
      &lt;p&gt;&lt;strong&gt;SPDX — Software Package Data Exchange&lt;/strong&gt;. SPDX is an international open standard for communicating information about software packages, components, licences, copyrights and relationships between software elements. SPDX identifiers are widely used for representing licences in machine-readable form, while SPDX documents can also serve as Software Bills of Materials. SPDX is relevant to automated OSS maturity analysis because it transforms parts of software provenance and licensing that were traditionally expressed in unstructured text into information that tools can validate and compare. SPDX specifications: &lt;a href=&quot;https://spdx.dev/use/specifications/&quot;&gt;https://spdx.dev/use/specifications/&lt;/a&gt;. &lt;a href=&quot;#fnref:spdx&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:spdx:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:reuse&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Free Software Foundation Europe — REUSE Specification&lt;/strong&gt;. REUSE defines a practical convention for making copyright and licensing information in source-code repositories machine readable. Instead of relying only on a single top-level &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LICENSE&lt;/code&gt; file, REUSE provides mechanisms for associating copyright notices and SPDX licence identifiers with individual files or groups of files. This makes it possible to automatically check whether licensing information is complete and unambiguous across a repository. REUSE therefore provides a stronger automatable legal signal than merely checking that a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LICENSE&lt;/code&gt; file exists. &lt;a href=&quot;https://reuse.software/spec/&quot;&gt;https://reuse.software/spec/&lt;/a&gt;. &lt;a href=&quot;#fnref:reuse&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 15 Aug 2026 00:00:00 +0200</pubDate>
        <link>https://www.foo.be/2026/08/Open-Source-Metrics</link>
        <guid isPermaLink="true">https://www.foo.be/2026/08/Open-Source-Metrics</guid>
        
        
      </item>
    
      <item>
        <title>Sovereignty Is Engineered, Not Procured</title>
        <description>&lt;h1 id=&quot;sovereignty-is-engineered-not-procured&quot;&gt;Sovereignty Is Engineered, Not Procured&lt;/h1&gt;

&lt;p&gt;Europe often asks whether it can build a company like Palantir: a software champion capable of serving intelligence, defence, law enforcement, crisis response, cyber defence, and public-sector decision-making at scale.&lt;/p&gt;

&lt;p&gt;The usual answer is that Europe lacks data, capital, talent, or legal room. I do not think this is the full story.&lt;/p&gt;

&lt;p&gt;The capacity is there. The data is there. The technical talent is there. The public-sector problems are real, urgent, and interesting. What is often missing is the will to tackle complex programmes seriously, over time, with teams that are allowed to build, fail, iterate, and take responsibility.&lt;/p&gt;

&lt;p&gt;Europe does not need a Palantir clone and definitely does not want such a proprietary tool. It needs the capacity to build strategic software for intelligence and security missions without outsourcing the core of its thinking.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/cables.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-problem-is-not-only-procurement&quot;&gt;The problem is not only procurement&lt;/h2&gt;

&lt;p&gt;European intelligence and security organisations often buy American intelligence products, American analytics platforms, American cloud stacks, and American operational software. This is sometimes justified by speed, maturity, interoperability, or political convenience. Those arguments are not always false.&lt;/p&gt;

&lt;p&gt;But they hide a deeper problem: dependency becomes culture.&lt;/p&gt;

&lt;p&gt;Once an organisation accepts that the difficult software will be bought elsewhere, internal teams slowly lose the habit of building. Procurement becomes a substitute for strategy. Legal review becomes a substitute for leadership. Risk management becomes a substitute for execution.&lt;/p&gt;

&lt;p&gt;In such environments, the safest answer is always “no”:
No, we cannot expose this.
No, we cannot publish this.
No, we cannot collaborate.
No, we cannot build it ourselves.
No, legal will not allow it.
No, procurement will take too long.
No, it is too sensitive.&lt;/p&gt;

&lt;p&gt;Some of these objections are valid. Many are excuses.&lt;/p&gt;

&lt;p&gt;The result is predictable: Europe keeps producing excellent policy documents about sovereignty while buying the operational substrate of sovereignty from others.&lt;/p&gt;

&lt;h2 id=&quot;intelligence-software-is-not-magic&quot;&gt;Intelligence software is not magic&lt;/h2&gt;

&lt;p&gt;The mystique around intelligence software is harmful. Much of the work is not magical. It is hard engineering, data modelling, workflow design, access control, auditability, graph analysis, entity resolution, case management, knowledge management, search, enrichment, automation, feedback loops, and user experience.&lt;/p&gt;

&lt;p&gt;These are difficult problems, but they are not impossible problems.&lt;/p&gt;

&lt;p&gt;The difficult part is not only technical. It is organisational.&lt;/p&gt;

&lt;p&gt;You need teams that understand the mission and the technology. You need product owners who know the analysts’ work. You need engineers who are trusted with real problems, not toy datasets. You need security and legal teams that help build safe ways forward instead of only producing reasons to stop. You need leadership willing to accept that serious internal capacity cannot be built through one-year projects, rotating committees, or PowerPoint roadmaps.&lt;/p&gt;

&lt;p&gt;A European intelligence champion would not emerge from a single procurement framework. It would emerge from a culture that rewards building.&lt;/p&gt;

&lt;h2 id=&quot;the-counterexample-agencies-that-publish&quot;&gt;The counterexample: agencies that publish&lt;/h2&gt;

&lt;p&gt;There are public counterexamples.&lt;/p&gt;

&lt;p&gt;The NSA has released and maintained open-source software. Ghidra, its reverse-engineering framework, is one of the most visible examples. Apache NiFi and Apache Accumulo also show a pattern: internal capabilities can be released, reused, governed, and improved outside the original classified context. SELinux is another historical example of a security capability that moved into the broader ecosystem.&lt;/p&gt;

&lt;p&gt;National Geospatial-Intelligence Agency (NGA) produces a significant numbers of geo-spatial open-source tooling such as MAGE.&lt;/p&gt;

&lt;p&gt;GCHQ released CyberChef, a widely used browser-based tool for encoding, decoding, transformation, and data analysis. It also published Gaffer, a graph database framework designed for large-scale entity and relationship analysis.&lt;/p&gt;

&lt;p&gt;In Europe, ANSSI has published tools and policy around open source, including CLIP OS and digital forensics tooling. CIRCL’s MISP is a strong European example of an open-source threat intelligence and sharing platform built by practitioners for practitioners.&lt;/p&gt;

&lt;p&gt;These examples matter because they show that “sensitive mission” and “public engineering” are not mutually exclusive. You do not publish secrets. You publish reusable infrastructure, generic tooling, schemas, libraries, documentation, and lessons learned.&lt;/p&gt;

&lt;p&gt;The public artefact is not the operation. It is the scaffolding that makes the operation more mature.&lt;/p&gt;

&lt;h2 id=&quot;open-source-is-not-charity-it-is-capacity-building&quot;&gt;Open source is not charity; it is capacity building&lt;/h2&gt;

&lt;p&gt;When an intelligence or cyber agency releases useful software, it is not doing charity. It is doing industrial policy, recruitment, standardisation, quality assurance, and ecosystem building at the same time.&lt;/p&gt;

&lt;p&gt;Open source can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;attract engineers who want to work on real problems;&lt;/li&gt;
  &lt;li&gt;create common standards across agencies and partners;&lt;/li&gt;
  &lt;li&gt;reduce duplicated development;&lt;/li&gt;
  &lt;li&gt;allow universities and SMEs to contribute;&lt;/li&gt;
  &lt;li&gt;make procurement less dependent on single vendors;&lt;/li&gt;
  &lt;li&gt;improve trust through inspectable code;&lt;/li&gt;
  &lt;li&gt;turn internal tools into shared infrastructure;&lt;/li&gt;
  &lt;li&gt;create a training path for future analysts and developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not about publishing everything. It is about knowing what can be safely published and having the institutional courage to do it.&lt;/p&gt;

&lt;p&gt;The irony is that secrecy is often used to protect weak engineering, not sensitive capability. If a tool cannot be shown, documented, tested, or reused, sometimes the reason is not classification. Sometimes the reason is that it is fragile, badly governed, or too dependent on a contractor.&lt;/p&gt;

&lt;h2 id=&quot;europe-has-data-but-not-enough-product-culture&quot;&gt;Europe has data, but not enough product culture&lt;/h2&gt;

&lt;p&gt;European public institutions and trusted national operators already sit close to enormous amounts of relevant data. This includes cyber incident data, vulnerability data, malware metadata, abuse reports, phishing reports, domain and certificate data, passive DNS, DNS telemetry, routing information, NetFlow and other network metadata from trusted infrastructure or ISP-level cooperation, honeypot data, sinkhole data, scanning results, open-source intelligence, sanctions data, company registers, procurement data, satellite data, customs data, border data, law-enforcement data, and diplomatic reporting.&lt;/p&gt;

&lt;p&gt;There are also many other sources that do not need to be publicly listed. The point is not to expose them. The point is to recognise that Europe does not lack raw material.&lt;/p&gt;

&lt;p&gt;The problem is rarely the absence of data. The problem is the ability to lawfully collect, govern, correlate, enrich, protect, and transform that data into operational products.&lt;/p&gt;

&lt;p&gt;A product is not a database.
A product is not a dashboard.
A product is not a tender.
A product is not a pilot.
A product is not a research prototype.&lt;/p&gt;

&lt;p&gt;A product has users, maintenance, documentation, security boundaries, onboarding, training, ownership, metrics, feedback, and a roadmap. A product survives beyond the first grant. A product has a team.&lt;/p&gt;

&lt;p&gt;This is where many European initiatives fail. They are funded as projects, not built as products. They are coordinated as programmes, not operated as capabilities. They produce deliverables, not infrastructure.&lt;/p&gt;

&lt;p&gt;The strategic challenge is not only to collect data. It is to build the institutional and technical capacity to turn legally accessible data into timely intelligence, while keeping strong boundaries around sensitive sources, methods, and protected information.&lt;/p&gt;

&lt;h2 id=&quot;the-legal-excuse&quot;&gt;The legal excuse&lt;/h2&gt;

&lt;p&gt;Europe is very good at finding legal complexity. This is sometimes necessary. Intelligence, defence, cyber defence, and law enforcement must operate under democratic control, fundamental rights, proportionality, and auditability.&lt;/p&gt;

&lt;p&gt;But legal complexity cannot become a permanent excuse for inaction.&lt;/p&gt;

&lt;p&gt;The role of legal teams should not be to restrict the mission by default. Their role should be to help the organisation achieve its mission lawfully, creatively, and responsibly.&lt;/p&gt;

&lt;p&gt;Good legal work is not only about saying what cannot be done. It is about designing the conditions under which useful work can be done: minimisation, compartmentalisation, access controls, retention rules, audit logs, purpose limitation, synthetic data, redaction, disclosure processes, and clear governance.&lt;/p&gt;

&lt;p&gt;Law should be part of the architecture. Legal teams should be close enough to the mission to understand the operational need, and close enough to the engineers to help design systems that respect the law while still delivering capability.&lt;/p&gt;

&lt;p&gt;The question should not be: “Can we avoid all risk?”
The question should be: “How can we use the law to support the mission, reduce risk, and create a defensible path to action?”&lt;/p&gt;

&lt;p&gt;A risk-free intelligence system does not exist. Buying a foreign platform does not remove risk. It merely changes who controls it.&lt;/p&gt;

&lt;h2 id=&quot;the-fear-of-exposure&quot;&gt;The fear of exposure&lt;/h2&gt;

&lt;p&gt;Many intelligence and security organisations fear exposing how they work. Some of that fear is legitimate. Methods, sources, tasking, and operational priorities must be protected.&lt;/p&gt;

&lt;p&gt;But hiding everything creates a second-order weakness: nobody outside the wall can help, and nobody inside the wall is forced to improve.&lt;/p&gt;

&lt;p&gt;Open-source publication, public APIs, shared schemas, public documentation, and controlled community engagement do not require revealing operations. They require discipline. They require separating the generic from the sensitive.&lt;/p&gt;

&lt;p&gt;That separation is itself a sign of maturity.&lt;/p&gt;

&lt;p&gt;If an organisation cannot separate reusable engineering from classified activity, it probably does not understand its own architecture well enough.&lt;/p&gt;

&lt;h2 id=&quot;what-is-missing&quot;&gt;What is missing?&lt;/h2&gt;

&lt;p&gt;What is missing is not a European lack of intelligence. It is a lack of institutional appetite.&lt;/p&gt;

&lt;p&gt;More precisely, Europe is missing:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Mission-driven product teams&lt;/strong&gt;
Small, stable teams with engineers, analysts, security people, legal support, and operational ownership.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Long-term technical leadership&lt;/strong&gt;
People who can say no to bad architecture, bad outsourcing, and fake innovation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;A willingness to publish non-sensitive components&lt;/strong&gt;
Open-source software, schemas, libraries, test datasets, documentation, and reference implementations.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Procurement that rewards capacity, not dependency&lt;/strong&gt;
Contracts should build internal competence, not replace it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Creative legal engineering&lt;/strong&gt;
Lawyers and technologists working together from day one to use the law as a framework for action, not as a default reason for refusal.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Acceptance of managed risk&lt;/strong&gt;
No serious capability is built without risk. The goal is not to eliminate risk but to govern it or even accept it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;A culture of reuse across European agencies&lt;/strong&gt;
Europe does not need twenty incompatible platforms solving the same problem badly.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Operational feedback loops&lt;/strong&gt;
Analysts and investigators must shape the tools they use. Otherwise software becomes theatre.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;the-strategic-choice&quot;&gt;The strategic choice&lt;/h2&gt;

&lt;p&gt;Europe can keep buying intelligence software from others and call it pragmatic. Sometimes that will be necessary. But if it becomes the default, Europe should stop pretending that it is building sovereignty.&lt;/p&gt;

&lt;p&gt;Sovereignty is not declared. It is engineered.&lt;/p&gt;

&lt;p&gt;It is engineered in code repositories, data models, deployment pipelines, documentation, audit logs, and teams that know how to operate under pressure. It is engineered when public institutions learn to build again.&lt;/p&gt;

&lt;p&gt;The lesson from NSA, NGA, GCHQ, ANSSI, CIRCL, and others is not that everything should be open. The lesson is that strong institutions can expose selected parts of their engineering without exposing their secrets.&lt;/p&gt;

&lt;p&gt;That is what confidence looks like.&lt;/p&gt;

&lt;p&gt;Europe has the people. It has the data. It has the problems. It even has successful examples.&lt;/p&gt;

&lt;p&gt;What it still needs is the desire to build serious programmes, the courage to accept managed risk, the creativity to use the law as an enabler, and the discipline to turn public-sector software from procurement artefacts into operational capabilities.&lt;/p&gt;

&lt;p&gt;A European intelligence champion will not appear because a minister announces one.&lt;/p&gt;

&lt;p&gt;It will appear when European organisations decide that building is part of the mission.&lt;/p&gt;

</description>
        <pubDate>Sat, 06 Jun 2026 04:02:00 +0200</pubDate>
        <link>https://www.foo.be/2026/06/Sovereignty-Is-Engineered-Not-Procured</link>
        <guid isPermaLink="true">https://www.foo.be/2026/06/Sovereignty-Is-Engineered-Not-Procured</guid>
        
        
        <category>collaboration</category>
        
        <category>team</category>
        
      </item>
    
      <item>
        <title>Don’t Do Team Meetings</title>
        <description>&lt;h1 id=&quot;dont-do-team-meetings&quot;&gt;Don’t Do Team Meetings&lt;/h1&gt;

&lt;p&gt;Regular team meetings are often treated as a default part of work. They are seen as a sign of coordination, alignment, and healthy communication. In practice, they often reveal the opposite.&lt;/p&gt;

&lt;p&gt;A recurring team meeting where everyone goes around the room to explain what they did last week is usually not a good use of time. It turns communication into a performance instead of a real exchange of useful information. If the team needs a formal meeting just to learn what people have been doing, that is often a sign that day-to-day communication is already failing.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/reader.jpg&quot; alt=&quot;A reader in Paris - https://www.flickr.com/photos/adulau/54725313377/&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-problem-with-what-did-you-do-last-week-meetings&quot;&gt;The problem with “what did you do last week?” meetings&lt;/h2&gt;

&lt;h3 id=&quot;they-happen-too-late&quot;&gt;They happen too late&lt;/h3&gt;

&lt;p&gt;Work should not become visible only once a week in a meeting. If something matters, it should already have been shared when it happened: when a task was completed, when a blocker appeared, when a useful idea emerged, or when help was needed.&lt;/p&gt;

&lt;p&gt;Waiting for a meeting to report progress means information is delayed, and delayed information is usually less useful.&lt;/p&gt;

&lt;h3 id=&quot;they-expose-a-communication-issue&quot;&gt;They expose a communication issue&lt;/h3&gt;

&lt;p&gt;If a team depends on a weekly meeting to know what others are achieving, the issue is not a lack of meetings. The issue is a lack of continuous communication.&lt;/p&gt;

&lt;p&gt;People should not discover completed work, current priorities, or open questions only during a scheduled call. A healthy team communicates continuously, in context, and in writing when possible. If this is not happening, adding more meetings does not solve the underlying problem.&lt;/p&gt;

&lt;h3 id=&quot;they-are-often-boring&quot;&gt;They are often boring&lt;/h3&gt;

&lt;p&gt;Most of these meetings are passive. One person speaks, others wait for their turn, and very little real discussion happens. In many cases, people are not truly listening. They are replying to emails, reading messages, or working on something else while the meeting continues in the background.&lt;/p&gt;

&lt;p&gt;That is usually a sign that the meeting is not useful enough to deserve full attention.&lt;/p&gt;

&lt;h3 id=&quot;they-scale-badly&quot;&gt;They scale badly&lt;/h3&gt;

&lt;p&gt;The more people you add, the worse the meeting becomes.&lt;/p&gt;

&lt;p&gt;Each additional participant increases the duration, reduces relevance, and lowers attention. What may be tolerable with three people becomes a waste of time with ten. A long status meeting with many participants often creates very little value for most of them.&lt;/p&gt;

&lt;p&gt;A meeting that costs one hour for ten people is not a one-hour meeting. It is a ten-hour cost for the team.&lt;/p&gt;

&lt;h2 id=&quot;a-better-model-continuous-sharing&quot;&gt;A better model: continuous sharing&lt;/h2&gt;

&lt;p&gt;The alternative is simple: share continuously in chat, in the right place, as the work happens.&lt;/p&gt;

&lt;p&gt;This is the model we use in our team.&lt;/p&gt;

&lt;p&gt;Instead of relying on status meetings, communication happens across several chat rooms:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;one global room for the whole team&lt;/li&gt;
  &lt;li&gt;one fun room for informal exchanges&lt;/li&gt;
  &lt;li&gt;multiple project-specific rooms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule is simple: use the project room first when something is related to a specific project. This keeps information close to the people who need it, while still making it visible to others who want to follow along.&lt;/p&gt;

&lt;p&gt;Everyone can join all rooms. The only mandatory ones are the global room and the fun room.&lt;/p&gt;

&lt;p&gt;This model has several advantages:&lt;/p&gt;

&lt;h2 id=&quot;communication-becomes-timely&quot;&gt;Communication becomes timely&lt;/h2&gt;

&lt;p&gt;Updates are shared when they matter, not days later. People can react sooner, help sooner, and stay informed without waiting for a calendar slot.&lt;/p&gt;

&lt;h2 id=&quot;communication-becomes-contextual&quot;&gt;Communication becomes contextual&lt;/h2&gt;

&lt;p&gt;Project-related discussions stay in project rooms. Team-wide information goes to the global room. Casual conversation has its own place. This reduces noise and makes it easier to find relevant information later.&lt;/p&gt;

&lt;h2 id=&quot;communication-becomes-inclusive-without-being-interruptive&quot;&gt;Communication becomes inclusive without being interruptive&lt;/h2&gt;

&lt;p&gt;People can read when they have time. They do not need to stop their work for a meeting that may not concern them. They can stay informed asynchronously and still participate when relevant.&lt;/p&gt;

&lt;p&gt;There is no need to force reactions. Sharing is enough.&lt;/p&gt;

&lt;h2 id=&quot;communication-becomes-searchable-and-durable&quot;&gt;Communication becomes searchable and durable&lt;/h2&gt;

&lt;p&gt;A chat message leaves a trace. It can be read later, linked, searched, or revisited. A spoken status update in a meeting often disappears as soon as the call ends.&lt;/p&gt;

&lt;h2 id=&quot;meetings-should-be-the-exception&quot;&gt;Meetings should be the exception&lt;/h2&gt;

&lt;p&gt;This does not mean that all meetings are bad. Some meetings are necessary:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;to make a decision that requires live discussion&lt;/li&gt;
  &lt;li&gt;to resolve a conflict or a misunderstanding quickly&lt;/li&gt;
  &lt;li&gt;to work through a complex topic together&lt;/li&gt;
  &lt;li&gt;to handle urgent coordination in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But a recurring status meeting is rarely the best tool for those cases.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;If your team has a weekly meeting just to explain what everyone did last week, the problem is probably not that you need a better meeting. The problem is that you need better communication during the week.&lt;/p&gt;

&lt;p&gt;A team that shares continuously in chat is usually more informed, more efficient, and less dependent on rituals that consume time without creating much value.&lt;/p&gt;

&lt;p&gt;Do not default to team meetings.&lt;/p&gt;

&lt;p&gt;Communicate continuously. Share in context. Keep meetings for the moments when real synchronous discussion is actually needed.&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Apr 2026 12:02:00 +0200</pubDate>
        <link>https://www.foo.be/2026/04/dont-do-team-meetings</link>
        <guid isPermaLink="true">https://www.foo.be/2026/04/dont-do-team-meetings</guid>
        
        
        <category>collaboration</category>
        
        <category>team</category>
        
      </item>
    
      <item>
        <title>Bring Back RSS for Operational Security</title>
        <description>&lt;h1 id=&quot;bring-back-rss-for-operational-security&quot;&gt;Bring Back RSS for Operational Security&lt;/h1&gt;

&lt;p&gt;This post expands on ideas I previously presented at &lt;a href=&quot;https://www.pass-the-salt.org/&quot;&gt;Pass the SALT 2024&lt;/a&gt; in my talk &lt;em&gt;Bring Back RSS For Operational Security&lt;/em&gt;.&lt;sup id=&quot;fnref:slides&quot;&gt;&lt;a href=&quot;#fn:slides&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&quot;fnref:video&quot;&gt;&lt;a href=&quot;#fn:video&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; The short version is simple: operational security teams still need a reliable way to track change, automate collection, and reduce dependency on closed platforms. RSS already solves much of that problem.&lt;/p&gt;

&lt;p&gt;Operational security teams spend an enormous amount of time watching for change.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A new vulnerability advisory is published.&lt;/li&gt;
  &lt;li&gt;A vendor updates a CSAF document.&lt;/li&gt;
  &lt;li&gt;A threat actor leaks a new victim.&lt;/li&gt;
  &lt;li&gt;A trusted researcher posts a new analysis.&lt;/li&gt;
  &lt;li&gt;A CERT publishes an incident note.&lt;/li&gt;
  &lt;li&gt;A MISP event is enriched.&lt;/li&gt;
  &lt;li&gt;A public dashboard changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of these changes matter because they are &lt;em&gt;new&lt;/em&gt;. And yet, in many security teams, we still collect this information in the most fragile way possible: by manually checking websites, relying on algorithmic social platforms, scraping pages that were never designed for machine consumption, or subscribing to closed platforms that add friction instead of removing it.&lt;/p&gt;

&lt;p&gt;This is why RSS needs to come back in operational security.&lt;/p&gt;

&lt;p&gt;Not as nostalgia. Not as a retro technology for bloggers. But as a simple, robust, auditable, automatable transport format for change detection and information sharing.&lt;/p&gt;

&lt;h2 id=&quot;rss-was-built-for-exactly-this-problem&quot;&gt;RSS was built for exactly this problem&lt;/h2&gt;

&lt;p&gt;RSS and Atom were designed to describe streams of updates: a list of items, each with metadata such as a title, a publication date, a link, and often a short description. In other words, they were designed to answer a basic operational question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed since the last time I looked?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question is at the heart of security operations.&lt;/p&gt;

&lt;p&gt;A SOC does not only need raw telemetry. It also needs structured awareness of external change:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;newly published vulnerabilities&lt;/li&gt;
  &lt;li&gt;changes in vendor advisories&lt;/li&gt;
  &lt;li&gt;new threat intelligence reports&lt;/li&gt;
  &lt;li&gt;updates from trusted researchers&lt;/li&gt;
  &lt;li&gt;public claims from threat actors&lt;/li&gt;
  &lt;li&gt;newly published forensic write-ups&lt;/li&gt;
  &lt;li&gt;software release notes with security impact&lt;/li&gt;
  &lt;li&gt;updates in shared intelligence platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RSS solves this in a way that is boring, open, and dependable. That is precisely why it remains useful.&lt;/p&gt;

&lt;h2 id=&quot;security-operations-need-boring-technology&quot;&gt;Security operations need boring technology&lt;/h2&gt;

&lt;p&gt;Security teams already deal with enough complexity. We do not need every upstream source to invent its own notification model, API semantics, authentication flow, JavaScript-heavy frontend, and rate-limit strategy.&lt;/p&gt;

&lt;p&gt;We need more sources that simply publish updates in a standard format.&lt;/p&gt;

&lt;p&gt;RSS has several properties that make it especially attractive for operational use:&lt;/p&gt;

&lt;h3 id=&quot;it-is-simple&quot;&gt;It is simple&lt;/h3&gt;

&lt;p&gt;The model is easy to understand: a feed contains entries. Each entry points to something new or changed. There is very little ambiguity about the purpose.&lt;/p&gt;

&lt;h3 id=&quot;it-is-machine-readable&quot;&gt;It is machine-readable&lt;/h3&gt;

&lt;p&gt;Feeds are meant to be consumed by software. This matters because security work quickly becomes repetitive at scale.&lt;/p&gt;

&lt;h3 id=&quot;it-is-decentralized&quot;&gt;It is decentralized&lt;/h3&gt;

&lt;p&gt;There is no central platform that decides what is visible. Every producer can publish their own feed. Every consumer can subscribe using their own tooling.&lt;/p&gt;

&lt;h3 id=&quot;it-is-automatable&quot;&gt;It is automatable&lt;/h3&gt;

&lt;p&gt;Feeds can be polled, filtered, transformed, merged, archived, enriched, and redistributed with minimal effort.&lt;/p&gt;

&lt;h3 id=&quot;it-is-auditable&quot;&gt;It is auditable&lt;/h3&gt;

&lt;p&gt;Unlike opaque recommendation engines and engagement-driven timelines, RSS is explicit. You know what you subscribed to. You can replay entries. You can store them. You can build deterministic workflows around them.&lt;/p&gt;

&lt;p&gt;In operational security, those properties are not just nice to have. They are essential.&lt;/p&gt;

&lt;h2 id=&quot;analyst-fatigue-is-real-and-rss-helps-reduce-it&quot;&gt;Analyst fatigue is real, and RSS helps reduce it&lt;/h2&gt;

&lt;p&gt;Security analysts have a broad range of responsibilities: collecting events, detecting threats, triaging signals, analyzing context, and coordinating response. Repetitive collection work adds friction and contributes directly to fatigue. Automation is vital to keep humans focused on judgment rather than polling websites.&lt;sup id=&quot;fnref:slides:1&quot;&gt;&lt;a href=&quot;#fn:slides&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;RSS is one of the easiest ways to automate the collection of external updates without building a fragile dependency on every source.&lt;/p&gt;

&lt;p&gt;Instead of asking analysts to remember twenty websites, ten vendor portals, and a handful of social accounts, you can move to a model like this:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;subscribe once&lt;/li&gt;
  &lt;li&gt;normalize once&lt;/li&gt;
  &lt;li&gt;filter continuously&lt;/li&gt;
  &lt;li&gt;alert selectively&lt;/li&gt;
  &lt;li&gt;archive automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a much healthier model for a SOC than “open browser tabs and refresh all morning.”&lt;/p&gt;

&lt;h2 id=&quot;rss-is-already-useful-in-vulnerability-management&quot;&gt;RSS is already useful in vulnerability management&lt;/h2&gt;

&lt;p&gt;One of the most obvious operational use cases is vulnerability intelligence.&lt;/p&gt;

&lt;p&gt;The vulnerability ecosystem has changed significantly. NVD is no longer the only practical source of vulnerability information. We now have CNA publications, vendor advisories, CSAF feeds, project-level disclosures, and many other upstream sources. A modern vulnerability workflow must handle multiple sources, not just one canonical database.&lt;sup id=&quot;fnref:slides:2&quot;&gt;&lt;a href=&quot;#fn:slides&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;This is exactly where feeds shine.&lt;/p&gt;

&lt;p&gt;A multi-source vulnerability platform can expose a feed per source, allowing teams to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;monitor newly disclosed items&lt;/li&gt;
  &lt;li&gt;separate vendor-specific updates from generic CVE publication&lt;/li&gt;
  &lt;li&gt;follow only the ecosystems they care about&lt;/li&gt;
  &lt;li&gt;trigger enrichment or prioritization pipelines when new entries appear&lt;/li&gt;
  &lt;li&gt;generate internal dashboards or digests from the latest changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Vulnerability-Lookup, this model is natural: every source can expose recent updates through RSS or Atom, which makes it easy to subscribe, aggregate, and operationalize the latest disclosures.&lt;sup id=&quot;fnref:vulnerability-lookup&quot;&gt;&lt;a href=&quot;#fn:vulnerability-lookup&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&quot;fnref:example-nvd&quot;&gt;&lt;a href=&quot;#fn:example-nvd&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&quot;fnref:example-siemens&quot;&gt;&lt;a href=&quot;#fn:example-siemens&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That matters because vulnerability operations are not only about querying a database. They are also about tracking &lt;em&gt;what changed recently&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;rss-is-also-a-strong-fit-for-threat-intelligence-collection&quot;&gt;RSS is also a strong fit for threat intelligence collection&lt;/h2&gt;

&lt;p&gt;RSS should not be limited to vulnerability advisories.&lt;/p&gt;

&lt;p&gt;Threat intelligence often starts with watching trusted public sources: researchers, incident responders, CERTs, vendor blogs, community projects, bot accounts, and public reporting streams.&lt;/p&gt;

&lt;p&gt;A good example is Mastodon. By default, Mastodon accounts expose RSS feeds, which means public accounts can be consumed by standard feed tooling without depending on the platform interface. In practice, that makes it easy to subscribe to high-signal accounts and process updates automatically.&lt;sup id=&quot;fnref:slides:3&quot;&gt;&lt;a href=&quot;#fn:slides&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;This creates useful possibilities:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;track public ransomware victim disclosures&lt;/li&gt;
  &lt;li&gt;monitor researcher reporting on campaigns, malware, or infrastructure&lt;/li&gt;
  &lt;li&gt;watch topic-specific accounts for changes relevant to your organization&lt;/li&gt;
  &lt;li&gt;filter by keywords, sectors, product names, or geography&lt;/li&gt;
  &lt;li&gt;capture public reporting into internal knowledge systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is often more reliable than asking analysts to watch social media timelines manually.&lt;/p&gt;

&lt;h2 id=&quot;rss-works-well-as-an-operational-building-block&quot;&gt;RSS works well as an operational building block&lt;/h2&gt;

&lt;p&gt;One reason RSS deserves a comeback is that it composes well.&lt;/p&gt;

&lt;p&gt;It does not need to be the final destination. It can be the transport layer between a source and your workflows.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;h3 id=&quot;feed---filter---dashboard&quot;&gt;Feed -&amp;gt; filter -&amp;gt; dashboard&lt;/h3&gt;

&lt;p&gt;A self-hosted reader can aggregate feeds from vendors, CERTs, researchers, and internal sources. Analysts can use this as a shared situational-awareness layer.&lt;sup id=&quot;fnref:newspipe&quot;&gt;&lt;a href=&quot;#fn:newspipe&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;feed---transform---alert&quot;&gt;Feed -&amp;gt; transform -&amp;gt; alert&lt;/h3&gt;

&lt;p&gt;A script can parse entries, match on keywords, extract URLs, and generate notifications only for relevant updates.&lt;sup id=&quot;fnref:rss-tools&quot;&gt;&lt;a href=&quot;#fn:rss-tools&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;feed---enrich---misp&quot;&gt;Feed -&amp;gt; enrich -&amp;gt; MISP&lt;/h3&gt;

&lt;p&gt;A workflow can ingest feed items, pull linked content, create or update MISP events, and extract indicators or context from the referenced material.&lt;sup id=&quot;fnref:misp-scraper&quot;&gt;&lt;a href=&quot;#fn:misp-scraper&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;feed---merge---publish&quot;&gt;Feed -&amp;gt; merge -&amp;gt; publish&lt;/h3&gt;

&lt;p&gt;Multiple feeds can be combined into a reverse-chronological stream for a team portal, internal digest, or external situational-awareness page.&lt;sup id=&quot;fnref:rssmerge&quot;&gt;&lt;a href=&quot;#fn:rssmerge&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;feed---archive---search&quot;&gt;Feed -&amp;gt; archive -&amp;gt; search&lt;/h3&gt;

&lt;p&gt;Entries can be stored over time, indexed, and replayed later for investigations, reporting, and retrospective analysis.&lt;/p&gt;

&lt;p&gt;That modularity is one of RSS’s biggest strengths. It is not trying to be the whole platform. It is a small, useful component that fits into many platforms.&lt;/p&gt;

&lt;h2 id=&quot;we-should-stop-confusing-old-with-obsolete&quot;&gt;We should stop confusing “old” with “obsolete”&lt;/h2&gt;

&lt;p&gt;A recurring mistake in technology is assuming that older protocols are irrelevant simply because they are not fashionable.&lt;/p&gt;

&lt;p&gt;RSS is old. So is email. So is DNS. So is syslog.&lt;/p&gt;

&lt;p&gt;Age is not a good reason to discard a protocol that still solves a real problem effectively.&lt;/p&gt;

&lt;p&gt;In fact, RSS compares favorably to many modern alternatives:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;it is easier to consume than most bespoke APIs&lt;/li&gt;
  &lt;li&gt;it is easier to preserve than social media streams&lt;/li&gt;
  &lt;li&gt;it is more interoperable than proprietary notification systems&lt;/li&gt;
  &lt;li&gt;it is easier to self-host than most “intelligence platform” workflows&lt;/li&gt;
  &lt;li&gt;it creates less lock-in than platform-native feeds and dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The security community often talks about resilience, open standards, and reducing dependency on single vendors. RSS is aligned with all three.&lt;/p&gt;

&lt;h2 id=&quot;practical-use-cases-for-operational-security-teams&quot;&gt;Practical use cases for operational security teams&lt;/h2&gt;

&lt;p&gt;Here are concrete places where RSS can provide immediate value:&lt;/p&gt;

&lt;h3 id=&quot;vendor-advisory-monitoring&quot;&gt;Vendor advisory monitoring&lt;/h3&gt;

&lt;p&gt;Subscribe to vendor advisory feeds, product security feeds, and CSAF-derived updates. Route them to product owners, vulnerability teams, or sector-specific analysts.&lt;/p&gt;

&lt;h3 id=&quot;cert-and-csirt-awareness&quot;&gt;CERT and CSIRT awareness&lt;/h3&gt;

&lt;p&gt;Track advisories, incident notes, and vulnerability communications from national and sectoral CERTs.&lt;/p&gt;

&lt;h3 id=&quot;research-monitoring&quot;&gt;Research monitoring&lt;/h3&gt;

&lt;p&gt;Follow high-signal blogs, project release feeds, and public researcher accounts.&lt;/p&gt;

&lt;h3 id=&quot;threat-actor-visibility&quot;&gt;Threat actor visibility&lt;/h3&gt;

&lt;p&gt;In some cases, public reporting streams or bot-published updates can be monitored via RSS for early awareness and trend tracking.&lt;/p&gt;

&lt;h3 id=&quot;internal-soc-dashboarding&quot;&gt;Internal SOC dashboarding&lt;/h3&gt;

&lt;p&gt;Use a self-hosted feed reader or custom dashboard as a collaborative stream of external operational context.&lt;/p&gt;

&lt;h3 id=&quot;misp-enrichment-workflows&quot;&gt;MISP enrichment workflows&lt;/h3&gt;

&lt;p&gt;Consume feeds, extract linked content, and create or enrich events with contextual reports and indicators.&lt;/p&gt;

&lt;h3 id=&quot;executive-or-sector-digests&quot;&gt;Executive or sector digests&lt;/h3&gt;

&lt;p&gt;Merge multiple feeds and publish filtered summaries in text, HTML, or Markdown for targeted internal audiences.&lt;/p&gt;

&lt;h2 id=&quot;the-tooling-barrier-is-very-low&quot;&gt;The tooling barrier is very low&lt;/h2&gt;

&lt;p&gt;Another reason to bring RSS back is that the tooling required is minimal.&lt;/p&gt;

&lt;p&gt;You do not need a huge platform migration to start using it well.&lt;/p&gt;

&lt;p&gt;A small stack can already deliver a lot of value:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;a self-hosted reader for aggregation and sharing&lt;/li&gt;
  &lt;li&gt;a few scripts for filtering or transformation&lt;/li&gt;
  &lt;li&gt;MISP integration for enrichment and extraction&lt;/li&gt;
  &lt;li&gt;a merger tool for combined output&lt;/li&gt;
  &lt;li&gt;a discovery tool to find feeds on target sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is attractive for small and medium teams because the cost of experimentation is low. It is also attractive for larger teams because the result is transparent and composable.&lt;/p&gt;

&lt;p&gt;There is no mystery box here. Just feeds, parsers, filters, and workflows.&lt;/p&gt;

&lt;h2 id=&quot;rss-supports-open-security-ecosystems&quot;&gt;RSS supports open security ecosystems&lt;/h2&gt;

&lt;p&gt;Operational security benefits when information can move between communities, tools, and organizations with as little friction as possible.&lt;/p&gt;

&lt;p&gt;RSS supports that goal because it is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;open&lt;/li&gt;
  &lt;li&gt;well understood&lt;/li&gt;
  &lt;li&gt;easy to generate&lt;/li&gt;
  &lt;li&gt;easy to mirror&lt;/li&gt;
  &lt;li&gt;easy to transform&lt;/li&gt;
  &lt;li&gt;easy to redistribute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it a good fit not only for consumption, but also for publication.&lt;/p&gt;

&lt;p&gt;Security projects should publish feeds by default.&lt;/p&gt;

&lt;p&gt;If you operate any of the following, you should consider exposing an RSS or Atom feed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;vulnerability databases&lt;/li&gt;
  &lt;li&gt;advisory portals&lt;/li&gt;
  &lt;li&gt;research blogs&lt;/li&gt;
  &lt;li&gt;release notes&lt;/li&gt;
  &lt;li&gt;incident summaries&lt;/li&gt;
  &lt;li&gt;MISP exports or derived views&lt;/li&gt;
  &lt;li&gt;sector-specific intelligence summaries&lt;/li&gt;
  &lt;li&gt;curated watchlists&lt;/li&gt;
  &lt;li&gt;public dashboards of recent changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Publishing a feed is a simple way to make your information more usable operationally.&lt;/p&gt;

&lt;h2 id=&quot;what-the-security-community-should-do-next&quot;&gt;What the security community should do next&lt;/h2&gt;

&lt;p&gt;Bringing RSS back does not require a grand initiative. It requires a change in defaults.&lt;/p&gt;

&lt;h3 id=&quot;if-you-produce-information&quot;&gt;If you produce information&lt;/h3&gt;

&lt;p&gt;Publish a feed.&lt;/p&gt;

&lt;p&gt;Do not force users to scrape your site or depend on a proprietary platform just to know what changed.&lt;/p&gt;

&lt;h3 id=&quot;if-you-build-tools&quot;&gt;If you build tools&lt;/h3&gt;

&lt;p&gt;Support feeds as both input and output.&lt;/p&gt;

&lt;p&gt;Do not assume every workflow starts with a REST API and ends in a web UI.&lt;/p&gt;

&lt;h3 id=&quot;if-you-run-a-soc-or-csirt&quot;&gt;If you run a SOC or CSIRT&lt;/h3&gt;

&lt;p&gt;Treat feeds as first-class operational inputs, not as a side channel.&lt;/p&gt;

&lt;p&gt;Build subscription, filtering, enrichment, and archival workflows around them.&lt;/p&gt;

&lt;h3 id=&quot;if-you-maintain-intelligence-sharing-platforms&quot;&gt;If you maintain intelligence-sharing platforms&lt;/h3&gt;

&lt;p&gt;Make RSS and Atom part of the interoperability story again.&lt;/p&gt;

&lt;p&gt;Simple export formats often have the biggest practical impact.&lt;/p&gt;

&lt;h2 id=&quot;rss-is-not-dead-we-just-stopped-using-it-enough&quot;&gt;RSS is not dead. We just stopped using it enough.&lt;/h2&gt;

&lt;p&gt;RSS never disappeared. It was simply pushed to the margins while platforms optimized for attention, lock-in, and opacity.&lt;/p&gt;

&lt;p&gt;But in operational security, those platform incentives are often the opposite of what we need.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We need explicit subscriptions instead of algorithmic ranking.&lt;/li&gt;
  &lt;li&gt;We need structured updates instead of noisy timelines.&lt;/li&gt;
  &lt;li&gt;We need automation instead of manual checking.&lt;/li&gt;
  &lt;li&gt;We need open formats instead of closed ecosystems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RSS still provides that.&lt;/p&gt;

&lt;p&gt;So yes, bring back RSS for operational security.&lt;/p&gt;

&lt;p&gt;Not because it is old-school. Because it is useful. Because it is interoperable. Because it reduces friction. Because it helps analysts focus on what matters. And because a lot of security information is, at its core, simply a stream of changes that deserves a clean and standard way to be consumed.&lt;/p&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:slides&quot;&gt;
      &lt;p&gt;Pass the SALT 2024 slides, &lt;em&gt;Bring Back RSS For Operational Security&lt;/em&gt;: &lt;a href=&quot;https://www.vulnerability-lookup.org/files/events/2024/20240603-bring-back-rss-for-operational-security.pdf&quot;&gt;https://www.vulnerability-lookup.org/files/events/2024/20240603-bring-back-rss-for-operational-security.pdf&lt;/a&gt; &lt;a href=&quot;#fnref:slides&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:slides:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:slides:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:slides:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:video&quot;&gt;
      &lt;p&gt;Pass the SALT 2024 recording: &lt;a href=&quot;https://passthesalt.ubicast.tv/videos/2024-bring-back-rss-for-operational-security/&quot;&gt;https://passthesalt.ubicast.tv/videos/2024-bring-back-rss-for-operational-security/&lt;/a&gt; &lt;a href=&quot;#fnref:video&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:vulnerability-lookup&quot;&gt;
      &lt;p&gt;Vulnerability-Lookup project: &lt;a href=&quot;https://github.com/cve-search/vulnerability-lookup&quot;&gt;https://github.com/cve-search/vulnerability-lookup&lt;/a&gt; &lt;a href=&quot;#fnref:vulnerability-lookup&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:example-nvd&quot;&gt;
      &lt;p&gt;Example recent NVD Atom feed: &lt;a href=&quot;https://vulnerability.circl.lu/recent/nvd.atom&quot;&gt;https://vulnerability.circl.lu/recent/nvd.atom&lt;/a&gt; &lt;a href=&quot;#fnref:example-nvd&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:example-siemens&quot;&gt;
      &lt;p&gt;Example recent Siemens CSAF RSS feed: &lt;a href=&quot;https://vulnerability.circl.lu/recent/csaf_siemens.rss&quot;&gt;https://vulnerability.circl.lu/recent/csaf_siemens.rss&lt;/a&gt; &lt;a href=&quot;#fnref:example-siemens&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:newspipe&quot;&gt;
      &lt;p&gt;Newspipe: &lt;a href=&quot;https://github.com/cedricbonhomme/newspipe&quot;&gt;https://github.com/cedricbonhomme/newspipe&lt;/a&gt; &lt;a href=&quot;#fnref:newspipe&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:rss-tools&quot;&gt;
      &lt;p&gt;RSS tools collection: &lt;a href=&quot;https://github.com/adulau/rss-tools&quot;&gt;https://github.com/adulau/rss-tools&lt;/a&gt; &lt;a href=&quot;#fnref:rss-tools&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:misp-scraper&quot;&gt;
      &lt;p&gt;MISP scraper blog post: &lt;a href=&quot;https://www.misp-project.org/2022/08/08/MISP-scraper.html/&quot;&gt;https://www.misp-project.org/2022/08/08/MISP-scraper.html/&lt;/a&gt; &lt;a href=&quot;#fnref:misp-scraper&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:rssmerge&quot;&gt;
      &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rssmerge.py&lt;/code&gt; example: &lt;a href=&quot;https://github.com/adulau/rss-tools/blob/master/bin/rssmerge.py&quot;&gt;https://github.com/adulau/rss-tools/blob/master/bin/rssmerge.py&lt;/a&gt; &lt;a href=&quot;#fnref:rssmerge&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 22 Mar 2026 11:02:00 +0100</pubDate>
        <link>https://www.foo.be/2026/03/bring-back-rss</link>
        <guid isPermaLink="true">https://www.foo.be/2026/03/bring-back-rss</guid>
        
        
        <category>opensource</category>
        
        <category>rss</category>
        
        <category>cti</category>
        
      </item>
    
      <item>
        <title>Open Contributions Descriptor — or how to map your contribution in open source, open data, and open standards</title>
        <description>&lt;h1 id=&quot;open-contributions-descriptor--or-how-to-map-your-contribution-in-open-source-open-data-and-open-standards&quot;&gt;Open Contributions Descriptor — or how to map your contribution in open source, open data, and open standards&lt;/h1&gt;

&lt;p&gt;Open ecosystems thrive on collaboration. Open source software, open data initiatives, and open standards communities all depend on a complex web of contributors, maintainers, organizations, and users working together across domains and borders.&lt;/p&gt;

&lt;p&gt;Yet, despite this openness, one surprisingly difficult question remains:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Who contributes what — and how can others participate?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor (OCD)&lt;/a&gt;&lt;/strong&gt; was designed to answer exactly that question.&lt;/p&gt;

&lt;p&gt;This post explains the story behind the Open Contributions Descriptor, the problem it aims to solve, and how it helps map contributions across the open ecosystem in a way that is both human readable and machine actionable.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ocd.png&quot; alt=&quot;overview of the Open Contributions Descriptor (OCD) model&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;where-the-idea-started&quot;&gt;Where the idea started&lt;/h2&gt;

&lt;p&gt;The Open Contributions Descriptor did not emerge in isolation.&lt;/p&gt;

&lt;p&gt;The original inspiration came from Mozilla’s &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contribute.json&lt;/code&gt;&lt;/strong&gt; initiative: &lt;a href=&quot;https://github.com/mozilla/contribute.json&quot;&gt;https://github.com/mozilla/contribute.json&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mozilla introduced the idea that projects could publish a small machine readable file describing &lt;strong&gt;how people could contribute&lt;/strong&gt;. It was a simple but powerful concept: contribution entry points should be discoverable automatically rather than buried inside documentation.&lt;/p&gt;

&lt;p&gt;Although the project is now archived, the underlying idea remained compelling:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Contribution information should be structured, portable, and published by the project itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Open Contributions Descriptor expands this original vision beyond onboarding contributors to a single project and generalizes it across:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;open source&lt;/li&gt;
  &lt;li&gt;open data&lt;/li&gt;
  &lt;li&gt;open standards&lt;/li&gt;
  &lt;li&gt;broader open ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a way, &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor (OCD)&lt;/a&gt; can be seen as a natural evolution of that early experiment, extending contribution metadata from project contribution guidance to ecosystem mapping.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-visibility-in-a-fragmented-open-ecosystem&quot;&gt;The problem: visibility in a fragmented open ecosystem&lt;/h2&gt;

&lt;p&gt;Open ecosystems are rich but fragmented&lt;sup id=&quot;fnref:fragmented&quot;&gt;&lt;a href=&quot;#fn:fragmented&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Today, information about contributions is scattered across many places:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Git repositories&lt;/li&gt;
  &lt;li&gt;README files&lt;/li&gt;
  &lt;li&gt;governance documents&lt;/li&gt;
  &lt;li&gt;mailing lists&lt;/li&gt;
  &lt;li&gt;project websites&lt;/li&gt;
  &lt;li&gt;data portals&lt;/li&gt;
  &lt;li&gt;standards organizations&lt;/li&gt;
  &lt;li&gt;issue trackers&lt;/li&gt;
  &lt;li&gt;funding reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each project documents participation differently or sometimes not at all.&lt;/p&gt;

&lt;p&gt;As a result:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Contributors struggle to understand how to get involved.&lt;/li&gt;
  &lt;li&gt;Organizations cannot easily demonstrate their open contributions.&lt;/li&gt;
  &lt;li&gt;Communities lack visibility into dependencies and relationships.&lt;/li&gt;
  &lt;li&gt;Researchers and policymakers cannot map the real impact of openness.&lt;/li&gt;
  &lt;li&gt;Automated catalogues of open initiatives are difficult to build.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ironically, while open projects publish code and data transparently, the structure of contributions themselves remains opaque or unknown.&lt;/p&gt;

&lt;h2 id=&quot;a-recurring-realization-at-fosdem&quot;&gt;A recurring realization at FOSDEM&lt;/h2&gt;

&lt;p&gt;Every year, attending FOSDEM is an inspiring experience.&lt;/p&gt;

&lt;p&gt;Walking through the corridors, talking to maintainers, and visiting project stands inevitably leads to the same realization:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I constantly discover mature, impactful open source projects I had never encountered online before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Projects with active communities, real deployments, and years of development somehow remain invisible to traditional discovery mechanisms.&lt;/p&gt;

&lt;p&gt;They exist.
They are open.
They are active.&lt;/p&gt;

&lt;p&gt;Yet they are hard to find unless you physically meet the people behind them.&lt;/p&gt;

&lt;p&gt;This recurring experience highlights a missing piece in the open ecosystem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the discovery layer is incomplete.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search engines index code. Platforms index repositories. Conferences reveal communities. But there is no universal, structured way for projects to declare:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;who they are&lt;/li&gt;
  &lt;li&gt;how they operate&lt;/li&gt;
  &lt;li&gt;how others can participate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a missing key, not to access the code, but to understand the collaboration around it.&lt;/p&gt;

&lt;h2 id=&quot;beyond-open-source-a-shared-challenge&quot;&gt;Beyond open source: a shared challenge&lt;/h2&gt;

&lt;p&gt;The challenge is not limited to software.&lt;/p&gt;

&lt;p&gt;Across ecosystems we see similar issues:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Domain&lt;/th&gt;
      &lt;th&gt;Example Questions&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Open Source&lt;/td&gt;
      &lt;td&gt;Who maintains the project? Who funds development?&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Open Data&lt;/td&gt;
      &lt;td&gt;Who produces the dataset? Who curates it?&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Open Standards&lt;/td&gt;
      &lt;td&gt;Who participates in working groups? Who implements the standard?&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Research&lt;/td&gt;
      &lt;td&gt;Which institutions contribute to which initiatives?&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;These domains overlap constantly. A single organization may:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;maintain open source tools&lt;/li&gt;
  &lt;li&gt;publish open datasets&lt;/li&gt;
  &lt;li&gt;contribute to standards bodies&lt;/li&gt;
  &lt;li&gt;depend on other open projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there is no simple, structured way to describe these relationships consistently.&lt;/p&gt;

&lt;h2 id=&quot;the-hidden-structural-problem-centralized-directories&quot;&gt;The hidden structural problem: centralized directories&lt;/h2&gt;

&lt;p&gt;Another, less visible issue exists in today’s open ecosystem: centralized discovery.&lt;/p&gt;

&lt;p&gt;Many catalogues, registries, and directories attempt to index open projects. While useful, they often share a structural limitation:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A single platform or organization becomes the gatekeeper of discovery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice, this means:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;inclusion depends on platform policies&lt;/li&gt;
  &lt;li&gt;metadata formats are platform specific&lt;/li&gt;
  &lt;li&gt;projects must register manually&lt;/li&gt;
  &lt;li&gt;ecosystem visibility depends on maintaining accounts in external systems&lt;/li&gt;
  &lt;li&gt;long term sustainability relies on the continued existence of one operator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even in open ecosystems, discovery frequently depends on a central directory holding the “golden key” to visibility.&lt;/p&gt;

&lt;p&gt;This creates several risks:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;single points of failure&lt;/li&gt;
  &lt;li&gt;loss of neutrality&lt;/li&gt;
  &lt;li&gt;vendor or platform lock in&lt;/li&gt;
  &lt;li&gt;incomplete ecosystem representation&lt;/li&gt;
  &lt;li&gt;barriers for smaller or independent initiatives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Openness should not depend on a single registry.&lt;/p&gt;

&lt;h2 id=&quot;the-idea-describe-contributions-as-first-class-metadata&quot;&gt;The idea: describe contributions as first class metadata&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor (OCD)&lt;/a&gt; introduces a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Contributions themselves should be described using an open, structured, machine readable format published directly by the project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of embedding contribution information informally in documentation, projects publish a descriptor file that answers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is this initiative?&lt;/li&gt;
  &lt;li&gt;What type of openness does it represent?&lt;/li&gt;
  &lt;li&gt;Who contributes?&lt;/li&gt;
  &lt;li&gt;How can others contribute?&lt;/li&gt;
  &lt;li&gt;What roles exist?&lt;/li&gt;
  &lt;li&gt;How are decisions made?&lt;/li&gt;
  &lt;li&gt;Where are the contribution entry points?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace existing documentation but to standardize discovery and mapping.&lt;/p&gt;

&lt;h2 id=&quot;a-standardized-discovery-location&quot;&gt;A standardized discovery location&lt;/h2&gt;

&lt;p&gt;To make automated discovery reliable, the descriptor is published in a predictable location using a well known URI.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor (OCD)&lt;/a&gt; is stored as a JSON document named:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.well-known/open-contributions.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This follows the established &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.well-known&lt;/code&gt; convention defined by &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8615&quot;&gt;RFC 8615&lt;/a&gt;, which allows services and metadata to be discovered automatically at standardized paths on a domain.&lt;/p&gt;

&lt;p&gt;By placing the descriptor at a well known location:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;crawlers know exactly where to look&lt;/li&gt;
  &lt;li&gt;projects remain in control of their metadata&lt;/li&gt;
  &lt;li&gt;discovery becomes interoperable across platforms&lt;/li&gt;
  &lt;li&gt;no registration in external directories is required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To formalize this approach, a registration request for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open-contributions.json&lt;/code&gt; well known URI has been submitted to IANA:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/protocol-registries/well-known-uris/issues/78&quot;&gt;https://github.com/protocol-registries/well-known-uris/issues/78&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This step is important because it moves the descriptor from an informal convention toward an Internet recognized discovery mechanism, reinforcing long term interoperability and neutrality.&lt;/p&gt;

&lt;h2 id=&quot;decentralized-discovery-by-design&quot;&gt;Decentralized discovery by design&lt;/h2&gt;

&lt;p&gt;A key property of the &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor&lt;/a&gt; is directory independence.&lt;/p&gt;

&lt;p&gt;The descriptor lives with the project or organization itself, not inside a centralized platform.&lt;/p&gt;

&lt;p&gt;This changes the discovery model fundamentally:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Traditional Model&lt;/th&gt;
      &lt;th&gt;OCD Model&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Register project in a directory&lt;/td&gt;
      &lt;td&gt;Publish descriptor in repository&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Directory owns metadata&lt;/td&gt;
      &lt;td&gt;Project owns metadata&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Central authority curates&lt;/td&gt;
      &lt;td&gt;Anyone can crawl&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;One catalogue&lt;/td&gt;
      &lt;td&gt;Many interoperable catalogues&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Platform dependency&lt;/td&gt;
      &lt;td&gt;Ecosystem independence&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Anyone can build a crawler that discovers descriptors across repositories, websites, or data portals.&lt;/p&gt;

&lt;p&gt;There is no central registry required.&lt;/p&gt;

&lt;p&gt;Multiple catalogues can coexist:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;research indexes&lt;/li&gt;
  &lt;li&gt;public sector inventories&lt;/li&gt;
  &lt;li&gt;community driven directories&lt;/li&gt;
  &lt;li&gt;organizational dashboards&lt;/li&gt;
  &lt;li&gt;academic analysis platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This mirrors the architecture of the web itself:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;No single organization owns websites. Search engines discover them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Open Contributions Descriptor applies the same philosophy to open collaboration.&lt;/p&gt;

&lt;h2 id=&quot;design-principles&quot;&gt;Design principles&lt;/h2&gt;

&lt;p&gt;When designing the Open Contributions Descriptor, several principles guided the work.&lt;/p&gt;

&lt;h3 id=&quot;domain-agnostic-openness&quot;&gt;Domain agnostic openness&lt;/h3&gt;

&lt;p&gt;The format works across:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;open source&lt;/li&gt;
  &lt;li&gt;open data&lt;/li&gt;
  &lt;li&gt;open standards&lt;/li&gt;
  &lt;li&gt;open research&lt;/li&gt;
  &lt;li&gt;open infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It avoids domain specific assumptions while remaining expressive.&lt;/p&gt;

&lt;h3 id=&quot;human-readable-first&quot;&gt;Human readable first&lt;/h3&gt;

&lt;p&gt;The descriptor is meant to be understandable without tooling.&lt;/p&gt;

&lt;p&gt;A contributor should be able to open the file and immediately understand:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;who is involved&lt;/li&gt;
  &lt;li&gt;how participation works&lt;/li&gt;
  &lt;li&gt;where contributions happen&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;machine-readable-by-design&quot;&gt;Machine readable by design&lt;/h3&gt;

&lt;p&gt;At the same time, the format is structured so that tools can easily:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;parse descriptors&lt;/li&gt;
  &lt;li&gt;crawl repositories&lt;/li&gt;
  &lt;li&gt;build catalogues&lt;/li&gt;
  &lt;li&gt;map ecosystems&lt;/li&gt;
  &lt;li&gt;analyze contribution networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This enables automation without sacrificing clarity.&lt;/p&gt;

&lt;h3 id=&quot;lightweight-adoption&quot;&gt;Lightweight adoption&lt;/h3&gt;

&lt;p&gt;Projects should not need governance reform to describe themselves.&lt;/p&gt;

&lt;p&gt;Many existing directories and metadata formats are designed by committees attempting to normalize the diversity of open ecosystems through rigid governance models. While often well intentioned, they tend to introduce complex requirements, mandatory classifications, approval workflows, or artificial eligibility rules that projects must satisfy before being listed.&lt;/p&gt;

&lt;p&gt;In practice, this leads to several problems:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;projects must adapt their governance to fit the directory rather than the reverse&lt;/li&gt;
  &lt;li&gt;contributors spend time complying with administrative requirements instead of building software or data&lt;/li&gt;
  &lt;li&gt;smaller or unconventional projects are excluded because they do not match predefined models&lt;/li&gt;
  &lt;li&gt;innovation is constrained by bureaucratic assumptions about how projects &lt;em&gt;should&lt;/em&gt; operate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over time, such rules unintentionally reduce the usefulness of directories themselves. The more constraints imposed, the less representative the catalogue becomes.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor&lt;/a&gt; takes the opposite approach.&lt;/p&gt;

&lt;p&gt;Instead of committees defining how projects must behave, projects simply describe how they already work.&lt;/p&gt;

&lt;p&gt;There is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;no approval process&lt;/li&gt;
  &lt;li&gt;no governance validation&lt;/li&gt;
  &lt;li&gt;no mandatory organizational structure&lt;/li&gt;
  &lt;li&gt;no centralized interpretation of legitimacy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The descriptor lowers the barrier to participation by adapting to reality rather than attempting to standardize it.&lt;/p&gt;

&lt;h3 id=&quot;independence-and-sovereignty&quot;&gt;Independence and sovereignty&lt;/h3&gt;

&lt;p&gt;Perhaps most importantly:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Projects remain sovereign over how they describe themselves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No platform approval is required.
No centralized authority controls visibility.
No organization holds the authoritative directory.&lt;/p&gt;

&lt;p&gt;Descriptors enable an ecosystem where discovery emerges organically from openly published metadata.&lt;/p&gt;

&lt;h2 id=&quot;what-the-open-contributions-descriptor-enables&quot;&gt;What the Open Contributions Descriptor enables&lt;/h2&gt;

&lt;h3 id=&quot;mapping-the-open-ecosystem&quot;&gt;Mapping the open ecosystem&lt;/h3&gt;

&lt;p&gt;Imagine being able to automatically discover:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;all projects maintained by a given organization&lt;/li&gt;
  &lt;li&gt;datasets linked to specific software&lt;/li&gt;
  &lt;li&gt;standards implemented by certain communities&lt;/li&gt;
  &lt;li&gt;contribution entry points across ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Descriptors allow building living maps of openness without centralized ownership.&lt;/p&gt;

&lt;h3 id=&quot;easier-onboarding-for-contributors&quot;&gt;Easier onboarding for contributors&lt;/h3&gt;

&lt;p&gt;New contributors often ask:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Where do I start?&lt;/li&gt;
  &lt;li&gt;Who should I contact?&lt;/li&gt;
  &lt;li&gt;What skills are needed?&lt;/li&gt;
  &lt;li&gt;How do decisions work?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of searching multiple documents, a descriptor provides a structured overview.&lt;/p&gt;

&lt;h3 id=&quot;transparency-and-recognition&quot;&gt;Transparency and recognition&lt;/h3&gt;

&lt;p&gt;Organizations increasingly want to demonstrate their participation in open ecosystems.&lt;/p&gt;

&lt;p&gt;The descriptor allows them to clearly expose:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;roles&lt;/li&gt;
  &lt;li&gt;responsibilities&lt;/li&gt;
  &lt;li&gt;contributions&lt;/li&gt;
  &lt;li&gt;collaboration models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves recognition without requiring manual reporting or third party platforms.&lt;/p&gt;

&lt;h3 id=&quot;machine-discoverable-catalogues-plural-not-singular&quot;&gt;Machine discoverable catalogues, plural not singular&lt;/h3&gt;

&lt;p&gt;One of the core objectives is enabling automated catalogues of:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;open source projects&lt;/li&gt;
  &lt;li&gt;open datasets&lt;/li&gt;
  &lt;li&gt;open standards initiatives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importantly, there is not one catalogue. Anyone can build one. Competition, diversity, and experimentation become possible because the metadata layer is open and decentralized.&lt;/p&gt;

&lt;h2 id=&quot;a-simple-mental-model&quot;&gt;A simple mental model&lt;/h2&gt;

&lt;p&gt;Think of the Open Contributions Descriptor as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;package.json for contributions&lt;/li&gt;
  &lt;li&gt;robots.txt for openness&lt;/li&gt;
  &lt;li&gt;metadata for collaboration&lt;/li&gt;
  &lt;li&gt;DNS for open participation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It tells both humans and machines:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Here is how this open initiative works and how you can participate.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;example-use-cases&quot;&gt;Example use cases&lt;/h2&gt;

&lt;h3 id=&quot;open-source-project&quot;&gt;Open source project&lt;/h3&gt;

&lt;p&gt;A project publishes an OCD file (&lt;a href=&quot;https://www.misp-project.org/.well-known/open-contributions.json&quot;&gt;MISP project open-contributions.json file&lt;/a&gt;) describing:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;maintainers and governance&lt;/li&gt;
  &lt;li&gt;contribution guidelines&lt;/li&gt;
  &lt;li&gt;communication channels&lt;/li&gt;
  &lt;li&gt;funding or supporting organizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools can automatically include it in multiple independent catalogues.&lt;/p&gt;

&lt;h3 id=&quot;open-data-platform&quot;&gt;Open data platform&lt;/h3&gt;

&lt;p&gt;A dataset provider describes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;data producers&lt;/li&gt;
  &lt;li&gt;curators&lt;/li&gt;
  &lt;li&gt;update responsibilities&lt;/li&gt;
  &lt;li&gt;contribution workflows&lt;/li&gt;
  &lt;li&gt;licensing and reuse expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researchers can discover participation opportunities instantly.&lt;/p&gt;

&lt;h3 id=&quot;open-standards-working-group&quot;&gt;Open standards working group&lt;/h3&gt;

&lt;p&gt;A standards initiative describes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;working groups&lt;/li&gt;
  &lt;li&gt;participation model&lt;/li&gt;
  &lt;li&gt;implementation communities&lt;/li&gt;
  &lt;li&gt;decision processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementers gain clarity without navigating institutional silos.&lt;/p&gt;

&lt;h2 id=&quot;why-a-standard-matters&quot;&gt;Why a standard matters&lt;/h2&gt;

&lt;p&gt;Without a shared descriptor:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;every ecosystem reinvents metadata&lt;/li&gt;
  &lt;li&gt;automation becomes brittle&lt;/li&gt;
  &lt;li&gt;discovery remains centralized or manual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A common format enables interoperability between communities that historically evolved separately but now collaborate closely.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor&lt;/a&gt; aims to become a common language for openness without central control.&lt;/p&gt;

&lt;h2 id=&quot;open-by-design&quot;&gt;Open by design&lt;/h2&gt;

&lt;p&gt;The specification itself is openly developed and available here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor/blob/main/format.md&quot;&gt;https://github.com/ossbase-org/Open-Contributions-Descriptor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is community driven evolution:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;feedback from open source maintainers&lt;/li&gt;
  &lt;li&gt;adoption by open data platforms&lt;/li&gt;
  &lt;li&gt;experimentation by standards bodies&lt;/li&gt;
  &lt;li&gt;tooling built by ecosystem builders&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-comes-next&quot;&gt;What comes next&lt;/h2&gt;

&lt;p&gt;The real value of the Open Contributions Descriptor will emerge through adoption and tooling, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;decentralized ecosystem crawlers&lt;/li&gt;
  &lt;li&gt;contribution dashboards&lt;/li&gt;
  &lt;li&gt;organizational impact mapping&lt;/li&gt;
  &lt;li&gt;research analysis&lt;/li&gt;
  &lt;li&gt;federated discovery platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We envision a future where understanding the open ecosystem becomes as easy as querying a search engine, powered by structured contribution metadata published at the source.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Open ecosystems depend on collaboration, but collaboration itself is still poorly described and too often centrally indexed.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;Open Contributions Descriptor&lt;/a&gt; is a small but important step toward making openness discoverable, understandable, decentralized, and measurable.&lt;/p&gt;

&lt;p&gt;By standardizing how contributions are described, we can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;lower barriers to participation&lt;/li&gt;
  &lt;li&gt;increase transparency&lt;/li&gt;
  &lt;li&gt;preserve ecosystem independence&lt;/li&gt;
  &lt;li&gt;avoid centralized gatekeeping&lt;/li&gt;
  &lt;li&gt;recognize contributors&lt;/li&gt;
  &lt;li&gt;map the global landscape of open collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If open source made code visible, and open data made information visible, the next step is clear:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Make contributions visible without giving anyone the golden key.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://discourse.ossbase.org/t/open-contributions-descriptor/1024&quot;&gt;Contributions&lt;/a&gt;, feedback, and experimentation are welcome because describing openness should itself be open.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Git repository of the Open Contributions Descriptor: &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor&quot;&gt;https://github.com/ossbase-org/Open-Contributions-Descriptor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Online tool to browse or create/edit Open Contributions Descriptor file: &lt;a href=&quot;https://ossbase-org.github.io/ocd-viewer/app/home.html&quot;&gt;https://ossbase-org.github.io/ocd-viewer/app/home.html&lt;/a&gt; - Git repository &lt;a href=&quot;https://github.com/ossbase-org/ocd-viewer&quot;&gt;https://github.com/ossbase-org/ocd-viewer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub organisation generator to Open Contribution Descriptor format: &lt;a href=&quot;https://github.com/ossbase-org/Open-Contributions-Descriptor/blob/main/bin/github-to-ocd.py&quot;&gt;https://github.com/ossbase-org/Open-Contributions-Descriptor/blob/main/bin/github-to-ocd.py&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discourse.ossbase.org/t/open-contributions-descriptor/1024&quot;&gt;Discourse topic about OCD format&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://www.misp-project.org/.well-known/open-contributions.json&quot;&gt;sample OCD file&lt;/a&gt; for the MISP project.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:fragmented&quot;&gt;
      &lt;p&gt;The term &lt;em&gt;fragmented&lt;/em&gt; is often perceived negatively, suggesting disorder or inefficiency. In open ecosystems, however, fragmentation is largely a &lt;strong&gt;strength&lt;/strong&gt;. It reflects diversity, independence, resilience, and experimentation across communities rather than centralized control. The challenge is therefore not to eliminate fragmentation, but to make it discoverable and understandable without reducing its autonomy. &lt;a href=&quot;#fnref:fragmented&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 01 Mar 2026 11:02:00 +0100</pubDate>
        <link>https://www.foo.be/2026/03/open-contributions-descriptor</link>
        <guid isPermaLink="true">https://www.foo.be/2026/03/open-contributions-descriptor</guid>
        
        
        <category>opensource</category>
        
        <category>metadata</category>
        
        <category>opendata</category>
        
        <category>openstandard</category>
        
      </item>
    
      <item>
        <title>Acknowledging Reality in Vulnerability Disclosure</title>
        <description>&lt;h1 id=&quot;full-disclosure-still-exists-and-thats-exactly-the-point&quot;&gt;Full Disclosure Still Exists and That’s Exactly the Point&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Disclaimer:&lt;/em&gt;  This post is grounded in personal experience and roughly &lt;em&gt;25 years of interaction with vulnerability management&lt;/em&gt;, across vendors, researchers, operators, CERTs, and open communities. It does not claim neutrality or theoretical purity. It reflects what repeatedly emerges when disclosure leaves policy documents and meets reality. In other words, this is my bloody personal blog, not an official statement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every few years, vulnerability disclosure is declared &lt;em&gt;settled&lt;/em&gt;. We are told that the ecosystem has matured, that &lt;em&gt;coordinated disclosure&lt;/em&gt; is the answer, and that whatever remains outside this model is either irresponsible, obsolete, or simply irrelevant.&lt;/p&gt;

&lt;p&gt;And yet, full disclosure is still here.&lt;/p&gt;

&lt;p&gt;Not as a historical artifact, not as a provocation but as an active, lived practice that continues to coexist with other disclosure models.&lt;/p&gt;

&lt;p&gt;This blog post explains &lt;strong&gt;why this coexistence matters&lt;/strong&gt;, why the evolution of vulnerability disclosure is &lt;strong&gt;not linear&lt;/strong&gt;, and why initiatives like &lt;strong&gt;&lt;a href=&quot;https://gcve.eu/&quot;&gt;GCVE&lt;/a&gt;&lt;/strong&gt; deliberately choose to support &lt;em&gt;all&lt;/em&gt; disclosure models instead of promoting a single “correct” one.&lt;/p&gt;

&lt;h2 id=&quot;the-myth-of-linear-progress-in-disclosure&quot;&gt;The Myth of Linear Progress in Disclosure&lt;/h2&gt;

&lt;p&gt;A common narrative goes like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We started with full disclosure → we learned better → we now do responsible or coordinated disclosure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This framing is comforting. It suggests progress, maturity, and consensus. It is also misleading.&lt;/p&gt;

&lt;p&gt;In reality, vulnerability disclosure did &lt;strong&gt;not&lt;/strong&gt; evolve along a single axis.&lt;/p&gt;

&lt;p&gt;What we have instead is a &lt;strong&gt;non-linear space of practices&lt;/strong&gt;, shaped by:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Legal constraints&lt;/li&gt;
  &lt;li&gt;Power asymmetries&lt;/li&gt;
  &lt;li&gt;Time pressure&lt;/li&gt;
  &lt;li&gt;Risk tolerance&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Economic incentives&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The disclosure landscape includes, and continues to include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Full disclosure&lt;/li&gt;
  &lt;li&gt;Responsible disclosure&lt;/li&gt;
  &lt;li&gt;Coordinated disclosure&lt;/li&gt;
  &lt;li&gt;Vendor-led disclosure&lt;/li&gt;
  &lt;li&gt;Third-party publication&lt;/li&gt;
  &lt;li&gt;Silent or delayed disclosure&lt;/li&gt;
  &lt;li&gt;Federated or community-driven publication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These models exist &lt;strong&gt;in parallel&lt;/strong&gt;, not as steps in a staircase.&lt;br /&gt;
They are chosen, combined, or abandoned depending on context.&lt;/p&gt;

&lt;h2 id=&quot;economics-the-hidden-driver-of-disclosure-models&quot;&gt;Economics: The Hidden Driver of Disclosure Models&lt;/h2&gt;

&lt;p&gt;Vulnerability disclosure is not only a technical or ethical process.&lt;br /&gt;
It is also an &lt;strong&gt;economic one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Disclosure mechanisms range from:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Gratis, volunteer-driven reporting&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Academic or community research&lt;/li&gt;
  &lt;li&gt;Contractual security assessments&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Paid vulnerability programs&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Expensive, highly structured bug bounty processes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these comes with:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Different expectations&lt;/li&gt;
  &lt;li&gt;Different timelines&lt;/li&gt;
  &lt;li&gt;Different power relationships&lt;/li&gt;
  &lt;li&gt;Different notions of “responsibility”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A researcher working for free does not operate under the same constraints as:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A consultant under contract&lt;/li&gt;
  &lt;li&gt;A bug bounty hunter optimizing return on investment&lt;/li&gt;
  &lt;li&gt;A vendor-funded security team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Economic incentives shape:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;When vulnerabilities are disclosed&lt;/li&gt;
  &lt;li&gt;To whom they are disclosed&lt;/li&gt;
  &lt;li&gt;Under what conditions&lt;/li&gt;
  &lt;li&gt;With what level of detail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ignoring this economic dimension leads to unrealistic disclosure policies that assume goodwill, time, and resources are evenly distributed. They are not.&lt;/p&gt;

&lt;h2 id=&quot;actors-are-not-rational-and-not-aligned&quot;&gt;Actors Are Not Rational and Not Aligned&lt;/h2&gt;

&lt;p&gt;Another recurring simplification is the idea that vulnerability disclosure is a cooperative game between rational actors working toward the same goal.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vendors balance security, liability, brand perception, and business continuity.&lt;/li&gt;
  &lt;li&gt;Researchers operate under ethical pressure, legal uncertainty, time constraints, and economic reality.&lt;/li&gt;
  &lt;li&gt;Users are downstream actors with limited visibility and little bargaining power.&lt;/li&gt;
  &lt;li&gt;Intermediaries (CERTs, CSIRTs, platforms) act under mandates that vary widely across jurisdictions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These actors &lt;strong&gt;do not share the same incentives&lt;/strong&gt;, and they are not playing the same game.&lt;/p&gt;

&lt;p&gt;So when someone says:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;“The legal framework will solve it”&lt;/li&gt;
  &lt;li&gt;“Just do coordinated disclosure”&lt;/li&gt;
  &lt;li&gt;“If it’s not coordinated, it doesn’t exist”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What they are really doing is &lt;strong&gt;reducing the problem space&lt;/strong&gt; to the subset they are comfortable managing.&lt;/p&gt;

&lt;p&gt;The remaining cases do not vanish. They simply become &lt;em&gt;unaccounted for&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;why-gcve-exists&quot;&gt;Why GCVE Exists&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gcve.eu/&quot;&gt;GCVE&lt;/a&gt; was not created to replace existing identifiers, processes, or disclosure norms.&lt;/p&gt;

&lt;p&gt;It was created to &lt;strong&gt;support all disclosure models&lt;/strong&gt;, including:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Centralized systems&lt;/li&gt;
  &lt;li&gt;Decentralized or federated approaches&lt;/li&gt;
  &lt;li&gt;Vendor-driven workflows&lt;/li&gt;
  &lt;li&gt;Independent or community-based publication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GCVE explicitly does &lt;strong&gt;not&lt;/strong&gt; take sides in these tensions.&lt;/p&gt;

&lt;p&gt;Instead, it assumes something pragmatic:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Vulnerability information exists regardless of how or whether it was disclosed “properly”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The purpose of &lt;a href=&quot;https://gcve.eu/&quot;&gt;GCVE&lt;/a&gt; is not to normalize behavior, but to ensure that &lt;strong&gt;once vulnerability information exists, it can be referenced, processed, and consumed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ignoring inconvenient disclosures does not improve security. It only weakens collective awareness.&lt;/p&gt;

&lt;h2 id=&quot;freedom-accessibility-and-security-intelligence&quot;&gt;Freedom, Accessibility, and Security Intelligence&lt;/h2&gt;

&lt;p&gt;One of the more controversial aspects of GCVE is the level of freedom it gives to GNAs (GCVE Numbering Authorities).&lt;/p&gt;

&lt;p&gt;This freedom is deliberate.&lt;/p&gt;

&lt;p&gt;Cybersecurity intelligence does not improve by keeping information unknown.&lt;br /&gt;
It improves through &lt;strong&gt;accessibility&lt;/strong&gt;, &lt;strong&gt;correlation&lt;/strong&gt;, and &lt;strong&gt;contextualization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For users, defenders, and analysts, the central question is not:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;“Was this vulnerability disclosed in the ideal way?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;“Can this vulnerability affect me, my systems, or my dependencies?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without accessible information:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Risk cannot be evaluated&lt;/li&gt;
  &lt;li&gt;Impact cannot be assessed&lt;/li&gt;
  &lt;li&gt;Mitigations cannot be prioritized and performed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GCVE is built on the idea that &lt;strong&gt;users must be able to access vulnerability information&lt;/strong&gt;, even when the disclosure path is imperfect, contested, or economically asymmetric.&lt;/p&gt;

&lt;p&gt;Freedom here does not mean absence of accountability.&lt;br /&gt;
It means &lt;strong&gt;not blocking information at the source&lt;/strong&gt;, while allowing consumers to decide how to interpret and trust it.&lt;/p&gt;

&lt;h2 id=&quot;why-gcve-uses-bcps-instead-of-enforcement&quot;&gt;Why GCVE Uses BCPs Instead of Enforcement&lt;/h2&gt;

&lt;p&gt;A frequent question is:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Why don’t you require GNAs to follow strict rules?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because strict enforcement inevitably creates:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Gatekeepers&lt;/li&gt;
  &lt;li&gt;Central authority&lt;/li&gt;
  &lt;li&gt;Single points of failure&lt;/li&gt;
  &lt;li&gt;Implicit power over publication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GCVE instead defines &lt;strong&gt;&lt;a href=&quot;https://gcve.eu/bcp/#published-bcp&quot;&gt;Best Current Practices (BCPs)&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Descriptive rather than prescriptive&lt;/li&gt;
  &lt;li&gt;Transparent rather than coercive&lt;/li&gt;
  &lt;li&gt;Evolvable rather than rigid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach does &lt;strong&gt;not&lt;/strong&gt; prevent:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Public evaluation of GNAs&lt;/li&gt;
  &lt;li&gt;Rating or scoring their behavior&lt;/li&gt;
  &lt;li&gt;Highlighting poor or exemplary practices&lt;/li&gt;
  &lt;li&gt;Making trust an explicit, visible signal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it avoids is using &lt;strong&gt;access control as governance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Freedom is uncomfortable (and many of us know that fact). It allows outcomes that some actors will strongly disagree with.&lt;/p&gt;

&lt;p&gt;But it also allows vulnerability information to exist &lt;strong&gt;before consensus&lt;/strong&gt;, &lt;strong&gt;outside institutional comfort zones&lt;/strong&gt;, and &lt;strong&gt;without requiring permission&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;federation-is-dangerous-weve-heard-this-before&quot;&gt;“Federation Is Dangerous”, We’ve Heard This Before&lt;/h2&gt;

&lt;p&gt;Some criticism around GCVE focuses on the perceived danger of federation:
fragmentation, &lt;em&gt;balkanisation&lt;/em&gt;, loss of control.&lt;/p&gt;

&lt;p&gt;These arguments are not new.&lt;/p&gt;

&lt;p&gt;They closely mirror the concerns raised when &lt;strong&gt;Git&lt;/strong&gt; was introduced:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;“It will fragment codebases” &lt;a href=&quot;https://dl.acm.org/doi/epdf/10.1145/2597073.2597074&quot;&gt;The Promises and Perils of Mining GitHub, 2014&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;“There will be no single source of truth” &lt;a href=&quot;https://martinfowler.com/bliki/VersionControlTools.html&quot;&gt;Version Control Tools, Martin Fowler, 2010&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;“People will do the wrong thing” &lt;a href=&quot;https://web.archive.org/web/20131230194321/https://people.csail.mit.edu/sperezde/onward13.pdf&quot;&gt;What’s Wrong with Git? A Conceptual Design Analysis, 2013&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;History suggests otherwise. Federation does not remove coordination it &lt;strong&gt;relocates it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And to be clear: GCVE does not mandate federation.&lt;br /&gt;
Centralized models remain fully supported.&lt;/p&gt;

&lt;p&gt;As a side note: if GCVE reaches even &lt;strong&gt;1% of Git’s success&lt;/strong&gt;, we would already consider that a major achievement. (Yes, that is both a joke and a realistic benchmark.)&lt;/p&gt;

&lt;h2 id=&quot;gcve-and-a-non-reductionist-view-of-disclosure&quot;&gt;GCVE and a Non-Reductionist View of Disclosure&lt;/h2&gt;

&lt;p&gt;Saying “this disclosure model no longer exists” does not make it true.&lt;br /&gt;
It only narrows the analytical lens.&lt;/p&gt;

&lt;p&gt;GCVE takes a non-reductionist approach by focusing on &lt;strong&gt;what vulnerability information needs in practice&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Machine-readability&lt;/li&gt;
  &lt;li&gt;Stable identifiers&lt;/li&gt;
  &lt;li&gt;Open formats&lt;/li&gt;
  &lt;li&gt;Automatic processing&lt;/li&gt;
  &lt;li&gt;Interoperability across tools and ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GCVE is designed as an &lt;strong&gt;open standard&lt;/strong&gt; enabling:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Correlation across datasets&lt;/li&gt;
  &lt;li&gt;Automated ingestion&lt;/li&gt;
  &lt;li&gt;Enrichment by third parties&lt;/li&gt;
  &lt;li&gt;Integration into security tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This applies equally to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Proprietary software&lt;/li&gt;
  &lt;li&gt;Open source software&lt;/li&gt;
  &lt;li&gt;Hybrid supply chains&lt;/li&gt;
  &lt;li&gt;Federated ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is not to enforce a single disclosure workflow, but to ensure that &lt;strong&gt;all vulnerability information (regardless of origin, model, or economic context) can participate in the same analytical space&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;complexity-is-the-reality-not-the-problem&quot;&gt;Complexity Is the Reality. Not the Problem.&lt;/h2&gt;

&lt;p&gt;Vulnerability disclosure is messy. It is legal, economic, technical, political, and human.&lt;/p&gt;

&lt;p&gt;Any framework that assumes otherwise will fail at the margins — precisely where many real-world vulnerabilities exist.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gcve.eu/&quot;&gt;GCVE&lt;/a&gt; does not attempt to simplify this reality away.&lt;br /&gt;
It attempts to &lt;strong&gt;acknowledge it, structure it, and make it usable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not by declaring one model correct,&lt;br /&gt;
but by accepting that &lt;strong&gt;security depends on visibility, not denial&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is not a weakness.&lt;/p&gt;

&lt;p&gt;It is the point.&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Feb 2026 13:02:00 +0100</pubDate>
        <link>https://www.foo.be/2026/02/Acknowledging-Reality-in-Vulnerability-Disclosure</link>
        <guid isPermaLink="true">https://www.foo.be/2026/02/Acknowledging-Reality-in-Vulnerability-Disclosure</guid>
        
        
        <category>cybersecurity</category>
        
        <category>cvd</category>
        
        <category>cve</category>
        
        <category>gcve</category>
        
      </item>
    
      <item>
        <title>The Art of Pivoting - Techniques for Intelligence Analysts to Discover New Relationships in a Complex World</title>
        <description>&lt;p&gt;This open source book explores how intelligence and cyber-security analysts can uncover hidden links between threat actor infrastructure and ongoing investigations by pivoting on both classic and unconventional indicators — many of which are often overlooked. The material is grounded in empirical, field-tested strategies used in cyber-security, digital forensics, cyber threat intelligence, and intelligence analysis more broadly.&lt;/p&gt;

&lt;p&gt;I released the first version of this book following the FIRST.org CTI Conference 2025 in Berlin, where the initial idea for the project emerged.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/verdier.jpg&quot; alt=&quot;The photography was taken by Alexandre Dulaunoy at Poétique de la ligne, exposition de Fabienne Verdier au Domaine de Chaumont-sur-Loire, 2025.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Our goal is to provide analysts with a practical toolkit of analytical methods, supported by real-world examples, to enhance investigative workflows without locking them into a single mindset, strict model, or overly rigid technical strategy. Instead, the book encourages creative exploration, data-driven reasoning, and the use of diverse data points — from traditional IOCs to subtle metadata traces — as part of a flexible and repeatable analytical process.&lt;/p&gt;

&lt;p&gt;The approach presented throughout this book is intentionally built upon open-source tooling, most notably the MISP threat intelligence platform and the AIL Project. By relying on transparent and widely adopted tools, every technique described here can be reproduced, validated, and reused by analysts, researchers, educators, or incident response teams. This ensures that the methodology is not theoretical or proprietary, but openly verifiable, community-driven, and designed to evolve. The book itself follows the same philosophy: it is an open, living document, publicly versioned, and contributions are &lt;a href=&quot;https://github.com/adulau/the-art-of-pivoting&quot;&gt;welcomed directly via Git&lt;/a&gt;. Readers are encouraged to experiment, improve, and extend the content, making the entire workflow repeatable, auditable, and collaborative within the wider defensive security community.&lt;/p&gt;

&lt;h1 id=&quot;background-story&quot;&gt;Background Story&lt;/h1&gt;

&lt;p&gt;This book grew out of an iterative, hands-on process tightly coupled with our day-to-day work. Rather than starting from a fixed theory, it evolved alongside real investigations—tracking threat actors, uncovering infrastructure, and experimenting with unconventional pivoting techniques as new challenges emerged.&lt;/p&gt;

&lt;p&gt;Each discovery fed back into our tooling: ideas were tested, adjusted, sometimes discarded, and often refined through repeated use. This constant loop of observation, experimentation, and validation shaped both the content of the book and the evolution of the tools supporting it.&lt;/p&gt;

&lt;p&gt;Much of this work happened in motion—on trains during daily commutes, between incidents, or while reviewing fresh data. That constraint encouraged pragmatism: techniques had to be simple enough to apply quickly, yet powerful enough to reveal meaningful connections. The result is a book that reflects continuous learning in practice, grounded in real-world analysis rather than static models.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🔗 &lt;a href=&quot;https://raw.githubusercontent.com/adulau/the-art-of-pivoting/refs/heads/main/output/the-art-of-pivoting.pdf&quot;&gt;PDF - The Art of Pivoting&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;🔗 &lt;a href=&quot;https://github.com/adulau/the-art-of-pivoting&quot;&gt;Source of the book in Markdown&lt;/a&gt; (if you want to contribute ;-)&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 20 Dec 2025 09:02:00 +0100</pubDate>
        <link>https://www.foo.be/2025/12/the-art-of-pivoting</link>
        <guid isPermaLink="true">https://www.foo.be/2025/12/the-art-of-pivoting</guid>
        
        
        <category>cybersecurity</category>
        
        <category>threat-intelligence</category>
        
        <category>cti</category>
        
        <category>open-source</category>
        
      </item>
    
      <item>
        <title>How to Choose an Open Source Project for the Long Term</title>
        <description>&lt;p&gt;How to Choose an Open Source Project for the Long Term&lt;/p&gt;

&lt;p&gt;&lt;em&gt;version 1.0 - 25th May 2025&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Many of us face the challenge of selecting open source projects for long-term use. This could involve choosing dependencies for your own open source project, or simply selecting software you plan to run and rely on over time.&lt;/p&gt;

&lt;p&gt;After experiencing multiple failures, disappointments with projects that turned proprietary, or even the complete disappearance of some repositories, I decided to compile a list of parameters, indicators, and signals that might help identify solid, sustainable open source projects, as well as warning signs that could indicate potential risks.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/review.jpg&quot; alt=&quot;a bigger splash&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;cla---contributor-license-agreement&quot;&gt;CLA - Contributor License Agreement&lt;/h2&gt;

&lt;p&gt;One of the first and most important parameters to consider is the CLA (Contributor License Agreement). As you may know, a CLA is a legal tool but it can be misused to lock in contributions while allowing the original creator (often an organization, but not always) to relicense the work under any terms they choose.&lt;/p&gt;

&lt;p&gt;In my personal experience with CLAs over the past 25 years, &lt;em&gt;&lt;a href=&quot;https://infosec.exchange/@adulau/114546480279205323&quot;&gt;CLAs are just tools invented by lawyers to exploit human contributions&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you see a CLA in an open source project, it’s already a strong signal that the project might eventually be relicensed, shift its objectives, or even be rebranded by a commercial entity that views open source merely as a marketing vehicle and nothing more.&lt;/p&gt;

&lt;p&gt;If someone tells you that a CLA is there to protect you and your contributions, it’s complete bullshit. Honestly, the CLA was one of the biggest screw-ups of the FSF, it legitimized a bad practice and gave corporate borgs a free pass to exploit it for years. If you want to dig deeper, check out these excellent resources: &lt;a href=&quot;https://sfconservancy.org/blog/2014/jun/09/do-not-need-cla/&quot;&gt;Why Your Project Doesn’t Need a Contributor Licensing Agreement&lt;/a&gt;, the &lt;a href=&quot;https://ossbase.org/initiatives/cla-free/&quot;&gt;CLA-Free Initiative&lt;/a&gt;, and &lt;a href=&quot;https://drewdevault.com/2023/07/04/Dont-sign-a-CLA-2.html&quot;&gt;Seriously, don’t sign a CLA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Software can also be proprietarized even without a CLA &lt;a href=&quot;https://www.warpstream.com/blog/announcing-bento-the-open-source-fork-of-the-project-formerly-known-as-benthos&quot;&gt;just like it happened with Benthos&lt;/a&gt;. But CLAs are usually there to protect organizations, not contributors, especially shielding them from potential litigation. So yes, CLAs are strong indicators of possible bad practices down the road.&lt;/p&gt;

&lt;p&gt;On the other hand, seeing a &lt;a href=&quot;https://developercertificate.org/&quot;&gt;DCO&lt;/a&gt; (Developer Certificate of Origin) is usually a good sign. It’s not a transfer of ownership, but simply a statement that you agree (and have the right) to have your contribution included in the open source project.&lt;/p&gt;

&lt;p&gt;From a contributor’s perspective, this is a positive sign, it shows that contributors are respected and that the project is focused on building a healthy, sustainable community for the long term.&lt;/p&gt;

&lt;h2 id=&quot;does-the-project-merge-pull-requests-from-outside-their-organization&quot;&gt;Does the project merge pull requests from outside their organization?&lt;/h2&gt;

&lt;p&gt;It’s very common to see projects run by a specific organization that don’t accept any contributions from external contributors, only merging pull requests from authors within their own company. Even good contributions often get rewritten, and the original pull request is closed with a comment saying it was “merged,” even though it wasn’t.&lt;/p&gt;

&lt;p&gt;This is a classic tactic used by organizations that avoid CLAs just to appear friendly to contributors, while still sidestepping legal risk and keeping full ownership of the codebase which makes relicensing easier down the line.&lt;/p&gt;

&lt;h2 id=&quot;does-the-project-interact-with-contributors-and-especially-how&quot;&gt;Does the project interact with contributors and especially how?&lt;/h2&gt;

&lt;p&gt;Another strong indicator of a project’s long-term health is how it interacts with contributors. Are external contributors welcomed into the development process, or are they quietly pushed aside? Are they included in discussions about design decisions or the direction of a pull request, or is everything decided behind closed doors?&lt;/p&gt;

&lt;p&gt;Pay attention to how the maintainers respond to contributions. When a pull request is rejected, is there a respectful, constructive explanation, or just silence or a vague dismissal? Do maintainers engage with feedback and questions in the issue tracker or discussion forums?&lt;/p&gt;

&lt;p&gt;A healthy open source project values its community. Transparency, respectful communication, and public discussions are signs of a project that is likely to grow and survive. If you see a pattern of gatekeeping, dismissiveness, or lack of documentation around decision-making, that’s a red flag for long-term sustainability.&lt;/p&gt;

&lt;h2 id=&quot;is-the-open-source-license-a-strong-indicator-of-sustainability&quot;&gt;Is the open source license a strong indicator of sustainability?&lt;/h2&gt;

&lt;p&gt;At first, I used to think that using a copyleft-style license was a strong sign of long-term sustainability. But nowadays, I’d say it’s not a reliable indicator on its own.&lt;/p&gt;

&lt;p&gt;Of course, the license should be a proper free license, approved by the &lt;a href=&quot;https://www.gnu.org/licenses/license-list.html#SoftwareLicenses&quot;&gt;FSF&lt;/a&gt; or &lt;a href=&quot;https://opensource.org/licenses&quot;&gt;OSI&lt;/a&gt;, but that’s just the baseline for choosing an open source project. The type of open source license alone doesn’t guarantee longevity or a healthy project.&lt;/p&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;If you see a CLA, avoid the project&lt;/strong&gt;, especially if you need to rely on it for the long term.&lt;/li&gt;
  &lt;li&gt;If you see projects that &lt;strong&gt;never merge contributions and instead rewrite them&lt;/strong&gt;, stay away, they’re a bad bet for long-term use.&lt;/li&gt;
  &lt;li&gt;If a project’s handling of contributions is hidden behind closed doors, that’s another clear reason to avoid it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;additional-notes&quot;&gt;Additional Notes&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;I may update this article from time to time to add more strong indicators that can help others choose and evaluate open source projects for long-term use.&lt;/li&gt;
  &lt;li&gt;Can these indicators be automatically analyzed to create a scoring system for open source projects? I don’t think so, there’s a strong element of perception and context in this kind of analysis. And honestly, I suspect organizations would quickly start gaming the system just to get a better score.&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 25 May 2025 10:02:00 +0200</pubDate>
        <link>https://www.foo.be/2025/05/choose-an-open-source-project-for-the-long-term</link>
        <guid isPermaLink="true">https://www.foo.be/2025/05/choose-an-open-source-project-for-the-long-term</guid>
        
        
        <category>free-software</category>
        
        <category>open-source</category>
        
      </item>
    
      <item>
        <title>Le Sillon Fictionnel en livret PDF et EPUB</title>
        <description>&lt;p&gt;J’ai toujours des idées à la con… Il y avait une issue sur GitHub pour créer un petit livret en PDF et EPUB de notre &lt;a href=&quot;https://sillon-fictionnel.club/&quot;&gt;brol sillonesque&lt;/a&gt;. &lt;em&gt;L’optimisme est toujours l’apanage des fous&lt;/em&gt;. Comme le chat n’était pas en super forme, je me suis dit que travailler sur l’ordinateur serait facile tout en lui tenant compagnie.&lt;/p&gt;

&lt;p&gt;Je commence en me disant qu’une conversion de &lt;a href=&quot;https://github.com/adulau/sillon-fictionnel/tree/main/content/post&quot;&gt;pages HTML&lt;/a&gt; vers un &lt;a href=&quot;https://sillon-fictionnel.club/le-sillon-revue.pdf&quot;&gt;livre PDF&lt;/a&gt; serait simple. C’était sans compter l’essence même d’un site web avec des pages en Markdown. Ces pages sont uniques. Concaténer n’est pas une solution. Donc, on démarre avec un &lt;a href=&quot;https://github.com/adulau/sillon-fictionnel/blob/main/outils/isbn.py&quot;&gt;petit programme Python pour rassembler le tout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Puis viennent les notes de bas de page avec des références uniques… On se dit qu’il suffit d’une indexation globale, rien de bien méchant. On pense : « OK, il reste 10 minutes et c’est ficelé. » Mais là, on se rend compte que la conversion Markdown vers LaTeX, c’est bien, sauf qu’il faut retravailler le TeX pour rendre le tout lisible… et puis survient le cauchemar des tailles et formats d’images.&lt;/p&gt;

&lt;p&gt;L’optimisme reprend le dessus grâce au super logiciel libre &lt;a href=&quot;https://pandoc.org/&quot;&gt;Pandoc&lt;/a&gt;… On avance, mais les images restent un foutoir innommable. On découvre que Pandoc fait du Lua et qu’on peut &lt;a href=&quot;https://github.com/adulau/sillon-fictionnel/blob/main/outils/revue.lua&quot;&gt;filtrer/modifier les figures&lt;/a&gt;. Allez, on se remet au Lua. Puis on tombe sur d’autres joyeusetés, comme la police &lt;a href=&quot;https://github.com/adulau/sillon-fictionnel/blob/main/outils/revue.sh#L13&quot;&gt;EB Garamond qui ne passe pas via Fontconfig&lt;/a&gt;… et j’en passe.&lt;/p&gt;

&lt;p&gt;Mais au final, après quatre litres de thé noir du Mozambique, un chat qui vous fixe bizarrement et quelques expérimentations, &lt;a href=&quot;https://sillon-fictionnel.club/apropos/#le-sillon-en-revue&quot;&gt;ça fonctionne&lt;/a&gt; ! Avec, en prime, &lt;a href=&quot;https://sillon-fictionnel.club/le-sillon-revue.epub&quot;&gt;Le Sillon au format EPUB&lt;/a&gt; pour les liseuses.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://paperbay.org/system/media_attachments/files/114/054/039/747/703/185/original/990ec95a61b80daf.png&quot; alt=&quot;Le Sillon Fictionnel est désormais disponible au format EPUB pour vos liseuses, ainsi qu’en PDF et sur le site web sillonesque.&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 23 Feb 2025 15:02:00 +0100</pubDate>
        <link>https://www.foo.be/2025/02/Le-Sillon-Fictionnel-en-livret</link>
        <guid isPermaLink="true">https://www.foo.be/2025/02/Le-Sillon-Fictionnel-en-livret</guid>
        
        
        <category>internet</category>
        
      </item>
    
      <item>
        <title>Gaining Visibility in the Algorithmic-based Internet by Reclaiming Your Space</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/adulau/54113517469/&quot;&gt;&lt;img src=&quot;/assets/geometry.jpg&quot; alt=&quot;Water geometry&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are writing, one of your primary objectives is to be seen and read—two distinct but interconnected goals. Visibility helps your work reach a wider audience, which can lead to more readers engaging with your content. However, in today’s Internet landscape, visibility is shaped by algorithms on social networks, search engines, and advertising networks. These systems often prioritize content that aligns with their business interests, rather than purely the quality or relevance of the material.&lt;/p&gt;

&lt;p&gt;The traditional bookstore model offers an insightful comparison. In the past, a bookseller might carefully curate their inventory based on relationships with publishers or their own judgment of quality and market interest. As a reader, you could walk into a bookshop, browse the shelves, or explore a table displaying new releases. Often, a thoughtful recommendation from the bookseller could guide your choice. If a book sparked your curiosity, you might purchase it, and, if it resonated, spend time reading and reflecting on its reading.&lt;/p&gt;

&lt;p&gt;In the algorithmic age, or perhaps more accurately, the digital advertising age, the human touch of discovery has been replaced by calculated exposure. Content is surfaced not by serendipity or personal curation but by systems optimised to serve business objectives, often prioritizing engagement metrics over quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We often hear that to stand out in this environment, authors or writers must adopt a strategic approach, blending authenticity with a deep understanding of how algorithms operate. To be honest, that’s complete bullshit&lt;/strong&gt;. The content that is most visible today is rarely the most authentic or useful. It’s simply the content that can generate clicks and capture brain time for advertisers.&lt;/p&gt;

&lt;p&gt;I recently rediscovered an old backup of logs from my web server from the early 2000s and compared them with the current logs from 2024. The differences are striking. Back then, around 80% of the access was generated by actual users opening URLs in their browsers, while the remaining 20% was machine crawling or other noise.&lt;/p&gt;

&lt;p&gt;Today (2024), noise accounts for 90% of the accesses to my blog posts. This noise primarily comes from:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Trending bots attempting to determine whether a link is interesting enough to include in their algorithms to notify customers that the information is relevant. Companies like Hootsuite, Zoho, Ahref/Yep and many others operate in this space—though I suspect they rarely, if ever, actually read the content. It seems more about branding trends than genuine readers engagement.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Aggressive crawling bots, often associated with AI or linguistic projects, use user-agents reference that provide vague or meaningless explanations of their purpose. Companies like Facebook and Amazon are among the most common in this space. However, it’s clear that your writing will never actually appear on their platforms—it’s simply harvested to serve their data-gathering efforts and refine their own content.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Search engine bots, like Google’s, crawl your pages and might include them in their index weeks or months later. However, don’t expect to appear in the top ten results unless your content is an exact match—and even then, if you’re not part of their advertising network, you’re likely out. On a side note, the SEO industry has effectively destroyed and fucked-up the organic nature of the Internet.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Security bots brute-force attempts, which are increasingly difficult to differentiate from legitimate activity. Many security vendors operate across multiple domains, including exploitation or reselling their data feeds for purposes beyond simply notifying website owners of vulnerabilities.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mastodon “pre-fetching” URLs, which provides no indication of how many people actually read the content. The overhead can be significant, especially if your post is boosted by an account with many followers, as it’s simply the Fediverse server performing a GET request. Out of curiosity, I analysed a specific URL that was shared only on the Fediverse. It received approximately 34,000 GET requests, yet this translated to just two actual users reading the content.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Pre-fetching bots designed to display your content within ad-supported interfaces. This practice is increasingly common, with bots often testing how the content fits different devices. Unsurprisingly, this doesn’t benefit the content creator in any meaningful way. Instead, it’s aimed at keeping users within the ad-supported application, preventing them from venturing into the broader Internet beyond the confines of these advertising-driven ecosystems.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Less than 10% of the remaining entries in the logs represent actual users browsing and reading the content (and that’s without delving into questions about attention span or whether the content is truly read beyond the title). This 10% is an optimistic estimate based on this quick analysis.&lt;/p&gt;

&lt;p&gt;How did we go from an Internet where 80% of the traffic came from genuine readers to a mere 10%, with the rest being noise? Have we really spent the last twenty years investing in Internet routing, bandwidth, server storage, hardware, and energy only to support access via advertising-gated platforms? In doing so, we’ve limited the original promise of the Internet: providing diversity and access to a wealth of knowledge.&lt;/p&gt;

&lt;p&gt;What would be the strategy to return to the original promise of the Internet? Blogrolls, random access to blog posts or websites, RSS feeds, or perhaps running your own server? I’m still exploring, but I’m trying to contribute my part to that original vision.&lt;/p&gt;

&lt;p&gt;We’ve set up a book club aligned with this promise called &lt;a href=&quot;https://sillon-fictionnel.club/&quot;&gt;le sillon fictionnel&lt;/a&gt;. The site is now one year old, and we have 34 followers on Mastodon. According to the logs, we have some actual readers, despite the 95% of noise generated by bots.&lt;/p&gt;

</description>
        <pubDate>Thu, 02 Jan 2025 15:01:00 +0100</pubDate>
        <link>https://www.foo.be/2025/01/Gaining-Visibility</link>
        <guid isPermaLink="true">https://www.foo.be/2025/01/Gaining-Visibility</guid>
        
        
        <category>internet</category>
        
      </item>
    
  </channel>
</rss>
