<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nerolabs</title>
    <description>The latest articles on DEV Community by nerolabs (@nerolabs).</description>
    <link>https://dev.to/nerolabs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4219035%2Feb90391d-620f-4a90-ada2-87be6e7df829.png</url>
      <title>DEV Community: nerolabs</title>
      <link>https://dev.to/nerolabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nerolabs"/>
    <language>en</language>
    <item>
      <title>I read the licence history of 1,084 open-source projects. 272 changed their licence.</title>
      <dc:creator>nerolabs</dc:creator>
      <pubDate>Sat, 31 Oct 2026 12:56:08 +0000</pubDate>
      <link>https://dev.to/nerolabs/i-read-the-licence-history-of-1084-open-source-projects-272-changed-their-licence-edf</link>
      <guid>https://dev.to/nerolabs/i-read-the-licence-history-of-1084-open-source-projects-272-changed-their-licence-edf</guid>
      <description>&lt;p&gt;Most of us check a dependency's licence once, on the day we add it. But a licence is a file in git, and it has a history like any other file.&lt;/p&gt;

&lt;p&gt;I build Borehole, which reads a repository's git history for technical due diligence. One of the things it reads is the root licence file, commit by commit. Across the 1,084 public projects in its library, &lt;strong&gt;272 changed their licence&lt;/strong&gt; in a way that changes what users may do. 140 of those narrowed it.&lt;/p&gt;

&lt;p&gt;Here's what the changes look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most common move is to the AGPL
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Started on&lt;/th&gt;
&lt;th&gt;Today&lt;/th&gt;
&lt;th&gt;Projects&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPL-3.0&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The AGPL is the GPL with one more clause: if users reach a modified version over a network, they're entitled to its source. For a hosted product, serving users counts the way shipping a binary does. That's why it suits companies whose open-source project is also their cloud product. Grafana, Loki and Mimir moved from Apache-2.0 to AGPL-3.0 in 2021. Today 89 of the 272 grant network-copyleft terms, almost all of them AGPL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then the move away from open source
&lt;/h2&gt;

&lt;p&gt;51 of the 272 now grant source-available terms: BUSL, SSPL, the Elastic License, the Functional Source License. You can read the code, but use is restricted, usually against anyone offering it as a competing service.&lt;/p&gt;

&lt;p&gt;The busiest year was 2023, with 53 changes. On 10 and 11 August 2023, six HashiCorp repositories moved from MPL-2.0 (MIT, for Vagrant) to BUSL-1.1: Terraform, Vault, Consul, Nomad, Packer and Vagrant. Terraform's last open version became OpenTofu.&lt;/p&gt;

&lt;p&gt;Redis went from BSD-3-Clause to a choice of RSALv2 or SSPL on 20 March 2024. The last BSD version became Valkey. On 1 May 2025 Redis added AGPL-3.0 as a third choice.&lt;/p&gt;

&lt;p&gt;It hasn't stopped. Last month lakeFS (22 September) and ThingsBoard (28 September) both moved from Apache-2.0 to BUSL-1.1.&lt;/p&gt;

&lt;h2&gt;
  
  
  It goes both ways
&lt;/h2&gt;

&lt;p&gt;Not every change narrows. 132 of the 272 loosened their terms or moved sideways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;11 projects that started on AGPL-3.0 are on Apache-2.0 today.&lt;/li&gt;
&lt;li&gt;Cal.com went from MIT to AGPL-3.0 in 2021, and back to MIT on 15 April 2026.&lt;/li&gt;
&lt;li&gt;Bruno moved from MIT to the Business Source License on 1 January 2022, and back to MIT on 5 January. Four days.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters to you
&lt;/h2&gt;

&lt;p&gt;Code you took under the old licence stays under it. The licence on the version you pinned is the one that applies to you. The licence on &lt;code&gt;main&lt;/code&gt; is the one your next upgrade accepts.&lt;/p&gt;

&lt;p&gt;So the question isn't only "what's the licence?" It's "what was it when I took it, and has it changed since?" Git answers that in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;short &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'%ad %h %s'&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'LICEN[CS]E*'&lt;/span&gt; &lt;span class="s1"&gt;'COPYING*'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a dependency, you don't need the files, only the history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--filter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blob:none &lt;span class="nt"&gt;--no-checkout&lt;/span&gt; https://github.com/usebruno/bruno.git
&lt;span class="nb"&gt;cd &lt;/span&gt;bruno
git log &lt;span class="nt"&gt;--date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;short &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'%ad %h %s'&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'license*'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2022-09-29 cb0d09d2 feat: mit license
2022-03-22 c7cced58 feat: September 2022 updates
2022-01-05 68c8d636 chore: changed license bsl1.1 to MIT
2022-01-02 9b6e175f chore: fix typo
2022-01-01 92db46c6 chore: change licensing from MIT to BSL 1.1 license
2021-12-30 1b95cda7 chore: updated license
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A commit message isn't proof, though. Read the file on each side of the change: &lt;code&gt;git show &amp;lt;sha&amp;gt;^:LICENSE&lt;/code&gt; and &lt;code&gt;git show &amp;lt;sha&amp;gt;:LICENSE&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's counted
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Only the root licence file counts. A project that added source-available terms for a paid edition in its own files, and kept an open licence for the rest, is listed apart and not counted.&lt;/li&gt;
&lt;li&gt;A change counts when it changes what users may do. Moving from one permissive licence to another, such as BSD-2-Clause to BSD-3-Clause, doesn't count.&lt;/li&gt;
&lt;li&gt;The library isn't a random sample. It's the projects people surveyed, plus ones I added, weighted toward companies that ship open source. Read the shares as "in this library", not "in open source".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://borehole.dev/data/licence-changes?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=s5&amp;amp;utm_content=licences" rel="noopener noreferrer"&gt;The whole list is here&lt;/a&gt;, newest first, with each project's licence path and dates.&lt;/p&gt;

&lt;p&gt;If you're buying a company, or being bought, I also wrote up &lt;a href="https://borehole.dev/docs/agpl-busl-sspl-acquisition?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=s5&amp;amp;utm_content=licences" rel="noopener noreferrer"&gt;what AGPL, BUSL and SSPL each oblige in a deal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which relicence caught you out? I'm curious which ones people actually had to act on.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>git</category>
      <category>showdev</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
