<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Drupal</title>
    <description>Dries Buytaert on Drupal.</description>
    <link>https://dri.es/tag/drupal</link>
    <atom:link href="https://dri.es/tag/drupal/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Acquia builds Drupal funding into its partner program</title>
      <link>https://dri.es/acquia-builds-drupal-funding-into-its-partner-program</link>
      <guid>https://dri.es/acquia-builds-drupal-funding-into-its-partner-program</guid>
      <pubDate>Thu, 14 May 2026 17:12:53 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/drupal/blue-hearts-1.jpg&quot; alt=&quot;A blue heart&quot; width=&quot;1224&quot; height=&quot;753&quot; fetchpriority=&quot;high&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Today &lt;a href=&quot;https://www.acquia.com/&quot;&gt;Acquia&lt;/a&gt; announced something I&#039;m really proud of. We&#039;re calling it the &lt;a href=&quot;https://www.acquia.com/partners/fair-trade-initiative&quot;&gt;Acquia Fair Trade Initiative&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When an Acquia partner closes a deal, 2% of that deal flows directly to the &lt;a href=&quot;https://www.drupal.org/association&quot;&gt;Drupal Association&lt;/a&gt;, credited in the partner&#039;s name, to &lt;a href=&quot;https://dri.es/what-it-costs-to-run-drupal-infrastructure&quot;&gt;fund Drupal&#039;s infrastructure&lt;/a&gt; and long-term growth.&lt;/p&gt;
&lt;p&gt;Imagine an Acquia partner closes a $100,000 Drupal deal with Acquia. $2,000 goes to the Drupal Association, attributed to that partner. The 2% comes from Acquia, not from partner margins, so the partner keeps their full revenue and incentives.&lt;/p&gt;
&lt;p&gt;The donation is publicly attributed in the Acquia Partner Portal and counts toward the partner&#039;s standing in the &lt;a href=&quot;https://www.drupal.org/drupal-services&quot;&gt;Drupal Association&#039;s Certified Partner Program&lt;/a&gt;. It is recognized as financial support for the Drupal Association, separate from non-financial contributions like code, case studies, or community participation.&lt;/p&gt;
&lt;p&gt;Most of all, I like that this program is structural. It is not a one-time gift or sponsorship campaign. It is built into the economics of Acquia&#039;s partner program, so Drupal&#039;s funding grows automatically as Acquia and its partners grow.&lt;/p&gt;
&lt;p&gt;Too often, funding for Open Source projects depends on periodic fundraising or individual goodwill. That can work, but it rarely scales in a predictable way.&lt;/p&gt;
&lt;p&gt;Open Source sustainability works best when incentives align. With the Fair Trade Initiative, the Drupal Association receives more predictable funding, partners receive recognition through the Drupal Association&#039;s Certified Partner Program, and Acquia invests in the long-term health of the Drupal ecosystem its business depends on. And yes, this also creates more incentive for partners to work with Acquia on Drupal projects. Drupal wins, Acquia&#039;s partners win, and Acquia wins too. That is what incentive alignment looks like.&lt;/p&gt;
&lt;p&gt;I set a reminder for myself to report back in a year, maybe sooner. I&#039;m curious to see what this model can become.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AI-generated Rector rules for Drupal</title>
      <link>https://dri.es/ai-generated-rector-rules-for-drupal</link>
      <guid>https://dri.es/ai-generated-rector-rules-for-drupal</guid>
      <pubDate>Wed, 06 May 2026 14:41:48 -0400</pubDate>
      <description>&lt;p&gt;Keeping up with major Drupal Core releases takes real effort. Each release deprecates APIs and introduces new coding patterns, forcing module developers to update their code.&lt;/p&gt;
&lt;p&gt;That is how most software evolves: old patterns are gradually replaced by better ones.&lt;/p&gt;
&lt;p&gt;Tools like &lt;a href=&quot;https://github.com/palantirnet/drupal-rector&quot;&gt;Drupal Rector&lt;/a&gt; help automate parts of that work, but still rely on hand-written rules. Historically, that hasn&#039;t scaled well. Writing Rector rules is often more tedious than difficult: reading change records, understanding edge cases, finding real-world usage patterns, and testing rules.&lt;/p&gt;
&lt;p&gt;So I asked a different question: what if we didn&#039;t have to write Rector rules at all?&lt;/p&gt;
&lt;p&gt;If AI can generate Rector rules automatically, Drupal Core can keep evolving without every API change turning into manual migration work.&lt;/p&gt;
&lt;p&gt;That idea led me to extend &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests&quot;&gt;Drupal Digests&lt;/a&gt;, the tool I built to &lt;a href=&quot;https://dri.es/a-better-way-to-follow-drupal-development&quot;&gt;follow key Drupal developments&lt;/a&gt;. In addition to generating summaries, it now also analyzes Drupal Core commits and generates &lt;a href=&quot;https://getrector.com&quot;&gt;Rector&lt;/a&gt; rules automatically.&lt;/p&gt;
&lt;p&gt;When a Drupal Core commit deprecates an API or introduces a new pattern, the tool reads the related issue, analyzes the discussion around it, reviews the code changes, and generates a corresponding Rector rule.&lt;/p&gt;
&lt;p&gt;The system has only been running for a few weeks, yet it has already generated &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests/tree/main/rector/rules&quot;&gt;over 175 Rector rules&lt;/a&gt;, with new rules continuously added as the pipeline processes more Drupal Core issues.&lt;/p&gt;
&lt;p&gt;AI-generated code is far from perfect. Some rules will have bugs, and others will miss edge cases. But that is exactly why I wanted to publish them now: the more people test them on real projects, the faster they will improve.&lt;/p&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://www.drupal.org/u/bbrala&quot;&gt;Björn Brala&lt;/a&gt;, co-maintainer of Drupal Rector, who discovered I was working on this and quickly jumped in to help test and validate some of the generated rules. That kind of feedback is incredibly valuable.&lt;/p&gt;
&lt;p&gt;You can try them as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/dbuytaert/drupal-digests.git
composer require --dev rector/rector
vendor/bin/rector process web/modules/custom \
  --config drupal-digests/rector/all.php --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Example&lt;/h3&gt;
&lt;p&gt;Take Drupal&#039;s modernization of the &lt;a href=&quot;https://www.drupal.org/node/3571065&quot;&gt;&lt;code&gt;$entity-&amp;gt;original&lt;/code&gt; property&lt;/a&gt;, which exposed the unchanged copy of an entity. Drupal 11.2 deprecated the property in favor of explicit &lt;code&gt;$entity-&amp;gt;getOriginal()&lt;/code&gt; and &lt;code&gt;$entity-&amp;gt;setOriginal()&lt;/code&gt; methods. The old property will be removed in Drupal 12 so various module maintainers have to update their code.&lt;/p&gt;
&lt;p&gt;Drupal Digests generated a &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests/blob/main/rector/rules/replace-deprecated-entity-original-magic-property-with-3571065.php&quot;&gt;Rector rule&lt;/a&gt; that rewrites read access to &lt;code&gt;getOriginal()&lt;/code&gt; and write assignment to &lt;code&gt;setOriginal()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;$entity-&amp;gt;original-&amp;gt;field-&amp;gt;value;
$entity-&amp;gt;original = $unchanged;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;$entity-&amp;gt;getOriginal()-&amp;gt;field-&amp;gt;value;
$entity-&amp;gt;setOriginal($unchanged);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AI-generated upgrade rules will not eliminate all upgrade work anytime soon. But even partial automation can reduce a surprising amount of repetitive work while helping Drupal evolve faster.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AI rewards strict APIs</title>
      <link>https://dri.es/ai-rewards-strict-apis</link>
      <guid>https://dri.es/ai-rewards-strict-apis</guid>
      <pubDate>Tue, 28 Apr 2026 09:00:35 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/drupal-ai-advantage-1280w.jpg&quot; alt=&quot;An astronaut explores a surreal landscape beneath rainbow-colored planetary rings, symbolizing the journey into AI&amp;amp;#039;s transformative potential for Drupal.&quot; width=&quot;1280&quot; height=&quot;853&quot; fetchpriority=&quot;high&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Every framework&#039;s API surface sits on a spectrum, from strict (typed interfaces, schemas, service containers) to loose (string keys, naming conventions, untyped hooks). Strict APIs cost more upfront: more boilerplate, more to learn before writing code. Loose APIs shift that cost later: more ambiguity, more reliance on naming conventions, and more bugs that are harder to detect and fix.&lt;/p&gt;
&lt;p&gt;AI changes who pays. Boilerplate and learning curves don&#039;t slow agents down. What slows them down is missing feedback: code that runs but does the wrong thing, errors that don&#039;t point to the cause, conventions that have to be guessed. Magic-name binding, untyped hooks, unvalidated configuration, and conventions the code doesn&#039;t enforce produce exactly those failure modes.&lt;/p&gt;
&lt;h3&gt;Magic strings break the loop&lt;/h3&gt;
&lt;p&gt;For example, both Drupal and WordPress have long used magic-string hooks. In Drupal, you write a function like &lt;code&gt;mymodule_user_login&lt;/code&gt;. WordPress uses a related pattern: a string action name passed to &lt;code&gt;add_action()&lt;/code&gt;. In both cases, the binding is a string the language can&#039;t validate.&lt;/p&gt;
&lt;p&gt;Get the name wrong and the system silently skips your code: no error, no warning, nothing in the logs. The function just sits there, unloved.&lt;/p&gt;
&lt;p&gt;The signature is a convention, not a contract: the documentation says the &lt;code&gt;user_login&lt;/code&gt; hook receives a &lt;code&gt;$user&lt;/code&gt; object, but nothing enforces it. To your IDE or a static analyzer like PHPStan, it&#039;s just a function. They don&#039;t know it&#039;s wired into the platform&#039;s login flow, so they can&#039;t warn you when it&#039;s wrong.&lt;/p&gt;
&lt;p&gt;A typed alternative makes the binding explicit. With a PHP attribute like &lt;code&gt;#[Hook(&#039;user_login&#039;)]&lt;/code&gt; on a registered service, the class must exist, the method signature is type-checked, and the container wires the dependencies. IDEs, static analyzers, and AI coding agents can follow the chain from the attribute to the implementation.&lt;/p&gt;
&lt;p&gt;For AI agents, this keeps the feedback loop tight instead of turning it into trial and error. That means they can move faster, spend less time debugging, and use fewer tokens.&lt;/p&gt;
&lt;p&gt;At DrupalCon Chicago this March, AI coding tools migrated a &lt;a href=&quot;https://dri.es/state-of-drupal-presentation-march-2026&quot;&gt;Lovable-generated site into Drupal&lt;/a&gt; in hours. The strict APIs kept the agent on track.&lt;/p&gt;
&lt;h3&gt;A bet made before AI existed&lt;/h3&gt;
&lt;p&gt;This didn&#039;t start with AI. Drupal 8, which we shipped in 2015, introduced Symfony&#039;s routing, services, and event dispatcher, replacing large parts of the procedural hook system. Since then, we&#039;ve kept reducing magic hooks. The attribute-based approach (&lt;code&gt;#[Hook(&#039;user_login&#039;)]&lt;/code&gt;) landed in Drupal 11.1 and helps remove more of the remaining procedural-only paths.&lt;/p&gt;
&lt;p&gt;Hooks aren&#039;t the only place Drupal has been getting stricter. Drupal stores a lot of configuration in YAML, which was one of the loosest parts of the system. A &lt;a href=&quot;https://wimleers.com/validation-first&quot;&gt;multi-year validation effort&lt;/a&gt; has been tightening that.&lt;/p&gt;
&lt;p&gt;When an agent generates a content type definition or editor configuration, validation catches missing keys, invalid values, and broken references before anything is saved. The agent gets a precise error pointing to the exact field, instead of a runtime failure. That tight feedback loop is what makes Drupal a strong CMS for AI-assisted development.&lt;/p&gt;
&lt;p&gt;Drupal made this bet early, and it was painful. The Drupal 7 to Drupal 8 transition broke backward compatibility and took years to recover from. But it left the platform much stricter. More than ten years in, &lt;a href=&quot;https://dbuytaert.github.io/drupal-core-metrics/&quot;&gt;we&#039;re still making Drupal stricter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Meanwhile, WordPress made a different bet, prioritizing backward compatibility over stricter APIs. That kept the platform stable for a long time. It also kept the looseness.&lt;/p&gt;
&lt;p&gt;Those trade-offs now determine how efficiently AI agents can work with each platform.&lt;/p&gt;
&lt;h3&gt;What was style is now speed&lt;/h3&gt;
&lt;p&gt;What used to be a stylistic choice is now a speed and cost problem. Loose APIs mean more debugging and guesswork. Strict APIs mean faster, more precise feedback. This was always true for humans. It&#039;s now also true for AI agents. But today that cost shows up in tokens.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Drupal 12 switches to Argon2id</title>
      <link>https://dri.es/drupal-12-switches-to-argon2id</link>
      <guid>https://dri.es/drupal-12-switches-to-argon2id</guid>
      <pubDate>Mon, 30 Mar 2026 05:15:35 -0400</pubDate>
      <description>&lt;p&gt;Drupal 12 will &lt;a href=&quot;https://www.drupal.org/project/drupal/issues/3530186&quot;&gt;hash passwords with Argon2id by default&lt;/a&gt;. It moves every Drupal site to what is now best practice for password storage, recommended by &lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html&quot;&gt;OWASP&lt;/a&gt; and aligned with &lt;a href=&quot;https://pages.nist.gov/800-63-4/sp800-63b.html&quot;&gt;NIST guidance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drupal is often used for security-sensitive and large-scale sites, so these kinds of changes matter.&lt;/p&gt;
&lt;p&gt;Early versions of Drupal stored passwords as simple MD5 hashes, which is extremely weak by today&#039;s standards. Drupal 7 introduced a modified version of the &lt;a href=&quot;https://www.openwall.com/phpass/&quot;&gt;phpass library&lt;/a&gt; using &lt;a href=&quot;https://en.wikipedia.org/wiki/SHA-2&quot;&gt;SHA-512&lt;/a&gt; with multiple iterations and a salt, and &lt;a href=&quot;https://www.drupal.org/node/3322420&quot;&gt;Drupal 10 switched to bcrypt&lt;/a&gt;. Each jump was a response to attackers getting faster hardware, and this change continues that pattern.&lt;/p&gt;
&lt;p&gt;When I first looked at this change, I wanted to understand what &lt;a href=&quot;https://en.wikipedia.org/wiki/Argon2&quot;&gt;Argon2id&lt;/a&gt; actually does differently from &lt;a href=&quot;https://en.wikipedia.org/wiki/Bcrypt&quot;&gt;bcrypt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its key advantage is that it is &amp;quot;memory hard&amp;quot;. Each Argon2id hash requires far more memory to compute than a bcrypt hash, and the amount is configurable.&lt;/p&gt;
&lt;p&gt;Modern GPUs can run many bcrypt computations in parallel because each one uses very little RAM. GPUs have a lot of total memory, but it is shared across thousands of parallel computations. As a result, Argon2id limits how many hash computations can run in parallel, making it harder and more expensive to scale attacks.&lt;/p&gt;
&lt;p&gt;The best security upgrades are the ones nobody has to think about. Once a site upgrades to Drupal 12, existing passwords will automatically be rehashed to Argon2id the next time each user logs in. And in the unlikely event that Argon2id is not available in a particular PHP installation, Drupal will fall back to bcrypt for compatibility.&lt;/p&gt;
&lt;p&gt;Many site owners never think about password hashing, so Drupal&#039;s defaults become their security policy. The people who benefit most from this change may never know it happened. It&#039;s why being &amp;quot;secure by default&amp;quot; matters so much.&lt;/p&gt;
&lt;p&gt;Thanks to everyone who helped make this happen.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>State of Drupal presentation (March 2026)</title>
      <link>https://dri.es/state-of-drupal-presentation-march-2026</link>
      <guid>https://dri.es/state-of-drupal-presentation-march-2026</guid>
      <pubDate>Thu, 26 Mar 2026 19:06:55 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/WQcCYMcWtOs&quot; style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%&quot; loading=&quot;lazy&quot; title=&quot;YouTube video&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;This year, Drupal turned 25. DrupalCon Chicago felt like the right place to mark that milestone. My keynote was part celebration and part wake-up call. I talked about Drupal&#039;s foundations, how AI is putting pressure on them, and why I believe we can rebuild them stronger than before.&lt;/p&gt;
&lt;p&gt;If you missed the keynote, you can &lt;a href=&quot;https://youtu.be/WQcCYMcWtOs&quot;&gt;watch the video below&lt;/a&gt; or &lt;a href=&quot;https://dri.es/files/state-of-drupal-march-2026.pdf&quot;&gt;download my slides&lt;/a&gt; (32.6 MB).&lt;/p&gt;
&lt;p&gt;It will be interesting to rewatch this keynote in 10 years, when AI is fully mainstream and has reshaped how we work, including our agencies, our craft, and how we collaborate in Open Source. It feels like a snapshot of an industry in transition.&lt;/p&gt;
&lt;h3&gt;Site templates and the marketplace&lt;/h3&gt;
&lt;p&gt;&lt;figure&gt;&lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/RExPXpjH3q4&quot; style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%&quot; loading=&quot;lazy&quot; title=&quot;YouTube video&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;About a year ago at &lt;a href=&quot;https://dri.es/state-of-drupal-presentation-march-2025&quot;&gt;DrupalCon Atlanta&lt;/a&gt;, I introduced the idea of &lt;a href=&quot;https://dri.es/exploring-a-marketplace-for-drupal-site-templates&quot;&gt;site templates&lt;/a&gt; and a marketplace to go with them. By &lt;a href=&quot;https://dri.es/state-of-drupal-presentation-october-2025&quot;&gt;DrupalCon Vienna&lt;/a&gt;, we had one site template, but no marketplace.&lt;/p&gt;
&lt;p&gt;In Chicago, I showed eleven site templates available in a basic marketplace at &lt;a href=&quot;https://marketplace.drupal.org/&quot;&gt;marketplace.drupal.org&lt;/a&gt;. All eleven can be installed directly from the &lt;a href=&quot;https://www.drupal.org/project/drupal_cms_installer/&quot;&gt;Drupal CMS installer&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;AI for site building&lt;/h3&gt;
&lt;p&gt;For more than 20 years, Drupal&#039;s ecosystem has rested on a stable triangle: the platform itself, digital agencies who bring Drupal into the real world, and the community that builds and maintains it. That triangle has proven remarkably resilient through many waves of new technologies.&lt;/p&gt;
&lt;p&gt;But what happens when AI disrupts all three sides at the same time? In my keynote, I showed how Drupal is responding.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/eQ_NcJHwYew&quot; style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%&quot; loading=&quot;lazy&quot; title=&quot;YouTube video&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I started by showing a demo of a workflow I believe will become common for Drupal agencies. You quickly prototype a website with AI, then turn it into a Drupal site with the help of AI and a skilled developer, all within hours.&lt;/p&gt;
&lt;p class=&quot;pullquote&quot;&gt;AI gets you to a prototype fast. Drupal gives it the foundations that last.&lt;/a&gt;
&lt;p&gt;I believe Drupal has a unique advantage in this new world. Organizations will always need real workflows, permissions, security, scalability, integrations, compliance, and governance. Drupal is very well suited for AI-driven workflows.&lt;/p&gt;
&lt;p&gt;The demo worked because Drupal CMS ships with &lt;a href=&quot;https://www.drupal.org/project/canvas&quot;&gt;Drupal Canvas&lt;/a&gt;, which includes both CLI tools and AI skills. But the real strength comes from Drupal&#039;s foundations: its APIs, reusable building blocks, and mature architecture, refined over 25 years. This is the &lt;a href=&quot;https://dri.es/why-drupal-is-built-for-the-ai-era&quot;&gt;accidental AI advantage&lt;/a&gt; I have written about before.  This is what makes Drupal one of the best platforms for AI-driven development.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/drupalcon-chicago-2026/under-the-hood-1280w.png&quot; alt=&quot;Front view of a car with a transparent hood revealing a Drupal engine. Labels point to features like governance, security, permissions, customizations, scalability, integrations, authoring, and compliance.&quot; width=&quot;1280&quot; height=&quot;720&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;AI for content management&lt;/h3&gt;
&lt;p&gt;At &lt;a href=&quot;https://dri.es/state-of-drupal-presentation-october-2025&quot;&gt;DrupalCon Vienna&lt;/a&gt;, I introduced the &lt;a href=&quot;https://www.drupal.org/project/ai_context&quot;&gt;Context Control Center&lt;/a&gt; as a rough prototype. Since then, we have added many features. It is now nearly production-ready.&lt;/p&gt;
&lt;p&gt;The idea is straightforward: AI agents need good context to help manage tasks in Drupal. With the Context Control Center, teams define their brand voice, target audiences, key messages, product details, and editorial guidelines in one place. Then every AI agent on the site draws from this single source of truth. The result is that you create knowledge once, and scale it to all the pages and content on your website.&lt;/p&gt;
&lt;p&gt;In my keynote, I showed two demos of the Context Control Center in action. First, Drupal&#039;s AI agents turn a simple marketing brief into a complete, on-brand page using Drupal Canvas, consulting the Context Control Center along the way. It followed brand rules, asked clarifying questions, generated structured data for search, and added cross-links.&lt;/p&gt;
&lt;p&gt;Second, I showed a proof of concept for dynamic contexts, where the Context Control Center pulls in real-time data from Google Analytics to help improve content performance after publication.&lt;/p&gt;
&lt;h3&gt;Saying no to AI slop&lt;/h3&gt;
&lt;p&gt;AI is lowering the barrier to contribute to Open Source projects like Drupal. On paper, that sounds great. More contributors, more patches, more momentum.&lt;/p&gt;
&lt;p&gt;But it can also be a real challenge. The volume of contributions is going up while the quality is going down.  More patches are landing on a small group of maintainers, and reviewing low-quality code wastes their time. This creates &lt;a href=&quot;https://dri.es/ai-creates-asymmetric-pressure-on-open-source&quot;&gt;asymmetric pressure on Open Source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&#039;re using AI to contribute, you are responsible for what you submit: &lt;a href=&quot;https://dri.es/never-submit-code-you-do-not-understand&quot;&gt;don&#039;t submit code you don&#039;t understand&lt;/a&gt;. Our quality standards matter, and we will uphold them.&lt;/p&gt;
&lt;h3&gt;Our craft always evolves&lt;/h3&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/drupalcon-chicago-2026/our-craft-always-evolves-1280w.png&quot; alt=&quot;Slide with the text &amp;amp;quot;Our craft always evolves&amp;amp;quot;.&quot; width=&quot;1280&quot; height=&quot;720&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;In my keynote, I also told the stories of two community members who embraced AI in a meaningful way.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/u/afoster&quot;&gt;Aidan Foster&lt;/a&gt;, who has been running Foster Interactive for 17 years, chose to go all in on the &lt;a href=&quot;https://dri.es/accelerating-ai-innovation-in-drupal&quot;&gt;Drupal AI Initiative&lt;/a&gt; instead of staying on the sidelines. Together with his team, he is rebuilding the foundations of his agency to leverage AI and prepare for what is next.&lt;/p&gt;
&lt;p&gt;And &lt;a href=&quot;https://www.drupal.org/u/jurgenhaas&quot;&gt;Jürgen Haas&lt;/a&gt;, a longtime contributor and creator of the ECA module, used AI to move at the speed of a team and make &lt;a href=&quot;https://www.drupal.org/project/eca&quot;&gt;Drupal&#039;s ECA module&lt;/a&gt; much easier to use. In both cases, AI amplifies expertise. It does not replace it.&lt;/p&gt;
&lt;p&gt;The world is being flooded with AI-generated average. Average is cheap now, but expertise remains hard-earned and valuable. This community has spent 25 years building it, and that is not something AI can replicate.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/drupalcon-vienna-2025/ai-is-the-storm-1280w.png&quot; alt=&quot;A human in a space suit and a large cyborg stand side by side before a vast blue wave or cloud, stirred up by a mysterious technological behemoth on the horizon. The image includes the text: &amp;amp;quot;AI is the storm, and the way through it.&amp;amp;quot;&quot; width=&quot;1280&quot; height=&quot;720&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;AI is the storm, and AI is the way through the storm. I said that first in Vienna. Six months later, I believe it more than ever. Not as a slogan, but as something I have watched happen. We need more people like Aidan and Jürgen. If you want to get involved, join us on &lt;a href=&quot;https://www.drupal.org/join-slack&quot;&gt;Drupal Slack&lt;/a&gt; or attend DrupalCon Rotterdam this fall.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I want to extend my gratitude to everyone who contributed to making my presentation and demos a success. A special thank you to &lt;a href=&quot;https://www.drupal.org/u/phenaproxima&quot;&gt;Adam G-H&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/afoster&quot;&gt;Aidan Foster&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/burnashburn&quot;&gt;ASH Sullivan&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/breidert&quot;&gt;Christoph Breidert&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/ckrina&quot;&gt;Cristina Chumillas&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/emma-horrell&quot;&gt;Emma Horrell&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/g%C3%A1bor-hojtsy&quot;&gt;Gábor Hojtsy&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/gantal&quot;&gt;Gurwinder Antal&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/yautja_cetanu&quot;&gt;James Abrahams&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/jurgenhaas&quot;&gt;Jurgen Haas&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/kristen-pol&quot;&gt;Kristen Pol&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/lauriii&quot;&gt;Lauri Timmanee&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/marcus_johansson&quot;&gt;Marcus Johansson&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/mandclu&quot;&gt;Martin Anderson-Clutz&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/pameeela&quot;&gt;Pamela Barone&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/scott-falconer&quot;&gt;Scott Falconer&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/hestenet&quot;&gt;Tim Lehnen&lt;/a&gt;. Many others contributed indirectly to make this possible. If I&#039;ve inadvertently omitted anyone, please reach out.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Never submit code you don&#039;t understand</title>
      <link>https://dri.es/never-submit-code-you-do-not-understand</link>
      <guid>https://dri.es/never-submit-code-you-do-not-understand</guid>
      <pubDate>Mon, 16 Mar 2026 11:37:45 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/never-submit-code-you-dont-understand-1280w.png&quot; alt=&quot;Blue and red graphic with a white star and the text: &amp;amp;quot;Never submit code you don&amp;amp;#039;t understand.&amp;amp;quot;&quot; width=&quot;1280&quot; height=&quot;720&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Years ago, in the early Drupal days, you would see a mantra everywhere: &amp;quot;Don&#039;t hack core&amp;quot;.&lt;/p&gt;
&lt;p&gt;It showed up in issue queues, conference talks, support channels, stickers, and even on T-shirts. It was short and memorable, and it solved a real problem: too many people were modifying Drupal Core instead of extending it properly.&lt;/p&gt;
&lt;p&gt;Over time the mantra worked. The ecosystem matured. Not just the software itself, but also the habits and expectations around it. Today you rarely hear people say &amp;quot;Don&#039;t hack core&amp;quot;.&lt;/p&gt;
&lt;p&gt;With AI changing how code gets written, we may need a new mantra.&lt;/p&gt;
&lt;p&gt;In Open Source, all code needs to be understood and reviewed before it can be merged. That responsibility belongs to both contributors and maintainers. AI is changing how code gets written, but it does not change that responsibility. In fact, it may make it easier to forget.&lt;/p&gt;
&lt;p&gt;Code you don&#039;t understand becomes someone else&#039;s problem. In Open Source, that someone is often &lt;a href=&quot;https://dri.es/ai-creates-asymmetric-pressure-on-open-source&quot;&gt;the maintainer reviewing your patch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Offloading bad code onto maintainers wastes people&#039;s time, which is inconsiderate, and slows down reviews for everyone. You also miss the chance to learn from the code and grow as a developer.&lt;/p&gt;
&lt;p&gt;It shouldn&#039;t matter what tools you use. But if you submit code, you should be able to explain what it does, why it works, and how it interacts with the rest of the code.&lt;/p&gt;
&lt;p&gt;Everyone starts somewhere. Even today&#039;s top contributors submitted imperfect patches early on. You are welcome here, with or without AI tools. Perfection isn&#039;t required, but understanding your code is. Own your code and respect people&#039;s time.&lt;/p&gt;
&lt;p&gt;Maybe it&#039;s time for some new stickers and T-shirts.&lt;/p&gt;
&lt;p&gt;Never submit code you don&#039;t understand.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://www.drupal.org/u/cainaru&quot;&gt;Natalie Cainaru&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/jeremy&quot;&gt;Jeremy Andrews&lt;/a&gt; and &lt;a href=&quot;https://www.drupal.org/u/g%C3%A1bor-hojtsy&quot;&gt;Gábor Hojtsy&lt;/a&gt; for reviewing my draft.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>What it costs to run Drupal&#039;s infrastructure</title>
      <link>https://dri.es/what-it-costs-to-run-drupal-infrastructure</link>
      <guid>https://dri.es/what-it-costs-to-run-drupal-infrastructure</guid>
      <pubDate>Tue, 10 Mar 2026 18:30:34 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/complex-infrastructure-1280w.jpg&quot; alt=&quot;Silhouette of a person standing before a large circular portal surrounded by glowing screens and cables, suggesting complex digital infrastructure.&quot; width=&quot;1280&quot; height=&quot;850&quot; fetchpriority=&quot;high&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Yesterday I wrote about &lt;a href=&quot;https://dri.es/open-source-infrastructure-deserves-a-business-model&quot;&gt;how Open Source infrastructure across many ecosystems is fragile and underfunded&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drupal is no exception.&lt;/p&gt;
&lt;p&gt;Like most Open Source projects, Drupal runs on infrastructure that millions of people depend on but very few people directly pay for.&lt;/p&gt;
&lt;p&gt;Drupal&#039;s infrastructure costs roughly $3 million per year, including servers, bandwidth, CDNs, software, and staff.&lt;/p&gt;
&lt;p&gt;Funding comes from a mix of donated infrastructure from &lt;a href=&quot;https://aws.amazon.com/&quot;&gt;AWS&lt;/a&gt; and the &lt;a href=&quot;https://osuosl.org/&quot;&gt;OSU Open Source Lab&lt;/a&gt;, corporate memberships through our &lt;a href=&quot;https://www.drupal.org/drupal-services&quot;&gt;Drupal Certified Partner program&lt;/a&gt;, in‑kind contribution from &lt;a href=&quot;https://www.tag1.com/&quot;&gt;Tag1&lt;/a&gt;, revenue from DrupalCon, donations, and sponsorship on &lt;a href=&quot;https://www.drupal.org&quot;&gt;Drupal.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last year, Drupal Association board member &lt;a href=&quot;https://www.drupal.org/u/farriss&quot;&gt;Tiffany Farriss&lt;/a&gt; and CTO &lt;a href=&quot;https://www.drupal.org/u/hestenet&quot;&gt;Tim Lehnen&lt;/a&gt; analyzed the project&#039;s infrastructure costs. Their estimate: infrastructure for Drupal 8+ sites costs about $10 per active website per year.&lt;/p&gt;
&lt;p&gt;But the Drupal Association has only about $7.50 per site per year to work with. About $3 comes from DrupalCon and the Certified Partner program. The remaining $4.50 comes from in-kind support: donated hosting, Tag1&#039;s infrastructure partnership, volunteer contributions and more.&lt;/p&gt;
&lt;p&gt;The missing $2.50 per site shows up as technical debt: certain upgrades get deferred, legacy systems persist longer than they should, and the community sometimes wonders why infrastructure progress feels slow.&lt;/p&gt;
&lt;p&gt;Plus, the $7.50 per site we currently fund is fragile. DrupalCon revenue depends on event attendance. Advertising depends on traffic. Tag1&#039;s in-kind contribution depends on one company&#039;s continued generosity. Our donated infrastructure from AWS and OSU could disappear at any time. If any of that support disappears, the funding gap grows, more infrastructure work gets deferred, and things could start breaking.&lt;/p&gt;
&lt;p&gt;Before talking about new funding models, it is worth asking whether the Drupal Association could reduce its infrastructure costs. Ten dollars per site per year may sound like a lot. Should we operate all of this infrastructure ourselves, or rely more on hosted platforms like GitHub or GitLab.com? Are parts of our infrastructure more complex than they need to be? Could we customize less to reduce costs and move faster?&lt;/p&gt;
&lt;p&gt;These are the right questions to ask. I believe we need to work both sides of the ledger: take a hard look at what we spend and build a funding model that depends less on goodwill. In practice, infrastructure decisions rarely optimize for everything at once. They involve tradeoffs between cost, speed, flexibility, and control.&lt;/p&gt;
&lt;p&gt;Corporate patronage is worth considering. A single well-resourced sponsor could fund Drupal&#039;s infrastructure in a way community fundraising cannot, and if the choice were between a patron and a crisis, a patron wins. It&#039;s fast, requires no technical changes, and doesn&#039;t touch the social contract with site owners.&lt;/p&gt;
&lt;p&gt;But patronage trades one fragility for another. Instead of depending on event attendance or AWS cloud credits, you depend on one company&#039;s continued generosity and strategic alignment with the project. If their priorities shift, we&#039;re back where we started.&lt;/p&gt;
&lt;p&gt;A patron funding infrastructure at this scale would also expect meaningful benefits. That could mean greater visibility, access to lead flow, and some level of control over Drupal.org.&lt;/p&gt;
&lt;p&gt;Most infrastructure systems connect usage to funding. Cloud platforms charge for compute. Roads are funded by taxes paid by the people who drive them. Drupal&#039;s infrastructure has no such mechanism: hundreds of thousands of sites depend on Drupal.org services, but the cost of operating those services is disconnected from the people who rely on them.&lt;/p&gt;
&lt;p&gt;A funding model tied to usage avoids some of the issues with corporate patronage, but comes with its own trade-off. Open Source culture is built on anonymous access. You can download any package, no questions asked, no account required. Any usage-based model has to break that norm.&lt;/p&gt;
&lt;p&gt;The simplest version would probably require a Drupal.org API key to download packages or receive automatic update notifications. Requiring an API key is standard practice for any commercial API, but in Open Source it feels different. Requiring site owners to identify themselves to Drupal.org is a cultural shift, even if the key itself is free forever.&lt;/p&gt;
&lt;p&gt;Any such mechanism requires changes to Drupal Core, which could take years to reach the installed base. If we go down this route, we can&#039;t wait for a funding crisis to begin this work. By the time a real crisis arrives, we could still be years away from a solution.&lt;/p&gt;
&lt;p&gt;I don&#039;t have a specific mechanism to propose yet. My goal here is to lay out the problem, explore potential solutions, and start the conversation. But we should start that conversation now, while we have the time and stability to get it right. Otherwise we may end up having this conversation later, under more pressure and with fewer options.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://www.drupal.org/u/farriss&quot;&gt;Tiffany Farriss&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/hestenet&quot;&gt;Tim Lehnen&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/g%C3%A1bor-hojtsy&quot;&gt;Gábor Hojtsy&lt;/a&gt; and &lt;a href=&quot;https://www.drupal.org/u/lauriii&quot;&gt;Lauri Timmanee&lt;/a&gt; for reviewing my draft.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Open Source infrastructure deserves a business model </title>
      <link>https://dri.es/open-source-infrastructure-deserves-a-business-model</link>
      <guid>https://dri.es/open-source-infrastructure-deserves-a-business-model</guid>
      <pubDate>Mon, 09 Mar 2026 14:36:23 -0400</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/open-source-infrastructure-cracks-1280w.jpg&quot; alt=&quot;A person stands before a massive circular machine with cracks forming inside it, suggesting infrastructure under pressure.&quot; width=&quot;1280&quot; height=&quot;850&quot; fetchpriority=&quot;high&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Open Source software is free to download. But the infrastructure that makes it usable is not.&lt;/p&gt;
&lt;p&gt;When developers install or update dependencies through npm, Composer, pip, or Cargo, those tools rely on package registries that host and distribute millions of software packages. When maintainers collaborate, they depend on hosted services: Git repositories, CI pipelines, and other tools to build, test, and release software.&lt;/p&gt;
&lt;p&gt;Most of this infrastructure is invisible to end users, and almost no one thinks about what it costs to run.&lt;/p&gt;
&lt;p&gt;But it is not free. Someone has to operate the servers, pay for bandwidth, respond to support questions, patch security issues, and keep everything reliable.&lt;/p&gt;
&lt;p&gt;Much of the modern software ecosystem depends on these services working reliably. And yet the organizations operating them are almost always scrambling to fund them.&lt;/p&gt;
&lt;h3&gt;A patchwork of fragile arrangements&lt;/h3&gt;
&lt;p&gt;Every large Open Source project has found some way to keep its infrastructure running. Usually that means a mix of donated services, sponsorships, fundraising, cross-subsidy, or patronage from a single company.&lt;/p&gt;
&lt;p&gt;The table below highlights the primary funding mechanisms various Open Source projects depend on, even though most projects combine several.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
  &lt;tr&gt;
  &lt;th&gt;&lt;/th&gt;
  &lt;th&gt;Donated infrastructure&lt;/th&gt;
  &lt;th&gt;Multi-company sponsorship&lt;/th&gt;
  &lt;th&gt;Community funding&lt;/th&gt;
  &lt;th&gt;Single-company patronage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
  &lt;tbody&gt;
  &lt;tr&gt;
  &lt;td&gt;PyPI&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;Packagist&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;npm&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;WordPress&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;RubyGems&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;Drupal&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☑&lt;/td&gt;
  &lt;td style=&quot;text-align:center;&quot;&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The mix differs across ecosystems, and some rely on several mechanisms at once. But one thing stands out: none of these approaches tie funding directly to how much the infrastructure is used.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pypi.org/&quot;&gt;PyPI&lt;/a&gt;, the Python Package Index, illustrates the sponsorship model. It handles billions of downloads a day on infrastructure donated by Fastly, AWS, and Google Cloud. The &lt;a href=&quot;https://www.python.org/psf-landing/&quot;&gt;Python Software Foundation&lt;/a&gt; described this arrangement&#039;s fragility in a &lt;a href=&quot;https://pyfound.blogspot.com/2025/10/open-infrastructure-is-not-free-pypi.html&quot;&gt;post last October&lt;/a&gt;: if a single sponsor decides not to renew, it would cost them tens of thousands of dollars a month to replace the lost infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://packagist.org/&quot;&gt;Packagist&lt;/a&gt;, the main PHP package repository, follows a different approach. It is run by a private company that also sells a commercial product called &lt;a href=&quot;https://packagist.com/&quot;&gt;Private Packagist&lt;/a&gt;. Revenue from the paid product subsidizes the free public registry. It&#039;s one of the more sustainable models out there, though it means a public good depends on one company&#039;s continued success.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npm&lt;/a&gt; tried to operate as an independent company, ran into serious financial trouble, and was eventually acquired by GitHub in 2020. The end result is that critical JavaScript infrastructure is now owned by Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/&quot;&gt;WordPress.org&lt;/a&gt; runs on a different version of the same dynamic: corporate patronage. Automattic, by far the ecosystem&#039;s largest commercial beneficiary, subsidizes most of the infrastructure. It works, but it also means that whoever funds the infrastructure controls it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://fair.pm/&quot;&gt;FAIR project&lt;/a&gt;, a federated package manager backed by the Linux Foundation, was designed to give the WordPress ecosystem an independent alternative. The software works but its organizers recently stepped back after &lt;a href=&quot;https://joost.blog/fair-wordpress-and-knowing-when-to-stop/&quot;&gt;failing to secure long-term funding commitments&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rubygems.org/&quot;&gt;RubyGems&lt;/a&gt; took the community fundraising route, &lt;a href=&quot;https://rubycentral.org/news/rubygems-org-funding-model-a-new-path-for-community-led-growth/&quot;&gt;launching a program&lt;/a&gt; last year asking businesses for $2,500 to $5,000 annually, with about 110 supporters needed to cover the registry&#039;s operations.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org&quot;&gt;Drupal&lt;/a&gt;, the Open Source CMS I help lead, depends on the Drupal Association to run much of the infrastructure behind the project: Composer endpoints, GitLab repositories, CI pipelines, automatic update notifications, and more. Running all of this costs roughly $3 million a year. Funding comes from a mix of donated infrastructure, community funding, DrupalCon revenue, and sponsorship.&lt;/p&gt;
&lt;p&gt;When the economics break, the consequences become visible. In February 2026, &lt;a href=&quot;https://www.gnome.org/&quot;&gt;GNOME&lt;/a&gt; began &lt;a href=&quot;https://www.phoronix.com/news/GNOME-GitHub-GitLab-Redirect&quot;&gt;redirecting Git traffic from its own GitLab to GitHub mirrors&lt;/a&gt; to reduce bandwidth costs. As a result, GitHub and its owner Microsoft now absorb some of GNOME&#039;s bandwidth cost.&lt;/p&gt;
&lt;p&gt;Taken together, these examples point to the same underlying problem. Most Open Source infrastructure does not have a real business model. It survives through donations, corporate sponsorship, and community fundraising, rather than revenue tied to the value it delivers.&lt;/p&gt;
&lt;h3&gt;From steward to service provider&lt;/h3&gt;
&lt;p&gt;One direction that makes sense to me is a simple &lt;em&gt;value exchange&lt;/em&gt;: keep core infrastructure free for individuals and small projects, while organizations using it at scale help pay for what they consume. Not as a donation, but as payment for the infrastructure their software depends on.&lt;/p&gt;
&lt;p&gt;I look at Drupal as a concrete example of this in a follow-up post: &lt;a href=&quot;https://dri.es/what-it-costs-to-run-drupal-infrastructure&quot;&gt;what it costs to run Drupal&#039;s infrastructure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In practice, this could mean the backend infrastructure around Open Source projects operating more like a SaaS service: the software remains open, but the infrastructure that powers updates and security becomes a paid service for large organizations.&lt;/p&gt;
&lt;p&gt;Some people will instinctively resist the idea of charging for the infrastructure behind an Open Source project. That reaction may feel familiar to anyone who remembers &lt;a href=&quot;https://dri.es/the-commercialization-of-a-volunteer-driven-open-source-project&quot;&gt;the early debates about paid contributors&lt;/a&gt;. At the time, many feared corporate money would drive volunteers away. In practice, the opposite happened. Projects grew, contributor bases expanded, and paid engineers became some of their most active contributors.&lt;/p&gt;
&lt;p&gt;That does not mean every new funding idea is a good one. But instinctive discomfort alone is not a reason to reject it.&lt;/p&gt;
&lt;p&gt;In Open Source, what looks like fairness often is not. Free for everyone sounds equitable, but the cost does not disappear. It is absorbed by those who can least afford it, while the organizations that benefit most often pay the least. When a Fortune 500 company consumes Open Source infrastructure for free, that is not a neutral outcome. It is a subsidy flowing in the wrong direction.&lt;/p&gt;
&lt;p&gt;If the problem is that costs are disconnected from usage, the obvious place to start is linking them. Exactly how that would work in practice is a separate design question, and the answer will likely differ from one Open Source project to another. One possible approach is usage-based fees, tiered by download volume or API consumption. Questions about measurement, thresholds, and enforcement would need careful community discussion.&lt;/p&gt;
&lt;h3&gt;Governance is downstream of funding&lt;/h3&gt;
&lt;p&gt;If infrastructure funding models need to change, the obvious question is who decides. In Open Source, questions like this ultimately belong to the community.&lt;/p&gt;
&lt;p&gt;But communities do not decide these things in a vacuum. In practice, governance tends to follow funding.&lt;/p&gt;
&lt;p&gt;Discussions about Open Source infrastructure often focus on governance: who should control it and who gets to make the decisions. In reality, those questions are often settled by something simpler: who pays for it.&lt;/p&gt;
&lt;p&gt;FAIR is a recent example. The organizers didn&#039;t step back because federation was the wrong idea. They stepped back because no host would commit funding.&lt;/p&gt;
&lt;p&gt;When one organization pays for the infrastructure, it ultimately controls it. When a broader set of stakeholders funds it, governance broadens with it.&lt;/p&gt;
&lt;p&gt;That is why Open Source infrastructure needs more than better fundraising. It needs a business model that connects the cost of operating shared infrastructure to the organizations that rely on it most.&lt;/p&gt;
&lt;p&gt;Infrastructure that entire ecosystems depend on cannot rely indefinitely on goodwill alone. It deserves a business model.&lt;/p&gt;
&lt;p&gt;Solving the funding problem is a prerequisite to solving the governance problem.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://www.drupal.org/u/farriss&quot;&gt;Tiffany Farriss&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/hestenet&quot;&gt;Tim Lehnen&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/u/g%C3%A1bor-hojtsy&quot;&gt;Gábor Hojtsy&lt;/a&gt; and &lt;a href=&quot;https://www.drupal.org/u/lauriii&quot;&gt;Lauri Timmanee&lt;/a&gt; for reviewing my draft.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Drupal 25th Anniversary Gala at DrupalCon Chicago</title>
      <link>https://dri.es/drupal-25th-anniversary-gala-at-drupalcon-chicago</link>
      <guid>https://dri.es/drupal-25th-anniversary-gala-at-drupalcon-chicago</guid>
      <pubDate>Tue, 03 Mar 2026 10:55:07 -0500</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/drupal/25th-anniversary-gala-1280w.png&quot; alt=&quot;Graphic reading &amp;amp;#039;Drupal 25th Anniversary Gala&amp;amp;#039; over a purple-lit ballroom with chandeliers and silhouetted guests.&quot; width=&quot;1280&quot; height=&quot;850&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;There is a big party happening at DrupalCon Chicago, and I can&#039;t wait.&lt;/p&gt;
&lt;p&gt;On March 24th, we&#039;re celebrating Drupal&#039;s 25th Anniversary with a gala from 7–10 pm CT. It&#039;s a separate ticketed event, not included in your DrupalCon registration.&lt;/p&gt;
&lt;p&gt;Some of Drupal&#039;s earliest contributors are coming back for this, including a few who haven&#039;t attended DrupalCon in years. That alone makes it special.&lt;/p&gt;
&lt;p&gt;If you&#039;ve been part of Drupal&#039;s story, whether for decades or just a few months, I&#039;d love for you to be there. It&#039;s shaping up to become a memorable night.&lt;/p&gt;
&lt;p&gt;The dress code is &amp;quot;Drupal Fancy&amp;quot;. That means anything from gowns and black tie, to your favorite Drupal t-shirt. If you&#039;ve ever wanted an excuse to dress up for a Drupal event, this is it!&lt;/p&gt;
&lt;p&gt;Tickets are $125, with a limited number of $25 tickets underwritten by sponsors so cost isn&#039;t a barrier. All tickets must be purchased in advance. They won&#039;t be available at the door. Registration closes March 18th, so &lt;a href=&quot;https://www.zeffy.com/en-US/ticketing/drupal-25th-anniversary-gala&quot;&gt;grab your tickets&lt;/a&gt; soon.&lt;/p&gt;
&lt;p&gt;Organizations can reserve a table for their team. Even better, invite a few contributors to join you. It&#039;s a great way to &lt;a href=&quot;https://www.zeffy.com/en-US/ticketing/drupal-25th-anniversary-gala-sponsorship&quot;&gt;give back&lt;/a&gt; to the people who helped build what your business runs on.&lt;/p&gt;
&lt;p&gt;For questions or sponsorship opportunities, please reach out to &lt;a href=&quot;https://www.drupal.org/u/farriss&quot;&gt;Tiffany Farriss&lt;/a&gt;, who is serving as Gala Chair and part of the team coordinating the celebration.&lt;/p&gt;
&lt;p&gt;Know someone who should be there? Share this with them.&lt;/p&gt;
&lt;p&gt;What matters most is that you&#039;re there. I can&#039;t wait to celebrate together in Chicago.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>A better way to follow Drupal development</title>
      <link>https://dri.es/a-better-way-to-follow-drupal-development</link>
      <guid>https://dri.es/a-better-way-to-follow-drupal-development</guid>
      <pubDate>Thu, 19 Feb 2026 11:14:58 -0500</pubDate>
      <description>&lt;p&gt;I&#039;ve been reading &lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;Drupal Core&lt;/a&gt; commits for more than 15 years. My workflow hasn&#039;t changed much over time. I subscribe to the &lt;a href=&quot;https://git.drupalcode.org/project/drupal/-/commits/11.x?format=atom&quot;&gt;Drupal Core commits RSS feed&lt;/a&gt;, and every morning, over coffee, I scan the new entries. For many of them, I click through to the issue on Drupal.org and read the summary and comments.&lt;/p&gt;
&lt;p&gt;That workflow served me well for a long time. But when &lt;a href=&quot;https://dri.es/tag/drupal-starshot&quot;&gt;Drupal Starshot&lt;/a&gt; expanded my focus beyond &lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;Drupal Core&lt;/a&gt; to include &lt;a href=&quot;https://www.drupal.org/project/cms&quot;&gt;Drupal CMS&lt;/a&gt;, &lt;a href=&quot;https://www.drupal.org/project/canvas&quot;&gt;Drupal Canvas&lt;/a&gt;, and the &lt;a href=&quot;https://www.drupal.org/project/ai&quot;&gt;Drupal AI initiative&lt;/a&gt;, it became much harder to keep track of everything. All of this work happens in the open, but that doesn&#039;t make it easy to follow.&lt;/p&gt;
&lt;p&gt;So I built a small tool I&#039;m calling &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests&quot;&gt;Drupal Digests&lt;/a&gt;. It watches the Drupal.org issue queues for Drupal Core, Drupal CMS, Drupal Canvas, and the Drupal AI initiative.  When something noteworthy gets committed, it feeds the discussion and diff to AI, which writes me a summary: what changed, why it matters, and whether you need to do anything. You can see &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests/blob/main/issues/drupal-ai/3556181.md&quot;&gt;an example summary&lt;/a&gt; to get a feel for the format.&lt;/p&gt;
&lt;p&gt;Each issue summary currently lives as its own Markdown file in a &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests/tree/main/issues&quot;&gt;GitHub repository&lt;/a&gt;. Since I still like my morning coffee and RSS routine, I also generate &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests/tree/main/feeds&quot;&gt;RSS feeds&lt;/a&gt; that you can subscribe to in your favorite reader.&lt;/p&gt;
&lt;p&gt;I built this to scratch my own itch, but realized it could help with something bigger. Staying informed is one of the hardest parts of contributing to a large Open Source project. These digests can help new contributors ramp up faster, help experienced module maintainers catch API changes, and make collaboration across the project easier.&lt;/p&gt;
&lt;p&gt;I&#039;m still tuning the prompts. Right now it costs me less than $2 a day in tokens, so I&#039;m committed to running it for at least a year to see whether it&#039;s genuinely useful. If it proves valuable, I could imagine giving it a proper home, with search, filtering, and custom feeds.&lt;/p&gt;
&lt;p&gt;For now, &lt;a href=&quot;https://github.com/dbuytaert/drupal-digests&quot;&gt;subscribe to a feed&lt;/a&gt; and tell me what you think.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
