<?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: David Timothy</title>
    <description>The latest articles on DEV Community by David Timothy (@davidtimothy).</description>
    <link>https://dev.to/davidtimothy</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%2F4103104%2F7496eebf-ee8f-4a91-b801-ce4fc8b8197b.jpg</url>
      <title>DEV Community: David Timothy</title>
      <link>https://dev.to/davidtimothy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidtimothy"/>
    <language>en</language>
    <item>
      <title>How Much Can Websites Really Detect About Brave Users?</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Tue, 22 Sep 2026 01:37:21 +0000</pubDate>
      <link>https://dev.to/davidtimothy/how-much-can-websites-really-detect-about-brave-users-4bmb</link>
      <guid>https://dev.to/davidtimothy/how-much-can-websites-really-detect-about-brave-users-4bmb</guid>
      <description>&lt;p&gt;People install Brave because they want websites to know less about them. That expectation is reasonable. Brave blocks ads and trackers by default, restricts cross-site storage, modifies fingerprintable APIs, and has spent years building defenses that stock Chromium does not provide.&lt;/p&gt;

&lt;p&gt;Then a website runs this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isBrave&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;brave&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;isBrave&lt;/span&gt;&lt;span class="p"&gt;?.();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or reads this request header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Sec-CH-UA: "Brave";v="153", "Not_A Brand";v="8",
  "Chromium";v="153"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or asks JavaScript for the visitor’s default timezone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Intl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeFormat&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;resolvedOptions&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result might be &lt;code&gt;Europe/Zurich&lt;/code&gt;, &lt;code&gt;America/New_York&lt;/code&gt;, or &lt;code&gt;Asia/Tokyo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;None of those observations makes Brave a bad privacy browser. They do expose an important distinction that gets lost in browser marketing: privacy protection does not mean making the browser invisible.&lt;/p&gt;

&lt;p&gt;As of September 22, 2026, the current stable desktop release is Brave 1.95.104, based on Chromium 153. This article focuses mainly on Brave’s Chromium-based desktop and Android versions. Brave on iOS runs on Apple’s WebKit stack, does not support User-Agent Client Hints, and has different technical constraints.&lt;/p&gt;

&lt;p&gt;So, how much can an ordinary website actually learn about a Brave user?&lt;/p&gt;

&lt;p&gt;The short answer is: quite a bit about the browser environment, but much less stable identifying information than it would receive from an unprotected Chromium browser.&lt;/p&gt;

&lt;p&gt;A first-party website can generally determine that the browser is Brave. It can learn the Chromium major version, operating-system family, exact IANA timezone, language information, viewport dimensions, and broad hardware characteristics. With User-Agent Client Hints, it can request additional details such as platform version, architecture, and bitness.&lt;/p&gt;

&lt;p&gt;At the same time, Brave blocks many third-party tracking scripts before they execute, partitions storage, and deliberately modifies signals such as canvas output, Web Audio output, screen characteristics, CPU count, memory estimates, font availability, WebGL extensions, and GPU identification.&lt;/p&gt;

&lt;p&gt;That combination is where Brave’s privacy model gets interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brave is detectable, and that is intentional
&lt;/h2&gt;

&lt;p&gt;There are at least three direct, current mechanisms for detecting Brave on a normal website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Brave&lt;/code&gt; brand in User-Agent Client Hints&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;navigator.brave.isBrave()&lt;/code&gt; JavaScript API&lt;/li&gt;
&lt;li&gt;Brave-specific generic GPU strings exposed by its WebGL protections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brave’s own documentation is unusually direct about the first two. Hiding the fact that someone uses Brave is not a general privacy goal.&lt;/p&gt;

&lt;p&gt;That decision deserves more attention than either side of the usual debate gives it.&lt;/p&gt;

&lt;p&gt;Browser identification is not the same as identifying a person. Knowing that a visitor uses Brave 153 places them in a group. It does not reveal their name, account, browsing history, or a persistent browser identifier.&lt;/p&gt;

&lt;p&gt;Still, reducing a visitor from “some Chromium user” to “a Brave user” narrows the anonymity set. It also gives websites an easy condition they can incorporate into analytics, fraud scoring, content decisions, or browser-specific blocking.&lt;/p&gt;

&lt;p&gt;Brave accepts that trade-off, while maintaining compatibility exceptions for sites that break or discriminate against Brave users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the traditional User-Agent string often looks like Chrome
&lt;/h3&gt;

&lt;p&gt;On desktop and Android, Brave uses a Chrome-compatible &lt;code&gt;User-Agent&lt;/code&gt; request header. A current macOS string looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/153.0.0.0 Safari/537.36
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no &lt;code&gt;Brave&lt;/code&gt; token.&lt;/p&gt;

&lt;p&gt;This is deliberate. User-Agent strings have accumulated decades of compatibility baggage. Websites frequently parse them using brittle regular expressions and assumptions about token order. Adding a new browser token can result in unsupported-browser pages, incorrect downloads, or entire applications refusing to load.&lt;/p&gt;

&lt;p&gt;The string is also reduced. It exposes the Chromium major version but replaces the minor and patch components with zeros. On macOS, the operating-system token is frozen at &lt;code&gt;10_15_7&lt;/code&gt;, even on much newer systems.&lt;/p&gt;

&lt;p&gt;At first glance, Brave therefore looks like Chrome to traditional server-side User-Agent parsers.&lt;/p&gt;

&lt;p&gt;That does not mean the browser is trying to remain indistinguishable from Chrome everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Sec-CH-UA&lt;/code&gt; says Brave explicitly
&lt;/h3&gt;

&lt;p&gt;Chromium’s replacement for much of the old User-Agent machinery is User-Agent Client Hints, commonly shortened to UA-CH.&lt;/p&gt;

&lt;p&gt;On an ordinary secure request, Brave can send low-entropy hints such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Sec-CH-UA: "Brave";v="153", "Not_A Brand";v="8",
  "Chromium";v="153"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first value is the important one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Brave";v="153"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It tells the server that Brave is one of the browser’s brands. The version is the Chromium-aligned major version, not the Brave application version &lt;code&gt;1.95.104&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"Chromium";v="153"&lt;/code&gt; describes the shared browser engine lineage.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"Not_A Brand";v="8"&lt;/code&gt; is an intentionally fake GREASE brand. It exists to discourage developers from assuming that the first item is always the real browser or that every brand will be recognized. The spelling, version, and ordering can change.&lt;/p&gt;

&lt;p&gt;Do not parse &lt;code&gt;Sec-CH-UA&lt;/code&gt; with a fixed substring position. Treat it as a structured list of brands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;hasBrand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgentData&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;brands&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;brand&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;brand&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;hasBrand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brave&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlike many higher-entropy Client Hints, &lt;code&gt;Sec-CH-UA&lt;/code&gt; is normally sent without a server first opting in through &lt;code&gt;Accept-CH&lt;/code&gt;. JavaScript can obtain the equivalent low-entropy list from &lt;code&gt;navigator.userAgentData.brands&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This produces an interesting split:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The legacy User-Agent string prioritizes Chrome compatibility.&lt;/li&gt;
&lt;li&gt;The newer Client Hints interface identifies Brave directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not an accidental failure to hide. It is Brave’s documented design.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript can ask Brave directly
&lt;/h3&gt;

&lt;p&gt;Brave also exposes a browser-specific API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;detectBrave&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;brandMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgentData&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;brands&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;brand&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;brand&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brave&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;apiMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;apiMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;brave&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;isBrave&lt;/span&gt;&lt;span class="p"&gt;?.());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;apiMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;brandMatch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;apiMatch&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;detectBrave&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;navigator.brave.isBrave()&lt;/code&gt; returns a promise resolving to &lt;code&gt;true&lt;/code&gt; in Brave. This is not a standard Web API. It is an intentional Brave extension implemented in the browser’s Blink integration.&lt;/p&gt;

&lt;p&gt;A website might use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offer installation instructions for another Brave component&lt;/li&gt;
&lt;li&gt;Avoid presenting a “download Brave” banner to existing users&lt;/li&gt;
&lt;li&gt;Diagnose browser-specific compatibility problems&lt;/li&gt;
&lt;li&gt;Measure Brave usage more accurately&lt;/li&gt;
&lt;li&gt;Apply a workaround for a known Brave interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can also be used less constructively, such as placing Brave users into a separate risk bucket or denying them access.&lt;/p&gt;

&lt;p&gt;Brave maintains compatibility exceptions where this API and its Client Hints identity may be hidden because a site breaks or discriminates against Brave. Users can also apply a custom content-filter rule to suppress &lt;code&gt;navigator.brave&lt;/code&gt; for a particular domain.&lt;/p&gt;

&lt;p&gt;The ordinary behavior remains clear: a website is allowed to know that the visitor uses Brave.&lt;/p&gt;

&lt;h3&gt;
  
  
  Brave’s GPU protection is another detectable marker
&lt;/h3&gt;

&lt;p&gt;There is now a third, less obvious signal.&lt;/p&gt;

&lt;p&gt;Older Brave releases allowed WebGL’s debugging extension to expose detailed GPU strings such as an Apple M-series model, an NVIDIA GPU, an AMD adapter, or an ANGLE renderer and driver combination.&lt;/p&gt;

&lt;p&gt;Brave addressed this in versions 1.92 and 1.93. With fingerprinting protection enabled, current Brave desktop and Android builds replace the WebGL unmasked vendor and renderer with a generic value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getWebGlIdentity&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;canvas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;webgl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;gl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WEBGL_debug_renderer_info&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;gl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UNMASKED_VENDOR_WEBGL&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;gl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UNMASKED_RENDERER_WEBGL&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getWebGlIdentity&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under current default protection, those unmasked fields can return &lt;code&gt;Brave&lt;/code&gt; instead of the real GPU vendor and model.&lt;/p&gt;

&lt;p&gt;From a fingerprinting perspective, this is a very good trade. Replacing thousands of possible hardware and driver combinations with one common value removes a large amount of entropy.&lt;/p&gt;

&lt;p&gt;From a browser-identification perspective, it is another Brave marker.&lt;/p&gt;

&lt;p&gt;That distinction matters. A value can make the browser family easier to identify while making the individual device much harder to identify. Calling both effects a “privacy leak” would be technically sloppy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brave reveals the default IANA timezone
&lt;/h2&gt;

&lt;p&gt;The timezone case is more difficult to dismiss as mere browser branding.&lt;/p&gt;

&lt;p&gt;A normal website can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;Intl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeFormat&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;resolvedOptions&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;calendar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;calendar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;numberingSystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;numberingSystem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On current Brave, &lt;code&gt;timeZone&lt;/code&gt; can contain the runtime’s default IANA timezone identifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Europe/Zurich
Europe/Vienna
America/New_York
Asia/Tokyo
America/Buenos_Aires
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not just a UTC offset.&lt;/p&gt;

&lt;p&gt;As of the current Brave release, the browser does not generally replace this value with &lt;code&gt;UTC&lt;/code&gt;, randomize it per site, or reduce it to a generic numeric offset. Brave’s public fingerprinting test matrix does not list timezone as a protected surface, and an open Brave issue continues to track the fact that the real zone is observable.&lt;/p&gt;

&lt;p&gt;A September 2026 diagnostic report in Brave’s issue tracker also recorded the browser returning &lt;code&gt;America/Buenos_Aires&lt;/code&gt; alongside the current Brave 153 Client Hints data.&lt;/p&gt;

&lt;h3&gt;
  
  
  An IANA timezone contains more information than an offset
&lt;/h3&gt;

&lt;p&gt;Consider these two values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UTC+1
&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;Europe/Zurich
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;UTC+1&lt;/code&gt; describes an offset at a moment in time. Many countries and regions can share that offset.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Europe/Zurich&lt;/code&gt; identifies a named set of civil-time rules. It carries information about daylight-saving transitions, historical changes, and the region whose timezone database entry is being used.&lt;/p&gt;

&lt;p&gt;The same distinction applies to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UTC-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;America/New_York
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;New York is not always UTC-5. During daylight-saving time it uses UTC-4. Other regions may currently share one of those offsets while following different transition rules.&lt;/p&gt;

&lt;p&gt;This is why websites and calendar applications prefer an IANA identifier. It allows them to schedule a recurring event at 9:00 AM local time across future daylight-saving changes. A numeric offset alone cannot reliably do that.&lt;/p&gt;

&lt;p&gt;That legitimate use is also what makes the value more informative for fingerprinting.&lt;/p&gt;

&lt;h3&gt;
  
  
  A timezone is a regional clue, not proof of location
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Europe/Zurich&lt;/code&gt; does not prove that someone is physically in Zurich. The user could be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elsewhere in Switzerland&lt;/li&gt;
&lt;li&gt;Traveling with an unchanged system timezone&lt;/li&gt;
&lt;li&gt;Using a remote desktop&lt;/li&gt;
&lt;li&gt;Running a virtual machine&lt;/li&gt;
&lt;li&gt;Manually overriding the system timezone&lt;/li&gt;
&lt;li&gt;Using a VPN whose endpoint does not match the device timezone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A website also cannot derive a street address or GPS position from &lt;code&gt;Intl.DateTimeFormat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Precise geolocation remains separately permission-gated.&lt;/p&gt;

&lt;p&gt;Timezone should instead be understood as a regional signal. Its significance depends heavily on the zone.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;America/New_York&lt;/code&gt; covers a large population across multiple states and areas. It is a relatively broad clue.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Europe/Vienna&lt;/code&gt;, &lt;code&gt;Europe/Zurich&lt;/code&gt;, and &lt;code&gt;Asia/Tokyo&lt;/code&gt; are more strongly associated with particular countries or small groups of jurisdictions. For users in smaller countries or distinctive timezone regions, the identifier can narrow the likely area more substantially.&lt;/p&gt;

&lt;p&gt;The value becomes more useful when combined with other signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP-derived country or region&lt;/li&gt;
&lt;li&gt;Browser language&lt;/li&gt;
&lt;li&gt;Locale and formatting preferences&lt;/li&gt;
&lt;li&gt;Operating-system family and version&lt;/li&gt;
&lt;li&gt;Keyboard and font availability&lt;/li&gt;
&lt;li&gt;Screen and device characteristics&lt;/li&gt;
&lt;li&gt;Browser brand and major version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A timezone and IP address that agree can increase confidence in a geographic inference. A mismatch can suggest travel, a VPN, remote access, or a misconfigured clock. It should not automatically be treated as evidence of fraud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Brave may be reluctant to mask it
&lt;/h3&gt;

&lt;p&gt;It is tempting to say Brave should return &lt;code&gt;UTC&lt;/code&gt; or a representative city for each current offset. Technically, neither solution is free.&lt;/p&gt;

&lt;p&gt;Returning &lt;code&gt;UTC&lt;/code&gt; would change how existing applications display dates unless every application explicitly asked for another zone.&lt;/p&gt;

&lt;p&gt;Replacing &lt;code&gt;Europe/Zurich&lt;/code&gt; with another zone that currently has the same offset can create incorrect results when daylight-saving rules diverge. It can also change historical date calculations.&lt;/p&gt;

&lt;p&gt;Permission-gating the value would be cleaner in privacy terms, but it would introduce prompts and break the long-standing assumption that local date formatting works without permission.&lt;/p&gt;

&lt;p&gt;Brave could theoretically apply different policies in first-party and third-party contexts, reduce the value only when used for passive inspection, or introduce an explicit site permission. Each option has compatibility and implementation consequences.&lt;/p&gt;

&lt;p&gt;The criticism is still fair: exact timezone identifiers are stable, geographically meaningful fingerprint inputs, and current Brave leaves them available. The reason is not that timezone masking is obviously impossible. The reason is that a correct replacement has to preserve calendaring behavior, daylight-saving rules, and existing application expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else can a website observe?
&lt;/h2&gt;

&lt;p&gt;The following table summarizes important surfaces on current Chromium-based Brave releases with default fingerprinting protection enabled.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;How a site obtains it&lt;/th&gt;
&lt;th&gt;Current Brave treatment&lt;/th&gt;
&lt;th&gt;Privacy significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Brave identity&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Sec-CH-UA&lt;/code&gt;, &lt;code&gt;navigator.userAgentData.brands&lt;/code&gt;, &lt;code&gt;navigator.brave.isBrave()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Intentionally exposed, with site-specific compatibility exceptions&lt;/td&gt;
&lt;td&gt;Identifies the browser family, not the user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chromium major version&lt;/td&gt;
&lt;td&gt;User-Agent and Client Hints&lt;/td&gt;
&lt;td&gt;Exposed&lt;/td&gt;
&lt;td&gt;Useful for compatibility and fingerprint classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS family&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Sec-CH-UA-Platform&lt;/code&gt;, &lt;code&gt;navigator.userAgentData.platform&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Exposed&lt;/td&gt;
&lt;td&gt;Broad platform signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS version&lt;/td&gt;
&lt;td&gt;High-entropy Client Hints&lt;/td&gt;
&lt;td&gt;Available when requested on supported builds&lt;/td&gt;
&lt;td&gt;Can narrow the device population&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU architecture and bitness&lt;/td&gt;
&lt;td&gt;High-entropy Client Hints&lt;/td&gt;
&lt;td&gt;Available when requested&lt;/td&gt;
&lt;td&gt;Can distinguish ARM, x86, 32-bit, and 64-bit environments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IANA timezone&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Intl.DateTimeFormat().resolvedOptions().timeZone&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exposed unchanged&lt;/td&gt;
&lt;td&gt;Stable regional and fingerprinting signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Normal network connection&lt;/td&gt;
&lt;td&gt;Not hidden by ordinary Brave browsing&lt;/td&gt;
&lt;td&gt;Strong network and approximate-location signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebGL GPU vendor and renderer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WEBGL_debug_renderer_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replaced with generic Brave values by default&lt;/td&gt;
&lt;td&gt;Exact hardware hidden, browser becomes more obvious&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebGPU adapter descriptors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GPUAdapter.info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vendor, architecture, device, and description scrubbed&lt;/td&gt;
&lt;td&gt;Removes direct GPU identification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebGL extension list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;getSupportedExtensions()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Randomized per site and session&lt;/td&gt;
&lt;td&gt;Reduces stable GPU and driver fingerprints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canvas and Web Audio output&lt;/td&gt;
&lt;td&gt;Canvas and audio readback APIs&lt;/td&gt;
&lt;td&gt;Farbled&lt;/td&gt;
&lt;td&gt;Poisons hashes that expect stable output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen characteristics&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;screen&lt;/code&gt;, CSS media queries&lt;/td&gt;
&lt;td&gt;Several screen-size surfaces are modified&lt;/td&gt;
&lt;td&gt;Reduces stable display fingerprints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Viewport dimensions&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;innerWidth&lt;/code&gt;, &lt;code&gt;innerHeight&lt;/code&gt;, layout APIs&lt;/td&gt;
&lt;td&gt;Generally available for page layout&lt;/td&gt;
&lt;td&gt;Dynamic but still useful as a supporting signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU count&lt;/td&gt;
&lt;td&gt;&lt;code&gt;navigator.hardwareConcurrency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Farbled&lt;/td&gt;
&lt;td&gt;Preserves performance hints while reducing stability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory class&lt;/td&gt;
&lt;td&gt;&lt;code&gt;navigator.deviceMemory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Farbled or reduced&lt;/td&gt;
&lt;td&gt;Broad hardware-capability signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fonts&lt;/td&gt;
&lt;td&gt;Font probing and text measurement&lt;/td&gt;
&lt;td&gt;Availability is restricted or randomized&lt;/td&gt;
&lt;td&gt;Reduces installed-font fingerprinting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language preferences&lt;/td&gt;
&lt;td&gt;Headers and navigator properties&lt;/td&gt;
&lt;td&gt;Partially reduced or modified&lt;/td&gt;
&lt;td&gt;Still useful for localization and regional inference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser capabilities&lt;/td&gt;
&lt;td&gt;Feature detection&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;Reveals engine generation and enabled features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The exact result can change if the user lowers Shields, disables fingerprinting protection for a site, installs extensions, changes browser flags, or uses a platform where Brave has fewer implementation controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  High-entropy Client Hints deserve more scrutiny
&lt;/h3&gt;

&lt;p&gt;Low-entropy Client Hints include the browser brands, mobile status, and platform. More detailed fields are available through the high-entropy interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getDetailedUaData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uaData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgentData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;uaData&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;getHighEntropyValues&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;uaData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getHighEntropyValues&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;architecture&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bitness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fullVersionList&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;platformVersion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getDetailedUaData&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A supported Brave build may return an object containing data such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;architecture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;arm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;bitness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;64&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;mobile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;macOS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;platformVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;27.0.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;brands&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brave&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;153&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not_A Brand&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Chromium&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;153&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returned values vary by platform, browser policy, and Chromium version. “High entropy” is not a promise that every field will contain maximum detail. The browser remains free to reduce or omit data.&lt;/p&gt;

&lt;p&gt;Servers can request corresponding HTTP headers through &lt;code&gt;Accept-CH&lt;/code&gt;, including:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Accept-CH: Sec-CH-UA-Arch, Sec-CH-UA-Bitness,
  Sec-CH-UA-Platform-Version
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser can then send those hints on subsequent requests.&lt;/p&gt;

&lt;p&gt;Client Hints are an improvement over broadcasting every detail in every User-Agent string. They make granular information structured and, for higher-entropy fields, request-driven.&lt;/p&gt;

&lt;p&gt;They do not make the information harmless.&lt;/p&gt;

&lt;p&gt;For developers, the right rule is simple: request only the fields the application actually needs. Architecture may be justified on a native-software download page. It is hard to justify on a blog, documentation site, or ordinary account dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Display and window information cannot simply disappear
&lt;/h3&gt;

&lt;p&gt;Websites need the viewport size to perform layout. CSS media queries, responsive images, canvas sizing, and virtualized interfaces all depend on display-related information.&lt;/p&gt;

&lt;p&gt;A page can observe values such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;screenWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;screenHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;availableWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;availableHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availHeight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;colorDepth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colorDepth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pixelRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;devicePixelRatio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;viewportWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;viewportHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;innerHeight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Brave modifies several screen-size surfaces to make them less reliable for fingerprinting. The viewport still has to correspond closely enough to the actual page area for layout to work.&lt;/p&gt;

&lt;p&gt;This is a recurring pattern in browser privacy engineering. A value does not need to be perfectly accurate to support benign use, but changing it too aggressively can produce visible breakage.&lt;/p&gt;

&lt;p&gt;The useful privacy question is therefore not, “Can a website read a number?” It is, “Does the website receive a stable, sufficiently precise value that helps link this browser across contexts?”&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory and processor APIs reveal broad hardware classes
&lt;/h3&gt;

&lt;p&gt;Two common examples are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hardwareConcurrency&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deviceMemory&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;hardwareConcurrency&lt;/code&gt; exists so applications can choose a sensible number of workers. &lt;code&gt;deviceMemory&lt;/code&gt; helps a site avoid delivering an unnecessarily expensive experience to a low-memory device.&lt;/p&gt;

&lt;p&gt;Both can also classify hardware.&lt;/p&gt;

&lt;p&gt;A high-end ARM Mac, an older dual-core laptop, and an inexpensive Android phone may produce different combinations. Brave farbles these values so they remain useful as rough performance hints without consistently exposing the true machine configuration.&lt;/p&gt;

&lt;p&gt;This is a stronger defense than simply reducing every device to the same hard-coded value. A universal value is easy for scripts to detect, can break workload tuning, and may itself identify the browser’s privacy mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPU information has improved substantially
&lt;/h3&gt;

&lt;p&gt;GPU information used to be one of Brave’s clearest remaining fingerprinting weaknesses.&lt;/p&gt;

&lt;p&gt;The 2026 WebGL and WebGPU changes materially improved that situation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebGL unmasked vendor and renderer strings are replaced with generic values.&lt;/li&gt;
&lt;li&gt;WebGPU adapter descriptors are emptied.&lt;/li&gt;
&lt;li&gt;WebGL supported-extension lists are randomized.&lt;/li&gt;
&lt;li&gt;Existing canvas and WebGL rendering farbling remains active.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For current WebGPU code, &lt;code&gt;GPUAdapter.info&lt;/code&gt; is the relevant interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;inspectWebGpu&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gpu&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adapter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gpu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAdapter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;inspectWebGpu&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Older examples using &lt;code&gt;requestAdapterInfo()&lt;/code&gt; are outdated for the current API.&lt;/p&gt;

&lt;p&gt;In Brave, direct fields such as &lt;code&gt;vendor&lt;/code&gt;, &lt;code&gt;architecture&lt;/code&gt;, &lt;code&gt;device&lt;/code&gt;, and &lt;code&gt;description&lt;/code&gt; are scrubbed. WebGPU features and limits still have to describe what the implementation can support. Those capability sets may reveal a broad GPU class even when the model name is gone.&lt;/p&gt;

&lt;p&gt;Brave has discussed further protection for WebGPU’s supported capabilities. Proposed or planned work should not be confused with shipped behavior. The currently shipped improvement is the removal of direct adapter identification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fingerprinting is not one thing
&lt;/h2&gt;

&lt;p&gt;A lot of privacy writing collapses several distinct concepts into “tracking.” That makes technical discussions harder than they need to be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser identification
&lt;/h3&gt;

&lt;p&gt;Browser identification answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is this Brave, Chrome, Safari, or Firefox?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;Sec-CH-UA&lt;/code&gt; and &lt;code&gt;navigator.brave.isBrave()&lt;/code&gt; do this directly.&lt;/p&gt;

&lt;p&gt;It classifies software. By itself, it does not distinguish one Brave user from another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Device fingerprinting
&lt;/h3&gt;

&lt;p&gt;Device fingerprinting combines browser and environment characteristics into a representation of the client.&lt;/p&gt;

&lt;p&gt;Possible inputs include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timezone
+
browser brand and version
+
OS and platform version
+
architecture
+
language and locale
+
screen and viewport characteristics
+
GPU capabilities
+
CPU and memory hints
+
font behavior
+
browser-specific APIs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some values may be shared by millions of devices. The combination can be more distinctive than any individual input.&lt;/p&gt;

&lt;p&gt;A fingerprint does not have to be globally unique to be useful. It can help a site recognize a returning visitor with some probability or divide traffic into smaller groups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Geographic inference
&lt;/h3&gt;

&lt;p&gt;Geographic inference estimates where the user may be.&lt;/p&gt;

&lt;p&gt;An IP address is usually much more informative than a timezone. Language and locale can add supporting evidence. An IANA timezone can narrow the possibilities, particularly in geographically distinctive regions.&lt;/p&gt;

&lt;p&gt;None of those signals necessarily proves the user’s physical location.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tracking
&lt;/h3&gt;

&lt;p&gt;Tracking is the act of linking activity across time, pages, accounts, or websites.&lt;/p&gt;

&lt;p&gt;A fingerprint is one possible tracking mechanism. Cookies, URL identifiers, login accounts, redirect parameters, and server-side identifiers are others.&lt;/p&gt;

&lt;p&gt;Brave’s tracker blocking and storage partitioning attack tracking at several layers. Even if a first-party page can read the timezone, a blocked third-party script cannot collect anything because it never executes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal identification
&lt;/h3&gt;

&lt;p&gt;Personal identification connects browser activity to a real person.&lt;/p&gt;

&lt;p&gt;A website can do that trivially after the user logs in, provides an email address, completes a purchase, or submits identifying information. A timezone is not personal identification.&lt;/p&gt;

&lt;p&gt;This distinction is why “Brave exposes my timezone” and “Brave tells websites who I am” are not equivalent claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Brave’s privacy model is actually trying to do
&lt;/h2&gt;

&lt;p&gt;Brave does not attempt to make every API return nothing.&lt;/p&gt;

&lt;p&gt;Its architecture combines several defenses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block known ads and trackers at the network layer&lt;/li&gt;
&lt;li&gt;Block or partition third-party storage&lt;/li&gt;
&lt;li&gt;Remove known tracking parameters from URLs&lt;/li&gt;
&lt;li&gt;Limit referrer information&lt;/li&gt;
&lt;li&gt;Partition network state&lt;/li&gt;
&lt;li&gt;Modify or remove especially identifying API results&lt;/li&gt;
&lt;li&gt;Randomize fingerprint inputs using farbling&lt;/li&gt;
&lt;li&gt;Preserve enough API behavior for normal sites to work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Farbling is particularly important.&lt;/p&gt;

&lt;p&gt;Instead of forcing every Brave installation to return the same value, Brave derives modifications from a seed associated with the site, session, and storage area. A value remains consistent enough for a page to function during that context, but can differ for another site or a later session.&lt;/p&gt;

&lt;p&gt;That design attacks fingerprint stability.&lt;/p&gt;

&lt;p&gt;Suppose a fingerprinting library hashes 20 attributes together. If even one important input changes when the user restarts the browser or visits from another site context, the final hash changes too. Brave does not have to make every attribute invisible to disrupt that fingerprint.&lt;/p&gt;

&lt;p&gt;This is also why finding an unmodified property does not automatically prove the entire protection has failed. The relevant question is whether the complete collection remains stable and linkable.&lt;/p&gt;

&lt;p&gt;Older Brave documentation refers to a separate Strict fingerprinting mode. Brave retired that mode beginning with version 1.64. Current articles should not tell users to enable a legacy Strict setting that no longer exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unresolved tension: privacy versus compatibility
&lt;/h2&gt;

&lt;p&gt;Brave’s most defensible disclosures are those needed for interoperability.&lt;/p&gt;

&lt;p&gt;A site may reasonably need to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether a browser supports a feature&lt;/li&gt;
&lt;li&gt;Whether it is running on a mobile form factor&lt;/li&gt;
&lt;li&gt;Which installer architecture to offer&lt;/li&gt;
&lt;li&gt;Which timezone rules to use for a calendar&lt;/li&gt;
&lt;li&gt;How large the viewport is&lt;/li&gt;
&lt;li&gt;Roughly how much parallel work the device can handle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The harder question is whether each use case needs the most precise available value.&lt;/p&gt;

&lt;p&gt;Does a documentation site need the exact operating-system version? Probably not.&lt;/p&gt;

&lt;p&gt;Does an event calendar need a real IANA timezone? Often, yes.&lt;/p&gt;

&lt;p&gt;Does a 3D application need GPU features and limits? Yes.&lt;/p&gt;

&lt;p&gt;Does it need a human-readable GPU model and driver string? Usually not.&lt;/p&gt;

&lt;p&gt;Does a website need to know the browser is Brave? Sometimes useful, but feature detection is generally more robust.&lt;/p&gt;

&lt;p&gt;Brave’s 2026 GPU changes are a good example of the model working as intended. WebGL and WebGPU remain usable, but highly identifying strings are removed. The site gets capabilities without receiving the exact device name.&lt;/p&gt;

&lt;p&gt;Timezone remains a harder case because the precise identifier is itself the capability calendar software wants.&lt;/p&gt;

&lt;p&gt;Browser identity is mostly a policy decision. Brave wants to be measurable, supportable, and compatible as its own browser. It also wants the ability to suppress that identity when sites misuse it.&lt;/p&gt;

&lt;p&gt;Those goals are reasonable. They are not the same as maximizing indistinguishability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developers should do with this information
&lt;/h2&gt;

&lt;p&gt;The fact that Brave can be detected does not mean application code should branch on it.&lt;/p&gt;

&lt;p&gt;Prefer feature detection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Offer a WebGPU path.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;showOpenFilePicker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Offer the File System Access integration.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avoid logic like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isBrave&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;disableFeature&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Brave user may have Shields lowered. A Chrome user may have restrictive extensions. Enterprise policies can alter both browsers. Browser identity is a weak proxy for actual capability.&lt;/p&gt;

&lt;p&gt;If you collect timezone information, collect it because the product needs timezone semantics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeZone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;Intl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeFormat&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;resolvedOptions&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good uses include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling events&lt;/li&gt;
&lt;li&gt;Displaying account activity in local civil time&lt;/li&gt;
&lt;li&gt;Calculating recurring reminders&lt;/li&gt;
&lt;li&gt;Selecting an initial timezone in a user-editable form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Poor uses include silently adding the timezone to an unnecessary device fingerprint.&lt;/p&gt;

&lt;p&gt;For systems that genuinely need a durable timezone, an explicit account setting is often better than repeatedly inferring it from the device. Users travel, use remote machines, and change system settings.&lt;/p&gt;

&lt;p&gt;Treat high-entropy Client Hints the same way. Request architecture on a download page if you need to choose between ARM64 and x86-64 binaries. Do not request it across every route merely because the API exists.&lt;/p&gt;

&lt;p&gt;Fraud and abuse systems also need to account for privacy browsers. Farbled CPU counts, generalized GPU details, blocked storage, or a mismatch between IP and timezone are not proof of automation or malicious behavior. Privacy protection can look like environmental inconsistency to systems trained exclusively on stock browsers.&lt;/p&gt;

&lt;p&gt;Finally, remember the first-party boundary. Brave is strongest against the web’s background machinery: third-party trackers, cross-site storage, fingerprinting scripts, tracking parameters, and stable hardware identifiers. It does not prevent a site the user intentionally visits from seeing everything necessary to serve that page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy is not binary
&lt;/h2&gt;

&lt;p&gt;Brave is a strong privacy-focused browser precisely because it does more than change a preference or install an ad-blocking extension. Its protections operate in the network stack, storage model, rendering APIs, JavaScript environment, and Chromium integration.&lt;/p&gt;

&lt;p&gt;The browser still reveals meaningful information.&lt;/p&gt;

&lt;p&gt;A website can identify Brave through Client Hints and JavaScript. The new generic WebGL strings may identify Brave while hiding the underlying GPU. High-entropy Client Hints can provide platform details. The exact IANA timezone remains available and can contribute to regional inference and fingerprinting.&lt;/p&gt;

&lt;p&gt;Those facts do not cancel out Brave’s protections.&lt;/p&gt;

&lt;p&gt;They show what modern browser privacy actually looks like: reducing stable, unnecessary identifying information while keeping enough of the web platform intact for applications to work.&lt;/p&gt;

&lt;p&gt;Brave’s decision to expose its own identity is debatable, but transparent and intentional. Its timezone behavior is a more surprising limitation and a reasonable target for further privacy work. Its recent GPU changes show that the project is willing to revisit exposed surfaces when a useful, compatible mitigation becomes practical.&lt;/p&gt;

&lt;p&gt;For developers, the useful lesson is not that Brave is undetectable. It is that Brave changes the economics and reliability of tracking.&lt;/p&gt;

&lt;p&gt;A website can learn that a visitor uses Brave. It can learn their timezone, platform class, viewport, and a collection of capabilities. What it has a much harder time obtaining is a precise, stable hardware profile that works unchanged across sites and sessions.&lt;/p&gt;

&lt;p&gt;That is not perfect invisibility. It is still a meaningful privacy improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://brave.com/latest/" rel="noopener noreferrer"&gt;Brave: Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-browser/wiki/Detecting-Brave-%28for-Websites%29" rel="noopener noreferrer"&gt;Brave GitHub Wiki: Detecting Brave (for Websites)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-browser/wiki/User-Agents" rel="noopener noreferrer"&gt;Brave GitHub Wiki: User Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-browser/wiki/Fingerprinting-Protections" rel="noopener noreferrer"&gt;Brave GitHub Wiki: Fingerprinting Protections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev-pages.brave.software/fingerprinting/farbling.html" rel="noopener noreferrer"&gt;Brave QA: Fingerprinting Farbling Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/privacy-updates/38-webgl-webgpu-fingerprinting-protections/" rel="noopener noreferrer"&gt;Brave Privacy Updates: Brave improves protections against GPU fingerprinting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/privacy-updates/28-sunsetting-strict-fingerprinting-mode/" rel="noopener noreferrer"&gt;Brave Privacy Updates: Brave browser simplifies its fingerprinting protections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-browser/issues/35646" rel="noopener noreferrer"&gt;Brave GitHub Issue #35646: Brave still exposes too much fingerprintable information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-browser/issues/58773" rel="noopener noreferrer"&gt;Brave GitHub Issue #58773: CF checks failed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brave/brave-core/blob/master/third_party/blink/renderer/modules/brave/brave.cc" rel="noopener noreferrer"&gt;Brave source code: &lt;code&gt;navigator.brave.isBrave()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wicg.github.io/ua-client-hints/" rel="noopener noreferrer"&gt;WICG: User-Agent Client Hints specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Sec-CH-UA" rel="noopener noreferrer"&gt;MDN: Sec-CH-UA header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions" rel="noopener noreferrer"&gt;MDN: Intl.DateTimeFormat.prototype.resolvedOptions()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info" rel="noopener noreferrer"&gt;MDN: WEBGL_debug_renderer_info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/GPUAdapterInfo" rel="noopener noreferrer"&gt;MDN: GPUAdapterInfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/privacy-features/" rel="noopener noreferrer"&gt;Brave: Privacy Protection and Security Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>cybersecurity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>When Regular VPNs Fail, Run Your Own With Outline</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Mon, 21 Sep 2026 02:18:04 +0000</pubDate>
      <link>https://dev.to/davidtimothy/when-regular-vpns-fail-run-your-own-with-outline-4ni2</link>
      <guid>https://dev.to/davidtimothy/when-regular-vpns-fail-run-your-own-with-outline-4ni2</guid>
      <description>&lt;p&gt;A VPN can be fast, secure, affordable, and completely useless if the network refuses to connect to it.&lt;/p&gt;

&lt;p&gt;That is the problem developers run into in restrictive network environments. The VPN subscription is active. The client is installed. Every setting looks correct. But the provider’s domain is filtered, its API cannot be reached, its server IPs are blocked, or its protocol is identified and disrupted before the tunnel finishes connecting.&lt;/p&gt;

&lt;p&gt;Switching to another commercial VPN sometimes helps.&lt;/p&gt;

&lt;p&gt;Then that service gets blocked too.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://getoutline.org/" rel="noopener noreferrer"&gt;GetOutline&lt;/a&gt; is interesting. Outline is not simply another company selling access to a large collection of VPN servers. It is an open-source system for creating, managing, and sharing access to a server you control.&lt;/p&gt;

&lt;p&gt;That distinction sounds minor until centralized VPN infrastructure becomes the thing a network is targeting.&lt;/p&gt;

&lt;p&gt;Outline does not make blocking impossible. It does not make encrypted traffic invisible, and it does not guarantee connectivity in Russia, China, or anywhere else with aggressive network filtering.&lt;/p&gt;

&lt;p&gt;What it changes is the architecture.&lt;/p&gt;

&lt;p&gt;Instead of joining thousands of customers on a provider’s well-known infrastructure, you can run a private VPN server on a VPS, create separate access keys for people you trust, and replace the server if its address stops working.&lt;/p&gt;

&lt;p&gt;For developers and small technical teams, that can be a much more useful model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem is not always the VPN protocol
&lt;/h2&gt;

&lt;p&gt;When people say a VPN is “not working,” they can mean several completely different failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The provider’s website or download page is blocked.&lt;/li&gt;
&lt;li&gt;The client cannot reach the provider’s authentication API.&lt;/li&gt;
&lt;li&gt;DNS manipulation prevents service discovery.&lt;/li&gt;
&lt;li&gt;Known VPN server IP addresses are blocked.&lt;/li&gt;
&lt;li&gt;Traffic on common VPN ports is filtered.&lt;/li&gt;
&lt;li&gt;Deep packet inspection identifies a protocol fingerprint.&lt;/li&gt;
&lt;li&gt;Connections are reset or throttled after detection.&lt;/li&gt;
&lt;li&gt;Active probing is used to investigate suspected proxy servers.&lt;/li&gt;
&lt;li&gt;The VPN works on one ISP but not another.&lt;/li&gt;
&lt;li&gt;The service connects today and fails tomorrow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These failures do not necessarily mean the VPN encryption has been broken.&lt;/p&gt;

&lt;p&gt;A censor does not need to decrypt a tunnel if it can identify the destination and drop every packet going there.&lt;/p&gt;

&lt;p&gt;Commercial VPN providers are especially exposed to this problem because they are centralized and discoverable. They publish applications, domains, support pages, API endpoints, and server locations. Their users repeatedly connect to overlapping pools of IP addresses.&lt;/p&gt;

&lt;p&gt;That scale is useful under normal conditions. It gives customers many locations and lets the provider operate optimized infrastructure.&lt;/p&gt;

&lt;p&gt;It also creates obvious blocking targets.&lt;/p&gt;

&lt;p&gt;A restrictive network can acquire a subscription, enumerate available servers, correlate traffic patterns, block known IP ranges, interfere with account authentication, or prevent users from downloading configuration updates.&lt;/p&gt;

&lt;p&gt;The provider responds by rotating addresses, changing protocols, adding obfuscation, or deploying new infrastructure. The censor adjusts. Reliability becomes an ongoing contest rather than a permanent technical property.&lt;/p&gt;

&lt;p&gt;The uncomfortable fact is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A VPN can use strong cryptography and still be easy to disrupt.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Encryption protects the contents of traffic. It does not automatically conceal that a particular host is receiving VPN-like connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GetOutline actually is
&lt;/h2&gt;

&lt;p&gt;Outline’s own FAQ makes a useful distinction: Outline is not itself a VPN service. It is software that lets someone create and manage a private VPN server.&lt;/p&gt;

&lt;p&gt;The project has three major pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outline Server&lt;/strong&gt; runs on a Linux server and handles encrypted proxy traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outline Manager&lt;/strong&gt; deploys and administers servers, creates access keys, revokes users, and configures data limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outline Client&lt;/strong&gt; imports an access key and routes device traffic through the configured server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also the open-source &lt;strong&gt;Outline SDK&lt;/strong&gt;, which exposes networking components for developers building applications that need protection against network-level interference.&lt;/p&gt;

&lt;p&gt;Outline was launched by Jigsaw, an incubator within Google. According to the project’s FAQ, ownership transitioned in 2026 to the independent nonprofit Outline Foundation. The software remains open source.&lt;/p&gt;

&lt;p&gt;The normal data path looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Developer device] --&amp;gt;|Encrypted connection| B[Outline server on VPS]
    B --&amp;gt;|Regular internet traffic| C[Documentation, APIs, Git hosts]
    D[Outline Manager] --&amp;gt;|Server administration| B
    D --&amp;gt;|Creates access key| A&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The Manager is the control surface. The Client handles the user connection. The server is the exit point visible to destination services.&lt;/p&gt;

&lt;p&gt;If you deploy the server in Germany and connect from another country, websites generally see the German server’s IP address. Your local ISP sees an encrypted connection to that server, not the final contents of the traffic passing through it.&lt;/p&gt;

&lt;p&gt;The VPS provider still occupies an important trust position. It controls the infrastructure hosting the server and can observe metadata around it. Destination websites can identify or log the server’s public IP. Outline improves control over who operates the VPN layer, but it does not remove every intermediary from the network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outline is built around Shadowsocks, not a conventional VPN tunnel
&lt;/h2&gt;

&lt;p&gt;Outline Server runs a Shadowsocks-based service. Shadowsocks is an encrypted proxy protocol originally designed for use in censored network environments.&lt;/p&gt;

&lt;p&gt;This matters because protocols have recognizable behavior.&lt;/p&gt;

&lt;p&gt;Traditional VPN protocols may expose distinctive handshakes, packet structures, timing behavior, port usage, or other characteristics that filtering systems can classify. Some protocols are secure but were not designed to blend into arbitrary internet traffic.&lt;/p&gt;

&lt;p&gt;Outline describes its protocol as “handshake-less” and “look-like-nothing.” In practical terms, the server does not begin with the kind of obvious unauthenticated negotiation that gives a filtering system a simple protocol banner to match.&lt;/p&gt;

&lt;p&gt;An invalid connection does not receive a helpful response announcing that an Outline server is present.&lt;/p&gt;

&lt;p&gt;That raises the cost of identification.&lt;/p&gt;

&lt;p&gt;It does not make Outline undetectable.&lt;/p&gt;

&lt;p&gt;Traffic classification can use more than a handshake. A sufficiently capable observer can examine packet sizes, timing, connection behavior, endpoint reputation, hosting-provider ranges, and repeated failed connections. It can also block an IP address without identifying the exact application behind it.&lt;/p&gt;

&lt;p&gt;China’s Great Firewall has used combinations of deep packet inspection, endpoint blocking, and active probing against circumvention protocols. Research from the GFW Report has documented evolving detection and blocking behavior rather than one static filter.&lt;/p&gt;

&lt;p&gt;Russia has also expanded technical restrictions on VPN and circumvention services. OONI measurements have documented blocking that varies by service, protocol, network, and period. Russian authorities and network operators have used website blocking, IP-based interference, protocol disruption, and restrictions against services including VPN products and encrypted communication tools.&lt;/p&gt;

&lt;p&gt;So the responsible answer to “Does Outline work in China or Russia?” is not yes or no.&lt;/p&gt;

&lt;p&gt;Outline may work where a public commercial VPN does not because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its server address is privately distributed.&lt;/li&gt;
&lt;li&gt;It is not necessarily listed in a provider’s public server catalog.&lt;/li&gt;
&lt;li&gt;Fewer unrelated users connect to the same address.&lt;/li&gt;
&lt;li&gt;Its Shadowsocks-based traffic is designed to avoid an obvious handshake.&lt;/li&gt;
&lt;li&gt;The operator can choose another host, port, provider, or region.&lt;/li&gt;
&lt;li&gt;A blocked server can be replaced without waiting for a VPN company.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same server can still be discovered, fingerprinted, throttled, or blocked. Conditions can differ between ISPs and change without warning.&lt;/p&gt;

&lt;p&gt;Outline is more accurately described as &lt;strong&gt;blocking-resistant&lt;/strong&gt;, not unblockable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture is the real feature
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand Outline is to compare who controls the infrastructure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Commercial VPN&lt;/th&gt;
&lt;th&gt;Self-hosted Outline server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who chooses the server IP?&lt;/td&gt;
&lt;td&gt;VPN provider&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who shares the server?&lt;/td&gt;
&lt;td&gt;Potentially many customers&lt;/td&gt;
&lt;td&gt;Only users you authorize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Are server addresses broadly advertised?&lt;/td&gt;
&lt;td&gt;Often&lt;/td&gt;
&lt;td&gt;Usually not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who creates user credentials?&lt;/td&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who replaces blocked infrastructure?&lt;/td&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who maintains the VPN software?&lt;/td&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;You, with help from Outline tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who pays for bandwidth?&lt;/td&gt;
&lt;td&gt;Included in subscription terms&lt;/td&gt;
&lt;td&gt;You through the hosting provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who receives abuse complaints?&lt;/td&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;Potentially you or your VPS provider&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A large commercial provider has more staff, more servers, better monitoring, and more capacity to absorb attacks. Self-hosting does not magically outperform a professionally operated network.&lt;/p&gt;

&lt;p&gt;But centralization creates correlated failure.&lt;/p&gt;

&lt;p&gt;If a commercial provider has 50,000 users connecting to a known server fleet, blocking that fleet affects everyone at once. If 1,000 Outline operators each use independently selected servers, the censor faces 1,000 smaller targets that may not be publicly related.&lt;/p&gt;

&lt;p&gt;Outline is not a decentralized peer-to-peer network. Each server remains an ordinary, individually controlled endpoint. The broader ecosystem is distributed only in the practical sense that different operators deploy unrelated servers across different providers and addresses.&lt;/p&gt;

&lt;p&gt;That is enough to change the blocking economics.&lt;/p&gt;

&lt;p&gt;Blocking one private IP may affect a few people. Blocking an entire cloud provider could cause far more collateral damage because legitimate businesses use the same network ranges. Some filtering systems will accept that collateral damage. Others will not.&lt;/p&gt;

&lt;p&gt;The advantage is not invisibility.&lt;/p&gt;

&lt;p&gt;It is reduced central coordination and easier infrastructure replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Access keys make small-team administration practical
&lt;/h2&gt;

&lt;p&gt;Running a proxy is easy enough. Running one for several people without sharing a single permanent secret is where administration usually becomes annoying.&lt;/p&gt;

&lt;p&gt;Outline Manager generates unique access keys. Each key contains the connection information and credentials required by an Outline Client. Keys can be named, revoked individually, and assigned data limits.&lt;/p&gt;

&lt;p&gt;That gives a small team a reasonable lifecycle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy one server.&lt;/li&gt;
&lt;li&gt;Create a key for each person or device.&lt;/li&gt;
&lt;li&gt;Distribute each key through a trusted channel.&lt;/li&gt;
&lt;li&gt;Revoke a key when a device is lost or someone leaves.&lt;/li&gt;
&lt;li&gt;Apply a data limit if one user is consuming too much bandwidth.&lt;/li&gt;
&lt;li&gt;Replace the server and redistribute keys if the endpoint is blocked.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not create one key called &lt;code&gt;team&lt;/code&gt; and send it to everyone.&lt;/p&gt;

&lt;p&gt;Individual keys make revocation possible without disconnecting the rest of the group. They also make usage easier to manage. An access key should be treated like a password because anyone who obtains it can use the associated server allocation until the key is revoked.&lt;/p&gt;

&lt;p&gt;Outline Server also exposes a management REST API used for access-key administration. That can be useful to a service provider or a team automating provisioning, but the management API URL contains a secret path and must be protected accordingly. It should not be published, committed to a repository, or exposed casually to the internet.&lt;/p&gt;

&lt;p&gt;For most individuals, the Manager application is the safer and simpler interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running your own Outline server
&lt;/h2&gt;

&lt;p&gt;Outline Manager is available for Windows, macOS, and Linux. The Client is available across desktop and mobile platforms, including Windows, macOS, Linux, ChromeOS, Android, and iOS.&lt;/p&gt;

&lt;p&gt;Deployment usually follows one of two paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use an integrated cloud provider
&lt;/h3&gt;

&lt;p&gt;The Manager can guide users through creating infrastructure with supported cloud providers. The exact onboarding flow depends on the provider and may require a provider account, payment method, and authorization.&lt;/p&gt;

&lt;p&gt;This is the easiest approach because the application handles much of the server setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bring your own Linux server
&lt;/h3&gt;

&lt;p&gt;Outline can also be installed on compatible Linux infrastructure you already control. This is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You prefer a particular VPS provider.&lt;/li&gt;
&lt;li&gt;You need a region not offered through an integrated flow.&lt;/li&gt;
&lt;li&gt;You already operate Linux servers.&lt;/li&gt;
&lt;li&gt;You want billing separated from the Manager.&lt;/li&gt;
&lt;li&gt;A widely used provider or IP range performs poorly on your target network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The official server repository documents a Linux installation command. Since installation commands can change, copying the current command from the repository is safer than relying on an old blog post.&lt;/p&gt;

&lt;p&gt;The installer uses Docker, configures the Outline server components, and returns management information that can be imported into Outline Manager.&lt;/p&gt;

&lt;p&gt;That convenience is valuable, but it does not remove systems administration. The VPS still needs a maintained operating system, restricted SSH access, timely security updates, firewall rules, monitoring, backups of essential configuration, and some plan for replacing the machine.&lt;/p&gt;

&lt;p&gt;If the server is compromised, the fact that it was “self-hosted” will not help.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does an Outline server actually cost?
&lt;/h2&gt;

&lt;p&gt;The Outline software is free and open source. The recurring cost is normally the VPS and its bandwidth.&lt;/p&gt;

&lt;p&gt;Outline’s official getting-started documentation says many cloud providers offer suitable plans for &lt;strong&gt;USD 5 per month or less&lt;/strong&gt;. At USD 5 per month, the simple annual infrastructure cost is USD 60 before taxes, overage charges, backups, snapshots, or additional servers.&lt;/p&gt;

&lt;p&gt;That is in the same general range as many consumer VPN subscriptions, but the billing model is different.&lt;/p&gt;

&lt;p&gt;A conventional VPN subscription usually includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A large server network&lt;/li&gt;
&lt;li&gt;Multiple regions&lt;/li&gt;
&lt;li&gt;Provider-managed maintenance&lt;/li&gt;
&lt;li&gt;Customer support&lt;/li&gt;
&lt;li&gt;Bandwidth under the provider’s fair-use terms&lt;/li&gt;
&lt;li&gt;Rapid switching between existing endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small VPS usually includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One public server&lt;/li&gt;
&lt;li&gt;One geographic region&lt;/li&gt;
&lt;li&gt;A defined traffic allowance&lt;/li&gt;
&lt;li&gt;An operator-controlled IP address&lt;/li&gt;
&lt;li&gt;Your responsibility for maintenance&lt;/li&gt;
&lt;li&gt;Possible transfer overage charges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For one developer, a small server may be inexpensive but not necessarily cheaper than a discounted multi-year VPN plan.&lt;/p&gt;

&lt;p&gt;For a trusted group of five people, the same USD 5 server may be economical, assuming its CPU, memory, network performance, and transfer allowance are adequate. If the group consumes several terabytes of traffic, bandwidth becomes the real price.&lt;/p&gt;

&lt;p&gt;A better calculation is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monthly cost =
    VPS plan
    + outbound transfer overages
    + backups or snapshots
    + replacement infrastructure
    + administrator time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final item is easy to ignore.&lt;/p&gt;

&lt;p&gt;If you spend two hours every month maintaining a USD 5 server, this is no longer a USD 5 solution in any meaningful business sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Outline makes sense for developers
&lt;/h2&gt;

&lt;p&gt;Outline is a particularly good fit when the problem is not “I want 100 countries in a location menu.”&lt;/p&gt;

&lt;p&gt;The problem is “I need one connection I can control.”&lt;/p&gt;

&lt;p&gt;A developer working from a filtered network may need stable access to package registries, source repositories, documentation, issue trackers, AI tools, or an API that is unreachable locally. A private server gives that developer a known exit point without depending entirely on a commercial VPN’s public fleet.&lt;/p&gt;

&lt;p&gt;A small engineering team can create one key per member, set limits, and revoke access individually. If the address becomes unusable on a particular network, the administrator can move the server and issue new credentials.&lt;/p&gt;

&lt;p&gt;A technical founder may also prefer not to place the team’s browsing traffic through an unknown free VPN or a public server used by thousands of strangers. A private server reduces unrelated users sharing the same exit IP, which can also mean fewer reputation problems and fewer CAPTCHA storms.&lt;/p&gt;

&lt;p&gt;There is one important boundary.&lt;/p&gt;

&lt;p&gt;Outline is primarily an internet access and circumvention tool. It is not automatically a complete corporate secure-access platform.&lt;/p&gt;

&lt;p&gt;If engineers need access to private production subnets, device posture checks, identity-based policy, SSO, audit trails, application-level authorization, or site-to-site routing, a system designed for zero-trust access or enterprise networking may be more appropriate.&lt;/p&gt;

&lt;p&gt;“Secure remote access” can mean two different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safely reaching the public internet through a controlled exit server&lt;/li&gt;
&lt;li&gt;Reaching internal company resources under corporate access policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outline is much closer to the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy improves in some places and gets worse in others
&lt;/h2&gt;

&lt;p&gt;With a commercial VPN, trust moves from the ISP to the VPN provider.&lt;/p&gt;

&lt;p&gt;With Outline, trust moves from the ISP to infrastructure you administer, plus the hosting company providing the server.&lt;/p&gt;

&lt;p&gt;Your ISP can see that you are communicating with the VPS. The hosting provider can associate the server with your account and payment details. Websites see the server’s IP address. Applications can still identify you through logins, cookies, browser fingerprinting, telemetry, and account activity.&lt;/p&gt;

&lt;p&gt;Outline encrypts traffic between the client and the server. It does not make you anonymous.&lt;/p&gt;

&lt;p&gt;It also does not protect traffic after it leaves the server except where the application itself uses end-to-end encryption such as HTTPS. Fortunately, most developer services use HTTPS, but the distinction still matters.&lt;/p&gt;

&lt;p&gt;Self-hosting gives you control over access keys and server selection. It also gives you responsibility for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protecting the cloud account&lt;/li&gt;
&lt;li&gt;Using strong SSH authentication&lt;/li&gt;
&lt;li&gt;Installing security updates&lt;/li&gt;
&lt;li&gt;Restricting the management interface&lt;/li&gt;
&lt;li&gt;Rotating compromised keys&lt;/li&gt;
&lt;li&gt;Monitoring unusual bandwidth use&lt;/li&gt;
&lt;li&gt;Handling abuse reports&lt;/li&gt;
&lt;li&gt;Deleting abandoned infrastructure&lt;/li&gt;
&lt;li&gt;Understanding the legal rules affecting the server location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is control in the engineering sense.&lt;/p&gt;

&lt;p&gt;You get more knobs because you also inherit more failure modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think Outline is worth exploring
&lt;/h2&gt;

&lt;p&gt;Most VPN comparisons obsess over server counts, streaming catalogs, and promotional subscription prices.&lt;/p&gt;

&lt;p&gt;Those things matter to consumers. They matter much less when the actual failure is architectural.&lt;/p&gt;

&lt;p&gt;If a restrictive network can identify a provider, enumerate its infrastructure, and block the same endpoints for millions of users, adding another city to the provider’s location list does not solve the core problem.&lt;/p&gt;

&lt;p&gt;Outline takes a different approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make small, private servers easy enough that people can operate their own infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project combines a blocking-resistant Shadowsocks-based transport, private distribution of server credentials, per-user access keys, manageable deployment, open-source clients, and replaceable infrastructure.&lt;/p&gt;

&lt;p&gt;None of those features guarantees access. Together, they make adaptation more practical.&lt;/p&gt;

&lt;p&gt;That is the strongest reason for a developer to consider GetOutline. Not because it is a magical VPN that cannot be blocked, and not because self-hosting is always better.&lt;/p&gt;

&lt;p&gt;It is worth considering because it changes who owns the server, who knows its address, who controls access, and who can replace it when the network changes.&lt;/p&gt;

&lt;p&gt;In an ordinary network, that may be unnecessary work.&lt;/p&gt;

&lt;p&gt;In a network where conventional VPN services are repeatedly filtered or disrupted, it may be exactly the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getoutline.org/" rel="noopener noreferrer"&gt;Outline official website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getoutline.org/get-started/" rel="noopener noreferrer"&gt;Outline getting-started documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getoutline.org/faq/" rel="noopener noreferrer"&gt;Outline FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/outline" rel="noopener noreferrer"&gt;Outline developer documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/OutlineFoundation/outline-server" rel="noopener noreferrer"&gt;Outline Server source repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/OutlineFoundation/outline-apps" rel="noopener noreferrer"&gt;Outline Client and Manager source repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/OutlineFoundation/outline-sdk" rel="noopener noreferrer"&gt;Outline SDK source repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ooni.org/post/2024-russia-report/" rel="noopener noreferrer"&gt;OONI research on internet censorship in Russia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gfw.report/publications/usenixsecurity23/en/" rel="noopener noreferrer"&gt;GFW Report research on the Great Firewall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://freedomhouse.org/country/china/freedom-net/2024" rel="noopener noreferrer"&gt;Freedom on the Net: China&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://freedomhouse.org/country/russia/freedom-net/2024" rel="noopener noreferrer"&gt;Freedom on the Net: Russia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>networking</category>
      <category>security</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Internet Regulation Is Making Users Easier to Track, Not Cybercriminals Harder to Stop</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Sun, 06 Sep 2026 17:33:56 +0000</pubDate>
      <link>https://dev.to/davidtimothy/internet-regulation-is-making-users-easier-to-track-not-cybercriminals-harder-to-stop-3j1g</link>
      <guid>https://dev.to/davidtimothy/internet-regulation-is-making-users-easier-to-track-not-cybercriminals-harder-to-stop-3j1g</guid>
      <description>&lt;p&gt;The modern internet safety pitch sounds reasonable enough: verify more identities, retain more metadata, monitor more content, require more accounts, and give platforms stronger obligations to identify risky users.&lt;/p&gt;

&lt;p&gt;Then cybercrime will become harder.&lt;/p&gt;

&lt;p&gt;At least, that’s the theory.&lt;/p&gt;

&lt;p&gt;I’m not convinced the theory survives contact with the actual threat model.&lt;/p&gt;

&lt;p&gt;The strongest internet controls are usually enforced at the compliant edge of the network. They affect people visiting mainstream websites, developers running legitimate services, businesses operating in regulated markets, and users who don’t want to break the law.&lt;/p&gt;

&lt;p&gt;Professional cybercriminals don’t stay at that edge.&lt;/p&gt;

&lt;p&gt;They use stolen accounts, compromised devices, encrypted channels, residential proxies, offshore infrastructure, disposable domains, synthetic identities, money mules, cryptocurrency laundering services, and crime-as-a-service marketplaces. When one route closes, they move to another. When one platform tightens its rules, they migrate. When identity checks become mandatory, stolen identity data becomes more valuable.&lt;/p&gt;

&lt;p&gt;That doesn’t mean regulation never works. It means we’re often regulating the population that’s easiest to regulate while describing the result as a victory over the population that’s hardest to regulate.&lt;/p&gt;

&lt;p&gt;The uncomfortable version is much simpler:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cybercriminals adapt. Ordinary users get monitored.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s an editorial thesis, not a universal law. Some controls do stop abuse. Some investigations depend on retained records. Some age checks appear to deter minors from reaching harmful content. There are legitimate reasons to regulate online services.&lt;/p&gt;

&lt;p&gt;But if the goal is reducing cybercrime, we should be brutally honest about who is bearing the cost, what threat is actually being addressed, and whether the control reaches determined adversaries at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  We keep combining completely different threat models
&lt;/h2&gt;

&lt;p&gt;A basic mistake runs through a lot of internet regulation: policymakers use “online safety” as a bucket for problems that have almost nothing in common technically.&lt;/p&gt;

&lt;p&gt;Consider the differences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A teenager trying to access age-restricted content&lt;/li&gt;
&lt;li&gt;A ransomware affiliate exploiting an unpatched VPN appliance&lt;/li&gt;
&lt;li&gt;A fraud ring running thousands of AI-assisted phishing messages&lt;/li&gt;
&lt;li&gt;A person posting illegal material on a mainstream platform&lt;/li&gt;
&lt;li&gt;A botnet operator controlling compromised home routers&lt;/li&gt;
&lt;li&gt;An adult anonymously viewing lawful but sensitive content&lt;/li&gt;
&lt;li&gt;A state-backed group stealing credentials from government employees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t variations of the same problem.&lt;/p&gt;

&lt;p&gt;They involve different adversaries, capabilities, incentives, infrastructure, and failure modes. They require different defenses.&lt;/p&gt;

&lt;p&gt;Age assurance might deter a teenager who reaches a mainstream site and sees a verification screen. It doesn’t stop a ransomware operator from buying initial access to a corporate network.&lt;/p&gt;

&lt;p&gt;Mandatory accounts can make casual platform abuse more inconvenient. They don’t reliably identify an attacker using stolen credentials, fake documents, an infected machine, or a recruited account holder.&lt;/p&gt;

&lt;p&gt;Mass data retention can give investigators useful historical records. It doesn’t patch vulnerable software, block credential theft, secure a supply chain, or prevent someone from authorizing a fraudulent wire transfer.&lt;/p&gt;

&lt;p&gt;Content monitoring may remove illegal material from a cooperating platform. It doesn’t automatically eliminate the material from encrypted groups, self-hosted services, obscure forums, or infrastructure outside the regulator’s reach.&lt;/p&gt;

&lt;p&gt;This distinction matters because governments can introduce a very visible control and then let the public assume it addresses a much broader security problem.&lt;/p&gt;

&lt;p&gt;An identity prompt feels like security. A blocked page looks like enforcement. A removed account becomes a measurable platform action.&lt;/p&gt;

&lt;p&gt;None of those things necessarily tell us whether serious cybercrime has declined.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cybercrime is not showing signs of being regulated into submission
&lt;/h2&gt;

&lt;p&gt;The FBI’s Internet Crime Complaint Center received more than one million complaints in 2025, with reported losses of roughly USD 20.9 billion. That represented a 26 percent increase in reported losses from 2024.&lt;/p&gt;

&lt;p&gt;Those figures don’t measure all cybercrime. They’re based on reported complaints, reporting behavior can change, and the numbers don’t prove that internet controls caused or failed to prevent any particular crime.&lt;/p&gt;

&lt;p&gt;Still, they make one point difficult to avoid: expanding digital regulation has not been accompanied by an obvious collapse in online fraud, phishing, extortion, data theft, or investment scams.&lt;/p&gt;

&lt;p&gt;Europol’s 2026 cybercrime assessment describes a criminal environment built around encrypted communications, proxy services, cryptocurrencies, automation, specialized marketplaces, and rapidly shifting infrastructure. Dark web markets and forums remain resilient even after law enforcement disruptions because participants fragment, migrate, and regroup.&lt;/p&gt;

&lt;p&gt;ENISA has reported a similar pattern around ransomware. Disrupted ransomware-as-a-service brands are quickly replaced, leaked builders lower the barrier to entry, and operators continuously update their tooling. Attackers now buy specialized services for access, malware delivery, credential theft, endpoint defense evasion, hosting, negotiation, and money laundering.&lt;/p&gt;

&lt;p&gt;This is what an adaptive adversary looks like.&lt;/p&gt;

&lt;p&gt;A cybercrime operation doesn’t need every component to survive. It needs replaceable components.&lt;/p&gt;

&lt;p&gt;Take down a forum, and users move to another forum or an encrypted channel. Seize a domain, and the operator rotates domains. Block a hosting provider, and the infrastructure moves. Freeze one wallet, and laundering services split funds across new wallets, assets, exchanges, and jurisdictions.&lt;/p&gt;

&lt;p&gt;Law enforcement operations still matter. Disruption imposes costs, generates intelligence, creates distrust inside criminal communities, protects potential victims, and sometimes leads to arrests. I’m not arguing that enforcement is pointless.&lt;/p&gt;

&lt;p&gt;I’m arguing that a temporary disruption shouldn’t be confused with eliminating the ecosystem.&lt;/p&gt;

&lt;p&gt;Meanwhile, the ordinary user isn’t operating a replaceable international infrastructure stack. That user has one phone number, one home connection, one government identity, a few mainstream accounts, and a limited willingness to fight an automated moderation or verification system.&lt;/p&gt;

&lt;p&gt;The criminal can rotate infrastructure.&lt;/p&gt;

&lt;p&gt;The user becomes the infrastructure being measured.&lt;/p&gt;

&lt;h2&gt;
  
  
  Age verification shows the problem in miniature
&lt;/h2&gt;

&lt;p&gt;Age assurance is probably the clearest example of both sides of this debate being partly right.&lt;/p&gt;

&lt;p&gt;Protecting children from pornography and other harmful content is a legitimate goal. Pretending that an “I’m over 18” button accomplishes that goal is obviously weak. If a service is legally restricted by age, some kind of meaningful age check can make sense.&lt;/p&gt;

&lt;p&gt;The United Kingdom’s Online Safety Act brought major age-assurance requirements into force in 2025. Services covered by the rules must use highly effective methods to prevent children from accessing pornography and certain other harmful content.&lt;/p&gt;

&lt;p&gt;Ofcom’s first major assessment, published in July 2026, found evidence that these checks can work. More than 69 million age checks were completed across a sample of 32 services between July and December 2025. By June 2026, all of the UK’s ten most popular pornography services and 64 of the top 100 had introduced age checks. Some children appeared to be deterred when they reached a protected service.&lt;/p&gt;

&lt;p&gt;That’s real evidence in favor of regulation. It shouldn’t be dismissed.&lt;/p&gt;

&lt;p&gt;But the same report exposes the displacement problem.&lt;/p&gt;

&lt;p&gt;Almost half of the pornography services visited by children in Ofcom’s research had no age checks. Search engines continued to surface unprotected sites. Compliant services lost traffic while some services without checks gained popularity.&lt;/p&gt;

&lt;p&gt;The control changed the path. It didn’t eliminate all alternate paths.&lt;/p&gt;

&lt;p&gt;VPN usage also rose sharply after the requirements took effect. Ofcom estimated that daily UK VPN users increased from around 1.2 million before July 25, 2025, to 2.2 million afterward. The regulator correctly warned that this correlation doesn’t reveal how much of the increase was caused by age-check circumvention, or how many of those users were children.&lt;/p&gt;

&lt;p&gt;That caveat is important. “VPN usage increased” is not the same as “everybody bypassed the law.”&lt;/p&gt;

&lt;p&gt;Ofcom’s research found relatively low self-reported circumvention, though it also acknowledged possible response bias. It found that some determined children were using VPNs, borrowed credentials, spoofed images, and other techniques to get around controls. There wasn’t enough evidence to determine the full scale.&lt;/p&gt;

&lt;p&gt;So the honest conclusion isn’t that age verification is useless. It’s that it works best against users who accept the default path.&lt;/p&gt;

&lt;p&gt;That category includes plenty of minors, which may justify the intervention. It also includes practically every ordinary adult who now has to decide whether to give a website or verification vendor a face scan, payment signal, identity document, phone number, or reusable credential.&lt;/p&gt;

&lt;p&gt;The bypass cost is unevenly distributed.&lt;/p&gt;

&lt;p&gt;A determined user needs to find one weak site, one effective VPN, one reusable account, or one verification workaround.&lt;/p&gt;

&lt;p&gt;A compliant platform has to verify everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity verification creates a second security problem
&lt;/h2&gt;

&lt;p&gt;There’s a recurring assumption that if an online account is connected to a real identity, abuse becomes easy to stop.&lt;/p&gt;

&lt;p&gt;That’s far too optimistic.&lt;/p&gt;

&lt;p&gt;Identity proofing answers a narrow question: does the person completing this process appear to control acceptable evidence associated with an identity?&lt;/p&gt;

&lt;p&gt;It doesn’t answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this person acting voluntarily?&lt;/li&gt;
&lt;li&gt;Was the identity evidence stolen?&lt;/li&gt;
&lt;li&gt;Is someone controlling the device remotely?&lt;/li&gt;
&lt;li&gt;Is the account being created for resale?&lt;/li&gt;
&lt;li&gt;Is the user working as a money mule?&lt;/li&gt;
&lt;li&gt;Will the account be compromised tomorrow?&lt;/li&gt;
&lt;li&gt;Is the person legally identified but still malicious?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A verified identity is not the same thing as a trustworthy identity.&lt;/p&gt;

&lt;p&gt;Banks already perform extensive know-your-customer checks, yet criminals continue to access financial systems through stolen identities, synthetic identities, compromised accounts, shell companies, recruited intermediaries, and legitimate account holders deceived into moving money.&lt;/p&gt;

&lt;p&gt;The more identity checks we require, the more valuable the supporting data becomes.&lt;/p&gt;

&lt;p&gt;Now the platform or its vendor may hold combinations of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Government ID images&lt;/li&gt;
&lt;li&gt;Facial images or biometric templates&lt;/li&gt;
&lt;li&gt;Birth dates&lt;/li&gt;
&lt;li&gt;Addresses&lt;/li&gt;
&lt;li&gt;Phone numbers&lt;/li&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;Device attributes&lt;/li&gt;
&lt;li&gt;Account histories&lt;/li&gt;
&lt;li&gt;Verification results&lt;/li&gt;
&lt;li&gt;Support conversations&lt;/li&gt;
&lt;li&gt;Payment details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That collection becomes an attractive target because it can be used to defeat identity systems elsewhere.&lt;/p&gt;

&lt;p&gt;This isn’t a hypothetical architectural concern. In October 2025, Discord disclosed that an attacker compromised a third-party customer service provider. Discord estimated that approximately 70,000 users may have had government ID photos exposed. Those images had been used for age-related appeals.&lt;/p&gt;

&lt;p&gt;The verification system wasn’t intended to create a cybercrime opportunity. It was intended to support trust and safety. But the collected evidence became part of the attack surface anyway.&lt;/p&gt;

&lt;p&gt;This is the part that too many policy debates skip. Every new requirement to collect sensitive information creates a new obligation to secure it, restrict access to it, define retention periods, audit vendors, process deletion requests, handle appeals, and respond to breaches.&lt;/p&gt;

&lt;p&gt;Security teams understand this instinctively:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data you don’t collect can’t be stolen from your database.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIST’s current digital identity guidance treats privacy risk assessment, data minimization, retention, third-party processing, redress, and encryption as core requirements. That’s good engineering guidance, but it also confirms the underlying point. Identity proofing introduces risks serious enough to require an entire control framework of its own.&lt;/p&gt;

&lt;p&gt;We’re creating sensitive data systems to enforce safety rules, then creating more safety rules to protect the sensitive data systems.&lt;/p&gt;

&lt;p&gt;At some point, it’s fair to ask whether the architecture is reducing total risk or relocating it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metadata surveillance is still surveillance
&lt;/h2&gt;

&lt;p&gt;Another popular argument says that retaining metadata is less invasive than inspecting content.&lt;/p&gt;

&lt;p&gt;Technically, that distinction is real. The body of a message is different from the time, location, participants, device, account, and network information associated with it.&lt;/p&gt;

&lt;p&gt;In practice, metadata can reveal an enormous amount.&lt;/p&gt;

&lt;p&gt;Imagine a system that records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which IP address used an account&lt;/li&gt;
&lt;li&gt;When each session started&lt;/li&gt;
&lt;li&gt;Which device identifiers were present&lt;/li&gt;
&lt;li&gt;Which phone number recovered the account&lt;/li&gt;
&lt;li&gt;Which accounts interacted&lt;/li&gt;
&lt;li&gt;Which locations appeared over time&lt;/li&gt;
&lt;li&gt;Which services received authentication requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No individual record tells the whole story. Correlation does.&lt;/p&gt;

&lt;p&gt;Put those records into a graph and patterns emerge: relationships, routines, workplaces, travel, medical visits, political activity, religious participation, romantic connections, and anonymous accounts tied to known identities.&lt;/p&gt;

&lt;p&gt;The privacy risk doesn’t begin when a government employee manually opens a file. It begins when the dataset is created and made linkable.&lt;/p&gt;

&lt;p&gt;European courts have repeatedly wrestled with this issue. The Court of Justice of the European Union has restricted general and indiscriminate retention of traffic and location data, while allowing more targeted retention and certain carefully constrained treatment of IP addresses and civil identity data.&lt;/p&gt;

&lt;p&gt;The legal details are complicated, but the technical concern is straightforward. Large collections of communications metadata can support precise conclusions about private life, especially when multiple categories of data are combined.&lt;/p&gt;

&lt;p&gt;There is a legitimate counterargument here. Investigators often need historical records. A victim may report an attack weeks after the initial intrusion. Infrastructure logs can connect accounts, domains, IP addresses, payments, and devices. Without preserved evidence, attribution may be impossible.&lt;/p&gt;

&lt;p&gt;The choice, though, isn’t simply “retain everything” or “delete every log immediately.”&lt;/p&gt;

&lt;p&gt;There’s a meaningful difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Targeted preservation tied to an investigation&lt;/li&gt;
&lt;li&gt;Time-limited operational security logs&lt;/li&gt;
&lt;li&gt;Emergency preservation orders&lt;/li&gt;
&lt;li&gt;Retention based on documented risk&lt;/li&gt;
&lt;li&gt;General collection covering an entire population&lt;/li&gt;
&lt;li&gt;Indefinite cross-platform identity correlation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A democratic government can have lawful investigative powers without treating every user as a future query result.&lt;/p&gt;

&lt;p&gt;The standard should be necessity and proportionality, not “this data might be useful someday.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Developers are becoming an unofficial enforcement layer
&lt;/h2&gt;

&lt;p&gt;Internet regulation doesn’t execute itself. Developers turn policy into databases, APIs, classifiers, logging pipelines, review queues, account states, geolocation rules, and access-control decisions.&lt;/p&gt;

&lt;p&gt;That creates consequences far beyond large platforms.&lt;/p&gt;

&lt;p&gt;A major company can hire policy teams, trust and safety specialists, privacy lawyers, vendor auditors, appeals staff, and regional compliance engineers. A small forum, open-source community, indie service, or niche social application may have none of that.&lt;/p&gt;

&lt;p&gt;When compliance becomes too expensive or legally uncertain, smaller services tend to choose from a short list of bad options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block users in the affected jurisdiction&lt;/li&gt;
&lt;li&gt;Require accounts where none were previously needed&lt;/li&gt;
&lt;li&gt;Outsource identity checks to another company&lt;/li&gt;
&lt;li&gt;Collect more data to prove compliance&lt;/li&gt;
&lt;li&gt;Remove broad categories of lawful content&lt;/li&gt;
&lt;li&gt;Shut down user-generated features&lt;/li&gt;
&lt;li&gt;Close the service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That shifts power toward the largest platforms because they’re the organizations most capable of operating a global verification and surveillance stack.&lt;/p&gt;

&lt;p&gt;It also encourages over-enforcement.&lt;/p&gt;

&lt;p&gt;If a platform faces severe penalties for under-blocking but little consequence for over-blocking, the rational engineering decision is predictable. Set conservative thresholds. Collect additional signals. Restrict ambiguous content. Lock questionable accounts. Make users appeal.&lt;/p&gt;

&lt;p&gt;False positives become somebody else’s problem.&lt;/p&gt;

&lt;p&gt;For an ordinary user, “somebody else” means being unable to access an account, publish lawful content, use a privacy tool, or participate without providing more personal information.&lt;/p&gt;

&lt;p&gt;For a criminal operation, a false positive means burning one account and loading another.&lt;/p&gt;

&lt;p&gt;Again, the burden isn’t symmetrical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety controls aren’t useless, but they need to match the adversary
&lt;/h2&gt;

&lt;p&gt;It would be easy to turn this into an argument against all regulation, all logging, or all identity verification. I don’t think that position holds up.&lt;/p&gt;

&lt;p&gt;Age checks can deter access.&lt;/p&gt;

&lt;p&gt;Platform moderation can remove abusive material.&lt;/p&gt;

&lt;p&gt;Financial identity requirements can make laundering more difficult.&lt;/p&gt;

&lt;p&gt;Logs can help investigators reconstruct attacks.&lt;/p&gt;

&lt;p&gt;Infrastructure seizures can interrupt criminal operations.&lt;/p&gt;

&lt;p&gt;Account verification can increase the cost of spam and coordinated abuse.&lt;/p&gt;

&lt;p&gt;The problem is not that controls never work. The problem is expanding them without measuring substitution, displacement, privacy loss, market concentration, and adversarial adaptation.&lt;/p&gt;

&lt;p&gt;A useful security control should be evaluated against the attacker’s next move, not just the attacker’s current move.&lt;/p&gt;

&lt;p&gt;If a regulated site introduces age checks, do users migrate to unregulated sites?&lt;/p&gt;

&lt;p&gt;If a platform requires government ID, does the market for stolen verified accounts expand?&lt;/p&gt;

&lt;p&gt;If a country blocks a service, do users move to encrypted or offshore alternatives?&lt;/p&gt;

&lt;p&gt;If providers retain more identifying data, does that dataset become a new extortion target?&lt;/p&gt;

&lt;p&gt;If automated monitoring produces large numbers of false positives, can users realistically appeal?&lt;/p&gt;

&lt;p&gt;If a ransomware brand is disrupted, how quickly are its affiliates absorbed by another operation?&lt;/p&gt;

&lt;p&gt;These aren’t arguments for doing nothing. They’re the questions that should determine whether a control is actually working.&lt;/p&gt;

&lt;h2&gt;
  
  
  We can verify eligibility without building an identity panopticon
&lt;/h2&gt;

&lt;p&gt;From a developer’s perspective, one of the most frustrating parts of this debate is that privacy and verification aren’t always opposites.&lt;/p&gt;

&lt;p&gt;A service may need to know that a user is over 18. It usually doesn’t need the user’s full name, exact birth date, home address, document number, and identity photo.&lt;/p&gt;

&lt;p&gt;That difference should drive the architecture.&lt;/p&gt;

&lt;p&gt;W3C’s Verifiable Credentials model explicitly recommends abstract claims such as &lt;code&gt;ageOver&lt;/code&gt; instead of exposing a date of birth. Selective-disclosure systems can allow a user to reveal a required attribute without handing every verifier the underlying identity record.&lt;/p&gt;

&lt;p&gt;A more privacy-preserving age flow could look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A trusted issuer verifies the user’s age.&lt;/li&gt;
&lt;li&gt;The user receives a cryptographically protected credential.&lt;/li&gt;
&lt;li&gt;A website requests proof that the user is above a threshold.&lt;/li&gt;
&lt;li&gt;The user presents only that age claim.&lt;/li&gt;
&lt;li&gt;The website validates the proof without receiving the original identity document.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s better than uploading a passport to every site.&lt;/p&gt;

&lt;p&gt;It still isn’t magically anonymous. Long-lived identifiers can allow correlation. Centralized status checks can reveal where credentials are used. Browser fingerprinting, account cookies, IP addresses, and payment data can reconnect a supposedly minimal credential to a persistent profile.&lt;/p&gt;

&lt;p&gt;Cryptography can reduce disclosure. It can’t compensate for a system designed to correlate people everywhere.&lt;/p&gt;

&lt;p&gt;Privacy-preserving regulation therefore needs both technical and legal limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collect the minimum attribute required&lt;/li&gt;
&lt;li&gt;Avoid persistent cross-site identifiers&lt;/li&gt;
&lt;li&gt;Prohibit unrelated reuse of verification data&lt;/li&gt;
&lt;li&gt;Keep identity documents away from content platforms&lt;/li&gt;
&lt;li&gt;Use short retention periods&lt;/li&gt;
&lt;li&gt;Require independent security testing&lt;/li&gt;
&lt;li&gt;Publish false-positive and appeal statistics&lt;/li&gt;
&lt;li&gt;Make vendors directly accountable for breaches&lt;/li&gt;
&lt;li&gt;Support anonymous or pseudonymous access where identity isn’t necessary&lt;/li&gt;
&lt;li&gt;Require evidence that a measure reduces the targeted harm&lt;/li&gt;
&lt;li&gt;Add sunset clauses when that evidence never appears&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, governments should focus more aggressively on the infrastructure and economics of cybercrime itself.&lt;/p&gt;

&lt;p&gt;That means faster patching of public systems, secure software procurement, ransomware-resistant backups, disruption of bulletproof hosting, action against laundering networks, international evidence sharing, recovery of stolen funds, stronger authentication, anti-spoofing improvements, and support for victims.&lt;/p&gt;

&lt;p&gt;Those measures aren’t as politically visible as an ID screen. They’re also much closer to the systems criminals actually depend on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The safest internet is not automatically the most identifiable one
&lt;/h2&gt;

&lt;p&gt;The debate over internet control is often framed as safety versus chaos.&lt;/p&gt;

&lt;p&gt;That’s a false choice.&lt;/p&gt;

&lt;p&gt;The real question is what kind of safety we’re buying, who pays for it, and what infrastructure of control remains after the original crisis has passed.&lt;/p&gt;

&lt;p&gt;A narrowly designed age check may protect children. A targeted preservation order may help catch an attacker. A properly scoped platform rule may reduce abuse.&lt;/p&gt;

&lt;p&gt;But those limited successes don’t justify turning identity collection, behavioral monitoring, metadata retention, and cross-platform enforcement into the default architecture of the internet.&lt;/p&gt;

&lt;p&gt;Once that architecture exists, it won’t only be used against ransomware gangs and fraud networks. It will shape how everyone accesses information, speaks, builds communities, distributes software, and participates online.&lt;/p&gt;

&lt;p&gt;Sophisticated criminals will keep searching for the weakest jurisdiction, the easiest victim, the next stolen account, and the newest bypass.&lt;/p&gt;

&lt;p&gt;Ordinary users will keep using the services in front of them.&lt;/p&gt;

&lt;p&gt;That’s the disconnect I think we need to confront. Governments can make the compliant internet dramatically more observable without making the criminal internet equally transparent.&lt;/p&gt;

&lt;p&gt;So when the next safety proposal arrives, I don’t just want to hear how many identities it can verify, how much data it can retain, or how many accounts it can block.&lt;/p&gt;

&lt;p&gt;I want a clear answer to the harder question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are we making cybercrime harder, or are we mainly making ordinary people easier to watch?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ic3.gov/AnnualReport/Reports/2025_IC3Report.pdf" rel="noopener noreferrer"&gt;FBI Internet Crime Complaint Center: 2025 Annual Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.europol.europa.eu/publication-events/main-reports/iocta-2026-evolving-threat-landscape" rel="noopener noreferrer"&gt;Europol: Internet Organised Crime Threat Assessment 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enisa.europa.eu/publications/enisa-threat-landscape-2025" rel="noopener noreferrer"&gt;ENISA Threat Landscape 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ofcom.org.uk/online-safety/protecting-children/use-of-age-assurance-report-2026" rel="noopener noreferrer"&gt;Ofcom: Report on the Use of Age Assurance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ofcom.org.uk/online-safety/protecting-children/age-assurance" rel="noopener noreferrer"&gt;Ofcom: Age Assurance Duties Under the Online Safety Act&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/press-releases/update-on-security-incident-involving-third-party-customer-service" rel="noopener noreferrer"&gt;Discord: Update on a Security Incident Involving Third-Party Customer Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.supremecourt.gov/opinions/24pdf/23-1122_3e04.pdf" rel="noopener noreferrer"&gt;Supreme Court of the United States: Free Speech Coalition v. Paxton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63a-4.pdf" rel="noopener noreferrer"&gt;NIST SP 800-63A-4: Identity Proofing and Enrollment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eur-lex.europa.eu/legal-content/EN/SUM/?uri=CELEX%3A62018CJ0511_RES" rel="noopener noreferrer"&gt;Court of Justice of the European Union: Privacy International and La Quadrature du Net Data-Retention Judgment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/vc-data-model-2.0/" rel="noopener noreferrer"&gt;W3C Verifiable Credentials Data Model 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>privacy</category>
      <category>security</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Windows Is Getting Worse. So Why Does Linux Still Suck in 2026?</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Sun, 06 Sep 2026 03:02:20 +0000</pubDate>
      <link>https://dev.to/davidtimothy/windows-is-getting-worse-so-why-does-linux-still-suck-in-2026-38od</link>
      <guid>https://dev.to/davidtimothy/windows-is-getting-worse-so-why-does-linux-still-suck-in-2026-38od</guid>
      <description>&lt;p&gt;It is 2026, Windows is becoming increasingly hostile to people who just want a predictable computer, and Linux still cannot close the deal.&lt;/p&gt;

&lt;p&gt;That is absurd.&lt;/p&gt;

&lt;p&gt;Windows 10 reached the end of normal support on October 14, 2025. Microsoft’s preferred answer is Windows 11, an operating system that increasingly feels like a delivery platform for Microsoft accounts, OneDrive, Copilot, recommendations, telemetry, subscriptions, and whatever AI feature was approved during last Tuesday’s product meeting.&lt;/p&gt;

&lt;p&gt;Microsoft has openly described its goal as making every Windows 11 PC an AI PC.&lt;/p&gt;

&lt;p&gt;Fine. Great. Wonderful.&lt;/p&gt;

&lt;p&gt;But what if I do not want an AI PC?&lt;/p&gt;

&lt;p&gt;What if I just want an operating system that launches applications, manages files, drives my hardware, stays out of the way, and does not treat every empty surface as an opportunity to recommend another Microsoft product?&lt;/p&gt;

&lt;p&gt;This should be Linux’s moment.&lt;/p&gt;

&lt;p&gt;Windows users are annoyed. Developers are tired of being nudged toward cloud accounts and ecosystem integrations. Power users are spending more time disabling things they never requested. Microsoft keeps adding layers to an operating system that already contains multiple generations of UI, configuration tools, compatibility systems, and historical baggage.&lt;/p&gt;

&lt;p&gt;Linux should be standing there with a clean desktop, excellent hardware support, reliable applications, and a simple migration story.&lt;/p&gt;

&lt;p&gt;Instead, it is standing there holding five package formats and asking which display server I use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows is becoming the operating system nobody asked for
&lt;/h2&gt;

&lt;p&gt;Windows is still extremely capable. That is part of what makes its current direction so frustrating.&lt;/p&gt;

&lt;p&gt;It runs practically every mainstream desktop application. Hardware manufacturers target it first. Drivers generally arrive through a coordinated distribution channel. Gaming support is excellent. Development tooling is strong, and WSL gives developers a real Linux environment without leaving Windows.&lt;/p&gt;

&lt;p&gt;The foundation is not the problem.&lt;/p&gt;

&lt;p&gt;The problem is that Microsoft seems incapable of leaving the foundation alone.&lt;/p&gt;

&lt;p&gt;Windows 11 increasingly wants to be involved in everything. It wants to connect your account, back up your folders to OneDrive, personalize recommendations, track application launches to improve Start, assign an advertising identifier, suggest content in Settings, and place Copilot at the center of the experience.&lt;/p&gt;

&lt;p&gt;Many of these features can be disabled. Some are opt-in. Some have reasonable technical justifications. Recall, for example, now requires users to opt in, stores snapshots locally, encrypts its data, and uses Windows Hello protection.&lt;/p&gt;

&lt;p&gt;That matters. Criticism should be accurate.&lt;/p&gt;

&lt;p&gt;But the broader direction still sucks.&lt;/p&gt;

&lt;p&gt;The problem is not that every individual feature is secretly evil. The problem is that the operating system has stopped acting like neutral infrastructure. It is becoming an opinionated client for Microsoft’s services.&lt;/p&gt;

&lt;p&gt;Even the initial setup process makes the relationship clear. Windows 11 Home and Windows 11 Pro for personal use require internet connectivity and a Microsoft account during initial setup. Windows Backup is centered around that account and OneDrive. Device usage settings can influence the tips, recommendations, offers, and personalized ads shown to users.&lt;/p&gt;

&lt;p&gt;You bought a computer. Microsoft sees an onboarding opportunity.&lt;/p&gt;

&lt;p&gt;There is a difference between an operating system supporting cloud services and an operating system constantly trying to turn local computing into an extension of a cloud account. Windows keeps drifting toward the second model.&lt;/p&gt;

&lt;p&gt;Developers notice this because developers tend to care about ownership, reproducibility, configuration, and boundaries. We know what a local file is. We know what a background service is. We know that “personalization” usually means data collection followed by somebody trying to sell us something.&lt;/p&gt;

&lt;p&gt;We also know how ridiculous it is to buy a powerful machine and then spend the first hour removing widgets, disabling suggestions, rejecting cloud backup, changing privacy settings, uninstalling bundled applications, and making the Start menu less annoying.&lt;/p&gt;

&lt;p&gt;The usual response is that power users can configure Windows however they want.&lt;/p&gt;

&lt;p&gt;That misses the point.&lt;/p&gt;

&lt;p&gt;A good operating system should not require a cleanup script before it becomes tolerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux should win this argument without trying
&lt;/h2&gt;

&lt;p&gt;On paper, Linux is almost comically well positioned.&lt;/p&gt;

&lt;p&gt;It is open source. It can run without a mandatory cloud account. It does not need an advertising identifier. It gives users meaningful control over updates, services, filesystems, networking, security, and the entire software stack.&lt;/p&gt;

&lt;p&gt;For developers, the underlying environment is fantastic.&lt;/p&gt;

&lt;p&gt;Package managers are scriptable. Containers fit naturally. SSH is normal rather than an optional feature somebody remembered to add. Filesystem behavior is predictable. Most deployment targets are already Linux. The shell is not treated like an embarrassing historical utility hidden behind a graphical interface.&lt;/p&gt;

&lt;p&gt;Linux is also technically mature in ways that are easy to underestimate. The kernel supports an enormous range of hardware and workloads. Linux runs servers, cloud infrastructure, supercomputers, embedded systems, routers, phones, appliances, and a disturbing number of devices whose owners have no idea Linux is inside them.&lt;/p&gt;

&lt;p&gt;This is not a toy operating system.&lt;/p&gt;

&lt;p&gt;And yet the Linux desktop still feels like a collection of impressive components that occasionally agree to impersonate a product.&lt;/p&gt;

&lt;p&gt;That is the gap.&lt;/p&gt;

&lt;p&gt;Linux is technically powerful. A Linux desktop can be excellent. Neither statement means Linux is a genuinely great mainstream desktop operating system.&lt;/p&gt;

&lt;h2&gt;
  
  
  There is no Linux desktop
&lt;/h2&gt;

&lt;p&gt;People talk about “the Linux desktop” as if it were one thing.&lt;/p&gt;

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

&lt;p&gt;Is the Linux desktop Ubuntu with GNOME and Snap?&lt;/p&gt;

&lt;p&gt;Is it Fedora Workstation with GNOME, RPM, DNF, and Flatpak?&lt;/p&gt;

&lt;p&gt;Is it Kubuntu with KDE Plasma?&lt;/p&gt;

&lt;p&gt;Is it Linux Mint with Cinnamon?&lt;/p&gt;

&lt;p&gt;Is it Arch with whatever the user assembled at 2:00 in the morning after reading six wiki pages?&lt;/p&gt;

&lt;p&gt;Is it an immutable Fedora variant using image-based system updates, Flatpak applications, and containers for development tools?&lt;/p&gt;

&lt;p&gt;These systems share a kernel and a lot of userspace technology, but that does not make them one desktop platform.&lt;/p&gt;

&lt;p&gt;A Windows application developer targets Windows. A macOS application developer targets macOS. A Linux application developer targets a decision tree.&lt;/p&gt;

&lt;p&gt;Which distributions?&lt;/p&gt;

&lt;p&gt;Which versions?&lt;/p&gt;

&lt;p&gt;Which package formats?&lt;/p&gt;

&lt;p&gt;Which desktop environments?&lt;/p&gt;

&lt;p&gt;Which display protocols?&lt;/p&gt;

&lt;p&gt;Which portal implementations?&lt;/p&gt;

&lt;p&gt;Which versions of system libraries?&lt;/p&gt;

&lt;p&gt;Which filesystem layout assumptions?&lt;/p&gt;

&lt;p&gt;Which sandbox permissions?&lt;/p&gt;

&lt;p&gt;Which theme behavior?&lt;/p&gt;

&lt;p&gt;Which installer story?&lt;/p&gt;

&lt;p&gt;Linux supporters often call this choice.&lt;/p&gt;

&lt;p&gt;Application developers call it support cost.&lt;/p&gt;

&lt;p&gt;That distinction matters because fragmentation does not merely affect enthusiasts choosing a distribution. It affects every company deciding whether Linux desktop support is worth funding.&lt;/p&gt;

&lt;p&gt;Adobe’s Creative Cloud desktop application still officially targets Windows and macOS, not Linux. That is not because Linux is technically incapable of editing an image. It is because “support Linux” means taking responsibility for a fragmented platform with a relatively small desktop market.&lt;/p&gt;

&lt;p&gt;Linux users then blame Adobe, sometimes correctly, for refusing to support Linux. Adobe can blame the market and platform complexity. Distribution maintainers can say proprietary applications should use Flatpak. Flatpak developers can point to portals and sandboxing. Desktop projects can implement different portal backends.&lt;/p&gt;

&lt;p&gt;Everyone has a technically defensible explanation.&lt;/p&gt;

&lt;p&gt;The user still does not have Photoshop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choice becomes a tax when nobody owns the final experience
&lt;/h2&gt;

&lt;p&gt;Choice is one of Linux’s greatest strengths. It is also one of the main reasons Linux has not produced an obvious Windows replacement.&lt;/p&gt;

&lt;p&gt;Those two ideas are not contradictory.&lt;/p&gt;

&lt;p&gt;Choice is excellent when I am intentionally building a system around my requirements. It is less excellent when I am trying to install an application and the official instructions begin with “Select your distribution.”&lt;/p&gt;

&lt;p&gt;Even basic software installation can involve several parallel systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Debian or Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;vlc

&lt;span class="c"&gt;# Fedora&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;vlc

&lt;span class="c"&gt;# Arch Linux&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; vlc

&lt;span class="c"&gt;# Flatpak&lt;/span&gt;
flatpak &lt;span class="nb"&gt;install &lt;/span&gt;flathub org.videolan.VLC

&lt;span class="c"&gt;# Snap&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;vlc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Linux enthusiast sees flexibility.&lt;/p&gt;

&lt;p&gt;A normal user sees five answers to a one-answer question.&lt;/p&gt;

&lt;p&gt;The commands are not the real problem. Most users can click an Install button in a graphical software center. The deeper issue is that these methods have different maintainers, update behavior, sandbox rules, integration details, permissions, dependency models, and failure modes.&lt;/p&gt;

&lt;p&gt;Install the repository package and it may be old.&lt;/p&gt;

&lt;p&gt;Install a third-party repository and now that repository participates in system updates.&lt;/p&gt;

&lt;p&gt;Install a Flatpak and filesystem access may behave differently because the application is sandboxed.&lt;/p&gt;

&lt;p&gt;Install a Snap and startup, theming, integration, or policy decisions may differ from the native package.&lt;/p&gt;

&lt;p&gt;Download an AppImage and updates become the application’s problem.&lt;/p&gt;

&lt;p&gt;Build from source and congratulations, you are now part of the package management system.&lt;/p&gt;

&lt;p&gt;Flatpak is probably the closest thing Linux has to a credible cross-distribution desktop application model. Its runtimes, repositories, sandboxing, and portals solve real problems.&lt;/p&gt;

&lt;p&gt;They also reveal how complicated the Linux desktop is.&lt;/p&gt;

&lt;p&gt;XDG Desktop Portal exists partly because a sandboxed application needs a common way to request files, open links, print documents, capture screens, send notifications, and interact with the host desktop. The portal then relies on desktop-specific backends for GNOME, KDE, LXQt, wlroots, Cinnamon, and others.&lt;/p&gt;

&lt;p&gt;That is smart engineering. It is also a compatibility layer designed to make several different desktops behave enough like one platform.&lt;/p&gt;

&lt;p&gt;Linux keeps building infrastructure to compensate for the fact that nobody controls the whole experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desktop environments are products built on shifting ground
&lt;/h2&gt;

&lt;p&gt;GNOME and KDE Plasma are both serious desktop environments. They are not amateur projects stapled to a terminal. Both can provide attractive, productive, modern systems.&lt;/p&gt;

&lt;p&gt;They also have different design philosophies, release schedules, extension models, configuration systems, default applications, and approaches to user customization.&lt;/p&gt;

&lt;p&gt;GNOME tends to have strong opinions about how the desktop should work. KDE tends to expose enough settings to let users negotiate a peace treaty with every pixel.&lt;/p&gt;

&lt;p&gt;Neither approach is inherently wrong.&lt;/p&gt;

&lt;p&gt;The problem is that application behavior and integration can still depend on which environment is running underneath. File pickers, notifications, global shortcuts, screen sharing, theming, tray icons, window decorations, fractional scaling, and default application behavior can vary.&lt;/p&gt;

&lt;p&gt;Standards exist. Freedesktop.org has spent years producing specifications for interoperability between desktop environments.&lt;/p&gt;

&lt;p&gt;But it is not a formal standards body, and projects are not required to implement every specification.&lt;/p&gt;

&lt;p&gt;That sentence explains a significant chunk of the Linux desktop experience.&lt;/p&gt;

&lt;p&gt;There is a specification. Implementation varies. Your distribution packages a particular version. Your desktop environment supports most of it. Your application toolkit handles some of it. A portal handles another part. A compositor-specific protocol handles something else.&lt;/p&gt;

&lt;p&gt;When it works, it is invisible.&lt;/p&gt;

&lt;p&gt;When it does not, the user ends up searching for an issue containing the words “Wayland,” “portal,” “PipeWire,” “GTK,” “Qt,” and “environment variable.”&lt;/p&gt;

&lt;p&gt;This is not what an obvious Windows alternative looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardware support is excellent until it suddenly isn’t
&lt;/h2&gt;

&lt;p&gt;Linux hardware support has improved enormously. On the right machine, installation can be almost boring. The kernel already contains drivers, the installer detects the hardware, Wi-Fi works, audio works, suspend works, and the desktop appears.&lt;/p&gt;

&lt;p&gt;That is the good version.&lt;/p&gt;

&lt;p&gt;The bad version is one component that technically works but not quite correctly.&lt;/p&gt;

&lt;p&gt;Maybe suspend drains the battery.&lt;/p&gt;

&lt;p&gt;Maybe the fingerprint reader is unsupported.&lt;/p&gt;

&lt;p&gt;Maybe the webcam’s advanced features require vendor software available only on Windows.&lt;/p&gt;

&lt;p&gt;Maybe switching between integrated and discrete graphics is awkward.&lt;/p&gt;

&lt;p&gt;Maybe an external monitor behaves strangely after sleep.&lt;/p&gt;

&lt;p&gt;Maybe the function keys do not map correctly.&lt;/p&gt;

&lt;p&gt;Maybe the Wi-Fi chipset needs newer firmware than the distribution shipped.&lt;/p&gt;

&lt;p&gt;Maybe the machine boots and runs perfectly, except the microphone array sounds terrible because the vendor’s audio processing stack only exists for Windows.&lt;/p&gt;

&lt;p&gt;This is where Linux’s huge hardware support story becomes misleading.&lt;/p&gt;

&lt;p&gt;Supporting a hardware device is not always the same thing as supporting the complete product experience.&lt;/p&gt;

&lt;p&gt;A laptop is not just a CPU, GPU, storage device, and generic keyboard. It includes firmware, power management, thermal profiles, biometric devices, camera processing, audio tuning, docking behavior, special buttons, GPU switching, and vendor-specific quirks.&lt;/p&gt;

&lt;p&gt;Windows benefits from an established hardware certification and driver distribution system. Manufacturers design, test, certify, and distribute Windows drivers through infrastructure built for that purpose.&lt;/p&gt;

&lt;p&gt;Linux support often depends on drivers reaching the upstream kernel, firmware being redistributable, vendors participating in projects such as the Linux Vendor Firmware Service, and distributions shipping compatible versions at the right time.&lt;/p&gt;

&lt;p&gt;The upstream kernel model has major advantages. A driver in the main kernel tree can be maintained alongside kernel changes. That is usually better than leaving users dependent on an abandoned binary blob.&lt;/p&gt;

&lt;p&gt;But it also means out-of-tree drivers live a dangerous life. Linux intentionally does not promise a stable internal kernel interface for drivers. If a proprietary or external module is not kept current, a kernel update can expose the problem.&lt;/p&gt;

&lt;p&gt;The usual advice is to buy hardware known to work with Linux.&lt;/p&gt;

&lt;p&gt;That is sensible advice.&lt;/p&gt;

&lt;p&gt;It is also an admission that Linux is not a drop-in alternative for the general PC market.&lt;/p&gt;

&lt;p&gt;An operating system cannot become the default escape route from Windows if the migration checklist starts with researching whether the laptop’s sleep behavior is broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  NVIDIA is not the whole hardware problem
&lt;/h2&gt;

&lt;p&gt;Linux desktop discussions have spent years using NVIDIA as shorthand for every driver problem.&lt;/p&gt;

&lt;p&gt;That is too simple now.&lt;/p&gt;

&lt;p&gt;NVIDIA’s Linux support has changed significantly, and the company has increased its participation in Linux firmware infrastructure. AMD and Intel graphics can also provide excellent experiences. Modern distributions automate much more of the setup than they used to.&lt;/p&gt;

&lt;p&gt;Still, graphics on Linux demonstrates the broader platform problem.&lt;/p&gt;

&lt;p&gt;The user is not merely choosing a GPU. The final result can depend on the kernel, Mesa version, proprietary driver version, distribution packaging, display server, compositor, laptop GPU topology, firmware, and application.&lt;/p&gt;

&lt;p&gt;When something goes wrong, every layer has just enough responsibility to make diagnosis annoying.&lt;/p&gt;

&lt;p&gt;Windows has complicated graphics architecture too. The difference is that users usually experience it as one supported vendor path: install the vendor’s Windows driver or let Windows Update do it.&lt;/p&gt;

&lt;p&gt;On Linux, the technically correct solution may depend on whether the driver is in the kernel, distributed as a package, built through DKMS, bundled in the distribution, delivered by a third-party repository, or waiting for a newer kernel.&lt;/p&gt;

&lt;p&gt;That complexity is manageable for experienced users.&lt;/p&gt;

&lt;p&gt;“Manageable for experienced users” is not the standard Linux needs to meet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux gaming is a miracle, not a guarantee
&lt;/h2&gt;

&lt;p&gt;Gaming on Linux is dramatically better than it used to be.&lt;/p&gt;

&lt;p&gt;Valve deserves a ridiculous amount of credit for that. Proton allows many Windows-only games to run on Linux through Wine and a stack of related compatibility components. Steam’s Linux runtime also reduces distribution differences by running games against controlled runtime environments.&lt;/p&gt;

&lt;p&gt;This is impressive engineering.&lt;/p&gt;

&lt;p&gt;It is also worth noticing what had to happen.&lt;/p&gt;

&lt;p&gt;Linux did not win broad native game support. Instead, Valve built increasingly sophisticated infrastructure to run Windows games and isolate them from differences between Linux distributions.&lt;/p&gt;

&lt;p&gt;Again, Linux’s biggest desktop success stories often involve building a stable platform on top of the unstable boundaries beneath it.&lt;/p&gt;

&lt;p&gt;Many games now work with almost no effort. Some run surprisingly well. But compatibility still depends on the game, graphics drivers, Proton version, launchers, copy protection, middleware, anti-cheat systems, and updates from publishers that may never test Linux.&lt;/p&gt;

&lt;p&gt;A game working today through a compatibility layer is not the same promise as the publisher officially supporting the platform.&lt;/p&gt;

&lt;p&gt;For some users, current Linux gaming support is more than enough. For others, one incompatible multiplayer game or peripheral utility makes the entire migration impossible.&lt;/p&gt;

&lt;p&gt;That last ten percent matters.&lt;/p&gt;

&lt;p&gt;Desktop operating systems are not evaluated by averaging every feature. They are evaluated by the one required thing that does not work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application compatibility is still the wall
&lt;/h2&gt;

&lt;p&gt;Developers can do a huge amount on Linux.&lt;/p&gt;

&lt;p&gt;The major browsers are available. Editors such as Visual Studio Code have Linux versions. JetBrains supports Linux. Container tooling is excellent. Git, compilers, language runtimes, databases, terminals, and infrastructure tools are at home there.&lt;/p&gt;

&lt;p&gt;If someone’s work happens entirely in a browser, terminal, editor, and containers, Linux can be a fantastic development machine.&lt;/p&gt;

&lt;p&gt;But developers do not use their computers only for compiling code.&lt;/p&gt;

&lt;p&gt;They join video calls. They edit documents sent by clients. They use VPN software selected by an employer. They configure mice, keyboards, audio interfaces, capture cards, and other peripherals. They run design tools. They test commercial desktop applications. They interact with corporate security software.&lt;/p&gt;

&lt;p&gt;This is where “there is an open-source alternative” becomes an inadequate answer.&lt;/p&gt;

&lt;p&gt;An alternative application is not necessarily compatible with a required workflow.&lt;/p&gt;

&lt;p&gt;GIMP existing does not make it Photoshop.&lt;/p&gt;

&lt;p&gt;LibreOffice opening a document does not guarantee perfect behavior with a complex Microsoft Office workflow.&lt;/p&gt;

&lt;p&gt;A browser version of an application is not always equivalent to the native desktop version.&lt;/p&gt;

&lt;p&gt;Wine successfully launching an application does not turn it into an officially supported application.&lt;/p&gt;

&lt;p&gt;The Linux community often responds to missing software by arguing that users should change software.&lt;/p&gt;

&lt;p&gt;Sometimes that is reasonable. Sometimes the alternative is genuinely better.&lt;/p&gt;

&lt;p&gt;But it is not a migration strategy.&lt;/p&gt;

&lt;p&gt;A real desktop alternative has to adapt to users before demanding that users adapt to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux configuration is freedom with an invoice attached
&lt;/h2&gt;

&lt;p&gt;Linux gives users extraordinary control.&lt;/p&gt;

&lt;p&gt;That freedom has a cost, and the Linux community is often weirdly reluctant to admit it.&lt;/p&gt;

&lt;p&gt;Configuration is not free just because it does not cost money. It costs time, attention, and cognitive energy.&lt;/p&gt;

&lt;p&gt;The ability to replace a compositor, rebuild a package, override a systemd unit, patch a kernel parameter, select a different scheduler, or change the entire desktop environment is valuable.&lt;/p&gt;

&lt;p&gt;It is not a substitute for good defaults.&lt;/p&gt;

&lt;p&gt;There is a persistent idea that Linux problems are acceptable because they are fixable. If the fix exists in a wiki, forum post, configuration file, or shell command, then apparently the operating system has done its job.&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;An operating system that requires users to discover and apply the fix is still providing a worse experience than one that works correctly by default.&lt;/p&gt;

&lt;p&gt;The command might be trivial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; some-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the user first has to know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which service is missing.&lt;/li&gt;
&lt;li&gt;Why it is not running.&lt;/li&gt;
&lt;li&gt;What package provides it.&lt;/li&gt;
&lt;li&gt;Whether enabling it is appropriate for the distribution.&lt;/li&gt;
&lt;li&gt;Whether the advice applies to the current release.&lt;/li&gt;
&lt;li&gt;Whether the command creates a security or maintenance problem later.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The command is the easy part.&lt;/p&gt;

&lt;p&gt;Knowing that the command is necessary is the product failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stability depends on which Linux you mean
&lt;/h2&gt;

&lt;p&gt;Linux can be extremely stable.&lt;/p&gt;

&lt;p&gt;Linux can also turn a routine update into an educational weekend.&lt;/p&gt;

&lt;p&gt;Both statements are true because “Linux” covers systems with completely different update philosophies.&lt;/p&gt;

&lt;p&gt;An enterprise distribution may preserve older package versions and backport fixes for years. An LTS desktop distribution may prioritize stability but ship older applications. A rolling-release distribution may provide newer kernels, drivers, and desktops while exposing users to more frequent integration changes.&lt;/p&gt;

&lt;p&gt;Immutable and image-based distributions try to improve this situation. Atomic updates, rollback support, containerized development environments, and Flatpak applications create cleaner boundaries between the base operating system and user software.&lt;/p&gt;

&lt;p&gt;This is promising. It may be the most credible direction for a dependable Linux desktop.&lt;/p&gt;

&lt;p&gt;It also adds another model users and developers need to understand.&lt;/p&gt;

&lt;p&gt;Should a development tool be installed as a native package, layered onto the system image, run inside a container, installed through a language version manager, or downloaded as a standalone binary?&lt;/p&gt;

&lt;p&gt;There are good technical answers.&lt;/p&gt;

&lt;p&gt;There are several of them.&lt;/p&gt;

&lt;p&gt;Windows users may hate the registry, installer leftovers, and random background updaters. Linux users get to debate the architectural purity of six different installation methods.&lt;/p&gt;

&lt;p&gt;Nobody wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  WSL is a devastating argument against desktop Linux
&lt;/h2&gt;

&lt;p&gt;WSL might be Microsoft’s best developer feature and Linux desktop’s most embarrassing competitor.&lt;/p&gt;

&lt;p&gt;With one command, Windows can install a real Linux environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developers can run Bash, Linux binaries, package managers, databases, containers, language toolchains, and even Linux GUI applications while keeping Windows hardware support and commercial software compatibility.&lt;/p&gt;

&lt;p&gt;WSL has trade-offs. File placement matters because crossing between Windows and Linux filesystems can hurt I/O performance. Networking, permissions, virtualization, and tool integration can still introduce complexity.&lt;/p&gt;

&lt;p&gt;But the value proposition is brutally effective:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep Windows for the desktop. Use Linux for the parts Linux is good at.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That arrangement removes one of the strongest reasons developers once had to move entirely to Linux.&lt;/p&gt;

&lt;p&gt;It also exposes the uncomfortable truth at the center of this whole argument.&lt;/p&gt;

&lt;p&gt;Linux has won development infrastructure. It has not won the desktop.&lt;/p&gt;

&lt;p&gt;Microsoft understood that developers wanted Linux tools more than they necessarily wanted a Linux desktop. So Microsoft brought the tools into Windows.&lt;/p&gt;

&lt;p&gt;That was a smarter product decision than waiting for everyone to switch operating systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Linux desktop does not have an engineering problem
&lt;/h2&gt;

&lt;p&gt;Linux desktop projects contain plenty of strong engineers.&lt;/p&gt;

&lt;p&gt;The problem is product ownership.&lt;/p&gt;

&lt;p&gt;No single organization owns the complete Linux desktop experience across hardware, drivers, firmware, installation, updates, applications, packaging, support, documentation, and long-term compatibility.&lt;/p&gt;

&lt;p&gt;Canonical owns Ubuntu, not Linux.&lt;/p&gt;

&lt;p&gt;Red Hat and the Fedora community shape Fedora, not Linux.&lt;/p&gt;

&lt;p&gt;Valve controls SteamOS on selected hardware, not the general-purpose Linux desktop.&lt;/p&gt;

&lt;p&gt;GNOME controls GNOME.&lt;/p&gt;

&lt;p&gt;KDE controls KDE Plasma.&lt;/p&gt;

&lt;p&gt;The kernel community controls the kernel.&lt;/p&gt;

&lt;p&gt;Hardware vendors control their firmware.&lt;/p&gt;

&lt;p&gt;Application vendors decide which distributions, package formats, and environments they will support.&lt;/p&gt;

&lt;p&gt;Freedesktop.org defines interoperability specifications, but it cannot force universal implementation.&lt;/p&gt;

&lt;p&gt;Everybody owns a piece. Nobody owns the result.&lt;/p&gt;

&lt;p&gt;Windows has plenty of organizational dysfunction, but Microsoft can decide what Windows is. It can define a driver model, ship an SDK, certify hardware, distribute updates, establish UI APIs, and tell application developers what platform they are targeting.&lt;/p&gt;

&lt;p&gt;Apple takes this even further by controlling the operating system, hardware, processor roadmap, major frameworks, application distribution, and much of the ecosystem.&lt;/p&gt;

&lt;p&gt;Linux has coordination rather than control.&lt;/p&gt;

&lt;p&gt;That model is fantastic for open infrastructure. It is much harder for a consumer desktop product, where thousands of tiny integration details determine whether the system feels coherent.&lt;/p&gt;

&lt;h2&gt;
  
  
  SteamOS proves Linux works when somebody actually curates it
&lt;/h2&gt;

&lt;p&gt;The success of Linux in tightly controlled products should tell us something.&lt;/p&gt;

&lt;p&gt;Linux works extremely well when someone defines the hardware, controls the system image, chooses the update model, establishes the application runtime, tests the complete product, and limits the number of supported configurations.&lt;/p&gt;

&lt;p&gt;That is why Linux succeeds in servers, appliances, embedded devices, Android phones, Chromebooks, and game consoles.&lt;/p&gt;

&lt;p&gt;The kernel is not the problem.&lt;/p&gt;

&lt;p&gt;The endless matrix is the problem.&lt;/p&gt;

&lt;p&gt;A curated Linux desktop running on certified hardware can be excellent. The manufacturer can validate suspend, graphics, audio, firmware updates, input devices, power management, and recovery. The distribution can ship one desktop environment, one application format, one update mechanism, and one support path.&lt;/p&gt;

&lt;p&gt;But that stops looking like the traditional Linux desktop dream, where users freely combine distributions, desktops, kernels, package sources, filesystems, and hardware.&lt;/p&gt;

&lt;p&gt;The freedom remains possible underneath. It just cannot define the default product.&lt;/p&gt;

&lt;p&gt;Linux does not need fewer possibilities.&lt;/p&gt;

&lt;p&gt;It needs one boring, dependable path through them.&lt;/p&gt;

&lt;h2&gt;
  
  
  We need a Linux desktop that is willing to be a product
&lt;/h2&gt;

&lt;p&gt;The obvious response is to recommend a beginner-friendly distribution.&lt;/p&gt;

&lt;p&gt;That helps, but it does not solve the ecosystem problem.&lt;/p&gt;

&lt;p&gt;A polished installer and pleasant desktop theme cannot fix missing commercial applications, inconsistent vendor support, packaging fragmentation, or the absence of a standard support target.&lt;/p&gt;

&lt;p&gt;What Linux needs is not another distribution with a slightly different dock.&lt;/p&gt;

&lt;p&gt;It needs a credible desktop contract.&lt;/p&gt;

&lt;p&gt;That contract would probably include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A stable, long-lived application platform.&lt;/li&gt;
&lt;li&gt;One preferred desktop application format.&lt;/li&gt;
&lt;li&gt;Reliable graphical updates with rollback.&lt;/li&gt;
&lt;li&gt;Strong sandboxing that does not constantly break integration.&lt;/li&gt;
&lt;li&gt;A standard permission model users can understand.&lt;/li&gt;
&lt;li&gt;Certified hardware with complete firmware and power-management support.&lt;/li&gt;
&lt;li&gt;Consistent handling of files, links, notifications, shortcuts, screen sharing, and default applications.&lt;/li&gt;
&lt;li&gt;A clear compatibility policy across operating-system releases.&lt;/li&gt;
&lt;li&gt;Documentation that does not assume the user already knows which subsystem failed.&lt;/li&gt;
&lt;li&gt;Enough commercial incentive for major application vendors to treat the platform seriously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires eliminating the distributions and desktops that already exist.&lt;/p&gt;

&lt;p&gt;It requires someone to say, “This is the supported desktop platform,” and then do the unglamorous integration work for a decade.&lt;/p&gt;

&lt;p&gt;Not for one release.&lt;/p&gt;

&lt;p&gt;Not until the maintainers get bored.&lt;/p&gt;

&lt;p&gt;Not until a newer packaging system becomes fashionable.&lt;/p&gt;

&lt;p&gt;A decade.&lt;/p&gt;

&lt;p&gt;Desktop trust is built slowly and lost quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  I do not want Windows to win by default
&lt;/h2&gt;

&lt;p&gt;That is the part that bothers me.&lt;/p&gt;

&lt;p&gt;I do not think Windows is becoming better for developers and power users. It is becoming more capable in some areas while becoming more intrusive, cluttered, and ecosystem-driven in others.&lt;/p&gt;

&lt;p&gt;Those are not the same thing.&lt;/p&gt;

&lt;p&gt;Adding another AI surface does not make file management better.&lt;/p&gt;

&lt;p&gt;Adding personalized recommendations does not make the Start menu more predictable.&lt;/p&gt;

&lt;p&gt;Connecting more folders to OneDrive does not improve local ownership.&lt;/p&gt;

&lt;p&gt;Requiring an online account does not make the operating system feel like mine.&lt;/p&gt;

&lt;p&gt;Microsoft keeps building a future where Windows is a smart, personalized, cloud-connected assistant.&lt;/p&gt;

&lt;p&gt;I want an operating system.&lt;/p&gt;

&lt;p&gt;Linux should be the answer. Technically, it has nearly everything required. Politically and structurally, it does not.&lt;/p&gt;

&lt;p&gt;The Linux desktop still asks users to accept too many caveats:&lt;/p&gt;

&lt;p&gt;It is great if your hardware is supported.&lt;/p&gt;

&lt;p&gt;It is great if your applications are available.&lt;/p&gt;

&lt;p&gt;It is great if your games work through Proton.&lt;/p&gt;

&lt;p&gt;It is great if your employer’s tools support it.&lt;/p&gt;

&lt;p&gt;It is great if you choose the right distribution.&lt;/p&gt;

&lt;p&gt;It is great if you do not mind occasional configuration archaeology.&lt;/p&gt;

&lt;p&gt;That is too many “ifs” for an operating system that is supposed to replace Windows.&lt;/p&gt;

&lt;p&gt;Linux enthusiasts will correctly point out that millions of people use Linux desktops productively every day. Some systems are polished. Some hardware combinations work beautifully. Some developers would never willingly return to Windows.&lt;/p&gt;

&lt;p&gt;I am not arguing that Linux is unusable.&lt;/p&gt;

&lt;p&gt;I am arguing that “usable” is an embarrassingly low target in 2026.&lt;/p&gt;

&lt;p&gt;The standard should be obvious, cohesive, predictable, and boring.&lt;/p&gt;

&lt;p&gt;Linux is powerful enough. The kernel is mature enough. The desktop environments are capable enough. The packaging technology is sophisticated enough. The community has spent decades solving difficult engineering problems.&lt;/p&gt;

&lt;p&gt;And somehow, after all of that, a developer escaping an increasingly irritating Windows experience still has to choose between Microsoft’s product agenda and Linux’s integration lottery.&lt;/p&gt;

&lt;p&gt;Why the hell are we still having this conversation in 2026?&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blogs.windows.com/windowsexperience/2025/10/16/making-every-windows-11-pc-an-ai-pc/" rel="noopener noreferrer"&gt;Microsoft: Making every Windows 11 PC an AI PC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.microsoft.com/en-US/Windows/Ai/Ai-Features/retrace-your-steps-with-recall" rel="noopener noreferrer"&gt;Microsoft Support: Retrace your steps with Recall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/privacy/optional-diagnostic-data" rel="noopener noreferrer"&gt;Microsoft Learn: Optional diagnostic data for Windows 11 and Windows 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.microsoft.com/en-us/windows/privacy/privacy-settings-for-recommendations-offers-in-windows-11" rel="noopener noreferrer"&gt;Microsoft Support: Privacy settings for recommendations and offers in Windows 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/windows/windows-11-specifications" rel="noopener noreferrer"&gt;Microsoft: Windows 11 specifications and system requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.microsoft.com/en-us/windows/experience/backup-recovery/back-up-and-restore-with-windows-backup" rel="noopener noreferrer"&gt;Microsoft Support: Back up and restore with Windows Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.microsoft.com/en-us/windows/deployment/updates-lifecycle/windows-10-support-has-ended-on-october-14-2025" rel="noopener noreferrer"&gt;Microsoft Support: Windows 10 support ended on October 14, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/wsl/about" rel="noopener noreferrer"&gt;Microsoft Learn: What is Windows Subsystem for Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/dev-environment/wsl-interop" rel="noopener noreferrer"&gt;Microsoft Learn: WSL interoperability between Windows and Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/dashboard/" rel="noopener noreferrer"&gt;Microsoft Learn: Partner Center for Windows Hardware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.kernel.org/process/stable-api-nonsense.html" rel="noopener noreferrer"&gt;Linux Kernel Documentation: The Linux Kernel Driver Interface&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.flatpak.org/en/latest/basic-concepts.html" rel="noopener noreferrer"&gt;Flatpak Documentation: Basic concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.flatpak.org/en/latest/portal-api-reference.html" rel="noopener noreferrer"&gt;Flatpak Documentation: XDG Desktop Portal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://specifications.freedesktop.org/" rel="noopener noreferrer"&gt;Freedesktop.org: Desktop interoperability specifications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://documentation.ubuntu.com/desktop/en/latest/how-to/software/add-a-software-repository/" rel="noopener noreferrer"&gt;Ubuntu Desktop Documentation: Add a software repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fwupd.org/" rel="noopener noreferrer"&gt;Linux Vendor Firmware Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ValveSoftware/Proton" rel="noopener noreferrer"&gt;Valve: Proton compatibility tool for Steam Play&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ValveSoftware/steam-runtime" rel="noopener noreferrer"&gt;Valve: Steam Linux Runtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://helpx.adobe.com/creative-cloud/apps/get-started/desktop-technical-requirements.html" rel="noopener noreferrer"&gt;Adobe: Creative Cloud desktop technical requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Never Touched AWS and I Still Ship: The Internet Doesn’t Need One Giant Cloud Stack</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Fri, 04 Sep 2026 18:33:19 +0000</pubDate>
      <link>https://dev.to/davidtimothy/i-never-touched-aws-and-i-still-ship-the-internet-doesnt-need-one-giant-cloud-stack-3a7g</link>
      <guid>https://dev.to/davidtimothy/i-never-touched-aws-and-i-still-ship-the-internet-doesnt-need-one-giant-cloud-stack-3a7g</guid>
      <description>&lt;p&gt;At some point, hosting a website became embarrassingly complicated.&lt;/p&gt;

&lt;p&gt;You can’t just put files on a server anymore. Apparently, you need a cloud strategy. You need containers. You need orchestration. You need serverless functions talking to managed services through an API gateway while six dashboards monitor the cost of the dashboards monitoring the application.&lt;/p&gt;

&lt;p&gt;And obviously, all of this should live inside AWS, Microsoft Azure, Google Cloud, or another enormous cloud platform.&lt;/p&gt;

&lt;p&gt;Otherwise, are you even doing infrastructure?&lt;/p&gt;

&lt;p&gt;I’ve been building and hosting websites for more than 20 years. I use traditional shared hosting for smaller websites and VPSs or dedicated servers for larger projects, depending on what the project actually needs.&lt;/p&gt;

&lt;p&gt;I have never used AWS for my projects.&lt;/p&gt;

&lt;p&gt;I have never used Azure, Google Cloud, or a similar hyperscale cloud platform for them either.&lt;/p&gt;

&lt;p&gt;My projects have never depended on one of those platforms, and somehow, everything still works. Websites go online. Blogs load. Company presentation sites do their job. Clients can visit pages. The internet does not reject my deployments because they lack a sufficiently complicated architecture diagram.&lt;/p&gt;

&lt;p&gt;This approach has saved me time and money.&lt;/p&gt;

&lt;p&gt;That does not mean the giant cloud platforms are bad. They are extraordinary pieces of infrastructure, and plenty of companies have excellent reasons to use them.&lt;/p&gt;

&lt;p&gt;But the automatic assumption that every modern project belongs inside the same tiny group of giant cloud providers is bizarre.&lt;/p&gt;

&lt;p&gt;More importantly, it is helping create an internet that depends far too heavily on far too few companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cloud became the default before anyone asked why
&lt;/h2&gt;

&lt;p&gt;There is a huge difference between asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What infrastructure does this project need?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which cloud services should we use?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second question has already made the biggest decision for you.&lt;/p&gt;

&lt;p&gt;It assumes that the project belongs on a hyperscale platform. Now all that remains is choosing the products, wiring them together, configuring permissions, estimating costs, and pretending the resulting pile of dependencies is simpler because nobody has to physically touch a server.&lt;/p&gt;

&lt;p&gt;This is how a straightforward website ends up with object storage, edge functions, a managed database, a managed cache, a managed queue, centralized logging, proprietary identity, an API gateway, a container registry, and an infrastructure-as-code repository large enough to require its own maintenance schedule.&lt;/p&gt;

&lt;p&gt;Every individual decision can sound reasonable.&lt;/p&gt;

&lt;p&gt;Storage as a service? Convenient.&lt;/p&gt;

&lt;p&gt;Managed database? Convenient.&lt;/p&gt;

&lt;p&gt;Authentication platform? Convenient.&lt;/p&gt;

&lt;p&gt;Serverless functions? Convenient.&lt;/p&gt;

&lt;p&gt;Global CDN? Convenient.&lt;/p&gt;

&lt;p&gt;Managed Kubernetes? Convenient, assuming the alternative was unmanaged Kubernetes and not simply avoiding Kubernetes.&lt;/p&gt;

&lt;p&gt;Add enough convenient services together and you eventually build a system nobody fully understands, hosted by a company you cannot realistically leave.&lt;/p&gt;

&lt;p&gt;That might be justified for a large, complicated application. It is harder to justify for a blog.&lt;/p&gt;

&lt;p&gt;The strange part is that we barely distinguish between those cases anymore. “Put it in the cloud” has become the default answer whether the project is a multinational software platform or a company website with an about page and a contact form.&lt;/p&gt;

&lt;p&gt;Those are not the same infrastructure problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  My stack changes because projects are different
&lt;/h2&gt;

&lt;p&gt;I don’t have one universal hosting architecture.&lt;/p&gt;

&lt;p&gt;That is the point.&lt;/p&gt;

&lt;p&gt;For a small website, traditional shared hosting can be perfectly fine. It provides a place to host the site without requiring a dedicated server or turning a simple project into an infrastructure hobby.&lt;/p&gt;

&lt;p&gt;If the project needs more resources or control, a VPS may make sense.&lt;/p&gt;

&lt;p&gt;If the requirements justify dedicated hardware, a dedicated server is still a perfectly legitimate option.&lt;/p&gt;

&lt;p&gt;The decision looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What does this project actually need?

Small, straightforward website
    -&amp;gt; Shared hosting may be enough

More control, resources, or flexibility
    -&amp;gt; Consider a VPS

Requirements that justify dedicated resources
    -&amp;gt; Consider a dedicated server

Unusual scale, global distribution, specialized managed services
    -&amp;gt; A large cloud platform may make sense
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that the cloud platform is still there.&lt;/p&gt;

&lt;p&gt;It just has to earn its place.&lt;/p&gt;

&lt;p&gt;I don’t begin with the assumption that every project needs hyperscale infrastructure. I start with the project and work outward.&lt;/p&gt;

&lt;p&gt;Most of what I host consists of websites, blogs, company presentation sites, and similar web projects. These are real projects, but they are not pretending to be Netflix. They need suitable infrastructure, not infinite theoretical scalability.&lt;/p&gt;

&lt;p&gt;Apache is perfectly capable of serving these kinds of websites. Traditional hosting is perfectly capable of running them. A VPS can provide plenty of control when more control is actually needed.&lt;/p&gt;

&lt;p&gt;CentOS was my favorite Linux distribution for many years. It did not make the infrastructure exciting. It made the infrastructure understandable, which is far more useful.&lt;/p&gt;

&lt;p&gt;I also generally recommend control panels, especially for quick administrative actions and less experienced users. They are not mandatory, and they are not appropriate for every server, but dismissing them because “real developers use the command line” is mostly macho nonsense.&lt;/p&gt;

&lt;p&gt;If a tool makes a legitimate administrative task quicker and clearer, it is useful.&lt;/p&gt;

&lt;p&gt;Infrastructure should be selected with that same practical attitude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boring infrastructure has one enormous advantage
&lt;/h2&gt;

&lt;p&gt;You can understand it.&lt;/p&gt;

&lt;p&gt;That sounds almost too basic to mention, but understandability has become an underrated technical feature.&lt;/p&gt;

&lt;p&gt;A traditional server setup has a relatively direct mental model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is a physical or virtual machine.&lt;/li&gt;
&lt;li&gt;It runs an operating system.&lt;/li&gt;
&lt;li&gt;A web server such as Apache handles requests.&lt;/li&gt;
&lt;li&gt;The website or application runs there.&lt;/li&gt;
&lt;li&gt;The machine has finite resources.&lt;/li&gt;
&lt;li&gt;If the project outgrows those resources, something needs to change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are still plenty of ways to get this wrong. Servers require maintenance. Software needs updates. Security matters. Hardware and networks fail. Backups do not magically happen just because the architecture is simple.&lt;/p&gt;

&lt;p&gt;But the core model is visible.&lt;/p&gt;

&lt;p&gt;A modern cloud application can exist across dozens of products, each with its own configuration, permissions, logs, limits, pricing model, and failure behavior.&lt;/p&gt;

&lt;p&gt;The application is no longer just the code. It is the code plus IAM policies plus cloud resources plus deployment configuration plus provider-specific networking plus managed-service settings plus whatever undocumented assumptions are hiding in the account.&lt;/p&gt;

&lt;p&gt;At that point, nobody really “runs” the application.&lt;/p&gt;

&lt;p&gt;People negotiate with it.&lt;/p&gt;

&lt;p&gt;Complexity is sometimes unavoidable. But when a simple architecture can satisfy the requirements, choosing the complicated one is not automatically better engineering.&lt;/p&gt;

&lt;p&gt;Sometimes it is just more engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complexity looks impressive, so we keep buying it
&lt;/h2&gt;

&lt;p&gt;The technology industry rewards visible complexity.&lt;/p&gt;

&lt;p&gt;A developer who says, “I put the website on a server,” does not sound particularly impressive.&lt;/p&gt;

&lt;p&gt;A developer who says, “We designed a cloud-native, event-driven platform using container orchestration and managed infrastructure primitives” sounds more serious, even if the end result is still a website displaying six pages and a contact form.&lt;/p&gt;

&lt;p&gt;Complex systems produce diagrams.&lt;/p&gt;

&lt;p&gt;Diagrams produce meetings.&lt;/p&gt;

&lt;p&gt;Meetings produce job titles.&lt;/p&gt;

&lt;p&gt;Simple infrastructure mostly produces a working website, which is apparently less exciting.&lt;/p&gt;

&lt;p&gt;This creates a perverse incentive. We start solving problems we do not have because those solutions are culturally associated with mature engineering.&lt;/p&gt;

&lt;p&gt;Nobody wants to be accused of building something outdated. Nobody wants to tell the team that a basic VPS might be enough when every conference talk is discussing platform engineering, service meshes, serverless architectures, and globally distributed systems.&lt;/p&gt;

&lt;p&gt;So we plan for imaginary scale.&lt;/p&gt;

&lt;p&gt;We design for millions of users before finding the first hundred.&lt;/p&gt;

&lt;p&gt;We distribute applications that have no meaningful reason to be distributed.&lt;/p&gt;

&lt;p&gt;We introduce orchestration before there is anything worth orchestrating.&lt;/p&gt;

&lt;p&gt;Then we spend months operating the infrastructure required to operate the infrastructure.&lt;/p&gt;

&lt;p&gt;That is not always sophistication. Sometimes it is fear wearing a technical vocabulary.&lt;/p&gt;

&lt;h2&gt;
  
  
  You do not need Kubernetes just because it exists
&lt;/h2&gt;

&lt;p&gt;Kubernetes is useful.&lt;/p&gt;

&lt;p&gt;It solves difficult problems involving container orchestration, scheduling, service discovery, deployment, scaling, resource management, and resilience. Large organizations with many services and teams can have completely valid reasons to use it.&lt;/p&gt;

&lt;p&gt;But Kubernetes solves Kubernetes-shaped problems.&lt;/p&gt;

&lt;p&gt;A personal website is not a Kubernetes-shaped problem.&lt;/p&gt;

&lt;p&gt;A company presentation site is not a Kubernetes-shaped problem.&lt;/p&gt;

&lt;p&gt;A blog is not a Kubernetes-shaped problem.&lt;/p&gt;

&lt;p&gt;A straightforward web application does not become more professional because its HTTP requests pass through an ingress controller before reaching a container that replaced a process that could have run directly on a server.&lt;/p&gt;

&lt;p&gt;Kubernetes also comes with an operating cost that does not disappear just because the cluster is managed.&lt;/p&gt;

&lt;p&gt;Someone still needs to understand deployments, pods, services, ingress, storage, secrets, networking, resource limits, access control, upgrades, monitoring, and the collection of extensions that inevitably starts growing around the cluster.&lt;/p&gt;

&lt;p&gt;Managed Kubernetes can remove part of the operational burden. It cannot remove the conceptual burden.&lt;/p&gt;

&lt;p&gt;If you need what Kubernetes provides, that burden may be worthwhile.&lt;/p&gt;

&lt;p&gt;If you don’t, congratulations. You have successfully created an entire category of work for yourself.&lt;/p&gt;

&lt;p&gt;Containers have useful properties. Kubernetes is a powerful platform. Neither fact means every project needs either one.&lt;/p&gt;

&lt;p&gt;Sometimes a normal process running on a normal server is not technical debt.&lt;/p&gt;

&lt;p&gt;Sometimes it is the correct answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless still has servers and now also has a pricing equation
&lt;/h2&gt;

&lt;p&gt;Serverless infrastructure makes sense for certain workloads.&lt;/p&gt;

&lt;p&gt;Short-lived tasks, event processing, unpredictable bursts, and workloads that benefit from scaling to zero can be good fits. The provider handles much of the underlying infrastructure, and that can save serious operational effort.&lt;/p&gt;

&lt;p&gt;But “serverless” is one of those terms that quietly encourages people to stop thinking.&lt;/p&gt;

&lt;p&gt;The servers did not disappear. Ownership and billing changed.&lt;/p&gt;

&lt;p&gt;Instead of renting straightforward capacity, you may now pay according to requests, execution duration, memory allocation, storage operations, data transfer, logging, and the other services required to connect everything.&lt;/p&gt;

&lt;p&gt;That can be efficient.&lt;/p&gt;

&lt;p&gt;It can also turn a simple application into a distributed billing event.&lt;/p&gt;

&lt;p&gt;A serverless function may be easy to deploy in isolation. A real serverless application is rarely one isolated function. It usually depends on triggers, permissions, gateways, managed storage, monitoring, deployment tooling, and provider-specific behavior.&lt;/p&gt;

&lt;p&gt;The more of those pieces you use, the less portable the system becomes.&lt;/p&gt;

&lt;p&gt;Again, none of this makes serverless bad.&lt;/p&gt;

&lt;p&gt;It means “serverless” should be an architectural decision, not a fashion choice.&lt;/p&gt;

&lt;p&gt;If a conventional application on a conventional server can perform the task reliably, I do not see a problem that needs fixing.&lt;/p&gt;

&lt;p&gt;A long-running process is allowed to exist.&lt;/p&gt;

&lt;p&gt;A cron job is allowed to exist.&lt;/p&gt;

&lt;p&gt;A server is allowed to remain turned on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managed services manage you too
&lt;/h2&gt;

&lt;p&gt;Managed services are attractive because they remove work.&lt;/p&gt;

&lt;p&gt;A managed database can handle maintenance tasks that would otherwise require time and expertise. A managed identity service can save developers from implementing sensitive authentication systems. Managed queues, caches, storage, and monitoring can accelerate development substantially.&lt;/p&gt;

&lt;p&gt;That is all real value.&lt;/p&gt;

&lt;p&gt;But the word “managed” tends to emphasize what you stop managing while hiding what you give up.&lt;/p&gt;

&lt;p&gt;You give up some control.&lt;/p&gt;

&lt;p&gt;You accept a provider’s limits and operational behavior.&lt;/p&gt;

&lt;p&gt;You build around its APIs.&lt;/p&gt;

&lt;p&gt;You depend on its pricing.&lt;/p&gt;

&lt;p&gt;You depend on its product roadmap.&lt;/p&gt;

&lt;p&gt;You depend on its policies.&lt;/p&gt;

&lt;p&gt;You depend on its account and permission systems.&lt;/p&gt;

&lt;p&gt;You depend on the service continuing to exist in a recognizable form.&lt;/p&gt;

&lt;p&gt;If several important parts of the application depend on proprietary services from the same provider, leaving becomes progressively more difficult.&lt;/p&gt;

&lt;p&gt;Moving a conventional application between servers is not always easy, but at least the pieces are usually recognizable. A web server is a web server. Files are files. Common database engines are available from many providers.&lt;/p&gt;

&lt;p&gt;Moving an application deeply integrated with one cloud company’s identity, database, messaging, storage, function runtime, monitoring, and deployment products is not moving a server.&lt;/p&gt;

&lt;p&gt;It is a rewrite with luggage.&lt;/p&gt;

&lt;p&gt;Vendor lock-in can be an acceptable trade. A proprietary service may provide enough value to justify it completely.&lt;/p&gt;

&lt;p&gt;But developers should stop pretending the lock-in is not there simply because the service has a friendly SDK.&lt;/p&gt;

&lt;p&gt;Convenience is not independence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud pricing is simple until you use the cloud
&lt;/h2&gt;

&lt;p&gt;The basic cloud sales pitch is appealing: use what you need and pay for what you use.&lt;/p&gt;

&lt;p&gt;That model can be excellent for workloads that change rapidly or need flexible capacity.&lt;/p&gt;

&lt;p&gt;It can also create bills assembled from a strange collection of requests, execution time, storage classes, operations, transfer directions, reserved capacity, logs, metrics, gateways, addresses, and regional variations.&lt;/p&gt;

&lt;p&gt;The application architecture becomes a pricing architecture.&lt;/p&gt;

&lt;p&gt;Every technical decision can introduce another meter.&lt;/p&gt;

&lt;p&gt;Run code? Metered.&lt;/p&gt;

&lt;p&gt;Store data? Metered.&lt;/p&gt;

&lt;p&gt;Read the data? Possibly metered.&lt;/p&gt;

&lt;p&gt;Transfer the data? Definitely pay attention.&lt;/p&gt;

&lt;p&gt;Keep detailed logs so you can understand the distributed architecture? That is another product.&lt;/p&gt;

&lt;p&gt;Analyze why the logging product costs so much? This may require additional monitoring.&lt;/p&gt;

&lt;p&gt;With traditional hosting or a VPS, the cost model is often more direct. You rent a defined amount of capacity. The project runs inside that capacity. If it outgrows the available resources, you optimize it or change the infrastructure.&lt;/p&gt;

&lt;p&gt;That model is less elastic, but it is easy to understand.&lt;/p&gt;

&lt;p&gt;Simple hosting can also be inexpensive. In some cases, a small personal website can even be hosted for free. The right cost depends entirely on the project and its requirements, so pretending there is one universal cheapest option would be dishonest.&lt;/p&gt;

&lt;p&gt;Still, plenty of projects do not need a pricing calculator with 40 inputs.&lt;/p&gt;

&lt;p&gt;Saving money is not just about finding the lowest monthly price. It is also about avoiding unnecessary engineering, avoiding unnecessary administration, and avoiding an architecture that requires specialized expertise to keep a simple website online.&lt;/p&gt;

&lt;p&gt;For more than 20 years, choosing traditional hosting, VPSs, or dedicated servers according to actual project requirements has saved me both time and money.&lt;/p&gt;

&lt;p&gt;That is not a theoretical possibility.&lt;/p&gt;

&lt;p&gt;It is what I have done.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deeper problem is not cloud technology
&lt;/h2&gt;

&lt;p&gt;The deeper problem is concentration.&lt;/p&gt;

&lt;p&gt;AWS is the most recognizable name in this conversation, which is why it works in the title. But this is not really about AWS.&lt;/p&gt;

&lt;p&gt;It is about an internet where an enormous amount of compute, storage, networking, authentication, DNS, content delivery, and application infrastructure is increasingly concentrated around a small number of giant companies.&lt;/p&gt;

&lt;p&gt;AWS, Microsoft Azure, and Google Cloud are the obvious examples. Other large platforms and infrastructure intermediaries add more layers to the same pattern.&lt;/p&gt;

&lt;p&gt;Each company may run technically impressive infrastructure.&lt;/p&gt;

&lt;p&gt;Each individual customer may have a perfectly good reason to use it.&lt;/p&gt;

&lt;p&gt;But if everyone makes the same individually reasonable choice, we can still end up with a collectively fragile internet.&lt;/p&gt;

&lt;p&gt;That is the part developer culture tends to ignore.&lt;/p&gt;

&lt;p&gt;Centralization is convenient right up until the centralized thing fails.&lt;/p&gt;

&lt;p&gt;Then thousands of supposedly independent services can start failing together.&lt;/p&gt;

&lt;h2&gt;
  
  
  One cloud problem can become everybody’s problem
&lt;/h2&gt;

&lt;p&gt;Cloud providers experience outages. So do smaller hosting companies, private data centers, internet service providers, DNS operators, and individual servers.&lt;/p&gt;

&lt;p&gt;The existence of an outage does not prove that a provider is incompetent.&lt;/p&gt;

&lt;p&gt;It proves that infrastructure fails.&lt;/p&gt;

&lt;p&gt;The concentration question is about the blast radius.&lt;/p&gt;

&lt;p&gt;On December 7, 2021, AWS experienced a major service event in its Northern Virginia region. An automated capacity-scaling activity triggered unexpected behavior that overwhelmed networking devices connecting AWS’s internal network to its main network.&lt;/p&gt;

&lt;p&gt;That internal network supported foundational capabilities such as monitoring, internal DNS, authorization, and parts of the EC2 control plane. The resulting congestion affected multiple AWS services and even impaired AWS’s ability to monitor the incident and handle support cases normally.&lt;/p&gt;

&lt;p&gt;The important lesson is not that AWS had a bad day.&lt;/p&gt;

&lt;p&gt;The lesson is that many separate-looking cloud services can share critical internal dependencies. When one foundational layer fails, the neat boxes in the architecture diagram stop looking quite so independent.&lt;/p&gt;

&lt;p&gt;Microsoft Azure provided another example on January 25, 2023.&lt;/p&gt;

&lt;p&gt;A networking change associated with adding capacity to Microsoft’s global wide area network caused widespread connectivity problems. From 07:08 UTC until 12:43 UTC, customers experienced latency and timeouts connecting to resources hosted in Azure regions.&lt;/p&gt;

&lt;p&gt;The incident also affected other Microsoft services, including Microsoft 365 and Power Platform. Azure Government services that depended on the public Azure cloud were affected too.&lt;/p&gt;

&lt;p&gt;One networking event did not remain one networking event.&lt;/p&gt;

&lt;p&gt;It crossed services and customer boundaries because those systems shared major infrastructure underneath.&lt;/p&gt;

&lt;p&gt;Google Cloud had a major global incident on June 12, 2025. A policy change triggered a failure in Google’s Service Control system, part of the infrastructure used to apply quota and policy checks to API requests.&lt;/p&gt;

&lt;p&gt;The problematic policy data was replicated globally. A software path without appropriate error handling encountered the bad data and crashed, causing increased errors across many Google Cloud and Google Workspace products.&lt;/p&gt;

&lt;p&gt;The status infrastructure was affected too, delaying Google’s first public incident report. Some customers also lost visibility because their own monitoring systems were running on the same cloud experiencing the outage.&lt;/p&gt;

&lt;p&gt;That last detail should make every infrastructure engineer slightly uncomfortable.&lt;/p&gt;

&lt;p&gt;Your application is down.&lt;/p&gt;

&lt;p&gt;Your monitoring is down.&lt;/p&gt;

&lt;p&gt;The system meant to tell you the cloud is down is also down.&lt;/p&gt;

&lt;p&gt;Efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud dependencies do not stop at the cloud provider
&lt;/h2&gt;

&lt;p&gt;The June 2025 Google Cloud incident demonstrated something even more important.&lt;/p&gt;

&lt;p&gt;Cloudflare suffered a significant outage at the same time because part of the storage infrastructure behind its Workers KV service depended on a third-party cloud provider affected by the incident.&lt;/p&gt;

&lt;p&gt;Cloudflare reported that the outage lasted 2 hours and 28 minutes and globally affected customers using several impacted services. Workers KV was a critical dependency for products involving configuration, authentication, and asset delivery, so failures spread into Cloudflare Access, WARP, Gateway, Turnstile, Workers AI, Pages, Stream, and other products.&lt;/p&gt;

&lt;p&gt;This is what modern infrastructure dependency chains look like.&lt;/p&gt;

&lt;p&gt;A developer depends on a platform.&lt;/p&gt;

&lt;p&gt;That platform depends on another service.&lt;/p&gt;

&lt;p&gt;That service depends on a cloud provider.&lt;/p&gt;

&lt;p&gt;The developer may not even know which underlying company is ultimately hosting a critical part of the stack.&lt;/p&gt;

&lt;p&gt;The service has a different logo, a different account, and a separate invoice. Architecturally, however, the dependency may still lead back to one of the same few giant infrastructure providers.&lt;/p&gt;

&lt;p&gt;This is why buying services from several vendors does not automatically create independence.&lt;/p&gt;

&lt;p&gt;Sometimes you have simply purchased the same cloud dependency through multiple layers of abstraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  I use Cloudflare, and I’m still uncomfortable with Cloudflare
&lt;/h2&gt;

&lt;p&gt;I occasionally use Cloudflare, and I think it is a good service.&lt;/p&gt;

&lt;p&gt;It solves real problems well. Its scale, network, security features, DNS, and performance tools make it attractive for obvious reasons.&lt;/p&gt;

&lt;p&gt;I also dislike how much Cloudflare has contributed to the centralization of the internet.&lt;/p&gt;

&lt;p&gt;That may sound contradictory. It is not.&lt;/p&gt;

&lt;p&gt;A service can be excellent and still occupy an unhealthy position in the broader ecosystem.&lt;/p&gt;

&lt;p&gt;In fact, excellent services are exactly the ones most likely to become central points of dependency. People use them because they are good. Tooling starts assuming they are available. Tutorials make them the default. Competing at the same scale becomes harder.&lt;/p&gt;

&lt;p&gt;Eventually, a service that was once optional becomes part of the internet’s unofficial plumbing.&lt;/p&gt;

&lt;p&gt;On November 18, 2025, Cloudflare experienced significant failures delivering core network traffic after a database permissions change caused a Bot Management configuration file to unexpectedly double in size.&lt;/p&gt;

&lt;p&gt;The oversized file propagated across Cloudflare’s network. Core proxy software had a size limit below the new file size, causing failures across the network.&lt;/p&gt;

&lt;p&gt;Cloudflare said core traffic was largely flowing normally again by 14:30 UTC, with all systems functioning normally by 17:06 UTC.&lt;/p&gt;

&lt;p&gt;Cloudflare itself acknowledged the significance of its position in the internet ecosystem.&lt;/p&gt;

&lt;p&gt;That position is exactly what concerns me.&lt;/p&gt;

&lt;p&gt;I can appreciate the product while questioning whether so much internet traffic should depend on one company.&lt;/p&gt;

&lt;p&gt;We need more alternatives at that scale, not because Cloudflare is uniquely bad, but because no company should become too difficult for the internet to route around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller providers fail, but they fail smaller
&lt;/h2&gt;

&lt;p&gt;Traditional hosting providers and independent VPS companies are not magically reliable.&lt;/p&gt;

&lt;p&gt;Some are excellent. Some are terrible. Some will suffer hardware failures, network outages, security incidents, overloaded servers, bad support, or business problems.&lt;/p&gt;

&lt;p&gt;A cheap VPS is not automatically resilient.&lt;/p&gt;

&lt;p&gt;A dedicated server is still one physical machine unless the architecture accounts for that.&lt;/p&gt;

&lt;p&gt;Shared hosting can have resource limitations and noisy neighbors. It can offer less control. It may not support unusual software requirements. Scaling may require migration rather than moving a slider in a dashboard.&lt;/p&gt;

&lt;p&gt;Simple infrastructure has real limitations.&lt;/p&gt;

&lt;p&gt;The point is not that small providers never fail.&lt;/p&gt;

&lt;p&gt;The point is that they usually fail independently.&lt;/p&gt;

&lt;p&gt;If one small hosting provider has a major incident, its customers are affected. That is serious for those customers, but it does not automatically take a huge collection of unrelated global services down with it.&lt;/p&gt;

&lt;p&gt;Concentration changes the nature of failure.&lt;/p&gt;

&lt;p&gt;When a dominant cloud, CDN, DNS operator, identity platform, or payment processor has a major incident, enormous numbers of businesses can be affected simultaneously.&lt;/p&gt;

&lt;p&gt;That is systemic risk.&lt;/p&gt;

&lt;p&gt;Moving every project to one of three giant clouds may improve the infrastructure available to each individual project. It can also make the wider internet more dependent on the same underlying systems.&lt;/p&gt;

&lt;p&gt;Both things can be true.&lt;/p&gt;

&lt;p&gt;Reliability is not only about how rarely one provider fails. It is also about how much fails with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-cloud is not a magic spell
&lt;/h2&gt;

&lt;p&gt;The industry’s answer to cloud concentration is often “multi-cloud.”&lt;/p&gt;

&lt;p&gt;In theory, that means designing a system that can run across multiple major cloud providers.&lt;/p&gt;

&lt;p&gt;In practice, it can mean paying several giant companies while multiplying your architecture, operational requirements, deployment tooling, networking complexity, security configuration, and staff expertise.&lt;/p&gt;

&lt;p&gt;A genuinely portable multi-cloud application can be valuable for organizations that require that level of resilience or negotiating power.&lt;/p&gt;

&lt;p&gt;It can also be spectacular overkill.&lt;/p&gt;

&lt;p&gt;If avoiding dependence on one complicated platform requires building an abstraction layer across three complicated platforms, the cure may be worse than the disease.&lt;/p&gt;

&lt;p&gt;For many smaller projects, provider diversity does not require an enterprise multi-cloud strategy.&lt;/p&gt;

&lt;p&gt;It can mean keeping an application portable.&lt;/p&gt;

&lt;p&gt;It can mean preferring common technologies.&lt;/p&gt;

&lt;p&gt;It can mean choosing a hosting provider without deeply coupling every application component to proprietary services.&lt;/p&gt;

&lt;p&gt;It can mean maintaining the realistic ability to move the project elsewhere.&lt;/p&gt;

&lt;p&gt;Portability does not need a branded framework.&lt;/p&gt;

&lt;p&gt;Sometimes it is simply the result of not making the application unnecessarily difficult to host.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cloud is excellent when you actually need a cloud
&lt;/h2&gt;

&lt;p&gt;There are plenty of projects for which a hyperscale cloud platform is the right answer.&lt;/p&gt;

&lt;p&gt;Applications with unpredictable global traffic may benefit from elastic capacity.&lt;/p&gt;

&lt;p&gt;Large companies may need geographic regions, compliance programs, sophisticated access controls, managed data platforms, global networking, machine learning infrastructure, or integration with an existing cloud ecosystem.&lt;/p&gt;

&lt;p&gt;Teams running many services may benefit from orchestration.&lt;/p&gt;

&lt;p&gt;Specialized workloads may be far easier to build with managed cloud products than with traditional infrastructure.&lt;/p&gt;

&lt;p&gt;Fast-growing companies may reasonably decide that vendor lock-in is an acceptable price for speed.&lt;/p&gt;

&lt;p&gt;I have no argument with any of that.&lt;/p&gt;

&lt;p&gt;The problem begins when tools designed for extraordinary scale become the default recommendation for ordinary projects.&lt;/p&gt;

&lt;p&gt;Most websites do not need the infrastructure capabilities of a multinational cloud provider.&lt;/p&gt;

&lt;p&gt;They need to load.&lt;/p&gt;

&lt;p&gt;They need reasonable security.&lt;/p&gt;

&lt;p&gt;They need backups and maintenance appropriate to their requirements.&lt;/p&gt;

&lt;p&gt;They need enough capacity for their real traffic.&lt;/p&gt;

&lt;p&gt;They need an operator who understands where they are hosted and how to recover them.&lt;/p&gt;

&lt;p&gt;A massive catalog of managed services does not automatically improve any of those things.&lt;/p&gt;

&lt;p&gt;Sometimes it provides useful solutions.&lt;/p&gt;

&lt;p&gt;Sometimes it provides tempting solutions to problems the project never had.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing less is still an engineering decision
&lt;/h2&gt;

&lt;p&gt;Using shared hosting is not refusing to make an infrastructure decision.&lt;/p&gt;

&lt;p&gt;It is making one.&lt;/p&gt;

&lt;p&gt;Using a VPS is not failing to adopt cloud-native architecture.&lt;/p&gt;

&lt;p&gt;It is deciding that the project needs a virtual server.&lt;/p&gt;

&lt;p&gt;Using a dedicated server is not being trapped in the past.&lt;/p&gt;

&lt;p&gt;It is choosing dedicated resources when the requirements justify them.&lt;/p&gt;

&lt;p&gt;Apache does not stop working because it lacks a venture-backed origin story.&lt;/p&gt;

&lt;p&gt;Control panels do not become useless because somebody prefers managing everything through configuration repositories.&lt;/p&gt;

&lt;p&gt;Traditional hosting is not obsolete because the cloud industry has better marketing.&lt;/p&gt;

&lt;p&gt;These tools and infrastructure models still exist because they continue to solve real problems.&lt;/p&gt;

&lt;p&gt;The useful question is not whether a stack looks modern.&lt;/p&gt;

&lt;p&gt;The useful questions are much less exciting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it meet the project’s requirements?&lt;/li&gt;
&lt;li&gt;Is it reliable enough for the actual use case?&lt;/li&gt;
&lt;li&gt;Can the people responsible for it understand and maintain it?&lt;/li&gt;
&lt;li&gt;Is the cost reasonable?&lt;/li&gt;
&lt;li&gt;Can the project be moved if necessary?&lt;/li&gt;
&lt;li&gt;What external services does it depend on?&lt;/li&gt;
&lt;li&gt;What happens when the provider changes its prices or policies?&lt;/li&gt;
&lt;li&gt;What happens when the provider goes down?&lt;/li&gt;
&lt;li&gt;Does each additional layer solve a real problem?&lt;/li&gt;
&lt;li&gt;Are we building for actual users or hypothetical millions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answers lead to AWS, Azure, Google Cloud, Kubernetes, or serverless infrastructure, fine.&lt;/p&gt;

&lt;p&gt;Use them.&lt;/p&gt;

&lt;p&gt;But make them win the argument first.&lt;/p&gt;

&lt;p&gt;Do not hand them the project because developer culture has decided that renting a normal server is embarrassing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The internet needs more than three landlords
&lt;/h2&gt;

&lt;p&gt;The internet is not completely centralized. No single company controls all of it, and there are still many hosting providers, network operators, data centers, independent services, and infrastructure companies.&lt;/p&gt;

&lt;p&gt;But too much critical infrastructure is moving into too few hands.&lt;/p&gt;

&lt;p&gt;That deserves more concern than it currently gets.&lt;/p&gt;

&lt;p&gt;When the same small group of companies increasingly provides compute, storage, networking, DNS, identity, content delivery, databases, AI services, and application platforms, developers become dependent on more than technology.&lt;/p&gt;

&lt;p&gt;They become dependent on pricing decisions.&lt;/p&gt;

&lt;p&gt;Policy decisions.&lt;/p&gt;

&lt;p&gt;Account decisions.&lt;/p&gt;

&lt;p&gt;Product roadmaps.&lt;/p&gt;

&lt;p&gt;Geopolitical decisions.&lt;/p&gt;

&lt;p&gt;Corporate priorities.&lt;/p&gt;

&lt;p&gt;Terms of service.&lt;/p&gt;

&lt;p&gt;The continued willingness of a giant company to provide a product under conditions the customer can accept.&lt;/p&gt;

&lt;p&gt;A diverse hosting ecosystem provides alternatives.&lt;/p&gt;

&lt;p&gt;Small hosting companies matter.&lt;/p&gt;

&lt;p&gt;Independent VPS providers matter.&lt;/p&gt;

&lt;p&gt;Dedicated server providers matter.&lt;/p&gt;

&lt;p&gt;Traditional shared hosting businesses matter.&lt;/p&gt;

&lt;p&gt;Different providers using different networks and infrastructure matter.&lt;/p&gt;

&lt;p&gt;Not every hosting company needs to become a miniature hyperscaler. In fact, I would prefer that they didn’t.&lt;/p&gt;

&lt;p&gt;The internet is healthier when developers have real choices, including simple ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  I don’t hate the cloud. I hate inevitability.
&lt;/h2&gt;

&lt;p&gt;I am not trying to recreate the internet of 2003.&lt;/p&gt;

&lt;p&gt;I do not think old technology is automatically better. I do not think new technology is automatically pointless. I do not believe every developer should manage physical servers or reject every managed service.&lt;/p&gt;

&lt;p&gt;I am not even completely independent of large technology companies, and I have no interest in pretending otherwise.&lt;/p&gt;

&lt;p&gt;I occasionally use Cloudflare because it is useful, while remaining uncomfortable with the degree of centralization it represents.&lt;/p&gt;

&lt;p&gt;What I reject is the idea that the giant cloud ecosystem is inevitable.&lt;/p&gt;

&lt;p&gt;I reject the assumption that serious infrastructure must belong to AWS, Azure, Google Cloud, or another hyperscale platform.&lt;/p&gt;

&lt;p&gt;I reject the idea that complexity is proof of engineering maturity.&lt;/p&gt;

&lt;p&gt;I reject the idea that a project should surrender portability and control before it has a reason to do so.&lt;/p&gt;

&lt;p&gt;For more than 20 years, I have used traditional shared hosting for smaller websites and VPSs or dedicated servers for larger projects, based on actual requirements.&lt;/p&gt;

&lt;p&gt;I have hosted websites, blogs, company presentation sites, and similar projects.&lt;/p&gt;

&lt;p&gt;I have never used AWS or a similar hyperscale cloud platform for my projects.&lt;/p&gt;

&lt;p&gt;That approach has saved me time and money.&lt;/p&gt;

&lt;p&gt;It will not be right for every project. It does not need to be.&lt;/p&gt;

&lt;p&gt;It only needs to prove one thing:&lt;/p&gt;

&lt;p&gt;The giant cloud is an option, not a law of nature.&lt;/p&gt;

&lt;p&gt;Sometimes the boring solution is the one you can understand, afford, maintain, and move.&lt;/p&gt;

&lt;p&gt;Sometimes a website is just a website.&lt;/p&gt;

&lt;p&gt;And sometimes the healthiest thing we can do for the internet is stop giving the same handful of companies every single piece of it.&lt;/p&gt;

&lt;p&gt;Before opening another cloud account, ask one uncomfortable question:&lt;/p&gt;

&lt;p&gt;What problem am I actually paying this giant company to solve?&lt;/p&gt;

&lt;p&gt;You may have a very good answer.&lt;/p&gt;

&lt;p&gt;You may also realize that what you really need is a server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/message/12721/" rel="noopener noreferrer"&gt;Summary of the AWS Service Event in the Northern Virginia (US-EAST-1) Region, December 7, 2021&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://azure.status.microsoft/status/history/?trackingId=VSG1-B90" rel="noopener noreferrer"&gt;Post Incident Review: Azure Networking Global WAN Issues, January 25, 2023&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW" rel="noopener noreferrer"&gt;Google Cloud Incident Report: Multiple Google Cloud Products, June 12, 2025&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.cloudflare.com/cloudflare-service-outage-june-12-2025/" rel="noopener noreferrer"&gt;Cloudflare Service Outage, June 12, 2025&lt;/a&gt; ([blog.cloudflare.com]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cloudflare.com/18-november-2025-outage/" rel="noopener noreferrer"&gt;Cloudflare Outage, November 18, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>cloud</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Firefox Is Down to 3% Worldwide: How Mozilla Turned a Browser Giant Into a Rounding Error</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Thu, 03 Sep 2026 22:31:46 +0000</pubDate>
      <link>https://dev.to/davidtimothy/firefox-is-down-to-3-worldwide-how-mozilla-turned-a-browser-giant-into-a-rounding-error-mik</link>
      <guid>https://dev.to/davidtimothy/firefox-is-down-to-3-worldwide-how-mozilla-turned-a-browser-giant-into-a-rounding-error-mik</guid>
      <description>&lt;p&gt;I used Firefox for years.&lt;/p&gt;

&lt;p&gt;Brave was installed too, but it had a clearly defined role on my computer: it was the backup browser. The browser I opened when something did not work properly, when I wanted aggressive ad blocking without touching any settings, or when I needed a Chromium-based browser for compatibility.&lt;/p&gt;

&lt;p&gt;Then, without making a conscious decision to switch, I started opening Brave more often.&lt;/p&gt;

&lt;p&gt;At some point, Brave stopped being the backup. Firefox became the backup.&lt;/p&gt;

&lt;p&gt;I did not rage-uninstall Firefox. Mozilla did not make one catastrophic decision that forced me out overnight. The switch happened gradually, almost invisibly. Brave simply solved more of my everyday problems with less effort.&lt;/p&gt;

&lt;p&gt;That is probably the most uncomfortable part of Firefox's decline.&lt;/p&gt;

&lt;p&gt;Most users did not dramatically quit. They just stopped clicking the icon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefox is not literally a statistical error, but it is getting close
&lt;/h2&gt;

&lt;p&gt;According to StatCounter's worldwide browser data for August 2026, Firefox holds about &lt;strong&gt;2.98% of the global browser market across all platforms&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On desktop, the situation looks slightly less brutal. Firefox has around &lt;strong&gt;5.31%&lt;/strong&gt;. That is still enough to matter, especially among developers, Linux users, privacy-conscious users, and open-source communities.&lt;/p&gt;

&lt;p&gt;But compare that with Firefox at its peak.&lt;/p&gt;

&lt;p&gt;Around 2009, Firefox was used by roughly one-third of desktop internet users. It was not an alternative browser for enthusiasts. It was one of the main ways people accessed the web.&lt;/p&gt;

&lt;p&gt;Firefox was the browser that proved Internet Explorer was not inevitable.&lt;/p&gt;

&lt;p&gt;Now it is fighting to remain relevant in a market where Chrome controls most browsing, Safari owns Apple's ecosystem, Edge comes preinstalled with Windows, and smaller Chromium browsers can inherit compatibility from the dominant engine.&lt;/p&gt;

&lt;p&gt;Calling Firefox a "statistical error" is obviously rhetorical. Three percent of global traffic still represents a massive number of people.&lt;/p&gt;

&lt;p&gt;But in terms of influence, developer priority, extension availability, testing budgets, and platform power, 3% is dangerously close to irrelevance.&lt;/p&gt;

&lt;p&gt;Once a browser becomes optional for developers to test, decline starts feeding itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mozilla did not lose only to Chrome
&lt;/h2&gt;

&lt;p&gt;It is easy to tell a simple story where Google arrived with Chrome, bundled it everywhere, spent billions on distribution, and crushed Firefox.&lt;/p&gt;

&lt;p&gt;That story is not wrong. It is just incomplete.&lt;/p&gt;

&lt;p&gt;Firefox faced structural disadvantages that Mozilla could never fully control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome was promoted on the world's largest search engine.&lt;/li&gt;
&lt;li&gt;Android made Chrome the default browser for billions of users.&lt;/li&gt;
&lt;li&gt;Safari owns the default position on iPhones, iPads, and Macs.&lt;/li&gt;
&lt;li&gt;Edge ships with Windows and is aggressively promoted inside the operating system.&lt;/li&gt;
&lt;li&gt;Google's web apps naturally receive first-class attention in Chromium.&lt;/li&gt;
&lt;li&gt;Many companies test websites in Chrome first and everything else later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Firefox is the only major browser in that group without an operating system, mobile platform, search monopoly, or trillion-dollar company pushing it.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;Still, Mozilla cannot blame the entire decline on defaults and Big Tech. Firefox also lost users through years of product decisions that repeatedly irritated the exact people most willing to defend it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mozilla kept redesigning Firefox while removing reasons to stay
&lt;/h2&gt;

&lt;p&gt;Firefox built its reputation on customization.&lt;/p&gt;

&lt;p&gt;It was the browser for people who wanted their browser to work their way. Toolbars could be moved. Buttons could be rearranged. Tabs could be transformed. Extensions could change almost every part of the interface.&lt;/p&gt;

&lt;p&gt;Then Mozilla spent years simplifying and redesigning that experience.&lt;/p&gt;

&lt;p&gt;Australis arrived with Firefox 29 in 2014. Mozilla presented it as a modern, streamlined, and highly customizable redesign. Many existing users saw something else: Firefox becoming visually closer to Chrome while removing parts of the interface they had customized for years.&lt;/p&gt;

&lt;p&gt;The same pattern repeated with later redesigns.&lt;/p&gt;

&lt;p&gt;The 2021 Proton redesign introduced floating tabs, larger interface elements, simplified menus, and reduced iconography. Mozilla described it as calmer and cleaner. Power users saw more wasted space and fewer visual cues.&lt;/p&gt;

&lt;p&gt;Compact mode was removed from the normal customization interface in Firefox 89. It remained available through an unsupported &lt;code&gt;about:config&lt;/code&gt; workaround, which is a very Firefox way of handling a feature loyal users wanted:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove it from the interface.&lt;/li&gt;
&lt;li&gt;Leave it half-alive behind an advanced preference.&lt;/li&gt;
&lt;li&gt;Mark it unsupported.&lt;/li&gt;
&lt;li&gt;Make users feel unreasonable for asking where it went.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these redesigns destroyed Firefox by themselves. The problem was cumulative.&lt;/p&gt;

&lt;p&gt;Firefox kept telling users it was the customizable browser while gradually narrowing the supported customization options.&lt;/p&gt;

&lt;h2&gt;
  
  
  The extension apocalypse broke Firefox's original promise
&lt;/h2&gt;

&lt;p&gt;The transition to Firefox 57 and WebExtensions was technically understandable.&lt;/p&gt;

&lt;p&gt;The old extension architecture was extremely powerful, but that power came with performance, security, and maintenance problems. Legacy extensions could reach deep into Firefox internals, making browser changes harder and updates riskier.&lt;/p&gt;

&lt;p&gt;Mozilla needed a safer and more sustainable extension system.&lt;/p&gt;

&lt;p&gt;But the way the transition happened was devastating for part of the user base.&lt;/p&gt;

&lt;p&gt;Starting with Firefox 57 in November 2017, legacy extensions stopped loading. Extensions built using XUL, the Add-ons SDK, and other older technologies became incompatible. Some were ported to WebExtensions, some returned with reduced functionality, and many simply disappeared.&lt;/p&gt;

&lt;p&gt;For regular users, the technical justification did not change the result.&lt;/p&gt;

&lt;p&gt;They updated Firefox and their workflow broke.&lt;/p&gt;

&lt;p&gt;The browser that had built its identity around extensions suddenly told users that their extensions were no longer supported. In some cases, the available replacement could not reproduce the same functionality because the necessary APIs did not exist.&lt;/p&gt;

&lt;p&gt;Mozilla gained a cleaner technical foundation with Firefox Quantum, and Quantum itself was a major performance improvement. But Mozilla also burned a lot of goodwill.&lt;/p&gt;

&lt;p&gt;The message users received was clear: even Firefox's biggest differentiator could disappear during an update.&lt;/p&gt;

&lt;p&gt;Then came the 2019 certificate incident.&lt;/p&gt;

&lt;p&gt;An expired certificate caused Firefox to disable existing extensions and block new installations. Mozilla had to distribute fixes, including an initial fix through its Studies system. For a browser whose most committed users depended heavily on extensions, this was an embarrassing operational failure.&lt;/p&gt;

&lt;p&gt;Again, no single incident explains years of decline. But loyal users remember when the browser breaks the exact feature that made them loyal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mozilla abused trust with experiments that never should have shipped
&lt;/h2&gt;

&lt;p&gt;The 2017 Looking Glass incident remains one of Mozilla's strangest decisions.&lt;/p&gt;

&lt;p&gt;Mozilla remotely installed a Firefox add-on connected to the TV show &lt;em&gt;Mr. Robot&lt;/em&gt;. The add-on was initially disabled and did not collect user data, but that was not the point.&lt;/p&gt;

&lt;p&gt;A browser associated with privacy and user control silently installed a mysterious extension with a deliberately cryptic description.&lt;/p&gt;

&lt;p&gt;Mozilla later apologized and admitted that the deployment violated its own advice about recognizing malware.&lt;/p&gt;

&lt;p&gt;That incident revealed a larger problem. Mozilla had built remote experimentation systems that could install or change browser components, then used that infrastructure for a marketing stunt.&lt;/p&gt;

&lt;p&gt;The technical risk may have been limited. The damage to trust was not.&lt;/p&gt;

&lt;p&gt;In the same year, Mozilla tested Cliqz recommendations with a small percentage of new Firefox users in Germany. That build sent browsing activity, including visited URLs, to Cliqz servers after attempting to remove sensitive information.&lt;/p&gt;

&lt;p&gt;Mozilla documented the experiment and allowed users to disable it. Cliqz was positioned as a privacy-focused company. Even so, shipping URL collection by default to a subset of Firefox users was an astonishing decision for a browser selling itself on privacy.&lt;/p&gt;

&lt;p&gt;This became a recurring Mozilla problem: the company would design something it considered privacy-preserving, technically defensible, and transparent, while failing to understand how it looked to users.&lt;/p&gt;

&lt;p&gt;Users were not evaluating cryptographic protocols or internal privacy reviews.&lt;/p&gt;

&lt;p&gt;They were asking a simpler question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why is my privacy browser experimenting on me?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Firefox slowly turned its interface into ad inventory
&lt;/h2&gt;

&lt;p&gt;Mozilla needs revenue. Browser development is extremely expensive, and users generally refuse to pay for browsers.&lt;/p&gt;

&lt;p&gt;I understand the business problem.&lt;/p&gt;

&lt;p&gt;What I do not understand is why Mozilla repeatedly acts surprised when Firefox users react badly to advertising inside the browser.&lt;/p&gt;

&lt;p&gt;Firefox has included or experimented with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sponsored shortcuts on the home and New Tab pages&lt;/li&gt;
&lt;li&gt;Sponsored stories and content recommendations&lt;/li&gt;
&lt;li&gt;Sponsored suggestions in the address bar&lt;/li&gt;
&lt;li&gt;Impression and click measurement&lt;/li&gt;
&lt;li&gt;Contextual recommendations from commercial partners&lt;/li&gt;
&lt;li&gt;Advertising and attribution experiments&lt;/li&gt;
&lt;li&gt;Content personalization based on local interaction data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mozilla emphasizes that these systems use aggregation, on-device processing, Oblivious HTTP, differential privacy, and other privacy-preserving techniques.&lt;/p&gt;

&lt;p&gt;That is better than traditional behavioral advertising.&lt;/p&gt;

&lt;p&gt;It still does not make the product direction appealing.&lt;/p&gt;

&lt;p&gt;When I open a browser, I do not want "recommended content." I do not want sponsored shortcuts. I do not want the address bar becoming another surface waiting to monetize intent.&lt;/p&gt;

&lt;p&gt;I want an empty, fast, predictable browser window.&lt;/p&gt;

&lt;p&gt;Firefox users are especially sensitive to this because Mozilla has spent decades presenting Firefox as the alternative to surveillance-driven Big Tech. Once ads and sponsored suggestions appear in that product, the distinction becomes harder to explain.&lt;/p&gt;

&lt;p&gt;The Privacy-Preserving Attribution prototype in Firefox 128 is another example. Mozilla later clarified that the experimental feature was never activated and was eventually removed. The technology was intended to give advertisers aggregated measurement without cross-site tracking.&lt;/p&gt;

&lt;p&gt;Technically, that is a legitimate privacy research goal.&lt;/p&gt;

&lt;p&gt;Strategically, putting advertising measurement technology anywhere near default Firefox settings was guaranteed to create suspicion. Mozilla may have had good intentions, but it once again underestimated its own audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first Firefox Terms of Use were a completely avoidable disaster
&lt;/h2&gt;

&lt;p&gt;In February 2025, Mozilla introduced formal Terms of Use for Firefox.&lt;/p&gt;

&lt;p&gt;The initial language gave Mozilla a nonexclusive, royalty-free, worldwide license related to content entered through Firefox. Mozilla said the license was necessary to operate requested browser functionality and did not transfer ownership of user content.&lt;/p&gt;

&lt;p&gt;Users saw broad legal language claiming rights over content entered into a web browser.&lt;/p&gt;

&lt;p&gt;Mozilla revised the wording two days later after backlash.&lt;/p&gt;

&lt;p&gt;The updated language more clearly limited the license to operating Firefox and doing what the user requested. Mozilla also stressed that users continued to own their data.&lt;/p&gt;

&lt;p&gt;Maybe the lawyers were technically correct from the start. That does not make the rollout good.&lt;/p&gt;

&lt;p&gt;Firefox is not a social network where users upload posts to Mozilla's servers. It is a web browser. Introducing broad content-license language into the Terms of Use for a browser was always going to trigger alarm.&lt;/p&gt;

&lt;p&gt;Mozilla should understand trust better than almost any other technology organization.&lt;/p&gt;

&lt;p&gt;Instead, it keeps learning the same lesson in public.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mozilla became distracted by everything except making Firefox impossible to ignore
&lt;/h2&gt;

&lt;p&gt;Over the years, Mozilla invested in a long list of products and experiments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Firefox OS&lt;/li&gt;
&lt;li&gt;Pocket&lt;/li&gt;
&lt;li&gt;Fakespot&lt;/li&gt;
&lt;li&gt;Mozilla VPN&lt;/li&gt;
&lt;li&gt;Firefox Relay&lt;/li&gt;
&lt;li&gt;Mozilla Monitor&lt;/li&gt;
&lt;li&gt;Hubs&lt;/li&gt;
&lt;li&gt;Mozilla Social and Mastodon&lt;/li&gt;
&lt;li&gt;Mozilla.ai&lt;/li&gt;
&lt;li&gt;Various advertising initiatives&lt;/li&gt;
&lt;li&gt;Venture investments&lt;/li&gt;
&lt;li&gt;AI browser experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diversification is not inherently bad. Mozilla's dependence on search revenue is dangerous, so building additional businesses makes sense.&lt;/p&gt;

&lt;p&gt;Mozilla's own strategy documents say search still accounts for around 85% of revenue. That creates a ridiculous dependency where the organization building the main alternative to Chromium receives most of its money from search partnerships connected to the dominant browser company.&lt;/p&gt;

&lt;p&gt;Mozilla has to diversify.&lt;/p&gt;

&lt;p&gt;The problem is its execution.&lt;/p&gt;

&lt;p&gt;Pocket was acquired, integrated into Firefox, promoted on the New Tab page, and eventually shut down in July 2025.&lt;/p&gt;

&lt;p&gt;Fakespot was acquired in 2023. Its Firefox Review Checker was shut down in June 2025, and the wider Fakespot service closed in July.&lt;/p&gt;

&lt;p&gt;Mozilla Social and Hubs were scaled back or exited during restructuring.&lt;/p&gt;

&lt;p&gt;Products arrive with ambitious mission statements, occupy engineering and management attention, get integrated into the Firefox story, and then disappear.&lt;/p&gt;

&lt;p&gt;Meanwhile, basic browser features that users had requested for years arrived painfully late.&lt;/p&gt;

&lt;p&gt;Mozilla's own strategy document is unusually blunt. It describes Firefox as widely viewed as outdated, acknowledges a mixed and slow execution record, and admits competitors are moving faster.&lt;/p&gt;

&lt;p&gt;I could not summarize the problem better than Mozilla already has.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefox spent years arriving late to basic browser features
&lt;/h2&gt;

&lt;p&gt;Firefox has improved significantly since 2024, but many improvements should have happened years earlier.&lt;/p&gt;

&lt;p&gt;Vertical tabs officially arrived in Firefox 136 in March 2025.&lt;/p&gt;

&lt;p&gt;Native tab groups followed in Firefox 138 in April 2025. They had been the most requested feature on Mozilla Connect.&lt;/p&gt;

&lt;p&gt;A modern, user-friendly profile manager began rolling out in October 2025. Firefox technically had profiles long before that, but they were hidden behind tools such as &lt;code&gt;about:profiles&lt;/code&gt; and the external Profile Manager instead of being treated as a normal user feature.&lt;/p&gt;

&lt;p&gt;Desktop web apps finally appeared on Windows starting with Firefox 143. Support remains platform-limited, and Microsoft Store installations required an even newer version.&lt;/p&gt;

&lt;p&gt;Firefox for Android only started rolling out tab groups in 2026, with iOS support planned for later.&lt;/p&gt;

&lt;p&gt;These are not experimental features for a tiny niche. Profiles, vertical tabs, tab groups, and installable web apps are basic browser workflow features.&lt;/p&gt;

&lt;p&gt;By the time Firefox ships something, the feature often feels like maintenance rather than innovation.&lt;/p&gt;

&lt;p&gt;Firefox users waited years for tab groups, then Mozilla immediately started talking about AI-assisted tab grouping.&lt;/p&gt;

&lt;p&gt;That captures Mozilla's priority problem perfectly.&lt;/p&gt;

&lt;p&gt;The company is eager to participate in the next industry trend while still catching up on the previous one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefox can be fast, but compatibility beats benchmarks
&lt;/h2&gt;

&lt;p&gt;I do not buy the argument that Firefox is simply slow.&lt;/p&gt;

&lt;p&gt;Modern Firefox can be fast. Gecko is a serious browser engine, and Mozilla has delivered major performance improvements over the years. Firefox can perform extremely well depending on the website, operating system, extensions, and workload.&lt;/p&gt;

&lt;p&gt;The bigger problem is consistency.&lt;/p&gt;

&lt;p&gt;Brave uses Chromium. That means it benefits from the engine most websites are already built and tested around.&lt;/p&gt;

&lt;p&gt;A developer may care that a bug belongs to the website rather than Firefox. A regular user does not.&lt;/p&gt;

&lt;p&gt;If a website works in Brave and acts strangely in Firefox, the user opens Brave.&lt;/p&gt;

&lt;p&gt;If a video-conferencing app recommends Chrome, the user opens Brave.&lt;/p&gt;

&lt;p&gt;If an extension is available for Chromium but not Firefox, the user opens Brave.&lt;/p&gt;

&lt;p&gt;If an enterprise tool is primarily tested against Chrome and Edge, the user opens Brave.&lt;/p&gt;

&lt;p&gt;Eventually, the user stops going back.&lt;/p&gt;

&lt;p&gt;This creates a nasty feedback loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Firefox loses market share.&lt;/li&gt;
&lt;li&gt;Developers spend less time testing Firefox.&lt;/li&gt;
&lt;li&gt;More Firefox-specific bugs reach production.&lt;/li&gt;
&lt;li&gt;Users encounter more compatibility friction.&lt;/li&gt;
&lt;li&gt;Those users switch to Chromium.&lt;/li&gt;
&lt;li&gt;Firefox loses more market share.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mozilla cannot solve that problem with branding campaigns about independence. Firefox needs enough users to make ignoring Gecko expensive.&lt;/p&gt;

&lt;p&gt;At around 3% global share, ignoring Firefox is becoming a rational business decision for some development teams.&lt;/p&gt;

&lt;p&gt;That is terrible for the open web, but it is the predictable result of the numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brave won me over by requiring less work
&lt;/h2&gt;

&lt;p&gt;Brave is not perfect. I will get to that.&lt;/p&gt;

&lt;p&gt;But its core pitch is easy to understand.&lt;/p&gt;

&lt;p&gt;Install Brave and you immediately get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in ad and tracker blocking&lt;/li&gt;
&lt;li&gt;Fingerprinting protection&lt;/li&gt;
&lt;li&gt;Third-party cookie protection&lt;/li&gt;
&lt;li&gt;Chromium website compatibility&lt;/li&gt;
&lt;li&gt;Access to the Chromium extension ecosystem&lt;/li&gt;
&lt;li&gt;Vertical tabs&lt;/li&gt;
&lt;li&gt;Tab groups&lt;/li&gt;
&lt;li&gt;Profiles&lt;/li&gt;
&lt;li&gt;Installable web apps&lt;/li&gt;
&lt;li&gt;Cross-device sync&lt;/li&gt;
&lt;li&gt;Per-site privacy controls&lt;/li&gt;
&lt;li&gt;A familiar interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Firefox has excellent tracking protection, Total Cookie Protection, Multi-Account Containers, and unusually strong extension support. It remains one of the best browsers for running uBlock Origin without Chromium's Manifest V3 limitations.&lt;/p&gt;

&lt;p&gt;But Firefox's default setup does not block regular ads the way Brave Shields does.&lt;/p&gt;

&lt;p&gt;To get something closer to Brave's out-of-the-box experience, a Firefox user usually installs uBlock Origin, possibly adds more privacy extensions, changes Enhanced Tracking Protection settings, disables sponsored content, reviews telemetry options, and modifies the home page.&lt;/p&gt;

&lt;p&gt;A technical user can do that in a few minutes.&lt;/p&gt;

&lt;p&gt;Most users will not.&lt;/p&gt;

&lt;p&gt;Brave gives them a large portion of that experience immediately.&lt;/p&gt;

&lt;p&gt;That convenience matters more than browser enthusiasts like to admit.&lt;/p&gt;

&lt;p&gt;My move from Firefox to Brave was not a carefully planned migration. Brave was already installed as the Chromium-compatible backup. Over time, the backup browser became easier to reach for, and Firefox became the browser I opened only when I specifically wanted Firefox.&lt;/p&gt;

&lt;p&gt;That is how products lose users.&lt;/p&gt;

&lt;p&gt;Not with one explosion, but through thousands of tiny moments where the alternative is easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brave has its own baggage
&lt;/h2&gt;

&lt;p&gt;Switching to Brave is not a morally pure decision.&lt;/p&gt;

&lt;p&gt;Brave is based on Chromium, so using it still contributes to Chromium's engine dominance. Brave removes and modifies plenty of Google functionality, but it does not provide an independent browser engine.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;If Gecko disappears, Brave does not save browser-engine diversity. It becomes another Chromium browser competing through interface features, privacy defaults, and services.&lt;/p&gt;

&lt;p&gt;Brave also ships plenty of things I can understand people wanting to disable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brave Rewards&lt;/li&gt;
&lt;li&gt;Cryptocurrency features&lt;/li&gt;
&lt;li&gt;Wallet integration&lt;/li&gt;
&lt;li&gt;Sponsored background images&lt;/li&gt;
&lt;li&gt;Brave News&lt;/li&gt;
&lt;li&gt;Brave Leo&lt;/li&gt;
&lt;li&gt;VPN promotions&lt;/li&gt;
&lt;li&gt;Web3-related features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference, at least for me, is that Brave's core browsing proposition remains obvious underneath that clutter.&lt;/p&gt;

&lt;p&gt;It blocks junk, works with Chromium-focused websites, and generally requires very little setup.&lt;/p&gt;

&lt;p&gt;Firefox has a stronger philosophical reason to exist, but Brave often presents a clearer practical reason to use it.&lt;/p&gt;

&lt;p&gt;That is a serious problem for Mozilla.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefox still matters more than its market share suggests
&lt;/h2&gt;

&lt;p&gt;I am critical of Firefox because I do not want it to disappear.&lt;/p&gt;

&lt;p&gt;Firefox remains one of the only meaningful defenses against a web controlled almost entirely by Chromium and WebKit.&lt;/p&gt;

&lt;p&gt;Gecko gives web standards another independent implementation.&lt;/p&gt;

&lt;p&gt;Firefox also has genuinely excellent features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-Account Containers&lt;/li&gt;
&lt;li&gt;Total Cookie Protection&lt;/li&gt;
&lt;li&gt;Strong uBlock Origin support&lt;/li&gt;
&lt;li&gt;Extensive &lt;code&gt;about:config&lt;/code&gt; controls&lt;/li&gt;
&lt;li&gt;Good developer tools&lt;/li&gt;
&lt;li&gt;Reader View&lt;/li&gt;
&lt;li&gt;Local translation&lt;/li&gt;
&lt;li&gt;Strong privacy protections&lt;/li&gt;
&lt;li&gt;Open-source development&lt;/li&gt;
&lt;li&gt;Native Linux support&lt;/li&gt;
&lt;li&gt;A community that still cares deeply about browser independence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Firefox is not a bad browser.&lt;/p&gt;

&lt;p&gt;That is what makes the decline so frustrating.&lt;/p&gt;

&lt;p&gt;Mozilla did not spend 15 years building a useless product. It spent 15 years allowing a valuable product to become increasingly difficult to recommend to normal users.&lt;/p&gt;

&lt;p&gt;"Use Firefox to protect the open web" is an important argument.&lt;/p&gt;

&lt;p&gt;It is not a complete product strategy.&lt;/p&gt;

&lt;p&gt;People install browsers to solve their own problems, not to fix browser-engine economics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can Firefox recover?
&lt;/h2&gt;

&lt;p&gt;Firefox probably will not return to its old market share. The browser market is too tied to operating systems, mobile platforms, defaults, and corporate ecosystems.&lt;/p&gt;

&lt;p&gt;But recovery does not require beating Chrome.&lt;/p&gt;

&lt;p&gt;Mozilla first needs to stop treating existing users as a captive audience.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No surprise experiments&lt;/li&gt;
&lt;li&gt;No vague legal language&lt;/li&gt;
&lt;li&gt;No advertising systems enabled without clear consent&lt;/li&gt;
&lt;li&gt;No unnecessary removal of customization options&lt;/li&gt;
&lt;li&gt;No redesigns that prioritize visual trends over information density&lt;/li&gt;
&lt;li&gt;No abandoning products shortly after forcing them into Firefox&lt;/li&gt;
&lt;li&gt;No pretending users asked for AI when they asked for basic browser features&lt;/li&gt;
&lt;li&gt;Faster delivery of features available elsewhere for years&lt;/li&gt;
&lt;li&gt;Better communication before breaking extensions or workflows&lt;/li&gt;
&lt;li&gt;More investment in compatibility, performance, and mobile&lt;/li&gt;
&lt;li&gt;A default experience that demonstrates Firefox's privacy advantage immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Firefox should open for the first time and make its value obvious.&lt;/p&gt;

&lt;p&gt;Not after installing four extensions.&lt;/p&gt;

&lt;p&gt;Not after visiting &lt;code&gt;about:config&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Not after disabling sponsored content.&lt;/p&gt;

&lt;p&gt;Not after reading a Mozilla blog post explaining why an advertising feature is technically privacy-preserving.&lt;/p&gt;

&lt;p&gt;Immediately.&lt;/p&gt;

&lt;p&gt;Mozilla does not need another abstract mission statement. It needs a browser people miss when they use something else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefox did not die. It faded.
&lt;/h2&gt;

&lt;p&gt;Firefox's decline was not caused by one CEO, one redesign, one extension change, or one competitor.&lt;/p&gt;

&lt;p&gt;Google had enormous distribution advantages. Mobile defaults changed the market. Websites standardized around Chromium. Mozilla needed revenue and had limited resources compared with its competitors.&lt;/p&gt;

&lt;p&gt;All of that is true.&lt;/p&gt;

&lt;p&gt;It is also true that Mozilla repeatedly weakened trust, removed functionality, chased side projects, shipped unwanted experiments, and arrived years late with features users were already using elsewhere.&lt;/p&gt;

&lt;p&gt;Firefox went from a browser people selected because it was better to a browser people select because they believe the web needs it.&lt;/p&gt;

&lt;p&gt;That is not sustainable.&lt;/p&gt;

&lt;p&gt;I still have Firefox installed, just as I once kept Brave installed as a backup.&lt;/p&gt;

&lt;p&gt;The roles have reversed.&lt;/p&gt;

&lt;p&gt;And if Mozilla wants to understand why Firefox has fallen to roughly 3% of worldwide browser usage, it should pay attention to that kind of quiet switch.&lt;/p&gt;

&lt;p&gt;The user who angrily uninstalls your product may eventually return.&lt;/p&gt;

&lt;p&gt;The user who gradually forgets to open it probably will not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gs.statcounter.com/browser-market-share" rel="noopener noreferrer"&gt;StatCounter Global Browser Market Share, August 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gs.statcounter.com/browser-market-share/desktop/worldwide/" rel="noopener noreferrer"&gt;StatCounter Desktop Browser Market Share&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/wp-content/blogs.dir/278/files/2025/11/Mozilla-Summary-Portfolio-Strategy.pdf" rel="noopener noreferrer"&gt;Mozilla Summary Portfolio Strategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mozilla.org/en-US/foundation/annualreport/2024/article/financing-an-open-internet-mozillas-path-forward/" rel="noopener noreferrer"&gt;Mozilla's Financial Model and Path Forward&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/ux/2014/04/the-new-face-of-firefox/" rel="noopener noreferrer"&gt;Mozilla on the Australis Redesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/new-firefox-coming-june-1/" rel="noopener noreferrer"&gt;Mozilla on the 2021 Firefox Redesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox" rel="noopener noreferrer"&gt;Firefox Compact Mode Workaround&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/addons/2017/09/28/webextensions-in-firefox-57/" rel="noopener noreferrer"&gt;WebExtensions in Firefox 57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/what-we-do-when-things-go-wrong/" rel="noopener noreferrer"&gt;Mozilla's Report on the 2019 Add-on Failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/update-looking-glass-add/" rel="noopener noreferrer"&gt;Mozilla's Looking Glass Apology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/press-uk/2017/10/06/testing-cliqz-in-firefox/" rel="noopener noreferrer"&gt;Mozilla's Cliqz Experiment Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.mozilla.org/en-US/kb/sponsor-privacy" rel="noopener noreferrer"&gt;Firefox Home and New Tab Sponsorship Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.mozilla.org/en-US/kb/firefox-suggest" rel="noopener noreferrer"&gt;Firefox Suggest Settings and Sponsored Suggestions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.mozilla.org/en-US/kb/privacy-preserving-attribution" rel="noopener noreferrer"&gt;Firefox Privacy-Preserving Attribution Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/firefox-terms-of-use/" rel="noopener noreferrer"&gt;Mozilla's Original Firefox Terms of Use Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/update-on-terms-of-use/" rel="noopener noreferrer"&gt;Mozilla's Update Following the Terms of Use Backlash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/mozilla/building-whats-next/" rel="noopener noreferrer"&gt;Mozilla's Pocket and Fakespot Shutdown Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/mozilla/changing-world-changing-mozilla/" rel="noopener noreferrer"&gt;Mozilla's 2020 Restructuring and Layoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://servo.org/blog/2020/11/17/servo-home/" rel="noopener noreferrer"&gt;Servo's Move Away From Mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/vertical-tabs-and-the-firefox-community/" rel="noopener noreferrer"&gt;Firefox Vertical Tabs Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/firefox-tab-groups/" rel="noopener noreferrer"&gt;Firefox Tab Groups Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/profile-management/" rel="noopener noreferrer"&gt;Firefox Profile Management Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.mozilla.org/en-US/kb/web-apps-firefox-windows" rel="noopener noreferrer"&gt;Firefox Web Apps for Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mozilla.org/en/firefox/firefox-roadmap-152/" rel="noopener noreferrer"&gt;Firefox Mobile Roadmap for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/shields/" rel="noopener noreferrer"&gt;Brave Shields Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/features/" rel="noopener noreferrer"&gt;Brave Browser Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>firefox</category>
      <category>browser</category>
    </item>
    <item>
      <title>GrapheneOS vs Stock Android: Privacy, Security and Control</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Tue, 01 Sep 2026 00:09:50 +0000</pubDate>
      <link>https://dev.to/davidtimothy/grapheneos-vs-stock-android-privacy-security-and-control-5hka</link>
      <guid>https://dev.to/davidtimothy/grapheneos-vs-stock-android-privacy-security-and-control-5hka</guid>
      <description>&lt;p&gt;Stock Android feels fine. Until you realize how much you are actually giving up.&lt;/p&gt;

&lt;p&gt;I have spent a lot of time digging into mobile operating systems, what they do in the background, what permissions they really enforce, and how much control you actually have as a user. And the more I looked at Stock OS vs GrapheneOS, the more obvious it became that Stock OS is just not built for the user. It is built for Google, for carriers, and for data brokers. GrapheneOS is built for you.&lt;/p&gt;

&lt;p&gt;This is not just another privacy nerd rant. This is a real breakdown of why GrapheneOS wins in basically every category that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Mean By "Stock OS"
&lt;/h2&gt;

&lt;p&gt;When I say Stock OS, I mean the Android that comes preinstalled on your Pixel, Samsung, OnePlus, whatever. Even "clean" Stock Android on a Pixel is still Google's Android.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Play Services with privileged, unrestricted system access&lt;/li&gt;
&lt;li&gt;Dozens of preinstalled Google apps you cannot fully remove&lt;/li&gt;
&lt;li&gt;Default telemetry and tracking that you can only partially opt-out of&lt;/li&gt;
&lt;li&gt;Carrier and manufacturer bloat if you are not on a Pixel&lt;/li&gt;
&lt;li&gt;Security that is good, but intentionally limited to not break Google's business model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It works. It is smooth. But it was never designed to put you in control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GrapheneOS Actually Is
&lt;/h2&gt;

&lt;p&gt;GrapheneOS is not some sketchy custom ROM you flash with a random tool from XDA. It is a hardened, open source Android fork built specifically for Pixels. It is Android, but rebuilt with security and privacy as the core features, not afterthoughts.&lt;/p&gt;

&lt;p&gt;A few things to get straight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is not LineageOS. LineageOS is about customization and keeping old phones alive. GrapheneOS is about security.&lt;/li&gt;
&lt;li&gt;It does not break your apps. You can still run Google Play Services, but sandboxed like a normal app, with no special privileges.&lt;/li&gt;
&lt;li&gt;It is not just for journalists or paranoid people. It is for anyone who wants a phone that does what they tell it to do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is still Android. Your apps, your workflow, your UI - 95% the same. What changes is what happens under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stock OS vs GrapheneOS: Head to Head
&lt;/h2&gt;

&lt;p&gt;Let's break this down category by category.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy: No Contest
&lt;/h3&gt;

&lt;p&gt;This is where Stock OS completely falls apart.&lt;/p&gt;

&lt;p&gt;On Stock OS, Google Play Services runs as a privileged system app. It has access to your location, your sensors, your phone identifiers, and it can run in the background whenever it wants. You cannot revoke its network access. You cannot revoke its sensor access. Turning off "Location History" in your Google account does not stop low level collection.&lt;/p&gt;

&lt;p&gt;On GrapheneOS, everything is permission based and actually enforced.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network permission toggle:&lt;/strong&gt; You can deny any app network access completely. Stock Android has no such feature. On GrapheneOS you can have an offline calculator or photo editor that literally cannot phone home.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensors permission:&lt;/strong&gt; GrapheneOS lets you deny sensor access to apps. No more apps reading your accelerometer and gyroscope to fingerprint you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Scopes and Storage Scopes:&lt;/strong&gt; Instead of giving an app access to all your contacts or all your files, you give it access to only what it needs. Stock OS is all or nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No advertising ID by default:&lt;/strong&gt; GrapheneOS does not expose a resettable advertising ID to apps. Stock OS does, even if you "reset" it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the difference between privacy theater and actual privacy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# On Stock OS, you can't do this without root&lt;/span&gt;
&lt;span class="c"&gt;# On GrapheneOS, this is a simple toggle in App Info -&amp;gt; Permissions&lt;/span&gt;
&lt;span class="c"&gt;# But you can also manage it via ADB if you want to script it:&lt;/span&gt;

adb shell cmd appops &lt;span class="nb"&gt;set &lt;/span&gt;com.example.shadyapp INTERNET deny
adb shell cmd appops &lt;span class="nb"&gt;set &lt;/span&gt;com.example.shadyapp ACCESS_RESTRICTED &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Stock, an app either gets internet or it does not get installed. On GrapheneOS, you decide.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Security: Stock Is Good, GrapheneOS Is on Another Level
&lt;/h3&gt;

&lt;p&gt;People think Pixel Stock OS is secure, and it is, compared to Samsung or Xiaomi. But GrapheneOS takes the Pixel's already great hardware security and pushes it way further.&lt;/p&gt;

&lt;p&gt;Here is what GrapheneOS adds that Stock just does not have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardened kernel and hardened malloc:&lt;/strong&gt; GrapheneOS uses its own hardened memory allocator that catches exploitation attempts that would succeed on Stock OS. This is huge for preventing zero-click exploits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardened WebView and browser:&lt;/strong&gt; Vanadium, the default browser, is Chromium but significantly hardened. No Google sync bloat, better exploit mitigations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exploit mitigations:&lt;/strong&gt; Things like stricter SELinux policies, control flow integrity, and disabling of insecure legacy features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verified Boot with custom keys:&lt;/strong&gt; Unlike most custom ROMs that break Verified Boot, GrapheneOS keeps it fully intact and re-locks the bootloader with its own keys. You get the same tamper protection as Stock. Most other ROMs leave your phone wide open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-reboot:&lt;/strong&gt; GrapheneOS can automatically reboot after a period of inactivity, putting the device back into Before First Unlock state where data is fully encrypted and not accessible. This is a lifesaver against physical forensic tools. Stock does not have this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PIN scrambling and duress password:&lt;/strong&gt; You can set a secondary password that wipes the device if you are forced to unlock it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stock OS was built to be secure enough to not get sued. GrapheneOS was built to resist real attackers.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Google Services: The Smart Way vs The Forced Way
&lt;/h3&gt;

&lt;p&gt;This is the part that finally convinced me. I am not anti-Google. I use Gmail and Maps. I just do not want Google baked into my OS kernel.&lt;/p&gt;

&lt;p&gt;On Stock OS, Google Play Services is a system-level god. You cannot uninstall it, you cannot sandbox it, you cannot limit it.&lt;/p&gt;

&lt;p&gt;On GrapheneOS, you install Sandboxed Google Play from their Apps repository if you want it. And it runs like any other app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has no privileged access&lt;/li&gt;
&lt;li&gt;You can deny it location, sensors, contacts, network, whatever&lt;/li&gt;
&lt;li&gt;You can put it in a separate user profile and keep your main profile completely Google-free&lt;/li&gt;
&lt;li&gt;Apps that depend on Google Play Services still work, but they talk to the sandboxed version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is genius. You get compatibility without compromise. I keep banking apps and push notifications working through sandboxed Play in a secondary profile, while my main profile has no Google code at all.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# GrapheneOS user profiles are isolated like separate phones&lt;/span&gt;
&lt;span class="c"&gt;# You can create a "Google" profile just for Play Services:&lt;/span&gt;

&lt;span class="c"&gt;# Settings -&amp;gt; System -&amp;gt; Multiple users -&amp;gt; Add user&lt;/span&gt;
&lt;span class="c"&gt;# Install Sandboxed Google Play only in that profile&lt;/span&gt;
&lt;span class="c"&gt;# Your main Owner profile stays clean&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Stock, you cannot do this. Google is everywhere, all the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Updates and Longevity
&lt;/h3&gt;

&lt;p&gt;Stock Pixels get 7 years of updates now, which is great. But GrapheneOS is often faster.&lt;/p&gt;

&lt;p&gt;GrapheneOS pushes security patches and hardened updates sometimes even before Google pushes them to Stock, because they do not need to wait for carrier approval. Updates are seamless in the background and can be installed without trusting Google's servers.&lt;/p&gt;

&lt;p&gt;And when Google drops support for an older Pixel, GrapheneOS often extends its life with continued security updates. You are not abandoned just because Google moved on to the next phone.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Bloat, Control, and Ownership
&lt;/h3&gt;

&lt;p&gt;Stock OS comes with 20+ Google apps preinstalled. Some can be disabled, almost none can be fully removed. They run background services, they update themselves, they collect analytics.&lt;/p&gt;

&lt;p&gt;GrapheneOS comes with almost nothing. No bloat. No Google apps unless you choose to install them. What you get is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vanadium browser&lt;/li&gt;
&lt;li&gt;Auditor app for hardware attestation&lt;/li&gt;
&lt;li&gt;Secure Camera and Gallery&lt;/li&gt;
&lt;li&gt;AOSP apps that are minimal and permission-clean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It feels like you actually own the phone. Because you do.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. The "But Does It Break My Apps" Myth
&lt;/h3&gt;

&lt;p&gt;This is the biggest lie about GrapheneOS. People think nothing will work.&lt;/p&gt;

&lt;p&gt;Reality: 99% of apps work flawlessly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Banking apps? Work fine, even with sandboxed Play. In fact, GrapheneOS often passes Play Integrity better than rooted Stock phones.&lt;/li&gt;
&lt;li&gt;Push notifications? Work via sandboxed Play or via the app's own push.&lt;/li&gt;
&lt;li&gt;Google Maps, YouTube, Gmail? Install them sandboxed and they work exactly like Stock, but without system privileges.&lt;/li&gt;
&lt;li&gt;SafetyNet / Play Integrity? GrapheneOS has a compatibility layer that lets most apps think they are on a certified device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only apps that truly break are ones that intentionally try to detect and block custom OSes, and even those are rare.&lt;/p&gt;

&lt;p&gt;Performance and battery are also basically identical to Stock, since it is the same hardware and same base. In my opinion, it even feels a bit snappier without all the background Google junk constantly running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Not Use GrapheneOS?
&lt;/h2&gt;

&lt;p&gt;To be fair, it is not for everyone.&lt;/p&gt;

&lt;p&gt;If you need absolute seamless Android Auto, or you rely on some weird carrier RCS features that depend on deep Google integration, Stock might be less hassle. Also, GrapheneOS only officially supports Pixels. If you are not on a Pixel 7 or newer, you cannot use it. That is intentional, they only support phones with proper hardware security.&lt;/p&gt;

&lt;p&gt;But if you are on a Pixel and you care even a little about who controls your device, there is no reason to stay on Stock.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Honest Take
&lt;/h2&gt;

&lt;p&gt;Look, I get why people stay on Stock OS. It is easy, it is what the phone came with, and it does not ask you to think. But once you understand what is happening in the background, you cannot unsee it.&lt;/p&gt;

&lt;p&gt;Stock OS treats you like a product. It gives you toggles that do not really toggle anything, permissions that do not really restrict Google, and a sense of control that is mostly an illusion.&lt;/p&gt;

&lt;p&gt;GrapheneOS treats you like the owner. It gives you real toggles. Real permissions. Real ownership. It does not preach, it just gives you the tools and gets out of your way.&lt;/p&gt;

&lt;p&gt;In my view, if you already own a Pixel, keeping Stock OS is like buying a high security safe and leaving the key taped to the front door. GrapheneOS is just locking that door properly.&lt;/p&gt;

&lt;p&gt;I switched and I am not going back. If privacy and security matter to you even a little, you should at least try it. The installer is web-based and takes like 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://grapheneos.org/features" rel="noopener noreferrer"&gt;GrapheneOS Official Website - Features Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grapheneos.org/usage#sandboxed-google-play" rel="noopener noreferrer"&gt;GrapheneOS FAQ - How Sandboxed Google Play Works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grapheneos.org/features#grapheneos-vs-stock" rel="noopener noreferrer"&gt;GrapheneOS Security and Privacy Comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://source.android.com/docs/security/features/verifiedboot" rel="noopener noreferrer"&gt;Pixel Security Documentation and Verified Boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grapheneos.org/usage#vanadium" rel="noopener noreferrer"&gt;Vanadium Browser - Hardened Chromium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://attestation.app/about" rel="noopener noreferrer"&gt;Auditor App - Hardware-based Attestation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Google Just Made the Pixel 11 Less Secure: Removing ARM MTE Is a Huge Mistake</title>
      <dc:creator>David Timothy</dc:creator>
      <pubDate>Mon, 31 Aug 2026 18:04:46 +0000</pubDate>
      <link>https://dev.to/davidtimothy/google-just-made-the-pixel-11-less-secure-removing-arm-mte-is-a-huge-mistake-3do0</link>
      <guid>https://dev.to/davidtimothy/google-just-made-the-pixel-11-less-secure-removing-arm-mte-is-a-huge-mistake-3do0</guid>
      <description>&lt;p&gt;The Pixel 11 was supposed to move Google’s security story forward. Instead, one of the most important hardware protections introduced with recent Pixel generations has reportedly disappeared.&lt;/p&gt;

&lt;p&gt;According to a &lt;a href="https://discuss.grapheneos.org/d/41564-pixel-11-doesnt-meet-the-grapheneos-security-standards-and-may-be-skipped" rel="noopener noreferrer"&gt;GrapheneOS project discussion&lt;/a&gt;, the Pixel 11 generation does not provide ARM hardware Memory Tagging Extension support, better known as MTE. The missing feature is serious enough that the GrapheneOS team says the devices do not meet its security requirements and may be skipped entirely.&lt;/p&gt;

&lt;p&gt;That is not a minor compatibility complaint. It is a warning from a project that has spent years hardening Android against real-world exploitation.&lt;/p&gt;

&lt;p&gt;Google may point to newer security improvements, including quantum-resistant cryptography and other forward-looking protections. Those developments matter. I’m not arguing otherwise.&lt;/p&gt;

&lt;p&gt;But quantum-resistant cryptography is mostly about preparing for a future threat. MTE helps defend the device in your pocket against memory corruption attacks today.&lt;/p&gt;

&lt;p&gt;Removing it is bad. Really bad.&lt;/p&gt;

&lt;p&gt;And no amount of futuristic security branding changes that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What reportedly changed with the Pixel 11
&lt;/h2&gt;

&lt;p&gt;Starting with the Pixel 8 generation, Google’s phones moved to newer ARM CPU cores with hardware memory tagging support. That allowed Android and alternative operating systems such as GrapheneOS to use MTE as a practical exploit mitigation.&lt;/p&gt;

&lt;p&gt;GrapheneOS considers hardware memory tagging important enough to list it as a requirement for future supported devices. Its documentation specifically describes the feature as an “incredibly powerful” hardware security capability and says it is enabled by default to protect compatible operating system components and user-installed apps.&lt;/p&gt;

&lt;p&gt;The Pixel 11 generation reportedly breaks that progression.&lt;/p&gt;

&lt;p&gt;At the time of writing, the key public claim comes from the GrapheneOS project discussion. Google’s own detailed technical explanation for the missing MTE support is not available there, so I would be careful about inventing a motive. It could involve Google’s SoC choices, CPU core configuration, performance priorities, implementation cost, or something else entirely.&lt;/p&gt;

&lt;p&gt;The reason matters, but the result matters more.&lt;/p&gt;

&lt;p&gt;If the hardware does not support MTE, an operating system cannot add it later with a software update. GrapheneOS cannot patch around the missing CPU feature. Google cannot quietly enable it in a future Android release. A userspace allocator cannot emulate the same protection with the same security and performance properties.&lt;/p&gt;

&lt;p&gt;The silicon either supports hardware tag checking or it does not.&lt;/p&gt;

&lt;p&gt;That is why this is a hardware security regression rather than a missing launch feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  MTE is not just another security acronym
&lt;/h2&gt;

&lt;p&gt;Memory safety bugs have been one of the biggest sources of serious vulnerabilities for decades.&lt;/p&gt;

&lt;p&gt;Languages such as C and C++ give developers direct control over memory. That control is useful for performance and low-level systems programming, but it also creates entire categories of bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buffer overflows&lt;/li&gt;
&lt;li&gt;Buffer underflows&lt;/li&gt;
&lt;li&gt;Use-after-free vulnerabilities&lt;/li&gt;
&lt;li&gt;Invalid pointer accesses&lt;/li&gt;
&lt;li&gt;Out-of-bounds reads and writes&lt;/li&gt;
&lt;li&gt;Heap memory corruption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Android contains a huge amount of native code. The kernel, hardware abstraction layers, media components, graphics stack, drivers, networking services, vendor components, and many performance-sensitive libraries all operate close to the hardware.&lt;/p&gt;

&lt;p&gt;A single memory corruption bug does not automatically equal a full device compromise. Modern Android has sandboxing, SELinux, control-flow protections, verified boot, address-space randomization, and many other defenses.&lt;/p&gt;

&lt;p&gt;But memory corruption is often where an exploit chain begins.&lt;/p&gt;

&lt;p&gt;An attacker finds a bug in a component that processes untrusted data. Maybe it is an image decoder, browser engine, GPU driver, Bluetooth implementation, baseband-related interface, or media service. The attacker then attempts to turn that bug into something useful, such as arbitrary code execution.&lt;/p&gt;

&lt;p&gt;MTE makes that process harder.&lt;/p&gt;

&lt;h2&gt;
  
  
  How ARM Memory Tagging Extension works
&lt;/h2&gt;

&lt;p&gt;At a high level, MTE associates a small tag with a region of memory and another tag with the pointer used to access that memory.&lt;/p&gt;

&lt;p&gt;When the CPU performs a memory load or store, it checks whether the pointer tag matches the tag assigned to the memory.&lt;/p&gt;

&lt;p&gt;Conceptually, it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pointer tag: 0xA
Memory tag:  0xA
Result:      Access allowed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a stale or corrupted pointer carries the wrong tag, the hardware detects the mismatch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pointer tag: 0x4
Memory tag:  0xB
Result:      Tag mismatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depending on the configured MTE mode, the process can be terminated immediately or the fault can be reported asynchronously.&lt;/p&gt;

&lt;p&gt;This is especially useful for two common classes of bugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use-after-free
&lt;/h3&gt;

&lt;p&gt;A program allocates an object and receives a pointer to it. Later, the object is freed, but some part of the program still holds the old pointer.&lt;/p&gt;

&lt;p&gt;Without additional protection, that stale pointer might access memory that has since been reused for another object. An attacker may be able to manipulate that reuse and turn the bug into controlled memory corruption.&lt;/p&gt;

&lt;p&gt;With MTE, the allocator can assign a new tag when the memory is reused. The old pointer still carries the previous tag, so the CPU notices that it no longer matches.&lt;/p&gt;

&lt;p&gt;The stale pointer becomes much less useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Buffer overflows
&lt;/h3&gt;

&lt;p&gt;Suppose code allocates a buffer and then writes beyond its boundary. If the neighboring allocation has a different tag, crossing into that allocation causes a mismatch.&lt;/p&gt;

&lt;p&gt;Again, MTE does not magically prove that every memory access is correct. It has granularity and probability limitations, and some invalid accesses may remain within the same tagged region.&lt;/p&gt;

&lt;p&gt;But it puts another hardware-enforced obstacle between a bug and a working exploit.&lt;/p&gt;

&lt;p&gt;That is exactly what defense in depth is supposed to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  MTE can stop exploitation, not just find bugs
&lt;/h2&gt;

&lt;p&gt;MTE is sometimes discussed as if it were primarily a developer debugging feature. That undersells it.&lt;/p&gt;

&lt;p&gt;Yes, MTE is excellent for finding memory bugs during development and testing. Android’s documentation strongly recommends synchronous MTE during development because it can stop the process at the invalid access and provide useful diagnostic information.&lt;/p&gt;

&lt;p&gt;But MTE can also run in production.&lt;/p&gt;

&lt;p&gt;Android documents three primary operating modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SYNC&lt;/code&gt;, which reports the fault precisely and terminates the process immediately&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ASYNC&lt;/code&gt;, which reduces performance cost but reports the fault later&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ASYMM&lt;/code&gt;, which uses synchronous checks for reads and asynchronous checks for writes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google’s Android documentation recommends asynchronous MTE in production as a low-overhead memory safety defense. For especially sensitive processes, synchronous checking can be worth the additional cost.&lt;/p&gt;

&lt;p&gt;GrapheneOS goes further by using hardware memory tagging as a real exploit mitigation, not merely a crash-reporting mechanism.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;A debugging feature tells developers that something went wrong. A security mitigation tries to make sure an attacker cannot successfully exploit what went wrong.&lt;/p&gt;

&lt;p&gt;MTE can do both.&lt;/p&gt;

&lt;h2&gt;
  
  
  It is not perfect, and that is not an excuse to remove it
&lt;/h2&gt;

&lt;p&gt;No serious security feature provides absolute protection.&lt;/p&gt;

&lt;p&gt;MTE uses a limited tag space. Depending on the allocation strategy, an attacker may have some probability of correctly guessing a tag. MTE also works at a defined memory granularity, so it cannot detect every small out-of-bounds access within the same granule.&lt;/p&gt;

&lt;p&gt;It will not fix logical vulnerabilities.&lt;/p&gt;

&lt;p&gt;It will not stop a developer from accidentally exposing sensitive data through a badly designed API.&lt;/p&gt;

&lt;p&gt;It will not replace sandboxing, control-flow integrity, pointer authentication, safe languages, or timely security updates.&lt;/p&gt;

&lt;p&gt;None of this makes MTE unimportant.&lt;/p&gt;

&lt;p&gt;Security is not a search for one perfect shield. Modern exploit resistance comes from stacking independent defenses until turning a vulnerability into a reliable compromise becomes expensive, unstable, or impossible.&lt;/p&gt;

&lt;p&gt;An attacker may have to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find a reachable memory corruption bug.&lt;/li&gt;
&lt;li&gt;Bypass the application sandbox.&lt;/li&gt;
&lt;li&gt;Defeat address-space randomization.&lt;/li&gt;
&lt;li&gt;Work around control-flow protections.&lt;/li&gt;
&lt;li&gt;Avoid MTE tag mismatches.&lt;/li&gt;
&lt;li&gt;Escape into a more privileged process.&lt;/li&gt;
&lt;li&gt;Survive additional kernel and hardware defenses.&lt;/li&gt;
&lt;li&gt;Establish persistence despite verified boot.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remove one of those layers and the attacker has less work to do.&lt;/p&gt;

&lt;p&gt;It does not matter that the removed layer was not perfect. Seat belts are not useless because cars also have airbags. Sandboxing is not useless because sandbox escapes exist. MTE is not useless because a determined attacker may sometimes work around it.&lt;/p&gt;

&lt;p&gt;The whole point is to make exploitation harder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software cannot fully compensate for missing hardware MTE
&lt;/h2&gt;

&lt;p&gt;Android has other approaches for detecting memory corruption.&lt;/p&gt;

&lt;p&gt;Tools such as AddressSanitizer, Hardware-assisted AddressSanitizer, and various allocator hardening techniques can catch bugs or make exploitation more difficult. GrapheneOS also has its own hardened memory allocator.&lt;/p&gt;

&lt;p&gt;These are valuable, but they are not interchangeable with production-ready hardware tagging.&lt;/p&gt;

&lt;p&gt;Traditional sanitizers often carry too much memory or performance overhead for broad use on a consumer phone. Software-based mitigations can also lack the direct, per-access CPU enforcement that makes MTE useful.&lt;/p&gt;

&lt;p&gt;Rust and other memory-safe languages are another major part of the solution. Google has already been moving new Android code toward memory-safe implementations, and that is absolutely the right direction.&lt;/p&gt;

&lt;p&gt;But rewriting a platform the size of Android takes years. Vendor drivers, native libraries, the Linux kernel, hardware interfaces, and third-party components do not suddenly become memory safe because Google wrote more new code in Rust.&lt;/p&gt;

&lt;p&gt;Even in a mostly memory-safe system, unsafe boundaries still exist.&lt;/p&gt;

&lt;p&gt;MTE protects the large body of native code that exists now. It also protects software that will not be rewritten anytime soon.&lt;/p&gt;

&lt;p&gt;The choice should never have been “Rust or MTE.” We need both.&lt;/p&gt;

&lt;p&gt;Use memory-safe languages to prevent new bugs. Use hardware tagging to catch and mitigate the memory bugs that remain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the GrapheneOS reaction matters
&lt;/h2&gt;

&lt;p&gt;GrapheneOS does not support a device simply because it can boot Android.&lt;/p&gt;

&lt;p&gt;Its hardware requirements cover long-term firmware updates, verified boot, rollback protection, secure elements, hardware-backed key storage, radio isolation, virtualization, USB attack-surface controls, modern kernel support, and multiple processor-level exploit mitigations.&lt;/p&gt;

&lt;p&gt;Hardware memory tagging is explicitly on that list.&lt;/p&gt;

&lt;p&gt;The project also says Pixel 8 and later devices use MTE by default for the base operating system and known-compatible apps, with an option to enable it more broadly.&lt;/p&gt;

&lt;p&gt;So when GrapheneOS says the Pixel 11 does not meet its standards and may be skipped, this is not a dramatic response to a missing checkbox. Supporting the phone without MTE would mean lowering a security requirement that the project has already established.&lt;/p&gt;

&lt;p&gt;I think refusing to quietly lower that standard is the correct response.&lt;/p&gt;

&lt;p&gt;Otherwise, hardware vendors learn that security features are optional. They can promote them for a few generations, remove them when inconvenient, and assume everyone will update the marketing slides instead of asking difficult questions.&lt;/p&gt;

&lt;p&gt;Skipping a major Pixel generation would be painful for GrapheneOS. Pixels have historically been the main practical hardware platform for the project. A skipped generation could affect users, testing capacity, device availability, and the project’s long-term support planning.&lt;/p&gt;

&lt;p&gt;That makes the warning more credible, not less.&lt;/p&gt;

&lt;p&gt;There is no obvious benefit for GrapheneOS in refusing to support popular new hardware. If the team is willing to consider doing that, the missing capability is clearly not viewed as cosmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pixel 11 may still have strong security
&lt;/h2&gt;

&lt;p&gt;This needs to be said clearly: the absence of MTE does not automatically make the Pixel 11 an insecure phone.&lt;/p&gt;

&lt;p&gt;Security is not binary.&lt;/p&gt;

&lt;p&gt;The Pixel 11 may still include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hardened Android security model&lt;/li&gt;
&lt;li&gt;Strong application sandboxing&lt;/li&gt;
&lt;li&gt;Verified boot and rollback protection&lt;/li&gt;
&lt;li&gt;Hardware-backed key storage&lt;/li&gt;
&lt;li&gt;A dedicated secure element&lt;/li&gt;
&lt;li&gt;Pointer authentication&lt;/li&gt;
&lt;li&gt;Branch target identification&lt;/li&gt;
&lt;li&gt;Regular security updates&lt;/li&gt;
&lt;li&gt;Improved baseband and subsystem isolation&lt;/li&gt;
&lt;li&gt;Better virtualization&lt;/li&gt;
&lt;li&gt;New cryptographic protections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the alternatives, it may still be more secure than many competing phones.&lt;/p&gt;

&lt;p&gt;But “still secure overall” and “a meaningful security regression” can both be true.&lt;/p&gt;

&lt;p&gt;That nuance often gets lost in product coverage. Reviews reduce security to the number of promised update years or whether a phone has a security chip with a cool name.&lt;/p&gt;

&lt;p&gt;Those things matter, but they do not tell the whole story.&lt;/p&gt;

&lt;p&gt;A device can gain new defenses while losing an existing one. If the lost defense addresses a major source of current vulnerabilities, users deserve to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quantum-resistant security does not replace MTE
&lt;/h2&gt;

&lt;p&gt;Google’s work on post-quantum cryptography is valuable. Powerful quantum computers could eventually threaten widely used public-key cryptographic systems.&lt;/p&gt;

&lt;p&gt;The industry cannot wait until a cryptographically relevant quantum computer appears before starting the transition. New algorithms need standardization, implementation, testing, deployment, and years of compatibility work.&lt;/p&gt;

&lt;p&gt;There is also a real “harvest now, decrypt later” concern. Attackers can collect encrypted data today and hope to decrypt it in the future once the required technology exists.&lt;/p&gt;

&lt;p&gt;Preparing early is responsible engineering.&lt;/p&gt;

&lt;p&gt;But post-quantum cryptography and memory tagging solve entirely different problems.&lt;/p&gt;

&lt;p&gt;Quantum-resistant cryptography protects cryptographic operations against a future class of computational attacks. MTE helps prevent attackers from exploiting memory corruption vulnerabilities running on the device right now.&lt;/p&gt;

&lt;p&gt;One protects keys, signatures, or encrypted communication against future quantum capabilities.&lt;/p&gt;

&lt;p&gt;The other can stop a malicious input from turning a use-after-free bug into code execution today.&lt;/p&gt;

&lt;p&gt;You cannot compensate for weaker memory safety by adding stronger cryptography.&lt;/p&gt;

&lt;p&gt;If an attacker exploits a process and gains access to sensitive data after it has already been decrypted, the mathematical strength of the encryption algorithm is not the issue. Cryptography protects data in transit and at rest. It does not automatically protect data while compromised software is actively using it.&lt;/p&gt;

&lt;p&gt;That is why presenting quantum-resistant features as a counterweight to losing MTE would be misleading.&lt;/p&gt;

&lt;p&gt;It would be like removing the locks from your front door and proudly announcing that the basement will be protected against a new drilling technology that may become practical years from now.&lt;/p&gt;

&lt;p&gt;Great work on the basement. I still want the front door locked.&lt;/p&gt;

&lt;h2&gt;
  
  
  MTE protects against the boring bugs attackers actually use
&lt;/h2&gt;

&lt;p&gt;Security marketing loves exotic threats.&lt;/p&gt;

&lt;p&gt;Quantum computers sound futuristic. AI-powered attacks sound inevitable. Satellite communication security makes for great launch-event material.&lt;/p&gt;

&lt;p&gt;Memory corruption sounds old and messy.&lt;/p&gt;

&lt;p&gt;That is exactly why it is dangerous to underestimate it.&lt;/p&gt;

&lt;p&gt;Use-after-free bugs and out-of-bounds accesses are not hypothetical. They keep appearing in browsers, operating system kernels, media frameworks, drivers, and vendor components. Attackers do not care whether a vulnerability sounds exciting. They care whether it gives them execution.&lt;/p&gt;

&lt;p&gt;A new phone should not trade a practical mitigation against current exploit techniques for a cleaner benchmark result, cheaper CPU configuration, or easier hardware integration.&lt;/p&gt;

&lt;p&gt;To be clear, Google has not publicly established that any of those were the reason. I am not claiming to know why MTE is reportedly missing.&lt;/p&gt;

&lt;p&gt;I am saying that the bar for removing it should be extremely high.&lt;/p&gt;

&lt;p&gt;If there is another hardware mechanism providing equivalent or stronger protection, Google should document it in technical detail. It should explain which memory corruption classes are covered, whether enforcement works on every relevant load and store, how Android enables it, what the performance tradeoffs are, and whether alternative operating systems can use it.&lt;/p&gt;

&lt;p&gt;A vague promise of “enhanced security” is not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  This also hurts developers
&lt;/h2&gt;

&lt;p&gt;MTE does more than protect end users after a product ships.&lt;/p&gt;

&lt;p&gt;When developers can run real software under synchronous hardware tagging, memory bugs become easier to reproduce and diagnose. Instead of discovering silent heap corruption several operations after the original invalid access, the process can stop close to the exact instruction that caused the problem.&lt;/p&gt;

&lt;p&gt;That produces better crash reports and shorter debugging sessions.&lt;/p&gt;

&lt;p&gt;More importantly, broad MTE use creates real-world coverage that internal testing cannot reproduce. Users exercise strange combinations of features, data, apps, locales, peripherals, network conditions, and timing behavior.&lt;/p&gt;

&lt;p&gt;Google’s own Android documentation points out that development tests may not cover every user scenario. That is one reason production MTE is useful.&lt;/p&gt;

&lt;p&gt;Removing hardware support does not just weaken exploit resistance on one phone. It removes that phone generation from the pool of devices capable of finding and containing these bugs through hardware tagging.&lt;/p&gt;

&lt;p&gt;For an ecosystem as large as Android, that loss adds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The precedent worries me most
&lt;/h2&gt;

&lt;p&gt;Hardware security features need continuity.&lt;/p&gt;

&lt;p&gt;Developers need to know that a mitigation introduced today will still exist in the next hardware generation. Operating system projects need that continuity before making a feature part of their security architecture. App developers need enough compatible devices to justify testing and enabling it.&lt;/p&gt;

&lt;p&gt;The Pixel 8 generation made MTE feel like the beginning of a stronger Android baseline. Pixel 9 and Pixel 10 devices continued to meet GrapheneOS requirements.&lt;/p&gt;

&lt;p&gt;If Pixel 11 drops it, the message is awful: do not assume a valuable security primitive will survive even a few product cycles.&lt;/p&gt;

&lt;p&gt;That discourages adoption.&lt;/p&gt;

&lt;p&gt;Why should an app developer invest time testing MTE compatibility if Google may ship its flagship hardware without it? Why should operating system developers design stronger default policies around a feature that can disappear? Why should users believe claims about hardware-backed protection if those claims come with an invisible expiration date?&lt;/p&gt;

&lt;p&gt;Security capabilities should become more common and more mature over time. They should not vanish without a technically convincing replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Google should do now
&lt;/h2&gt;

&lt;p&gt;First, Google should clearly confirm or deny whether every Pixel 11 model lacks hardware MTE support.&lt;/p&gt;

&lt;p&gt;If some models or CPU cores support it and others do not, that needs to be documented too. Partial support can create its own limitations, especially when processes move between heterogeneous CPU cores.&lt;/p&gt;

&lt;p&gt;Second, Google should explain the technical reason.&lt;/p&gt;

&lt;p&gt;Not in marketing language. Not with a statement about a “multi-layered approach.” Developers need the actual architecture-level explanation.&lt;/p&gt;

&lt;p&gt;Third, if another mitigation replaces MTE, Google should publish enough information for independent security researchers and projects such as GrapheneOS to evaluate it.&lt;/p&gt;

&lt;p&gt;The replacement should also be available to alternative operating systems. A hardware feature locked behind proprietary stock firmware is not equivalent if GrapheneOS cannot use it.&lt;/p&gt;

&lt;p&gt;Finally, Google should restore MTE support in the next revision if there is no equivalent replacement.&lt;/p&gt;

&lt;p&gt;Security regressions should be treated as regressions, even when the rest of the product gets faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you avoid the Pixel 11?
&lt;/h2&gt;

&lt;p&gt;For an average user running stock Android, the answer depends on the complete security picture, update policy, competing devices, and the eventual technical details.&lt;/p&gt;

&lt;p&gt;I would not claim that everyone who buys a Pixel 11 is immediately in danger. That would be irresponsible.&lt;/p&gt;

&lt;p&gt;But security-conscious buyers should absolutely pause.&lt;/p&gt;

&lt;p&gt;If you want to run GrapheneOS, do not assume Pixel 11 support is coming. Wait for an official decision from the project before buying the device. A bootloader that can be unlocked does not guarantee GrapheneOS support, and buying hardware based on an expected future port is always a gamble.&lt;/p&gt;

&lt;p&gt;If hardware memory tagging matters to you, the existing Pixel generations supported by GrapheneOS may be the safer choice until the Pixel 11 situation is fully explained.&lt;/p&gt;

&lt;p&gt;And if Google eventually confirms that MTE is gone without providing an equivalent mitigation, I would consider that a legitimate reason to skip the generation.&lt;/p&gt;

&lt;p&gt;Not because the Pixel 11 has no security.&lt;/p&gt;

&lt;p&gt;Because buyers of a premium security-focused phone should not have to accept fewer defenses against one of the most persistent classes of software vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  A shiny future does not excuse weaker security today
&lt;/h2&gt;

&lt;p&gt;I like that Google is investing in quantum-resistant cryptography. The transition to post-quantum systems is necessary, difficult, and easy to postpone until it becomes an emergency.&lt;/p&gt;

&lt;p&gt;But security engineering is not a choice between the future and the present.&lt;/p&gt;

&lt;p&gt;We need cryptography that can survive tomorrow’s quantum attacks. We also need hardware defenses that make today’s memory corruption bugs harder to exploit.&lt;/p&gt;

&lt;p&gt;MTE is not a theoretical feature waiting for a future threat model. It is usable now. Android supports it now. GrapheneOS uses it now. It addresses bug classes attackers target now.&lt;/p&gt;

&lt;p&gt;That is why the reported Pixel 11 decision looks so bad.&lt;/p&gt;

&lt;p&gt;A new generation of hardware should not force a security-focused operating system to choose between lowering its standards and abandoning the device. A flagship phone should not move backward on practical exploit mitigations while its marketing moves forward.&lt;/p&gt;

&lt;p&gt;Until Google provides a convincing technical explanation or an equally strong replacement, removing hardware MTE deserves to be called what it is:&lt;/p&gt;

&lt;p&gt;A serious security regression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://discuss.grapheneos.org/d/41564-pixel-11-doesnt-meet-the-grapheneos-security-standards-and-may-be-skipped" rel="noopener noreferrer"&gt;GrapheneOS discussion: Pixel 11 doesn’t meet the GrapheneOS security standards and may be skipped&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://source.android.com/docs/security/test/memory-safety/arm-mte" rel="noopener noreferrer"&gt;Android Open Source Project: ARM Memory Tagging Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grapheneos.org/faq" rel="noopener noreferrer"&gt;GrapheneOS FAQ: Supported devices and hardware security requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/enhancing-memory-safety" rel="noopener noreferrer"&gt;Arm: Enhancing memory safety with Memory Tagging Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/ndk/guides/arm-mte" rel="noopener noreferrer"&gt;Android Developers: Memory Tagging Extension for native apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://security.googleblog.com/2021/04/rust-in-android-platform.html" rel="noopener noreferrer"&gt;Google Security Blog: Rust in the Android platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://timotic.me" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>security</category>
      <category>cybersecurity</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
