<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>lnl&#x27;s weblog</title>
      <link>https://liberda.nl</link>
      <description></description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://liberda.nl/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Tue, 05 Nov 2024 21:30:00 +0100</lastBuildDate>
      <item>
          <title>Time to break some habits</title>
          <pubDate>Tue, 05 Nov 2024 21:30:00 +0100</pubDate>
          <author>isf</author>
          <link>https://liberda.nl/weblog/against-the-time/</link>
          <guid>https://liberda.nl/weblog/against-the-time/</guid>
          <description xml:base="https://liberda.nl/weblog/against-the-time/">&lt;p&gt;I&#x27;ve made lots of mistakes. The hard part was realizing not just the fact, but the extent.
Sure, I&#x27;ve been hurt by others, but there also are quite many things I&#x27;ve just done to myself.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s time to learn on mistakes. Here&#x27;s my recent life rule:&lt;&#x2F;p&gt;
&lt;h1 id=&quot;make-time-work-in-your-favor&quot;&gt;Make time work in your favor.&lt;&#x2F;h1&gt;
&lt;p&gt;Its strongest power is that it&#x27;s vague, it can be universal. On the other hand, the biggest issue
with it is that it&#x27;s so vague, you might have no idea what to do with it.&lt;&#x2F;p&gt;
&lt;p&gt;Can&#x27;t go wrong with some examples. No-brainer: don&#x27;t keep 500 euro on your PayPal account.
Put it somewhere that has interest rates. Bank deposit, savings account. Really.&lt;&#x2F;p&gt;
&lt;p&gt;Staying at a bad job is probably better than quitting it without finding a new one first.
Or, to show my point: time passing with a job is better (on CV, for your budget, ...) than time
passing while jobless.&lt;&#x2F;p&gt;
&lt;p&gt;Much easier said than done: time works in your favor if you work on your goal a lot,
systematically, ahead of your deadlines. The other way is also true: it works increasingly
against you if you leave it over - your deadlines &lt;strong&gt;will&lt;&#x2F;strong&gt; approach you.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-reach-a-goal-you-have-to-set-it&quot;&gt;To reach a goal, you have to set it.&lt;&#x2F;h2&gt;
&lt;p&gt;Ok, all of this so far was probably rather obvious, but here&#x27;s the big part:
it was only about &lt;em&gt;reaching&lt;&#x2F;em&gt; goals. Thing is, I haven&#x27;t had goals I failed to fulfill.
I&#x27;ve just barely had any goals at all.&lt;&#x2F;p&gt;
&lt;p&gt;It only hit me when put different. Stagnation is not staying at a flat, stable level, there&#x27;s no such thing.
It means to &lt;em&gt;slowly become worse&lt;&#x2F;em&gt;. Oh, sorry, did I say something about the time again?&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re sad about the clocks ticking, it&#x27;s not about the time itself. It&#x27;s about what you&#x27;re doing with it.
Noone will do it for you.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>&quot;War on WPE&quot;, or the single-member community of Automattic CEOs</title>
          <pubDate>Fri, 18 Oct 2024 01:00:00 +0200</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/current/mullenweg-cash-grab/</link>
          <guid>https://liberda.nl/current/mullenweg-cash-grab/</guid>
          <description xml:base="https://liberda.nl/current/mullenweg-cash-grab/">&lt;p&gt;On October 17, a blog post was published on WordPress.org, attributed vaguely to &quot;WordPress.org&quot;,
titled &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wordpress.org&#x2F;news&#x2F;2024&#x2F;10&#x2F;wp-engine-promotions&#x2F;&quot;&gt;&quot;&lt;em&gt;WP Engine Promotions&lt;&#x2F;em&gt;.&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given the egregious legal attacks by WP Engine against WordPress co-founder Matt Mullenweg,&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Fact check: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2024&#x2F;10&#x2F;3&#x2F;24261016&#x2F;wordpress-wp-engine-lawsuit-automattic-matt-mullenweg&quot;&gt;WP Engine&#x27;s lawsuit first names Automattic&lt;&#x2F;a&gt;, and only then Mullenweg.
&quot;Mullenweg also controls and serves as the CEO and President of Automattic,&quot; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wpengine.com&#x2F;wp-content&#x2F;uploads&#x2F;2024&#x2F;10&#x2F;Complaint-WP-Engine-v-Automattic-et-al-with-Exhibit.pdf&quot;&gt;says WPE&#x27;s complaint.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;a number of their customers have been looking for alternative hosting,
and in return a number of hosts have created specials and promotions for WP Engine customers
looking to migrate to a host that has great relations with WordPress.org.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;What is &quot;WordPress.org?&quot; Sounds like a community organization. An obvious guess would be
the WordPress Foundation, the non-profit, right? Betteridge wins, as usually.&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;louder&quot;&gt;
    &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2024&#x2F;10&#x2F;4&#x2F;24262232&#x2F;matt-mullenweg-wordpress-org-wp-engine&quot;&gt;&quot;&lt;em&gt;WordPress.org just belongs to me personally&lt;&#x2F;em&gt;,&quot; says Matt Mullenweg, asked by The Verge.&lt;&#x2F;a&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Putting it simple, it&#x27;s competitors to WPE that Matt Mullenweg personally likes, and who are
specifically trying to take over WPE&#x27;s customers.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here they are, in alphabetical order.&lt;&#x2F;p&gt;
&lt;p&gt;We’ll update this post if any new offers come online, get in touch and we’ll link it.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Bluehost will cover migration costs, and buy out your existing contract. They offer 24&#x2F;7 phone support,
you can call them at 844-699-3907. Their wp.cloud-powered Cloud hosting starts at $29.99&#x2F;mo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Hold on, WP Cloud? Bluehost Cloud? What&#x27;s all this? Let me &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wp.cloud&#x2F;2024&#x2F;03&#x2F;07&#x2F;bluehosts-partnership-with-wp-cloud-ushers-in-new-era-of-wordpress-hosting&#x2F;&quot;&gt;check press releases.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;the WP Cloud team is excited to confirm our new partnership with Bluehost, a proven leader
in the hosting community.&lt;&#x2F;p&gt;
&lt;p&gt;This collaboration culminates in the form of a new product, Bluehost Cloud,
that is redefining WordPress cloud hosting forever.&lt;&#x2F;p&gt;
&lt;p&gt;WP Cloud was built by Automattic, the team behind WordPress.com, WooCommerce, Jetpack, and other great products,
with a singular vision in mind: to build a cloud platform exclusively tailored for WordPress.&lt;&#x2F;p&gt;
&lt;p&gt;Or as co-founder of WordPress and CEO of Automattic, Matt Mullenweg, puts it, […]&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Oh. Matt, the CEO of Automattic, has good relations with a hosting product that depends
entirely on the infrastructure of Automattic. But that&#x27;s just the first one from the list,
we gotta check the rest.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Dreamhost is offering free migrations, with plans starting at $16.95&#x2F;mo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;That&#x27;s a hosting older than WordPress, running since 1997. Alright, that&#x27;s one inde-
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dreamhost.com&#x2F;news&#x2F;announcements&#x2F;jetpack-professional-dreampress&#x2F;&quot;&gt;Wait, no!&lt;&#x2F;a&gt; [emboldened by lnl]&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Well, &lt;strong&gt;thanks to our friends at Automattic&lt;&#x2F;strong&gt; — the company behind WordPress.com […] — […]
I’m excited to announce that customers on our DreamPress Plus and Advanced plans, along with everyone
on our legacy offerings, will now have access to Jetpack Professional (worth $299&#x2F;year)!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ugh, another one? Who else is left?&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Pressable will buy out your current WP Engine contract and match their pricing, so if you’re
in the middle of a long contract with WP Engine, you don’t need to wait until your renewal time.&lt;&#x2F;li&gt;
&lt;li&gt;WordPress.com will give you a free year of any plan they offer, and donate 5% of your purchase price
to the WordPress Foundation. Their relevant plans start at $25&#x2F;mo.&lt;&#x2F;li&gt;
&lt;li&gt;For large-scale enterprise customers, WordPress VIP will cover the cost of migration.
Their plans generally start at $2k&#x2F;mo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;That&#x27;s it, that&#x27;s the whole list. All last 3 are literally just different brands of Matt&#x27;s own company.
It&#x27;s symptomattic.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Don&#x27;t all the prices above sound ridiculously expensive for a page that is mostly contact info
and occassionally publishes posts? Short read: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kristoff.it&#x2F;blog&#x2F;static-site-paradox&#x2F;&quot;&gt;&lt;em&gt;The Static Site Paradox&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Hatch, change, rewind. 5 years as myself</title>
          <pubDate>Sat, 27 Jul 2024 20:30:00 +0200</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/long-live-selfisekai/</link>
          <guid>https://liberda.nl/weblog/long-live-selfisekai/</guid>
          <description xml:base="https://liberda.nl/weblog/long-live-selfisekai/">&lt;p&gt;Nothing felt right. The more I&#x27;ve changed, the more I hated what I was turning into,
even though it was out of my control.&lt;&#x2F;p&gt;
&lt;p&gt;One day, a seemingly minor event broke something in me. I suddenly understood how much
gender dysphoria was eating me alive. All I knew was that I had to act.&lt;&#x2F;p&gt;
&lt;p&gt;I needed a new nickname to start social changes. Being a weeb, I ended up with selfisekai,
and quickly got a new domain.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;lauren@shinonome ~ $ whois selfisekai.rocks | rg Creation
Creation Date: 2019-07-27T20:33:35Z
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Today&#x27;s an anniversary. A trannyversary, if you will. It&#x27;s been 5 years. Did coming out make
other things worse? It did. Did I ever regret it? No.&lt;&#x2F;p&gt;
&lt;p&gt;Big thanks to all who helped me through this time. Also now, when nothing feels right.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Building Chromium at a distro? Here&#x27;s your copium</title>
          <pubDate>Sun, 19 May 2024 19:45:00 +0200</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/heres-your-copium/</link>
          <guid>https://liberda.nl/weblog/heres-your-copium/</guid>
          <description xml:base="https://liberda.nl/weblog/heres-your-copium/">&lt;p&gt;Here&#x27;s the thing: Google does not test whether Chromium still works
any further than on the tip of their nose. If they can build it to
ship Google Chrome, the rest doesn&#x27;t matter. This is not what a healthy
free software project with such an impact should work like. And yet, well,
nothing has changed.
If you struggle to run Chromium, you will ultimately struggle to use
&lt;a href=&quot;&#x2F;weblog&#x2F;javascript-was-a-mistake&#x2F;&quot;&gt;&lt;em&gt;the Chromium-shaped web&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. Therefore, it&#x27;s your own problem.&lt;&#x2F;p&gt;
&lt;article class=&quot;columns anpost&quot;&gt;
    &lt;div class=&quot;column article-meta is-12&quot;&gt;
        &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;liberda.nl&amp;#x2F;weblog&amp;#x2F;javascript-was-a-mistake&amp;#x2F;&quot; class=&quot;text-not-decorated&quot;&gt;
            &lt;p class=&quot;title is-3 text-decorated&quot;&gt;More web, less web apps! Some thoughts on the web.&lt;&#x2F;p&gt;
            &lt;p class=&quot;subtitle is-5&quot;&gt;On web engines, web content, and web rent.&lt;&#x2F;p&gt;
            &lt;&#x2F;a&gt;
        &lt;time datetime=&quot;2023-11-08T17:15:00+01:00&quot;&gt;2023-11-08T17:15:00+01:00&lt;&#x2F;time&gt;
    &lt;&#x2F;div&gt;
    &lt;&#x2F;article&gt;
&lt;p&gt;Distributions have for long separately maintained their own sets of patches.
This got changed by Gentoo maintainers, who have started putting the most
short-living patches in separate git repositories, which many other
distros have similarly started to make use of.&lt;&#x2F;p&gt;
&lt;p&gt;What happened then was, Chromium M120 broke it. This release in particular
has brought, at the same time, both &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bugs.chromium.org&#x2F;p&#x2F;v8&#x2F;issues&#x2F;detail?id=14449&quot;&gt;V8 not building with GCC&lt;&#x2F;a&gt;,
and &lt;code&gt;absl::optional&lt;&#x2F;code&gt; becoming replaced with &lt;code&gt;std::optional&lt;&#x2F;code&gt;,
which hits &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;llvm&#x2F;llvm-project&#x2F;issues&#x2F;50248&quot;&gt;a bug in either LLVM clang++&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gcc.gnu.org&#x2F;bugzilla&#x2F;show_bug.cgi?id=101227&quot;&gt;or GNU libstdc++&lt;&#x2F;a&gt;,
not sure, activating if the combination of 2 is used.&lt;&#x2F;p&gt;
&lt;p&gt;The outcome? Most distros, including Alpine (maintained by me), Arch, Gentoo, and Fedora,
started building the whole Chromium with the source code of LLVM&#x27;s libc++
that Chromium is shipped with by default. This came at the cost
of unbundling dependencies with C++ interfaces, which we do to deduplicate code
and effectively provide security fixes in third-party libraries used in packages.&lt;&#x2F;p&gt;
&lt;article class=&quot;columns anpost&quot;&gt;
    &lt;figure class=&quot;cover column is-3 is-hidden-desktop&quot;&gt;
    &lt;div class=&quot;image is-16by9&quot;&gt;
    &lt;picture&gt;
        &lt;source type=&quot;image&amp;#x2F;webp&quot; srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;8CfPK2h8_mVMt57rec3h2.webp 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FhRTNlPzRD6j8fV_uF8QD.webp 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;wjgJGVHvkfQsC6SYeHyzK.webp 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;y93_CBRrFs878NXDci-_q.webp 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;5IAqwgmygBatSFXSP32jW.webp 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FFAWQje7dy6yFJzQkSy_q.webp 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ieJw67c8Gi2-ItXTsPovk.webp 1920w&quot;&gt;
                &lt;img
                        type=&quot;image&amp;#x2F;jpeg&quot;
                        srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;BbkY9iPd-Sav2YtI4iKEg.jpeg 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ix-_zod_gGzyr7u_wRzud.jpeg 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;3oM92kQ6xPBOIgItiDocq.jpeg 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;RLNyotU3sLkXOKmlZ54ug.jpeg 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ykwtiXqKDBi2Yzne7gMsi.jpeg 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;pn4dKFkM4j6bTkVcs9QZZ.jpeg 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FNwYxehv4Ip_oNRdGX6C7.jpeg 1920w&quot;
                        src=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FNwYxehv4Ip_oNRdGX6C7.jpeg&quot;
                        alt=&quot;A very color distorted, kinda blurry photo of a woman, having a breakdown, sitting in front of a laptop. A caption: &amp;quot;static-link-the-world is a bad strategy, unsurprisingly&amp;quot;.&quot;
                        title=&quot;A very color distorted, kinda blurry photo of a woman, having a breakdown, sitting in front of a laptop. A caption: &amp;quot;static-link-the-world is a bad strategy, unsurprisingly&amp;quot;.&quot;
                        &gt;
                &lt;&#x2F;picture&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;figure&gt;

    &lt;div class=&quot;column article-meta is-9&quot;&gt;
        &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;liberda.nl&amp;#x2F;weblog&amp;#x2F;from-source-or-vulnerable&amp;#x2F;&quot; class=&quot;text-not-decorated&quot;&gt;
            &lt;p class=&quot;title is-3 text-decorated&quot;&gt;You are still vulnerable to the WebP exploits, by the way&lt;&#x2F;p&gt;
            &lt;p class=&quot;subtitle is-5&quot;&gt;Software distribution is broken without maintenance on scale&lt;&#x2F;p&gt;
            &lt;&#x2F;a&gt;
        &lt;time datetime=&quot;2023-09-18T07:15:00+02:00&quot;&gt;2023-09-18T07:15:00+02:00&lt;&#x2F;time&gt;
    &lt;&#x2F;div&gt;
    &lt;figure class=&quot;cover column is-3 is-hidden-touch&quot;&gt;
    &lt;div class=&quot;image is-16by9&quot;&gt;
    &lt;picture&gt;
        &lt;source type=&quot;image&amp;#x2F;webp&quot; srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;8CfPK2h8_mVMt57rec3h2.webp 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FhRTNlPzRD6j8fV_uF8QD.webp 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;wjgJGVHvkfQsC6SYeHyzK.webp 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;y93_CBRrFs878NXDci-_q.webp 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;5IAqwgmygBatSFXSP32jW.webp 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FFAWQje7dy6yFJzQkSy_q.webp 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ieJw67c8Gi2-ItXTsPovk.webp 1920w&quot;&gt;
                &lt;img
                        type=&quot;image&amp;#x2F;jpeg&quot;
                        srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;BbkY9iPd-Sav2YtI4iKEg.jpeg 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ix-_zod_gGzyr7u_wRzud.jpeg 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;3oM92kQ6xPBOIgItiDocq.jpeg 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;RLNyotU3sLkXOKmlZ54ug.jpeg 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;ykwtiXqKDBi2Yzne7gMsi.jpeg 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;pn4dKFkM4j6bTkVcs9QZZ.jpeg 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FNwYxehv4Ip_oNRdGX6C7.jpeg 1920w&quot;
                        src=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;3b6wg1INVkuvcEoJ6Nt67&amp;#x2F;FNwYxehv4Ip_oNRdGX6C7.jpeg&quot;
                        alt=&quot;A very color distorted, kinda blurry photo of a woman, having a breakdown, sitting in front of a laptop. A caption: &amp;quot;static-link-the-world is a bad strategy, unsurprisingly&amp;quot;.&quot;
                        title=&quot;A very color distorted, kinda blurry photo of a woman, having a breakdown, sitting in front of a laptop. A caption: &amp;quot;static-link-the-world is a bad strategy, unsurprisingly&amp;quot;.&quot;
                        &gt;
                &lt;&#x2F;picture&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;figure&gt;

    &lt;&#x2F;article&gt;
&lt;p&gt;(Noteworthy: Debian took a different approach and overrode their libstdc++ &lt;code&gt;&amp;lt;optional&amp;gt;&lt;&#x2F;code&gt;
header, to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;salsa.debian.org&#x2F;chromium-team&#x2F;chromium&#x2F;-&#x2F;blob&#x2F;4f1db34105a6cce3dbde845cfe81756f566db653&#x2F;debian&#x2F;patches&#x2F;fixes&#x2F;absl-optional.patch#L37-40&quot;&gt;a copy of it where triggering asserts got removed&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;Some of you could ask:
ok, lnl, but Chromium M120 was released as stable &lt;em&gt;in December 2023&lt;&#x2F;em&gt;.
It&#x27;s &lt;del&gt;April&lt;&#x2F;del&gt; May 2024 now. Hasn&#x27;t anything changed in the meantime?
No, not really, and you&#x27;re a fool for thinking otherwise.
Nothing will &lt;em&gt;really&lt;&#x2F;em&gt; change without fundamental changes of Chromium&#x27;s purpose.
In turn, that won&#x27;t change under its current ownership of Google.
But while this is the status quo, let&#x27;s cope together.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;it-s-my-turn-on-rolling-the-stone&quot;&gt;It&#x27;s my turn on rolling the stone&lt;&#x2F;h1&gt;
&lt;p&gt;I&#x27;ve patched Chromium enough to build with GCC and libstdc++.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;selfisekai&#x2F;copium&quot;&gt;Here&#x27;s your &lt;code&gt;copium&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, a common set of Chromium patches.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;How original is this? To be fair, a lot of it consists of cherry-picks from main,
but there&#x27;s not that few patches I made myself (trying to upstream it as well).&lt;&#x2F;p&gt;
&lt;p&gt;Does it have problems? A lot. It still doesn&#x27;t work with clang (see above).
Also it doesn&#x27;t work on aarch64 and armv7, for different reasons.
No idea if it works anywhere outside x86_64, really.&lt;&#x2F;p&gt;
&lt;p&gt;But it&#x27;s something. How long is it gonna last? I don&#x27;t know.
But I&#x27;ll be the Chromium doll for now.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2024 February 15, raid notice</title>
          <pubDate>Fri, 16 Feb 2024 02:00:00 +0100</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/raid-notice/</link>
          <guid>https://liberda.nl/weblog/raid-notice/</guid>
          <description xml:base="https://liberda.nl/weblog/raid-notice/">&lt;p&gt;I, lauren n. liberda, editor-in-chief of liberda.nl, have been raided at the place of my long-term residence
on 2024-02-15 after 07:00 (morning) by the Dutch police, in coordination with Polish prosecutors.
My electronic devices have been seized.&lt;&#x2F;p&gt;
&lt;p&gt;Out of necessary caution, please &lt;strong&gt;distrust&lt;&#x2F;strong&gt; the SSH keys with following fingerprints,
previously found on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keys.selfisekai.rocks&#x2F;ssh&quot;&gt;&lt;code&gt;https:&#x2F;&#x2F;keys.selfisekai.rocks&#x2F;ssh&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;256 SHA256:D5dT45SUx3TY5ke4iqzcDPDRfSAjxZk8Q3olvIfLrtE lauren@shinomiya (ED25519)
4096 SHA256:huOtbBVoqrKtEqIEcLe2CjvTlZC7o4NOmxIa00+HYzQ JuiceSSH (RSA)
256 SHA256:DZ7sY1NHtF2THmN0RqxIl7ec2zz0xQVZ1QFvEjqYXas lauren@matoi (ED25519)
256 SHA256:WFAFP902Wl4ZC2Yqje00XXSmCqOk7nrmfOORwSj0ihk lauren@joestar (ED25519)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;the following OpenPGP key, previously found on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keys.selfisekai.rocks&#x2F;gpg&quot;&gt;&lt;code&gt;https:&#x2F;&#x2F;keys.selfisekai.rocks&#x2F;gpg&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;pub   ed25519&#x2F;734C629FD04BD319 2021-11-27 Lauren N. Liberda &amp;lt;lauren@liberda.nl&amp;gt;
 Primary key fingerprint: A16F 3AB1 39AE E4A3 635D  19ED 734C 629F D04B D319
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Also assume any other previous communication, including Matrix and Signal, to be compromised.&lt;&#x2F;p&gt;
&lt;p&gt;No public comment on the investigation.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New government, new TVP. News from the same reality?</title>
          <pubDate>Sat, 23 Dec 2023 11:30:00 +0100</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/current/new-tvp/</link>
          <guid>https://liberda.nl/current/new-tvp/</guid>
          <description xml:base="https://liberda.nl/current/new-tvp/">&lt;p&gt;Little background, because it&#x27;s a big legal mess. In 2015, when Law and Justice (PiS) took over,
having parliament majorities on their own (with 37.5% votes) and their President, they went on a run
through institutions, including courts. The judges-members of the National Council of the Judiciary (KRS),
are getting chosen by the Sejm (lower parliament house), instead of judges, as it was previously.
This itself is believed to be unconstitutional, considering Constitution&#x27;s article 186.1:
&quot;The National Council of the Judiciary upholds the independence of the courts
and the independence of judges&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Captured over KRS, Supreme Court, Constitutional Tribunal.
Judges replaced during their valid term, together with law changes about their courts.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiadomosci.onet.pl&#x2F;tylko-w-onecie&#x2F;konstytucjonalisci-o-publikacji-wyroku-tk-premier-beacie-szydlo-grozi-trybunal-stanu&#x2F;flwnj3&quot;&gt;Prime minister not publishing judgements in the Journal of Laws.&lt;&#x2F;a&gt;
We&#x27;ve seen it all, and I&#x27;m surely missing a lot of it here, it&#x27;s hard to follow through and describe
the whole process.&lt;&#x2F;p&gt;
&lt;p&gt;Members of parliament from PiS have turned to the captured Constitutional Tribunal,
with a question whether the law allowing to dismiss the boards of state media is constitutional.
On 2023-12-14, Przyłębska&#x27;s Tribunal has decided in a pre-judgment proceeding to secure their claims,
by forbidding to dismiss the members of the boards. First of all, the government rejects
the Przyłębska Tribunal&#x27;s rulings. But even then, the Minister of Culture cites experts, saying that
the decision cannot impact him as a minister, since he&#x27;s not a side in the proceeding.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quick-rewind-2023-12-19&quot;&gt;Quick rewind, 2023-12-19&lt;&#x2F;h2&gt;
&lt;p&gt;Sejm has received, processed, and voted through the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sejm.gov.pl&#x2F;Sejm10.nsf&#x2F;druk.xsp?nr=117&quot;&gt;resolution on the restoration of legal order, impartiality,
and reliability of public media and the Polish Press Agency&lt;&#x2F;a&gt;. The resolution concludes that
the citizens&#x27; constitutional right to reliable and impartial information is being violated, and the National Media Council
is unconstitutional by Constitutional Tribunal&#x27;s unexecuted judgement, which the state is supposed to finally execute.
It calls for all state institutions to act on this, and especially State Treasury as the owner of these companies
(in this context represented by the Minister of Culture and National Inheritance).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;it-s-happening-2023-12-20&quot;&gt;It&#x27;s happening, 2023-12-20&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The Minister of Culture and National Heritage, as the body exercising the ownership rights of
the State Treasury, which holds 100% of the shares in the Companies, acting pursuant to the provisions of the
Commercial Companies Code, on December 19, 2023 dismissed the existing chairpersons of the Management Boards of
Telewizja Polska S.A., Polskie Radio S.A. and Polska Agencja Prasowa S.A. and their Supervisory Boards.
The Minister appointed new Supervisory Boards of the aforementioned Companies, which in turn appointed
new Management Boards of the Companies.&lt;&#x2F;p&gt;
&lt;p&gt;The necessity for such actions and the rationale was determined by the Resolution of the Sejm of the
Republic of Poland from December 19, 2023 on the restoration of legal order and the impartiality and credibility
of the public media and the Polish Press Agency.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;kultura_gov_pl&#x2F;status&#x2F;1737408733699805330&quot;&gt;tweeted Ministry&#x27;s account on 10:44&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This process is controversial. The Helsinki Foundation for Human Rights agrees with the urgent need for public media
reforms, but &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hfhr.pl&#x2F;aktualnosci&#x2F;stanowisko-hfpc-ws-zmian-w-mediach-publicznych&quot;&gt;says the method &quot;raises serious legal doubts&quot;&lt;&#x2F;a&gt;. &quot;However, we note that the issue of appointing and
canceling the compositions of personal bodies of public media is currently regulated by the Radio and Television
Broadcasting Act, and the Act on the Polish Press Agency.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;blockquote class=&quot;louder&quot;&gt;
    &quot;It is a violation of the law, which was created in violation of the Constitution after the 2015 elections. It is
illegitimate in the sense that it violates an illegitimate law and undermines the competence of the institutions that
uphold the unconstitutional order&quot;,
&lt;&#x2F;blockquote&gt;

&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oko.press&#x2F;decyzja-sienkiewicza-czyli-zamach-na-bezprawie&quot;&gt;says Piotr Pacewicz&lt;&#x2F;a&gt; from OKO.press.&lt;&#x2F;p&gt;
&lt;p&gt;To put it another way: there is no clear way to restore the rule of law. The new parliament decided to make an attack
on the laws that are not legitimate - same way as it has started, also because of the impact that the public media have
on the elections. A president willing to proceed with these reforms might be crucial - presidential elections are in 2025.
The justification submitted with this resolution directly calls it a &quot;transition process&quot;, which should
end with a proper public media regulation.&lt;&#x2F;p&gt;
&lt;p&gt;But let me be clear. Many don&#x27;t care much about the legality or illegality of it, but are just happy that the alternative
reality is gone from the terrestial broadcast, from being paid by the state money, from being this big.
There&#x27;s a lot of things that can go better, and not that many can go worse.&lt;&#x2F;p&gt;
&lt;p&gt;And so, on 11:18, the plug was pulled on TVP Info.&lt;&#x2F;p&gt;
&lt;figure&gt;
        &lt;video controls preload=&quot;metadata&quot; src=&quot;https:&amp;#x2F;&amp;#x2F;s.lnl.gay&amp;#x2F;koniec_tvpinfo-en.mp4&quot;&gt;
        &lt;&#x2F;video&gt;
    &lt;figcaption&gt;Interrupted TVP Info broadcast. [Telewizja Polska S.A. 2023]&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
&lt;p&gt;The channels and websites turned off, and still off as of 2023-12-23, include: TVP Info, TVP3 (all 16 regional channels),
TVP Parlament, TVP World. Everything scheduled has aired, except almost all news programs. Aired programs are: Belsat&#x27;s Vot Tak -
a program in Belarusian, TVP Wilno - targeted at the Polish ethnic minority in Lithuania, and... a part of Agrobiznes,
agrarian business news, which has aired &lt;em&gt;partially&lt;&#x2F;em&gt;, and got interrupted by a TVP Info host.&lt;&#x2F;p&gt;
&lt;figure&gt;
        &lt;video controls preload=&quot;metadata&quot; src=&quot;https:&amp;#x2F;&amp;#x2F;s.lnl.gay&amp;#x2F;agrobiz-en.mp4&quot;&gt;
        &lt;&#x2F;video&gt;
    &lt;figcaption&gt;Interrupted Agrobiznes broadcast on TVP1. [Telewizja Polska S.A. 2023]&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
&lt;p&gt;TVP employees have tried to broadcast where they could. There have been Facebook live streams made from phones,
inside the main headquarters on Woronicza. There has been a YouTube livestream, started by Samuel Pereira, TVP Info editor-in-chief,
who was broadcasting a TV from his phone&#x27;s camera, &quot;deleted by uploader&quot; during the stream.&lt;&#x2F;p&gt;
&lt;figure&gt;
        &lt;video controls preload=&quot;metadata&quot; src=&quot;https:&amp;#x2F;&amp;#x2F;s.lnl.gay&amp;#x2F;tvpnazywo.mp4&quot;&gt;
        &lt;&#x2F;video&gt;
    &lt;figcaption&gt;Fragment of the YouTube broadcast [Telewizja Polska S.A., 2023, supposedly]&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
&lt;p&gt;YouTube and Twitter accounts seem to still be in control of the previous team, though. They also still occupy the Powstańców Warszawy
building, from which Television Information Agency (TAI) has operated, broadcasting TVP Info and all news programs.
Instead of the top news program, viewers have seen this:&lt;&#x2F;p&gt;
&lt;figure&gt;
        &lt;video controls preload=&quot;metadata&quot; src=&quot;https:&amp;#x2F;&amp;#x2F;s.lnl.gay&amp;#x2F;20.12.2023_19_30-en.mp4&quot;&gt;
        &lt;&#x2F;video&gt;
    &lt;figcaption&gt;Replacement speech for The News on 2023-12-20 [Telewizja Polska S.A. 2023]&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
&lt;p&gt;The pretty quick takeover was possible due to the technic and security workers, who willingly cooperated with the new bosses.
Supposedly, they either didn&#x27;t support PiS in the first place, or didn&#x27;t want to lose work due to this bullshit.&lt;&#x2F;p&gt;
&lt;p&gt;More interestingly, the previous TVP chairman, Mateusz Matyszkowicz, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiadomosci.wp.pl&#x2F;nieznane-kulisy-zmian-w-tvp-prezes-bal-sie-ze-zlamie-prawo-pis-zarzuca-zdrade-6976485396838912a&quot;&gt;simply left his office&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;and-there-comes-the-news-again-2023-12-21&quot;&gt;And there comes the news, again, 2023-12-21&lt;&#x2F;h2&gt;
&lt;p&gt;Next day, as promised, the new news have aired. I&#x27;m doing a thing no serious news org would do - publishing the whole, 0.5h material,
with translated captions. I could talk much about it, what it contains, what&#x27;s wrong about it, but it might be best, if I simply let
you watch it.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s a news program made in 24 hours, and looks exactly like it.
Or worse, because the reporting got &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;patrykmichalski&#x2F;status&#x2F;1737910259484627451&quot;&gt;edited only a few hours earlier, with source materials brought by taxis&lt;&#x2F;a&gt;.
Reportedly, it still doesn&#x27;t have a proper studio. TAI is still occupied,
and after a PiS MP has entered the studio after the previous day&#x27;s broadcast,
TVP feared sabotage, and it was &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wirtualnemedia.pl&#x2F;artykul&#x2F;tomasz-sygut-19-30-wiadomosci-tvp-reporterzy-bartlomiej-bublewicz-igor-nazaruk-zmiany-zwolnienia&quot;&gt;aired from a studio rented from ZPR Media&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;figure&gt;
        &lt;video controls preload=&quot;metadata&quot; src=&quot;https:&amp;#x2F;&amp;#x2F;s.lnl.gay&amp;#x2F;21.12.2023_19_30-en.mp4&quot;&gt;
        &lt;&#x2F;video&gt;
    &lt;figcaption&gt;The 19:30 program on 2023-12-20 [Telewizja Polska S.A. 2023]&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
&lt;p&gt;I&#x27;m not sure what to think about it myself.
The only opinion I&#x27;ll cite, if you want a TL;DR, is a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oko.press&#x2F;nowy-program-tvp&quot;&gt;joint statement of OKO.press journalists: &quot;No longer propaganda, but not quite yet a good TV&quot;.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Edited to correct the studio&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>More web, less web apps! Some thoughts on the web.</title>
          <pubDate>Wed, 08 Nov 2023 17:15:00 +0100</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/javascript-was-a-mistake/</link>
          <guid>https://liberda.nl/weblog/javascript-was-a-mistake/</guid>
          <description xml:base="https://liberda.nl/weblog/javascript-was-a-mistake/">&lt;p&gt;The dominance of Chromium, and Google&#x27;s dominance over the project, started
being a more widely discussed issue. Not without reasons: Google increasingly
prioritizes their own interests over the users&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;Take a look at the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;privacysandbox.com&#x2F;proposals&#x2F;topics&quot;&gt;Web Topics API&lt;&#x2F;a&gt;,
rolled out to some portion of stable users since Chromium 115, as a very good example (bold mine).&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Topics is a proposal in the Privacy Sandbox designed to preserve privacy
while showing relevant content and ads. The browser will infer a handful
of recognizable, interest-based categories based on recent browsing history
to &lt;strong&gt;help sites serve relevant ads&lt;&#x2F;strong&gt;. With Topics, the specific sites you’ve visited
are no longer shared across the web, like they might have been with third-party cookies.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This entire proposal assumes that
&lt;blockquote class=&quot;louder&quot;&gt;
    either the web browser is not a tool acting
on behalf of a user, or that being shown (relevant) ads is the user&#x27;s interest
when browsing the web.
&lt;&#x2F;blockquote&gt;

The former sounds like Google, whose browser had an
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gs.statcounter.com&#x2F;browser-market-share#yearly-2022-2022-bar&quot;&gt;almost 65% share of web traffic in 2022&lt;&#x2F;a&gt;,
according to StatCounter, is not afraid of acting against their own users.
This goes against principles shown in IETF&#x27;s standards specifications, fundamental for the web,
where a more broad term for a web browser is &quot;user agent&quot;.
(IETF&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;html&#x2F;rfc8890&quot;&gt;RFC 8890&lt;&#x2F;a&gt; is a good read.)
The latter sounds weirdly unlikely, but convenient to Google, as a company
in the advertising industry.&lt;&#x2F;p&gt;
&lt;p&gt;To be clear, Google Play Services on Android have for a long time had
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;support.google.com&#x2F;googleplay&#x2F;android-developer&#x2F;answer&#x2F;6048248?hl=en&quot;&gt;Advertising IDs&lt;&#x2F;a&gt;,
effectively making the same assumptions for an operating system. Even worse, since
this provides a &lt;em&gt;unique identifier&lt;&#x2F;em&gt; for a particular user.&lt;&#x2F;p&gt;
&lt;p&gt;Why limit to a pre-defined set of interests now, instead of an ID? I can only
imagine GDPR having something to do here. Maybe this way there&#x27;s no user identifier,
or database holding it, thus no responsible data controller? Maybe if this
data is only provided to an advertising network when loading ads, without any other
identifiers, it can suddenly just be processed within the legal basis
of legitimate interest (instead of user consent), by removing the part
where a user is identified by some party? &lt;em&gt;snorts drugs.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is just the tip of the iceberg. Web standards ultimately die or thrive
by Google&#x27;s decision. If Google doesn&#x27;t like, say, an image format, it won&#x27;t get
support in Chromium. Almost &lt;strong&gt;65% of web users&lt;&#x2F;strong&gt; in 2022 have used Google Chrome.
But it doesn&#x27;t even stop here.
Microsoft Edge, another 4% share, is also based on Chromium. Almost 3% to Samsung Internet,
based on Chromium. Opera - 2%. UC Browser, Android WebView - almost 1% each.&lt;&#x2F;p&gt;
&lt;p&gt;Summed up, that&#x27;s &lt;strong&gt;75,6% of the market share&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This is not a theoretical issue or even example - it was the fate of JPEG XL.
(Surely nothing to do with Google being a major contributor to AV1, and AVIF,
the biggest competition of JXL.)&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;louder&quot;&gt;
    The web is, by now, Chromium-shaped.
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;In some ways, the web seems to be healing.&lt;&#x2F;p&gt;
&lt;p&gt;Servo, a Rust-based web engine, got moved from the hands of Mozilla, who got bored
with it, into Linux Foundation Europe, where its development got revived.&lt;&#x2F;p&gt;
&lt;p&gt;Ladybird, the engine developed as a part of SerenityOS, gained some traction too,
including a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;awesomekling.substack.com&#x2F;p&#x2F;welcoming-shopify-as-a-ladybird-sponsor&quot;&gt;100,000 USD sponsorship from... Shopify&lt;&#x2F;a&gt;.
I can only speculate that Chromium dropping support for JPEG XL contributed to this.
Shopify has, in fact, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bugs.chromium.org&#x2F;p&#x2F;chromium&#x2F;issues&#x2F;detail?id=1178058#c79&quot;&gt;praised JXL&lt;&#x2F;a&gt;
months before in the Chromium bugtracker:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are eager for this feature to I2S [intent to ship - annot. lnl]. [...]
A few general observations we have found through our implementation (again from a commerce focus):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Encoding jxl, when bucketed by megapixal size of images, is significantly faster
to encode compared to AVIF.&lt;&#x2F;li&gt;
&lt;li&gt;Commerce is very colour sensitive and we have found jxl produces much higher
fidelity and colour accurate images.&lt;&#x2F;li&gt;
&lt;li&gt;Quality&#x2F;bytewise: jxl produces higher quality images when normalizing for target
filesizes and produces smaller files when normalizing for experience quality.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And I do wish all the best to Servo and Ladybird. But this is just the engines.&lt;&#x2F;p&gt;
&lt;p&gt;Engineers keep building all these open browser engines.
And what for? Oh, right, for all the closed projects to work in them.&lt;&#x2F;p&gt;
&lt;p&gt;In its early days, the web was markup. The browser was to meant to display text
with some basic formatting and hyperlinks. At some point in the later evolution,
JavaScript was created, allowing websites to dynamically change their content
on the device. What happened in the meantime? A mess.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Websites got replaced with web apps.&lt;&#x2F;strong&gt; We call news sites &quot;sites&quot; out of habit,
but when we open them, they don&#x27;t just display a page with an article.
We get greeted with banners asking to consent to ad profiling.
The browser is fetching 9 MBs of unreadable, pre-processed JavaScript for an app (that&#x27;s
with uBlock Origin on, without the blocked 13 script requests).
I see a view inside the app, that happens to be showing an article (together with
an autoplaying video, and trying to display ads). All this code with functions rendering
a new article is ready, if I want to read another article, so it only loads data
instead of a page. Except the whole page rendered would be less data, really.
(Yes, this is a real, major news publisher.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Web apps became just apps.&lt;&#x2F;strong&gt; Web is the most obvious target for most new apps,
with the popularity of web technologies. Uncomparable to any native platforms.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Web app technologies became incoherent, prioritizing developer experience&lt;&#x2F;strong&gt;
over user, and not making the former great either. Web browsers introduced
&lt;em&gt;cascade stylesheets&lt;&#x2F;em&gt; a lot of time ago, to allow separating the styling from the content
and stop repeating it all the time. Moders developers went back, using the class field
to define styles for each item separately again. I&#x27;m not kidding.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;CSS1&#x2F;&quot;&gt;The CSS1 specification from 2008&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;P STYLE=&amp;quot;color: green&amp;quot;&amp;gt;While the paragraph is green.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;a &#x27;STYLE&#x27; attribute on an element inside &#x27;BODY&#x27; [...] mixes style with content and loses
the corresponding advantages of traditional style sheets.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;To increase the granularity of control over elements, a new attribute has been added to HTML:
&#x27;CLASS&#x27;. All elements inside the &#x27;BODY&#x27; element can be classed, and the class can be addressed
in the style sheet [...]. One can address all elements of the same class [...] in the selector:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;css&quot;&gt;.pastoral { color: green }  &#x2F;* all elements with CLASS pastoral *&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A lot of modern web now works on styles with content again, where the styles are contained
in the &quot;class&quot; attribute. Yes, I am subposting &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailwindcss.com&#x2F;&quot;&gt;Tailwind CSS&lt;&#x2F;a&gt; right now.
This is real HTML on a real website (added whitespace for convenience):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;blockquote class=&amp;quot;
        typography__blockquote
        mt-6
        font-serif
        font-bold
        text-[1.8125rem]
        leading-[2.75rem]
        text-gray-900
        before:inline-block
        before:mr-3
        before:h-[0.8125rem]
        before:w-24
        before:bg-red-700
        dark:text-gray-50
        dark:before:bg-red-400
        print:dark:text-black
        before:print:dark:bg-black
    &amp;quot;&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Q: &quot;how long before someone invents the css of tailwind where you can put all the classes in a separate
file next to element selectors? would make it way easier to have consistent use of classes
across a document without repeating yourself all the time &#x2F;s&quot;&lt;&#x2F;p&gt;
&lt;p&gt;A: This has &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailwindcss.com&#x2F;docs&#x2F;reusing-styles#extracting-classes-with-apply&quot;&gt;already happened!&lt;&#x2F;a&gt;
A monster straight up from Tailwind&#x27;s documentation:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components {
  .btn-primary {
    @apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
  }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Native apps are like the web apps.&lt;&#x2F;strong&gt; Modern applications - no matter what platform you
are running them on - shape their behavior strictly following the possibilities on the web.
Any new voice or video chat is WebRTC, any instant 2-way communication with a server
is WebSockets, any server requests are HTTP requests, any server response with data is JSON.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Web apps are the &quot;native&quot; apps.&lt;&#x2F;strong&gt; 300 MB binaries, containing a full browser implementation
with little change to supported Web APIs, even though most are not getting used by the app,
are shipped together with web apps that have bindings to smaller pieces of native code,
to be run locally, instead of actual platform native apps.&lt;&#x2F;p&gt;
&lt;p&gt;Nobody actually knows what&#x27;s needed for screen share to work on Wayland. Apps don&#x27;t even
try to fight for users by improving a horrible user experience like this.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;I think what&#x27;s most important about this evolution is that, instead of apps, everything
becomes a service. The category that saw the highest increase in switching to web apps
was communication - this always was a service by its nature, but we&#x27;ve also seen
a switch away from vendor-independent, standardized protocols like IMAP and SMTP,
into proprietary webmails, provided by vendors as part of the service.&lt;&#x2F;p&gt;
&lt;p&gt;But even things that could perfectly be a normal app, become web apps. Document editors are a good
example. Microsoft Word has long been a native application - you could just open it on your Windows
machine and operate on doc files. They&#x27;ve been earning on the sales of Microsoft Office - software
for you to run on your machine. What were the issues? The format got reverse engineered, first by Apple,
as Office for Mac started being incompatible with documents produced on the Windows equivalent,
to create compatible apps. Oh no, not a competitor in &lt;em&gt;my&lt;&#x2F;em&gt; network effect! Also piracy.
Oh, and you have to innovate in some ways, so new versions get bought. Yeah, can&#x27;t keep up like that,
can we?&lt;&#x2F;p&gt;
&lt;p&gt;Office 365 is great! Just not for you. It&#x27;s a monthly or yearly rent, paid upfront! A document editor
very often is a tool to perform work, that is, it&#x27;s a necessity for you to earn money, so you can pay rent
and live. How far can the prices go? Well... how much of your salary do you spend on rent?&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;The web keeps evolving. What&#x27;s in the queue? Web apps going &quot;lower level&quot;, using WebAssembly,
WebGPU, WebHID, and zero WebHTML.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1peUSMsvFGvqD5yKh3GprskLC3KVdAlLGOsK6gFoEOD0&#x2F;preview&quot;&gt;The vision&lt;&#x2F;a&gt;
comes from Hixie, the tech lead of Flutter, formerly - specification editor in WHATWG.&lt;&#x2F;p&gt;
&lt;p&gt;All this vision has to do with the web as it was invented, is that it runs on web browsers.
In pretty much any other ways, it&#x27;s not much different than any native app. In fact, you
literally can run the same Flutter apps using GLFW or Skia.&lt;&#x2F;p&gt;
&lt;p&gt;The consequences of the first browser war are still haunting us all.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>You are still vulnerable to the WebP exploits, by the way</title>
          <pubDate>Mon, 18 Sep 2023 07:15:00 +0200</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/from-source-or-vulnerable/</link>
          <guid>https://liberda.nl/weblog/from-source-or-vulnerable/</guid>
          <description xml:base="https://liberda.nl/weblog/from-source-or-vulnerable/">&lt;p&gt;I&#x27;ve been writing a different blog post recently. I wanted to talk a bit
about a project I&#x27;m making. I started it to make my work as a package maintainer easier,
and so, I wrote a bit about why I think this matters.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dynamic linking. If you install Chromium, Firefox, and ffmpeg on a typical Linux
distribution, all of them will use the same, &lt;em&gt;shared&lt;&#x2F;em&gt; libwebp to show a webp picture.
You only need one libwebp on your machine. And the list goes on! A build provided by Electron
weighs 251.7 MB. The same version in Alpine Linux repositories is just 173.3 MB.
(32.32 MB is saved by making support for more languages optional. Still &amp;gt;50 MB less).
We don&#x27;t have to copy nightmares in distributions.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yes, I really mentioned libwebp specifically here. I opened the lists of dependencies,
and thought this one is gonna be a nice, simple example that is actually true for all
packages. Just before. For once, I hate being right.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;if-it-can-display-an-image-it-can-execute-code&quot;&gt;If it can display an image, it can execute code&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A buffer overflow issue was addressed with improved memory handling. This issue
is fixed in macOS Monterey 12.6.9, macOS Big Sur 11.7.10, macOS Ventura 13.5.2,
iOS 16.6.1 and iPadOS 16.6.1, iOS 15.7.9 and iPadOS 15.7.9. Processing a &lt;strong&gt;maliciously
crafted image may lead to arbitrary code execution&lt;&#x2F;strong&gt;. Apple is aware of a report that
this issue may have been &lt;strong&gt;actively exploited&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln&#x2F;detail&#x2F;CVE-2023-41064&quot;&gt;CVE-2023-41064 on NVD&lt;&#x2F;a&gt;, 2023-09-07&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heap buffer overflow in WebP&lt;&#x2F;strong&gt; in Google Chrome prior to 116.0.5845.187 allowed
a remote attacker to perform an &lt;strong&gt;out of bounds memory write via a crafted HTML page&lt;&#x2F;strong&gt;.
(Chromium security severity: Critical)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln&#x2F;detail&#x2F;CVE-2023-4863&quot;&gt;CVE-2023-4863 on NVD&lt;&#x2F;a&gt;, 2023-09-12T14:24:59.275Z&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google is aware that &lt;strong&gt;an exploit for CVE-2023-4863 exists in the wild&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;chromereleases.googleblog.com&#x2F;2023&#x2F;09&#x2F;stable-channel-update-for-desktop_11.html&quot;&gt;Chrome release notes&lt;&#x2F;a&gt;, 2023-09-12T20:33:48.361Z&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Security Vulnerability fixed in Firefox 117.0.1, Firefox ESR 115.2.1,
Firefox ESR 102.15.1, Thunderbird 102.15.1, and Thunderbird 115.2.2.&lt;&#x2F;p&gt;
&lt;p&gt;CVE-2023-4863: Heap buffer overflow in libwebp&lt;&#x2F;p&gt;
&lt;p&gt;Opening a malicious WebP image could lead to a heap buffer overflow
in the content process. We are aware of this issue being exploited
in other products in the wild.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;security&#x2F;advisories&#x2F;mfsa2023-40&#x2F;&quot;&gt;Mozilla Foundation Security Advisory 2023-40&lt;&#x2F;a&gt;, 2023-09-12&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Acrobat Reader versions 23.003.20284 (and earlier), 20.005.30516 (and earlier)
and 20.005.30514 (and earlier) are affected by an &lt;strong&gt;out-of-bounds write vulnerability&lt;&#x2F;strong&gt;
that could result in &lt;strong&gt;arbitrary code execution in the context of the current user&lt;&#x2F;strong&gt;.
Exploitation of this issue requires user interaction in that a victim must open a malicious file.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln&#x2F;detail&#x2F;CVE-2023-26369&quot;&gt;CVE-2023-26369 on NVD&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Adobe is aware that CVE-2023-26369 has been &lt;strong&gt;exploited in the wild&lt;&#x2F;strong&gt; in limited
attacks targeting Adobe Acrobat and Reader.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;helpx.adobe.com&#x2F;security&#x2F;products&#x2F;acrobat&#x2F;apsb23-34.html&quot;&gt;Adobe security bulletin APSB23-34&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;god-s-enterprisiest-software-got-pretty-loud-fixes-good-but-the-vuln-is-almost-everywhere&quot;&gt;God&#x27;s enterprisiest software got pretty loud fixes. Good. But the vuln is almost everywhere.&lt;&#x2F;h3&gt;
&lt;p&gt;Do you use any Electron-based apps? Are they built by your software distribution?
If not... do you think they even know what&#x27;s happening?&lt;&#x2F;p&gt;
&lt;p&gt;Electron got a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;releases.electronjs.org&#x2F;release&#x2F;v26.2.1&quot;&gt;release for the current version&lt;&#x2F;a&gt;
a few hours later - on 2023-09-12T19:23:24Z (Chrome CVE got published on 2023-09-12T14:24:59.275Z).
But you&#x27;d need to read Chrome release notes to know this. The Electron changelog entry was:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Other Changes:&lt;&#x2F;p&gt;
&lt;p&gt;Updated Chromium to 116.0.5845.188. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;electron&#x2F;electron&#x2F;pull&#x2F;39828&quot;&gt;#39828&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yes. Really. No other announcements either. The vulnerability is only mentioned
in release notes for older major (but still supported) versions, where the fix got backported.&lt;&#x2F;p&gt;
&lt;p&gt;If you have an Electron app, fixed version cheat sheet:&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;td&gt;major release&lt;&#x2F;td&gt;
&lt;td&gt;fixed version&lt;&#x2F;td&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;&#x2F;td&gt;
&lt;td&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;releases.electronjs.org&#x2F;release&#x2F;v26.2.1&quot;&gt;26.2.1&lt;&#x2F;a&gt;
&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;&#x2F;td&gt;
&lt;td&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;releases.electronjs.org&#x2F;release&#x2F;v25.8.1&quot;&gt;25.8.1&lt;&#x2F;a&gt;
&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;&#x2F;td&gt;
&lt;td&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;releases.electronjs.org&#x2F;release&#x2F;v24.8.3&quot;&gt;24.8.3&lt;&#x2F;a&gt;
&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;&#x2F;td&gt;
&lt;td&gt;
unsupported. upgrade!
&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;&#x2F;td&gt;
&lt;td&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;releases.electronjs.org&#x2F;release&#x2F;v22.3.24&quot;&gt;22.3.24&lt;&#x2F;a&gt;
&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;Signal followed a few more hours later, with their
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;signalapp&#x2F;Signal-Desktop&#x2F;releases&#x2F;tag&#x2F;v6.30.2&quot;&gt;release of Signal Desktop&lt;&#x2F;a&gt;
on 2023-09-13T06:04:12Z. If we&#x27;re at the changelogs, this one was as descriptive
as all of their patch notes:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Keep tabs on your calls with the new calls tab. Start a new call or return a call
that you missed without having to find the corresponding chat. Now you can say hello
with your voice without also saying goodbye to the unread marker for messages in that thread.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And that would be the end of developer self-realization in this post.&lt;&#x2F;p&gt;
&lt;p&gt;In case of Element Desktop, a tranny that doesn&#x27;t sleep at night had realized first,
and it had &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;element-desktop&#x2F;pull&#x2F;1226&quot;&gt;submitted a pull request&lt;&#x2F;a&gt;
on 2023-09-15T02:17:03Z. That&#x27;s almost 3 whole days later. This was then
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;element-desktop&#x2F;releases&#x2F;tag&#x2F;v1.11.43&quot;&gt;released&lt;&#x2F;a&gt;
on 2023-09-15T11:23:33Z.&lt;&#x2F;p&gt;
&lt;p&gt;(The tranny is the author of this text. Hi, reader! Don&#x27;t mind me, just &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Reappropriation&quot;&gt;reclaiming some slurs&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;More friction? Fuck yes. If you use Element Desktop from Flathub, that&#x27;s even more waiting.
Flathub simply downloads tarballs with builds. There is a bot that downloads a webpage
and runs a regex over it. It has detected the release and made a PR with the update
on 2023-09-15T13:13:36Z. Then, the PR has been merged manually on 2023-09-15T15:10:06Z.
That has finally triggered a rebuild (or rather, re-repack). The notice about a security fix has disappeared
on the way, and this update on Flathub is not marked with a higher urgency (as is an option on there),
but it&#x27;s there.&lt;&#x2F;p&gt;
&lt;p&gt;To be clear, Element had a good response once they finally heard about it. But it still
took days in friction between multiple projects having to fix &lt;em&gt;publicly known&lt;&#x2F;em&gt; vulnerabilities.
&lt;strong&gt;This system of distribution is just broken.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Another real chat app has released the security fix &lt;em&gt;on the beta channel&lt;&#x2F;em&gt;, and everyone went on a weekend.
The Jira ticket for this states &quot;No testing required&quot;, but, oh well.&lt;&#x2F;p&gt;
&lt;p&gt;Similar stories with Flutter. In this case, you&#x27;d need to know where to find
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flutter&#x2F;flutter&#x2F;wiki&#x2F;Hotfixes-to-the-Stable-Channel#3134-september-13-2023&quot;&gt;these release notes&lt;&#x2F;a&gt; -
they&#x27;re on a special GitHub Wiki page, separate from the other release notes.
(The fixed release is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flutter&#x2F;flutter&#x2F;wiki&#x2F;Hotfixes-to-the-Stable-Channel#3134-september-13-2023&quot;&gt;3.13.4&lt;&#x2F;a&gt;.)
Now just wait for all app developers to release it on Google Play...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;this-doesn-t-have-to-be-broken-like-this&quot;&gt;This doesn&#x27;t have to be broken like this.&lt;&#x2F;h2&gt;
&lt;p&gt;Software distributions work. In Alpine Linux, where I&#x27;m a contributor,
a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gitlab.alpinelinux.org&#x2F;alpine&#x2F;aports&#x2F;-&#x2F;merge_requests&#x2F;51544&quot;&gt;hotfix got merged&lt;&#x2F;a&gt;
into edge on 2023-09-13T17:42:01.841Z, and then backported to earlier versions.
That&#x27;s just what a distribution does. The information flow is free here.
In this case, Alpine has &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NixOS&#x2F;nixpkgs&#x2F;pull&#x2F;254775&quot;&gt;followed NixOS&lt;&#x2F;a&gt;.
Another time Arch will follow Alpine.
But that&#x27;s ok, we don&#x27;t like having secrets.&lt;&#x2F;p&gt;
&lt;p&gt;The hotfix I mentioned was merged to the libwebp package. It&#x27;s a &lt;em&gt;shared object&lt;&#x2F;em&gt;
getting reused by other packages. Once you run &lt;code&gt;apk upgrade&lt;&#x2F;code&gt;,
the old &lt;code&gt;&#x2F;usr&#x2F;lib&#x2F;libwebpdemux.so.2.0.14&lt;&#x2F;code&gt; on your disk gets replaced with a new one.
Also, Chromium, Electron, Firefox, Flutter, Thunderbird, all depend on it.
You don&#x27;t have to rebuild or redownload all of them (and the apps they&#x27;re a part of).
Better. As a package maintainer for 2 of these, I didn&#x27;t even have to know about it.
Cool, isn&#x27;t it?&lt;&#x2F;p&gt;
&lt;p&gt;On a sidenote. I&#x27;ve &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flutter&#x2F;flutter&#x2F;issues&#x2F;121106&quot;&gt;submitted the changes&lt;&#x2F;a&gt;
adding an option to unbundle dependencies back to Flutter, back when I made them.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We can&#x27;t do this.&lt;&#x2F;p&gt;
&lt;p&gt;Most of these libraries do not provide stable ABI. And Flutter does not guarantee
that it plays nicely - sometimes we use private API even though we&#x27;re not supposed to.&lt;&#x2F;p&gt;
&lt;p&gt;If you arbitrarily change the versions of these dependencies, you could get anything
from reduced performance to completely broken&#x2F;crashing binaries.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I keep applying that patch in Alpine anyway. Guess what. It works without issues,
and we got this patched earlier as a consequence.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Trusting clients is probably a security flaw</title>
          <pubDate>Fri, 28 Jul 2023 00:00:00 +0000</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/trust-no-client/</link>
          <guid>https://liberda.nl/weblog/trust-no-client/</guid>
          <description xml:base="https://liberda.nl/weblog/trust-no-client/">&lt;p&gt;I looked at a discussion on blink-dev Google Group and saw &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;groups.google.com&#x2F;a&#x2F;chromium.org&#x2F;g&#x2F;blink-dev&#x2F;c&#x2F;Ux5h_kGO22g&#x2F;m&#x2F;0BJlM-HpAAAJ&quot;&gt;the message&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Perhaps it is a good thing for user choice to have a browser that is fully open to any use
and allows anonymous user actions.&lt;&#x2F;p&gt;
&lt;p&gt;The result of such open-ness is that an entire series of services that need to trust the client
(used in the oauth sense of the word) are not available to web apps. […]&lt;&#x2F;p&gt;
&lt;p&gt;I have recently worked on a fork of Chromium that is designed to have this functionality
and on Native Wallet apps to get it. The lack of this functionality in Chrome will drive developers
away from Chrome and fragment the user experience. We already have the problem of directing users
away from Chrome to a secure wallet and being unable to bring the original user session back to Chrome.
Of course Google and Apple get to solve this problem with their own wallets, but that will not fly
in Europe and now the US DHS is asking for solutions that are more open as well.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;My understanding of security started an internal screaming.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;meet-the-mcdonald-s-app&quot;&gt;Meet the McDonald&#x27;s app&lt;&#x2F;h2&gt;
&lt;p&gt;Hold on, I&#x27;m not at all joking. The McDonald&#x27;s app developers put a lot of effort into policing
the clients allowed to even dream about running the app. The app was checking for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;whether you have a directory called &lt;code&gt;TWRP&lt;&#x2F;code&gt; in your internal storage. TWRP is a custom recovery,
and by default, stores device backups you generate from recovery in there. You have a device
backup? Then no deals for you, nerd.&lt;&#x2F;li&gt;
&lt;li&gt;whether you have the &lt;code&gt;com.topjohnwu.magisk&lt;&#x2F;code&gt; app installed. &lt;em&gt;You like modifying your devices, don&#x27;t you?&lt;&#x2F;em&gt;
Pay full price, nerd.&lt;&#x2F;li&gt;
&lt;li&gt;whether you have installed the app from &lt;code&gt;com.android.vending&lt;&#x2F;code&gt;, more widely known as Google Play.
What, you don&#x27;t have it? That&#x27;ll be €14,50, nerd.&lt;&#x2F;li&gt;
&lt;li&gt;check your device with RootBeer, a library that tries to check whether you have root access.
Not passing? Card or cash, nerd?&lt;&#x2F;li&gt;
&lt;li&gt;and finally, using the SafetyNet API (now being rebranded into Play Integrity,
specifically the Device Integrity and App Integrity parts, with some minor changes).
Not passing? Pay. Nerd.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is more annoying than any financial app I&#x27;ve had, and I have 5 of them on my phone.
mBank.pl uses Play Integrity API, but that&#x27;s to use contactless payments via BLIK,
and the rest of the app works. IKO, the app of PKO BP, seeing that I have root access,
disabled logging in with biometry, requiring me to log in with a PIN code.
bunq told me that maybe my device should not be rooted. The worst one seems to be Revolut,
which blocked my access, clearly stating the reason to be root access.&lt;&#x2F;p&gt;
&lt;p&gt;The McDonald&#x27;s app only displays a generic error message, and an error code that tells
you nothing.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;and-what-are-guarding-so-much&quot;&gt;And what are guarding so much?&lt;&#x2F;h2&gt;
&lt;p&gt;What are the &lt;em&gt;Deals&lt;&#x2F;em&gt; inside the app? Currently, I can get a free burger for 650 points,
that is, if I spend 65 Euro in McDonald&#x27;s first. What a deal. But that&#x27;s not what brings
me here.&lt;&#x2F;p&gt;
&lt;p&gt;There once was a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pepper.pl&#x2F;promocje&#x2F;mcdonald-i-coca-cola-50-lat-528907&quot;&gt;promotion&lt;&#x2F;a&gt;
in collaboration between Coca-Cola and McDonald&#x27;s, specifically available in Poland.
It boiled down to this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Buy 3 bottles of Coca-Cola.&lt;&#x2F;li&gt;
&lt;li&gt;Enter 3 codes (from each bottle) into the Coca-Cola app.&lt;&#x2F;li&gt;
&lt;li&gt;Enter the code you got from the Coca-Cola app into the McDonald&#x27;s app.&lt;&#x2F;li&gt;
&lt;li&gt;In return, you get a free meal with a Big Mac.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ignore this unnecessary duplication with copying the code between 2 apps.
Actually, ignore the Coca-Cola part as a whole. So, what happens in the McDonald&#x27;s app?
As with many things in that app, this deal was operated by a page opened in a WebView.
The config for the country was set to point to the deal&#x27;s page from the main screen.
On the page, there was a pretty simple form:&lt;&#x2F;p&gt;
&lt;figure
    class=&quot;img&quot; data-portrait=&quot;1&quot; &gt;&lt;picture&gt;
        &lt;source type=&quot;image&amp;#x2F;webp&quot; srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;3RqSrIQrZ9gfB1NuwoX8B.webp 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;_n47tO8nFfonJDd8bfd0R.webp 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;rLNpcJb2W3zzJoMkfb85K.webp 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;p89BUFFh3gfd2bfU7wTV3.webp 413w&quot;&gt;
            &lt;img
                    type=&quot;image&amp;#x2F;jpeg&quot;
                    srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;fUYB4psNrQQ6ZyiojYSR_.jpeg 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;xow_z0kC9Qm543bTOADRk.jpeg 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;fiycr2ZqUwowQxEtVeLcc.jpeg 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;HPRZNnpg05BbFaexX4VyI.jpeg 413w&quot;
                    src=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;OmG22yyBIuD5uuVa3jHTE&amp;#x2F;HPRZNnpg05BbFaexX4VyI.jpeg&quot;
                    alt=&quot;Screenshot of application interface, in Polish, with a text input and a confirm button, asking to enter a voucher code from Coca-Cola.&quot;
                    title=&quot;Screenshot of application interface, in Polish, with a text input and a confirm button, asking to enter a voucher code from Coca-Cola.&quot;
                    &gt;
            &lt;&#x2F;picture&gt;
    &lt;&#x2F;figure&gt;
&lt;h2 id=&quot;obscurity-is-not-security&quot;&gt;Obscurity is not security&lt;&#x2F;h2&gt;
&lt;p&gt;From now on, this is basically a post mortem, except it&#x27;s not McDonald&#x27;s writing it.&lt;&#x2F;p&gt;
&lt;p&gt;The page opened in the WebView was sending the entered code in a request to a McDonald&#x27;s server.
But here&#x27;s the flaw: the request checking and invalidating the code, was doing just that.
It just returned whether the code is valid. The page was requesting a check whether the code
was valid, and &lt;strong&gt;&lt;em&gt;the client&lt;&#x2F;em&gt; was assigning the coupon to the user.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;It turns out that the company&#x27;s servers do not verify this and take the app &quot;for its word&quot;&lt;&#x2F;em&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;android.com.pl&#x2F;news&#x2F;484772-darmowe-big-mac-w-mcdonalds-haker&#x2F;&quot;&gt;reported android.com.pl&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;When you say you need to check whether the request is coming from a &quot;trustworthy client&quot;,
I say &lt;strong&gt;trust no client, use a rubber.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-untouched-device-can-exploit-your-service-too&quot;&gt;An untouched device can exploit your service, too&lt;&#x2F;h3&gt;
&lt;p&gt;Oh, right, I said earlier about some measures? This whole exploit could (at least at that time)
be &lt;strong&gt;executed from an unmodified device&lt;&#x2F;strong&gt;. Open the app, go to privacy policy (opens in a WebView),
find an external link. Be creative. Find a link to Google&#x27;s privacy policy, and tap their logo
to go to Google Search. Find a link to YouTube, and search for a video with a link somewhere else.
Whatever gets you to a &lt;strong&gt;page that can execute a little bit of JavaScript for you&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;COLA.offerActivation.send({
  loyaltyId: 2424,
  rewardId: 95275,
})
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This was the thing.&lt;&#x2F;p&gt;
&lt;p&gt;But don&#x27;t worry. If this is fixed, nothing is lost. You remember the measures I talked about?
They indeed check signs that might indicate you&#x27;re not trustworthy. But really,
passing these checks might just mean you know how these checks work. What can and does go wrong?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;you-can-just-comply-with-the-checks&quot;&gt;You can just comply with the checks.&lt;&#x2F;h3&gt;
&lt;p&gt;TWRP backups? Change the directory name.&lt;&#x2F;p&gt;
&lt;p&gt;Magisk Manager app? Change the package name in the settings.&lt;&#x2F;p&gt;
&lt;p&gt;Not installed from Google Play? Open terminal and run &lt;code&gt;pm set-installer com.mcdonalds.mobileapp com.android.vending&lt;&#x2F;code&gt;.
Or install with &lt;code&gt;pm install -i com.android.vending [file]&lt;&#x2F;code&gt;. Or the same with &lt;code&gt;adb&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Root checks? Add McDonald&#x27;s to Zygisk Denylist.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;you-can-just-not-run-the-checks&quot;&gt;You can just not run the checks.&lt;&#x2F;h3&gt;
&lt;p&gt;Oh, that was just the way where we obediently fulfil these checks. But &lt;strong&gt;if this runs on your device,
you are the one in control of it.&lt;&#x2F;strong&gt; You can inject into the process with tools like Zygisk or LSPosed,
and remove these checks. &lt;em&gt;I have injected into 2137 processes on my phone today. Nobody controls this.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;you-can-just-tell-the-checks-what-they-want-to-hear&quot;&gt;You can just tell the checks what they want to hear.&lt;&#x2F;h3&gt;
&lt;p&gt;And the last check. SafetyNet&#x2F;Play Integrity. Check whether you pass with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.henrikherzig.playintegritychecker&quot;&gt;SPIC&lt;&#x2F;a&gt;.
If you don&#x27;t pass basic SafetyNet, install &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Magisk-Modules-Repo&#x2F;MagiskHidePropsConf&quot;&gt;MagiskHide Props Config&lt;&#x2F;a&gt;,
run &lt;code&gt;props&lt;&#x2F;code&gt; in console, change signature to something from the available list.
Now, if you don&#x27;t pass CTS SafetyNet, install &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kdrag0n&#x2F;safetynet-fix&quot;&gt;Universal SafetyNet Fix&lt;&#x2F;a&gt;.
Yes, my phone really just passes SafetyNet and Play Integrity like this (Integrity up to &lt;code&gt;MEETS_DEVICE_INTEGRITY&lt;&#x2F;code&gt;,
without &lt;code&gt;MEETS_STRONG_INTEGRITY&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;No labels (a blank value):
The app is running on a device that has signs of attack (such as API hooking)
or system compromise (such as being rooted), or the app is
not running on a physical device (such as an emulator that does not pass
Google Play integrity checks).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is a fragment of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;google&#x2F;play&#x2F;integrity&#x2F;verdict#device-integrity-field&quot;&gt;the Play Integrity documentation&lt;&#x2F;a&gt;.
But the problem with checking if the user is a god, is that the user is a god.
They can just tell you what you want to hear.&lt;&#x2F;p&gt;
&lt;p&gt;(On a side note, if you speak Polish, I recommend reading &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;informatykzakladowy.pl&#x2F;aplikacja-mobilna-nie-wie-czy-telefon-jest-zhackowany&#x2F;&quot;&gt;&quot;Aplikacja mobilna nie wie, czy telefon jest zhackowany&quot; from Informatyk Zakładowy&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;but-typical-users-will-not-study-your-app-if-it-doesn-t-work&quot;&gt;But typical users will not study your app if it doesn&#x27;t work&lt;&#x2F;h3&gt;
&lt;p&gt;Mass exploitation was, in the end, stopped by ending the deal, because of how out of control it was.
So who &lt;em&gt;was&lt;&#x2F;em&gt; stopped?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Unaware users. Every time you introduce a stupid check, there is a user with
a false positive result. For example, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;scottyab&#x2F;rootbeer&#x2F;issues&#x2F;147&quot;&gt;some of the RootBeer checks will trigger&lt;&#x2F;a&gt;
on some unmodified Xiaomi, Asus, or Fairphone, or random cheap phones that happened to be
in someone&#x27;s nearest Tesco. The biggest irony is that some of these users will &lt;em&gt;root their phones&lt;&#x2F;em&gt;
to bypass these checks instead.&lt;&#x2F;p&gt;
&lt;p&gt;If your app starts looking for the &lt;code&gt;MEETS_STRONG_INTEGRITY&lt;&#x2F;code&gt; label from Play Integrity,
even more users will be affected like this.&lt;&#x2F;p&gt;
&lt;p&gt;Literally look at the Google Play reviews of the McDonald&#x27;s app.
This app has a 2,8&#x2F;5 rating and you have to keep scrolling them to find positive ones,
from the very few users who managed to get the app running.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Users with root access to their own phones. First of all, why? What&#x27;s bad about having
administrator access to &lt;em&gt;your own phone&lt;&#x2F;em&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Second, this is ineffective if they know how to workaround.
They can inject into your process and tell you &lt;em&gt;it&#x27;s a good phone ma&#x27;am&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Huawei users. Or Amazon Fire users. Or any Android device made for China market users.
Or users of a mobile Linux distribution, trying to run an app over Waydroid.
Their devices by default do not have Google Play Services that can be tricked
like this, and will require more work than I described to pass these checks.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;but-will-it-at-least-stop-fraud&quot;&gt;But will it at least stop fraud?&lt;&#x2F;h3&gt;
&lt;p&gt;Hell no.&lt;&#x2F;p&gt;
&lt;figure
    class=&quot;img&quot;&gt;&lt;picture&gt;
        &lt;source type=&quot;image&amp;#x2F;webp&quot; srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;xwVLyn2y8PvioLjcD4gl-.webp 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;9WfXXwSEK5CNVWDJj67aQ.webp 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;6mNz7r7vKlVuhih2LgAO8.webp 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;GXl5mX9JzGEvTanOx6aYs.webp 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;fpLk-kbtYjOcR7WGGl9e6.webp 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;gpJvZADE5oY4VtHa4jlCA.webp 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;na1gd-txrqQTeDzrUwrc5.webp 1230w&quot;&gt;
            &lt;img
                    type=&quot;image&amp;#x2F;jpeg&quot;
                    srcset=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;qcPBmZJtDUlnTbGLSm9el.jpeg 140w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;WQoxPmlWvLpyixF5Va6mq.jpeg 240w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;2WavYG5WrH55VzeD8Xkf9.jpeg 360w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;um2yV5dvbd4CjUjS0ZkQz.jpeg 480w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;ezoBGTj_uTnxd8cY0c-p0.jpeg 720w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;YzZJxswi73wwNEZIcVJd-.jpeg 1080w, https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;z32i06c_tsgoulDK3ZPpe.jpeg 1230w&quot;
                    src=&quot;https:&amp;#x2F;&amp;#x2F;cdn-swa.lnl.gay&amp;#x2F;pio&amp;#x2F;iaymp2BM1Og5yrcNJaRO8&amp;#x2F;z32i06c_tsgoulDK3ZPpe.jpeg&quot;
                    alt=&quot;A photo from a bot farm with lots of phones pinned to a wall, with USB cables connected to them.&quot;
                    title=&quot;A photo from a bot farm with lots of phones pinned to a wall, with USB cables connected to them.&quot;
                    &gt;
            &lt;&#x2F;picture&gt;
    &lt;&#x2F;figure&gt;
</description>
      </item>
      <item>
          <title>Android is not free, let&#x27;s get to work about it</title>
          <pubDate>Sat, 08 Jul 2023 00:00:00 +0000</pubDate>
          <author>lnl</author>
          <link>https://liberda.nl/weblog/android-eee/</link>
          <guid>https://liberda.nl/weblog/android-eee/</guid>
          <description xml:base="https://liberda.nl/weblog/android-eee/">&lt;p&gt;In the standards field, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Embrace%2C_extend%2C_and_extinguish&quot;&gt;&lt;em&gt;Embrace, Extend, and Extinguish&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; is a strategy for gaining users of an open standard, and breaking it to lock them in. This does not exactly match Android, as it is a software project, rather than a standard. But it resonates with its story of making the open source effectively unusable without proprietary extensions.&lt;&#x2F;p&gt;
&lt;div class=&quot;message is-warning&quot;&gt;
    &lt;div class=&quot;message-body&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Warning:&lt;&#x2F;strong&gt; if I wasn&#x27;t enough of a techie to do some action, this would be a lot of doomerism. Thank &lt;em&gt;fuck&lt;&#x2F;em&gt; I&#x27;m autistic and this is my special interest?&lt;&#x2F;p&gt;

    &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I&#x27;ve been an Android user for, I think over 10 years by now. Well, still am, out of necessity. But I&#x27;m fed up with it as a user. I feel like instead of empowerment, I have to fight with this device on every step to keep some control over my own device, and to not send more of my data to corporations.&lt;&#x2F;p&gt;
&lt;p&gt;Google hardly even bothers to keep the Android Open Source Project documentation separate from one for their proprietary Google Play Services.&lt;&#x2F;p&gt;
&lt;p&gt;Does any of your mobile apps send you push notifications? You can be almost certain they go through Google servers. More namely, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;firebase.google.com&#x2F;products&#x2F;cloud-messaging&quot;&gt;Firebase Cloud Messaging&lt;&#x2F;a&gt;. Google has made it easy to just add FCM libraries to your Android app, and made it hard to not use FCM.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Android 6 introduced &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;training&#x2F;monitoring-device-state&#x2F;doze-standby&quot;&gt;Doze mode&lt;&#x2F;a&gt;: &quot;&lt;em&gt;If a user leaves a device unplugged and stationary for a period of time, with the screen off, the device enters Doze mode. In Doze mode, the system attempts to conserve battery by restricting apps&#x27; access to network and CPU-intensive services. It also prevents apps from accessing the network and defers their jobs, syncs, and standard alarms.&lt;&#x2F;em&gt;&quot; As you might guess, this breaks background processes listening for notifications.&lt;&#x2F;p&gt;
&lt;p&gt;Solutions? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;training&#x2F;monitoring-device-state&#x2F;doze-standby#doze-checklist&quot;&gt;&quot;&lt;em&gt;If possible, use Firebase Cloud Messaging (FCM) for downstream messaging.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Android 8 introduced &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;about&#x2F;versions&#x2F;oreo&#x2F;android-8.0-changes#back-all&quot;&gt;background execution limits&lt;&#x2F;a&gt;. &quot;&lt;em&gt;Apps that are running in the background now have limits on how freely they can access background services.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Solutions? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;about&#x2F;versions&#x2F;oreo&#x2F;background#migration&quot;&gt;&quot;&lt;em&gt;Use FCM to selectively wake your application up when network events occur, rather than polling in the background.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Android 12? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;about&#x2F;versions&#x2F;12&#x2F;behavior-changes-12&quot;&gt;&quot;&lt;em&gt;Apps that target Android 12 or higher can&#x27;t start foreground services while running in the background, except for a few special cases.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And yes, the point is that you use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;topic&#x2F;libraries&#x2F;architecture&#x2F;workmanager&quot;&gt;&lt;code&gt;WorkManager&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. But you probably get the drill by now. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;guide&#x2F;components&#x2F;foreground-services#background-start-restriction-exemptions&quot;&gt;&quot;&lt;em&gt;Your app receives a high priority message using Firebase Cloud Messaging.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;OEMs who heavily modify Android they ship are &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dontkillmyapp.com&#x2F;&quot;&gt;notorious for making it worse&lt;&#x2F;a&gt;, by creating issues specific to their devices. &quot;&lt;em&gt;They kill background processes and render alarm clocks and other apps which rely on background processing useless.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Do any of your apps use location? There are system APIs for this! Oh, wait, what&#x27;s this? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;reference&#x2F;android&#x2F;location&#x2F;package-summary&quot;&gt;&quot;&lt;em&gt;Note: The Google Location Services APIs, part of Google Play services, is the preferred way to access location services for apps. […] Clients of the traditional Android location APIs are encouraged to switch to the Google Location Services APIs wherever possible.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Anything scanning QR codes? Remember the old days of ZXing? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;ml-kit&#x2F;vision&#x2F;barcode-scanning&quot;&gt;Not anymore&lt;&#x2F;a&gt;. And of course with incentives: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;ml-kit&#x2F;vision&#x2F;barcode-scanning&#x2F;code-scanner&quot;&gt;&quot;&lt;em&gt;The Google code scanner API provides a complete solution for scanning codes without requiring your app to request camera permission&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;. You don&#x27;t have it? I hope you enjoy typing your password and SMS codes, because you&#x27;re not logging in with the DigiD app.&lt;&#x2F;p&gt;
&lt;p&gt;And now, I couldn&#x27;t just leave out SafetyNet, and its new replacement, Play Integrity API here. What do these do? I think the most important check: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;google&#x2F;play&#x2F;integrity&#x2F;overview&quot;&gt;&quot;&lt;em&gt;tells you whether your app is running on a genuine Android device powered by Google Play services&lt;&#x2F;em&gt;&quot;&lt;&#x2F;a&gt;. What does &quot;genuine Android device&quot; even mean? I guess not that much control of your device, because you get an accordingly lower device integrity label of &lt;code&gt;MEETS_BASIC_INTEGRITY&lt;&#x2F;code&gt; if your device &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;google&#x2F;play&#x2F;integrity&#x2F;verdict#device-integrity-field&quot;&gt;&quot;may have an unlocked bootloader&quot;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;is-there-really-no-hope-in-android-world&quot;&gt;Is there really no hope in Android world?&lt;&#x2F;h3&gt;
&lt;p&gt;microG Project is trying to reimplement these proprietary APIs. There are 2 problems with that:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Google keeps making new ones, requiring more work to reimplement them. We&#x27;re talking about complicated stuff like ML models or speech synthesis.&lt;&#x2F;li&gt;
&lt;li&gt;Google makes all the engineering choices that suit them. To work, microG has to make requests the same way as the Google Play services. microG allows you to e.g. get push notifications without using Google&#x27;s proprietary code on your device. But this is still the same, fundamentally flawed way, where Google servers are in the middle. Good riddance, but not quite enough.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I&#x27;ve previously had some faith that Huawei shipping Android phones without the proprietary Google parts is gonna change something. Because, e.g. if you have to scan a QR code on both Google and Huawei, you could just use ZXing, which does not depend on either&#x27;s environment, right? In reality, of course, developers really just do depend on both, write handling dependent on whether it&#x27;s Google or Huawei, and ship it like that to the app stores. The whole difference is that instead of a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;ml-kit&#x2F;&quot;&gt;Google ML Kit&lt;&#x2F;a&gt; there is a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.huawei.com&#x2F;consumer&#x2F;en&#x2F;hms&#x2F;huawei-mlkit&quot;&gt;Huawei ML Kit&lt;&#x2F;a&gt;, and so on.&lt;&#x2F;p&gt;
&lt;p&gt;So, yeah. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;astrophysicsbrazil.bandcamp.com&#x2F;album&#x2F;hope-left-me-complete-version&quot;&gt;&lt;em&gt;Hope, left me.&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
