<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on /home/gilles</title>
        <link>https://gagniard.org/gilles/posts/</link>
        <description>Recent content in Posts on /home/gilles</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <managingEditor>gilles@gagniard.org (Gilles Gagniard)</managingEditor>
        <webMaster>gilles@gagniard.org (Gilles Gagniard)</webMaster>
        <copyright>&lt;a href=&#34;https://creativecommons.org/licenses/by-nc/4.0/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CC BY-NC 4.0&lt;/a&gt;</copyright>
        <lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0100</lastBuildDate>
        <atom:link href="https://gagniard.org/gilles/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>State of Wayland (April 2026), or Why NVIDIA (as usual) is holding us back</title>
            <link>https://gagniard.org/gilles/posts/2026/04/state-of-wayland-april-2026-or-why-nvidia-as-usual-is-holding-us-back/</link>
            <pubDate>Tue, 14 Apr 2026 00:00:00 +0100</pubDate>
            <author>gilles@gagniard.org (Gilles Gagniard)</author>
            <guid>https://gagniard.org/gilles/posts/2026/04/state-of-wayland-april-2026-or-why-nvidia-as-usual-is-holding-us-back/</guid>
            <description>&lt;h2 id=&#34;why-this-&#34;&gt;Why this ?&lt;/h2&gt;
&lt;p&gt;After a year (a bit more actually!), I&amp;rsquo;ve decided to give a chance again to this 20 years old new-kid-on-the-block&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; that is Wayland on my Plasma desktop, and give my &lt;a href=&#34;https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/&#34;&gt;previous entry on this topic&lt;/a&gt; a follow-up.&lt;/p&gt;
&lt;figure class=&#34;center&#34;&gt;&lt;img src=&#34;https://gagniard.org/gilles/images/How_Do_You_Do_Fellow_Kids.jpg&#34;
    alt=&#34;How Do You Do Fellow Kids&#34;&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;good-surprise&#34;&gt;The good surprise&lt;/h2&gt;
&lt;p&gt;Actually, a lot happened during 2025! Some issues and shortcomings &lt;a href=&#34;https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/#the-bad&#34;&gt;I had previously documented&lt;/a&gt; have been fixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firefox (since release 146) now natively supports fractional scaling, including sharp text rendering, save for the occasional right-click popup menu which sometimes still is a bit blurry.&lt;/li&gt;
&lt;li&gt;Qt 6.11 (newly released) finally fixes the abysmal scrolling performance issues in LibreOffice which had made it previously unusable on 4K displays.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In general, Plasma now feels pretty snappy when ran on Wayland on my discrete nvidia GPU (and even snappier than on X11 !) while it was stuttering a lot before.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="why-this-">Why this ?</h2>
<p>After a year (a bit more actually!), I&rsquo;ve decided to give a chance again to this 20 years old new-kid-on-the-block<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> that is Wayland on my Plasma desktop, and give my <a href="https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/">previous entry on this topic</a> a follow-up.</p>
<figure class="center"><img src="/gilles/images/How_Do_You_Do_Fellow_Kids.jpg"
    alt="How Do You Do Fellow Kids">
</figure>

<h2 id="good-surprise">The good surprise</h2>
<p>Actually, a lot happened during 2025! Some issues and shortcomings <a href="https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/#the-bad">I had previously documented</a> have been fixed:</p>
<ul>
<li>Firefox (since release 146) now natively supports fractional scaling, including sharp text rendering, save for the occasional right-click popup menu which sometimes still is a bit blurry.</li>
<li>Qt 6.11 (newly released) finally fixes the abysmal scrolling performance issues in LibreOffice which had made it previously unusable on 4K displays.</li>
</ul>
<p>In general, Plasma now feels pretty snappy when ran on Wayland on my discrete nvidia GPU (and even snappier than on X11 !) while it was stuttering a lot before.</p>
<h2 id="not-all-rosy">It is (still) not all rosy</h2>
<p>There is however still a major regression I experience on Wayland, which is admitedly caused by those deliciously crappy proprietary NVIDIA drivers: <strong>VRAM management is AWOL</strong>.</p>
<p>This particular issue is being discussed since 2023 (!!) on NVIDIA forums (<a href="https://forums.developer.nvidia.com/t/non-existent-shared-vram-on-nvidia-linux-drivers/260304">here for instance</a>) and is tracked by instance through <a href="https://github.com/NVIDIA/egl-wayland/issues/185">this egl-wayland issue</a>.</p>
<p>What does it mean in practice? Whenever an application requests some GPU buffers, as long as there is still dedicated VRAM available, everything runs fine. But when VRAM becomes full, any such request will fail, meaning any application can randomly crash. This is not how thinkg are supposed to work! Whenever there is some VRAM pressure going on, the driver is supposed to move buffers to host RAM instead to make room for the new request. This degrades performances for sure, but it&rsquo;s still a vastly better alternative to crashing an entire desktop session &hellip; and <em><strong>this is exactly how it is working on frigging X11</strong></em> &hellip; or <em>cough</em> <em>cough</em> Windows for that matter.</p>
<p>Now, you&rsquo;re going to tell me, this must surely be a corner case occurence. Who in his right mind fills up its VRAM in such a way? Probably some daft gamer dual screening some browsers and video players (hmm &hellip;). But there is a totally legit way to trigger it! I&rsquo;m a big fan of running LLM inference locally, for privacy and ethical concerns, and the rule of the game is to maximize GPU usage to get acceptable performances. And oh boy how many times have I crashed my desktop by being a bit too eager when loading up some models too large for my own good &hellip;</p>
<h2 id="conclusion-for-now">Conclusion (for now?)</h2>
<p>This nvidia issue is certainly super annoying (I guess my next GPU will be from team red &hellip;). But I must admit the whole Wayland situation is actually getting better by the day, and I was a bit too pessimistic previously; I have been running a Plasma Wayland session for a few weeks now, and overall have been pretty happy about it.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Started in 2008 !&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Mozilla Corporation is toast (?)</title>
            <link>https://gagniard.org/gilles/posts/2025/12/mozilla-corporation-is-toast/</link>
            <pubDate>Wed, 17 Dec 2025 20:16:50 +0100</pubDate>
            <author>gilles@gagniard.org (Gilles Gagniard)</author>
            <guid>https://gagniard.org/gilles/posts/2025/12/mozilla-corporation-is-toast/</guid>
            <description>&lt;h2 id=&#34;caveat&#34;&gt;Caveat&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m a nobody having an uneducated opinion on matters exceeding by far the reach of my comprehension skills. Because we&amp;rsquo;re on the Internet (c), I&amp;rsquo;m therefore more than fully qualified to express it!&lt;/p&gt;
&lt;h2 id=&#34;so-whats-happening&#34;&gt;So what&amp;rsquo;s happening?&lt;/h2&gt;
&lt;p&gt;The Mozilla Corporation has just hired a new CEO who &lt;a href=&#34;https://blog.mozilla.org/en/mozilla/leadership/mozillas-next-chapter-anthony-enzor-demeo-new-ceo/&#34;&gt;immediately expressed his vision&lt;/a&gt; for a bold and bright future where Firefox development effort will be refocused on building a AI platform supporting an ecosystem of AI products.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="caveat">Caveat</h2>
<p>I&rsquo;m a nobody having an uneducated opinion on matters exceeding by far the reach of my comprehension skills. Because we&rsquo;re on the Internet (c), I&rsquo;m therefore more than fully qualified to express it!</p>
<h2 id="so-whats-happening">So what&rsquo;s happening?</h2>
<p>The Mozilla Corporation has just hired a new CEO who <a href="https://blog.mozilla.org/en/mozilla/leadership/mozillas-next-chapter-anthony-enzor-demeo-new-ceo/">immediately expressed his vision</a> for a bold and bright future where Firefox development effort will be refocused on building a AI platform supporting an ecosystem of AI products.</p>
<p>Of course, Firefox marketshare has dwindled in recent years, and its remaining users are a militant group of free software afficionados, privacy activists, and worse of all, Linux users. Let&rsquo;s just say this &ldquo;new direction&rdquo; is not warmly received. And it&rsquo;s also quite uninnovative and lazy: that&rsquo;s just what <a href="https://www.perplexity.ai/comet">everyone</a> <a href="https://gemini.google/overview/gemini-in-chrome/">and</a> <a href="https://www.microsoft.com/edge/features/ai">their</a> <a href="https://openai.com/index/introducing-chatgpt-atlas/">dog</a> are doing. How to gain back marketshare be being an also ran? And why the hell does marketshare matter so much?</p>
<p>Even believing that Generative AI is indeed unavoidable (or let&rsquo;s be crazy: that it can be a useful new tool when implemented responsibly), and if privacy and trust were indeed core values of Mozilla Corporation, then they should clearly take that direction in their engineering: research and build small models that can be run on-device, integrate them into local agents executing inside the browser sandbox to perform specialized tasks in an efficient manner, and all in a private way by construction. But of course, that&rsquo;s not what is announced. Instead we are served a mumbo-jumbo of corporate speak about trust and choice.</p>
<h2 id="its-about-google-of-course">It&rsquo;s about Google (of course)</h2>
<p>Fundamentally, there is a strong disconnect between Mozilla Corporation <strong>users</strong> and <strong>customers</strong> (the ones actually paying the bills), or should I say customer (singular): Google.</p>
<p><a href="https://blog.mozilla.org/wp-content/blogs.dir/278/files/2025/11/Mozilla-Summary-Portfolio-Strategy.pdf">85% of Mozilla Corporation revenue comes from their Google Search partnership</a>, which for Google acts as an insurance against antitrust procedures. Eventually, by <del>ball</del>bootlicking enough the current US administration, this threat for Google will definitely go away, and Mozilla Corporation will soon lose their sole income source. So they must do something to ensure their survival.</p>
<p>It&rsquo;s also the explanation behind all past failed attempts at deversifying revenues: Firefox OS or Pocket to name a few. And they all failed because of a fundamental misalignment of the interests of <strong>users</strong> and <strong>customers</strong> (which are the OEM integrating Firefox OS in their TV or their phones). The Google Search deal is the exception, because everyone needs a search engine, and Google is the obvious/default choice.</p>
<p>So the plan is simple in the current AI-fueled economy, replace Google Search revenue with ChatGPT/Perplexity/Gemini revenue, by giving them a direct access to the data they crave and can&rsquo;t access today with their crawling bots: everything that happens behind a login box. Local model execution is out of the picture.</p>
<figure class="center"><img src="/gilles/images/brawndo.gif"
    alt="Brawndo&#39;s got what plants crave.">
</figure>

<p>And of course, this plan is bound to fail for the same fundamental reason.</p>
<h2 id="ok-what-to-do-now">OK, what to do now?</h2>
<p>The Fediverse is now chokeful of strongly worded vows to uninstall Firefox immediately and burn any device having remotely touched some Mozilla software at the stake, along with passionate calls to switch to LibreWolf, Waterfox, Seamonkey, Zen or Floorp (and I&rsquo;m probably forgotting a dozen more).</p>
<p>Except that even with the best intentions of the world, those light Firefox forks only add a couple of privacy-related patches on top of upstream Firefox, and most of the time by <em>removing</em> code. There are no organizations behind with sufficient funding and manpower to do the heavy-lifting: the actual maintenance (let alone evolution) of such a complex piece of software as a browser engine. If the Mozilla Corporation folds, all those forks immediately become useless. So long for &ldquo;punishing&rdquo; them &hellip; and don&rsquo;t get me started with Vivaldi or any other Chromium/Blink based browsers.</p>
<p>There is also a belief that browsers are a solved problem and maintaining Firefox should be cheap and can be done in best-effort mode by a self-organizing volunteer community. Threat actors and vulnerability classes are constantly evolving. Client devices/platforms as well, and it&rsquo;s already hard today to keep up with current level of funding: <a href="https://www.phoronix.com/news/Firefox-146-Released">Firefox has only got actually working fractional scaling on Wayland in 146 release</a> which took literally <em>years</em> of bug fixing efforts to get there, and it&rsquo;s still based on GTK3. And because Google (with Blink) completely controls web standard evolutions, staying relevant means spending precious resources to follow their shenanigans without any way to actually influence them.</p>
<p>I remember reading somewhere that a ballpark cost estimate of Firefox software development is around 100M$ / year, so the real question is: how to (collectively) foot that bill? <del>Through donations to the Mozilla Foundation?</del> A transfer of Firefox to the Linux Foundation or Apache?</p>
<p><em>Update 18/12/2025</em>: It appears donations to Mozilla Foundation never get invested into funding Firefox development, but nowadays seems centered around <a href="https://www.mozillafoundation.org/en/what-we-do/make/">building voice &amp; text datasets to train LLM</a> (but no open source locally executable models though?), community building, and lobbying. I stand corrected, thank you <a href="https://mamot.fr/@bohwaz">@bohwaz@mamot.fr</a>!</p>
]]></content>
        </item>
        
        <item>
            <title>Why bother with a static blog in 2025 ?</title>
            <link>https://gagniard.org/gilles/posts/2025/05/why-bother-with-a-static-blog-in-2025/</link>
            <pubDate>Wed, 07 May 2025 23:00:00 +0200</pubDate>
            <author>gilles@gagniard.org (Gilles Gagniard)</author>
            <guid>https://gagniard.org/gilles/posts/2025/05/why-bother-with-a-static-blog-in-2025/</guid>
            <description>&lt;h2 id=&#34;the-beauty-of-static-content-generation&#34;&gt;The beauty of static content generation&lt;/h2&gt;
&lt;p&gt;Right after deciding to act on my new year&amp;rsquo;s resolution to start a blog, my first primal reaction was to google how to deploy and run a containerized Wordpress. Yikes. Recalling Matt Mullenweg&amp;rsquo;s unsavory meltdown and &lt;a href=&#34;https://techcrunch.com/2025/01/12/wordpress-vs-wp-engine-drama-explained/&#34;&gt;ensuing drama&lt;/a&gt; thankfully made me pause for a second &amp;hellip;&lt;/p&gt;
&lt;p&gt;Did I really need to run hundred of MB of PHP scripts to render a couple of pages everytime some AI bot would crawl this blog? Did I really need the dozens of fancy plugins to perform SEO, track visitors, inject ads and generate affiliate links?&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="the-beauty-of-static-content-generation">The beauty of static content generation</h2>
<p>Right after deciding to act on my new year&rsquo;s resolution to start a blog, my first primal reaction was to google how to deploy and run a containerized Wordpress. Yikes. Recalling Matt Mullenweg&rsquo;s unsavory meltdown and <a href="https://techcrunch.com/2025/01/12/wordpress-vs-wp-engine-drama-explained/">ensuing drama</a> thankfully made me pause for a second &hellip;</p>
<p>Did I really need to run hundred of MB of PHP scripts to render a couple of pages everytime some AI bot would crawl this blog? Did I really need the dozens of fancy plugins to perform SEO, track visitors, inject ads and generate affiliate links?</p>
<p>Here is what actually matters to me:</p>
<ul>
<li>Markdown files in a git repo as source of truth. I&rsquo;m a developer.</li>
<li>Efficient usage of resources. In this day and age, this should be on everyone&rsquo;s mind.</li>
<li>No possibility for tracking or identifying visitors. Yes, privacy is a feature.</li>
<li>Simplicity: easy to secure and maintain, both for content generation and publication.</li>
</ul>
<p>The solution was writing itself: nothing can beat nginx running on bare metal and serving a bunch of static html files.</p>
<h2 id="picking-the-right-tools-for-the-job">Picking the right tools for the job</h2>
<p>There are plenty of markdown-based static site generators, such as <a href="https://jekyllrb.com">Jekyll</a> or <a href="https://www.11ty.dev">Eleventy</a>. I wanted something simple and low-maintenance, so I settled on <a href="https://gohugo.io/">Hugo</a>, because it&rsquo;s a single static binary written in Go, and I didn&rsquo;t want to bother with npm or virtualenv. A strong community has formed around it, and a bunch of cool themes are available.</p>
<p>The markdown sources for this blog (as well as few hugo configuration files) are stored in a single git repo. I use <a href="https://zed.dev">Zed</a> as a text editor because it&rsquo;s the new kid on the block, with two tasks configured for testing (<code>hugo server -D</code>) and publishing (<code>hugo &amp;&amp; rsync</code>).</p>
<h2 id="integrating-with-the-fediverse-or-how-to-not-reinvent-the-wheel">Integrating with the Fediverse (or how to not reinvent the wheel)</h2>
<p>But not everything can be static on a blog, right? What about user-submitted content such as comments?</p>
<p>I first got the idea to leverage the Fediverse from <a href="https://social.wildeboer.net/@jwildeboer">@jwildeboer@social.wildeboer.net</a>&rsquo;s <a href="https://jan.wildeboer.net">blog</a>, which happend to also be fully static. The idea immediately clicked: no need to reinvent the wheel, a decentralized way to engage with anyone exists, and I&rsquo;m even already running my own personal Mastodon instance!</p>
<p>Because I&rsquo;m lazy, I&rsquo;ve simply ripped off an existing Hugo implementation straight from <a href="https://andreas.scherbaum.la/post/2024-05-23_client-side-comments-with-mastodon-on-a-static-hugo-website/">this article</a>. I just have to manually create a toot for each article, and link back its id. All the magic happens client-side thanks to a small JavaScript snippet.</p>
<h2 id="is-this-really-only-about-technical-efficiency-and-security">Is this really only about technical efficiency and security?</h2>
<p>While I was initially driven by purely technical considerations, reading about the <a href="https://ar.al/2020/08/07/what-is-the-small-web/">small web</a> resonated with me. Technology is not (always?) neutral, it can be biased and shaped by the interests of large actors. Maybe my futile quest for simplicity, privacy and efficiency is really about taking back control?</p>
<p>In any case, <a href="https://benhoyt.com/writings/the-small-web-is-beautiful/">the small web is beautiful</a>.</p>
]]></content>
        </item>
        
        <item>
            <title>Building a N305 based NAS</title>
            <link>https://gagniard.org/gilles/posts/2025/02/building-a-n305-based-nas/</link>
            <pubDate>Sun, 02 Feb 2025 22:00:00 +0100</pubDate>
            <author>gilles@gagniard.org (Gilles Gagniard)</author>
            <guid>https://gagniard.org/gilles/posts/2025/02/building-a-n305-based-nas/</guid>
            <description>&lt;h2 id=&#34;the-project&#34;&gt;The Project&lt;/h2&gt;
&lt;p&gt;Like lots of my basement-dwelling geek comrades, I have a home-made NAS hooked to my LAN. I&amp;rsquo;m a man of simple tastes, easily satisfied with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SMB/NFS/rsync&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jellyfin.org/&#34;&gt;Jellyfin&lt;/a&gt;, including some transcoding for &amp;lsquo;difficult&amp;rsquo; files&lt;/li&gt;
&lt;li&gt;Various containers, such as the Unifi Network Application controller for my wireless AP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had an old rig based on a venerable &lt;a href=&#34;https://www.intel.com/content/www/us/en/products/sku/33085/intel-xeon-processor-e5472-12m-cache-3-00-ghz-1600-mhz-fsb/specifications.html&#34;&gt;Xeon E5472&lt;/a&gt; and a 2007-ish Gigabyte motherboard (with its amazing PCI slots !), which while suprisingly still very functional, was not terribly energy efficient at 100W+ power draw. Unfortunately, the proverbial writing was on the wall, as EL9 (and therefore its derivatives Rocky Linux and Alma Linux) &lt;a href=&#34;https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level&#34;&gt;dropped support for everything earlier than x86-64-v2 architecture&lt;/a&gt;, and my goold old Xeon chap didn&amp;rsquo;t make the cut &amp;hellip;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="the-project">The Project</h2>
<p>Like lots of my basement-dwelling geek comrades, I have a home-made NAS hooked to my LAN. I&rsquo;m a man of simple tastes, easily satisfied with:</p>
<ul>
<li>SMB/NFS/rsync</li>
<li><a href="https://jellyfin.org/">Jellyfin</a>, including some transcoding for &lsquo;difficult&rsquo; files</li>
<li>Various containers, such as the Unifi Network Application controller for my wireless AP</li>
</ul>
<p>I had an old rig based on a venerable <a href="https://www.intel.com/content/www/us/en/products/sku/33085/intel-xeon-processor-e5472-12m-cache-3-00-ghz-1600-mhz-fsb/specifications.html">Xeon E5472</a> and a 2007-ish Gigabyte motherboard (with its amazing PCI slots !), which while suprisingly still very functional, was not terribly energy efficient at 100W+ power draw. Unfortunately, the proverbial writing was on the wall, as EL9 (and therefore its derivatives Rocky Linux and Alma Linux) <a href="https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level">dropped support for everything earlier than x86-64-v2 architecture</a>, and my goold old Xeon chap didn&rsquo;t make the cut &hellip;</p>
<p>Time for replacement it is then!</p>
<h2 id="the-hardware">The Hardware</h2>
<p>I don&rsquo;t want to use OTS offerings from Synology/QNAP/Asustor et al., as I prefer to fully control the software running on my NAS. In particular, I despise the planned obsolescence tactics permeating the industry.</p>
<p>I therefore set out on a journey to find the perfect motherboard, and established the characteristics I was looking for:</p>
<ul>
<li>Something standard-ish, x86 or ARM-based</li>
<li>Fast enough to support transcoding with <a href="https://jellyfin.org/">Jellyfin</a>, special bonus point if hardware acceleration is available</li>
<li>Low power draw</li>
<li>Loads of SATA ports, plus M.2 NVME for the boot disk</li>
<li>Compact format ie. mini-ITX (so that I could install it in a small case in the future, even if for now I will reuse an old ATX tower I&rsquo;ve already got)</li>
</ul>
<p>Alas, the journey quickly met a dead-end. It turned out there were no options available on the local online retailers available in my region, nor on Amazon, for mobos meeting those criteria. However, there are some interesting ones on AliExpress based on low-power <a href="https://www.intel.com/content/www/us/en/products/sku/231803/intel-processor-n100-6m-cache-up-to-3-40-ghz/specifications.html">N100</a>/<a href="https://www.intel.com/content/www/us/en/products/sku/231805/intel-core-i3n305-processor-6m-cache-up-to-3-80-ghz/specifications.html">N305</a> Alder Lake CPU, with a (respective) TDP of 6W/15W!</p>
<p>While there are a multitude of sellers over there, most products come from a couple OEM, notably:</p>
<ul>
<li><a href="https://www.bkipc.com/en/product/1264-NAS-MB.html">BKHD 1264 NAS MB</a>, only available with N100</li>
<li><a href="https://cwwk.net/products/cwwk-12th-gen-i3-n305-n100-2-intel-i226-v-2-5g-nas-motherboard-6-sata3-0-6-bay-soft-rout-1-ddr5-4800mhz-firewall-itx-mainboard">CWWK CW-NAS-ADLN-KV10</a>, available with a full lineup of N100/N150/N305/N355 CPU and a fancy purple PCB. It is also sometimes listed under the <a href="https://www.toptonpc.com/product/topton-6-bay-i3-n305-nas-motherboard-1pciex4-2intel-i226-v/">Topton brand</a>, but my understanding is that they&rsquo;re only reselling (see below for hardware characteristics)</li>
</ul>
<p>I first ordered the BKHD as it was generally cheaper. Unfortunately, I experienced spurious reboots with it, and while mobos like that are known to be quite finicky with RAM and I expected it, I couldn&rsquo;t find a single SODIMM able to succeed at even a single memtest86+ pass. <strong>So I definitely do not recommend that one.</strong></p>
<p>I then bought the CWWK (more precisely its N305 variant), and paired with a Crucial 16GB DDR5 SODIMM it works beautifully.</p>
<p><em>Edit 05/02/2025</em></p>
<p>Here is a picture of the motherboard assembled in my cheapo mid-size tower in its full glory:</p>
<figure><img src="/gilles/images/n305/full.jpg"
    alt="CW-NAS-ADLN-KV10 installed in ATX tower">
</figure>

<p>The only actual difficulty I encountered is that the ATX 12V connector sits uncomfortably close to the CPU heatsink. By chance, after trimming a bit the connector (who needs all this extra insulating plastic anyway??) it fits exactly between two heat pipe tips &hellip; so don&rsquo;t be me, chose carefully your cooler and don&rsquo;t go with the default one offered by most AliExpress sellers &#x1f604;</p>
<figure><img src="/gilles/images/n305/connector.jpg"
    alt="Zoom on ATX 12V connector barely fitting next to the cooler">
</figure>

<h3 id="nerd-alert">Nerd alert</h3>
<p>First, the OEM indeed appears to be CWWK (and not Topton):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># dmidecode -s baseboard-manufacturer</span>
</span></span><span style="display:flex;"><span>CWWK
</span></span></code></pre></div><p>So what actually is this N305 CPU?</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># cat /proc/cpuinfo</span>
</span></span><span style="display:flex;"><span>processor       : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>vendor_id       : GenuineIntel
</span></span><span style="display:flex;"><span>cpu family      : <span style="color:#ae81ff">6</span>
</span></span><span style="display:flex;"><span>model           : <span style="color:#ae81ff">190</span>
</span></span><span style="display:flex;"><span>model name      : Intel<span style="color:#f92672">(</span>R<span style="color:#f92672">)</span> Core<span style="color:#f92672">(</span>TM<span style="color:#f92672">)</span> i3-N305
</span></span><span style="display:flex;"><span>stepping        : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>microcode       : 0x1a
</span></span><span style="display:flex;"><span>cpu MHz         : 800.000
</span></span><span style="display:flex;"><span>cache size      : <span style="color:#ae81ff">6144</span> KB
</span></span><span style="display:flex;"><span>physical id     : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>siblings        : <span style="color:#ae81ff">8</span>
</span></span><span style="display:flex;"><span>core id         : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>cpu cores       : <span style="color:#ae81ff">8</span>
</span></span><span style="display:flex;"><span>apicid          : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>initial apicid  : <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>fpu             : yes
</span></span><span style="display:flex;"><span>fpu_exception   : yes
</span></span><span style="display:flex;"><span>cpuid level     : <span style="color:#ae81ff">32</span>
</span></span><span style="display:flex;"><span>wp              : yes
</span></span><span style="display:flex;"><span>flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect avx_vnni dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities
</span></span><span style="display:flex;"><span>vmx flags       : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple shadow_vmcs ept_violation_ve ept_mode_based_exec tsc_scaling usr_wait_pause
</span></span><span style="display:flex;"><span>bugs            : spectre_v1 spectre_v2 spec_store_bypass swapgs rfds bhi
</span></span><span style="display:flex;"><span>bogomips        : 3609.60
</span></span><span style="display:flex;"><span>clflush size    : <span style="color:#ae81ff">64</span>
</span></span><span style="display:flex;"><span>cache_alignment : <span style="color:#ae81ff">64</span>
</span></span><span style="display:flex;"><span>address sizes   : <span style="color:#ae81ff">39</span> bits physical, <span style="color:#ae81ff">48</span> bits virtual
</span></span><span style="display:flex;"><span>power management:
</span></span><span style="display:flex;"><span><span style="color:#75715e"># ... repeat 7 more times ...</span>
</span></span></code></pre></div><p>So it&rsquo;s a honest-to-god 8 cores CPU (no HT shenanigans there), with 6MB of cache (still twice less than my 2007-era Xeon &#x1f61e;). It supports AVX2, AES, and VT-x. And of course it features all the sexy Intel security bugs such as spectre &#x1f601;</p>
<p>What does <code>lspci</code> show then?</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># lspci</span>
</span></span><span style="display:flex;"><span>00:00.0 Host bridge: Intel Corporation Device <span style="color:#ae81ff">4617</span>
</span></span><span style="display:flex;"><span>00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N <span style="color:#f92672">[</span>UHD Graphics<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>00:0d.0 USB controller: Intel Corporation Alder Lake-N Thunderbolt <span style="color:#ae81ff">4</span> USB Controller
</span></span><span style="display:flex;"><span>00:14.0 USB controller: Intel Corporation Alder Lake-N PCH USB 3.2 xHCI Host Controller
</span></span><span style="display:flex;"><span>00:14.2 RAM memory: Intel Corporation Alder Lake-N PCH Shared SRAM
</span></span><span style="display:flex;"><span>00:16.0 Communication controller: Intel Corporation Alder Lake-N PCH HECI Controller
</span></span><span style="display:flex;"><span>00:1c.0 PCI bridge: Intel Corporation Device 54b9
</span></span><span style="display:flex;"><span>00:1c.2 PCI bridge: Intel Corporation Device 54ba
</span></span><span style="display:flex;"><span>00:1c.3 PCI bridge: Intel Corporation Device 54bb
</span></span><span style="display:flex;"><span>00:1c.6 PCI bridge: Intel Corporation Device 54be
</span></span><span style="display:flex;"><span>00:1f.0 ISA bridge: Intel Corporation Alder Lake-N PCH eSPI Controller
</span></span><span style="display:flex;"><span>00:1f.3 Audio device: Intel Corporation Alder Lake-N PCH High Definition Audio Controller
</span></span><span style="display:flex;"><span>00:1f.4 SMBus: Intel Corporation Alder Lake-N SMBus
</span></span><span style="display:flex;"><span>00:1f.5 Serial bus controller: Intel Corporation Alder Lake-N SPI <span style="color:#f92672">(</span>flash<span style="color:#f92672">)</span> Controller
</span></span><span style="display:flex;"><span>01:00.0 Non-Volatile memory controller: MAXIO Technology <span style="color:#f92672">(</span>Hangzhou<span style="color:#f92672">)</span> Ltd. NVMe SSD Controller MAP1202 <span style="color:#f92672">(</span>DRAM-less<span style="color:#f92672">)</span> <span style="color:#f92672">(</span>rev 01<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>02:00.0 SATA controller: ASMedia Technology Inc. ASM1166 Serial ATA Controller <span style="color:#f92672">(</span>rev 02<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>03:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V <span style="color:#f92672">(</span>rev 04<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>04:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V <span style="color:#f92672">(</span>rev 04<span style="color:#f92672">)</span>
</span></span></code></pre></div><p>The 6 SATA ports are provided by an ASM1166 controller. Contrarily to other terrible options, at least it doesn&rsquo;t prevent the CPU to reach deeper C-states. In a nutshell, it&rsquo;s not great, but not terrible.</p>
<figure><img src="/gilles/images/not_great_not_terrible.png"
    alt="Not great, not terrible">
</figure>

<p>It also has a PCIe 3.0 x4 port, as well as 2 M.2 NVME slots, for a total TDP of ~25W under full load.</p>
<h2 id="the-software">The Software</h2>
<p>I slapped an Alma Linux 9 install on that bad boy. Installation process is as uneventful as possible. Everything works out of the box!</p>
<p><em>Edit 25/02/2025</em>: After a tiny bit of configuration, consisting mainly in installing <code>intel-media-driver</code> (the N305 works with the iHD driver, not the older i915 one) and tinkering the container configuration, transcoding in Jellyfin is completely hardware accelerated, fully supporting H264/HEVC for both decoding &amp; encoding, and AV1 for decoding only.</p>
]]></content>
        </item>
        
        <item>
            <title>State of Wayland (January 2025), or Why I Stopped Caring</title>
            <link>https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/</link>
            <pubDate>Sun, 26 Jan 2025 15:00:00 +0100</pubDate>
            <author>gilles@gagniard.org (Gilles Gagniard)</author>
            <guid>https://gagniard.org/gilles/posts/2025/01/state-of-wayland-january-2025-or-why-i-stopped-caring/</guid>
            <description>&lt;h2 id=&#34;a-bit-of-kde-centric-history&#34;&gt;A bit of (KDE-centric) history&lt;/h2&gt;
&lt;p&gt;The Wayland protocol began its life in 2008, with the first stable protocol version (1.0) being finalized back in 2012. Plasma 5.5 was the first release to sport a Wayland session in 2015, with Plasma 6 finally making it the default in February 2024.&lt;/p&gt;
&lt;p&gt;Therefore, Wayland is far from being this new experimental toy which would lack a bit of polish due to its young age. Case in point: KWin maintainers had even announced back in 2018 that &lt;a href=&#34;https://blog.martin-graesslin.com/blog/2018/01/kwinx11-is-feature-frozen&#34;&gt;KWin/X11 would now be feature frozen&lt;/a&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="a-bit-of-kde-centric-history">A bit of (KDE-centric) history</h2>
<p>The Wayland protocol began its life in 2008, with the first stable protocol version (1.0) being finalized back in 2012. Plasma 5.5 was the first release to sport a Wayland session in 2015, with Plasma 6 finally making it the default in February 2024.</p>
<p>Therefore, Wayland is far from being this new experimental toy which would lack a bit of polish due to its young age. Case in point: KWin maintainers had even announced back in 2018 that <a href="https://blog.martin-graesslin.com/blog/2018/01/kwinx11-is-feature-frozen">KWin/X11 would now be feature frozen</a>.</p>
<p>At this point, it&rsquo;s fair to consider that the Wayland protocol and its implementation in compositors is fairly mature; and the significant remaining issues are probably caused by some fundamental or structural issue with the protocol itself.</p>
<h2 id="the-good">The Good</h2>
<p>Wayland has improved multi-monitor support (when they have their own distinct refresh rates), HDR/VRR, and mouse gestures.</p>
<p>That&rsquo;s it.</p>
<p>Sure, I&rsquo;ve read some horror stories about bad tearing with Xorg, but I&rsquo;ve never seen or experienced them personally with any app. Fractional Scaling is also often cited as a new Wayland capability, which is really baffling as I&rsquo;ve been using 150% fractional scaling on Xorg for literally years (??) which leads me to &hellip;</p>
<h2 id="the-bad">The Bad</h2>
<p>The Wayland protocol originally <strong>didn&rsquo;t support fractional scaling at all</strong>, <a href="https://dudemanguy.github.io/blog/posts/2022-06-10-wayland-xorg/wayland-xorg.html">only integer scaling</a>! This is not really a surprise, the protocol design is almost old enough to drink beers and pay taxes, and HighDPI screens weren&rsquo;t really a thing back then. Until recently, fractional scaling was implemented at compositor level, requesting all applications to render at the nearest integer (for instance 2x for 150% scaling), and then scaling down the buffer, resulting in a blurry font mess especially with CJK characters, and abandoning all hopes of getting proper font hinting.</p>
<p>In 2022, an additional optional <a href="https://wayland.app/protocols/fractional-scale-v1">fractional-scale-v1</a> protocol was added to the standard, so that applications could have access to the actual fractional scale being currently used on a given screen, and having a chance to scale themselves properly without relying on the compositor. It has been pretty much tacked on the base Wayland protocol as an afterthought, and it shows.</p>
<p>For instance, Firefox has a hidden <code>widget.wayland.fractional-scale.enabled</code> flag to enable experimental support for native fractional scaling, but until Firefox 134 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1849109">it was completely broken</a>. While this particular issue has now been fixed, popups/menus/tooltips are still randomly blurry due to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1849092">some obscure pixel grid alignment issue</a>. This is caused by GTK3 not natively supporting fractional scaling anyway, plus Firefox trying its best to still do the right thing on top, but <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1827232">there are no concrete plans to move away from GTK3</a>.</p>
<p>By the way, this is exactly how Xorg has supported fractional scaling since the beginning of times: exposing the actual desired DPI (through Xft.dpi property) to apps and letting them do the right thing. Sure, very old toolkits may have been hardcoded to 96 DPI as it was the usage in the 90&rsquo;s, but Qt, Electron, Chromium or Firefox work perfectly. Gtk only scales the fonts and UI elements (sometimes), but not the icons, because it is broken on purpose: as Wayland only supported integer scaling, this surely means fractional scaling is useless and technically inferior, right?</p>
<h2 id="is-2025-the-year-of-the-wayland-desktop-c-">Is 2025 the year of the Wayland Desktop (c) ?</h2>
<p>After 17 years, it obviously won&rsquo;t. It is kind of ironic that the main reason why is <em>technical debt</em>: at this point the Wayland protocol is too old and not adapted to modern use cases, making its main argument against Xorg moot. Personally, I stopped caring and trying. My desktop has a single large 4k monitor where fractional scaling is essential, and it doesn&rsquo;t have a touchpad. Therefore, there is strictly nothing Wayland currently brings to the table that the venerable Xorg can&rsquo;t provide, with less issues and more stability.</p>
<p>An example of such issues is LibreOffice, which is lagging so badly when scrolling that it freezes. This is even documented on <a href="https://wiki.archlinux.org/title/LibreOffice#KDE_Plasma/GNOME_+_Wayland_with_or_without_fractional_scaling_results_in_terrible_lag_when_scrolling">Arch Wiki</a> as the current normal state of affairs, with a workaround to force running it on Xwayland.</p>
<p>Xorg still does everything I need, so let&rsquo;s hope it will be kept somewhat maintained for the years to come.</p>
]]></content>
        </item>
        
    </channel>
</rss>
