<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.devilplan.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.devilplan.com/feed.php">
        <title>Luci4 Wiki Blog</title>
        <description></description>
        <link>https://wiki.devilplan.com/</link>
        <image rdf:resource="https://wiki.devilplan.com/_media/wiki:logo.png" />
       <dc:date>2026-09-11T06:41:59+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.devilplan.com/blog:foss_freedom_illusion"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/blog:do_what_you_love"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/blog:myth_of_career"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/playground:playground"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/coding:lua:lgiquickstart"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/sidebar"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/blog:dont_trust_apple"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.devilplan.com/_media/wiki:logo.png">
        <title>Luci4 Wiki Blog</title>
        <link>https://wiki.devilplan.com/</link>
        <url>https://wiki.devilplan.com/_media/wiki:logo.png</url>
    </image>
    <item rdf:about="https://wiki.devilplan.com/blog:foss_freedom_illusion">
        <dc:format>text/html</dc:format>
        <dc:date>2026-08-30T18:18:09+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>foss_freedom_illusion</title>
        <link>https://wiki.devilplan.com/blog:foss_freedom_illusion</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;🦀_rust_big_tech_and_the_illusion_of_open_source_freedom&quot;&gt;🦀 Rust, Big Tech, and the Illusion of Open Source Freedom&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://wiki.devilplan.com/_detail/blog:ddog-notreal2.jpg?id=blog%3Afoss_freedom_illusion&quot; class=&quot;media&quot; title=&quot;blog:ddog-notreal2.jpg&quot;&gt;&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-notreal2.jpg?w=400&amp;amp;tok=7f1652&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
I want to talk about this growing push for developers to learn and write software in &lt;strong&gt;Rust&lt;/strong&gt;, often proposed as a modern, safe, and fast alternative to C++. What doesn’t get talked about enough, though, is &lt;strong&gt;why&lt;/strong&gt; big tech companies are so happy to promote it and how the open source licensing model behind Rust is being used to quietly extract labor from Open Source developers.
&lt;/p&gt;

&lt;p&gt;
Rust itself is licensed under a dual license: &lt;strong&gt;MIT OR Apache 2.0&lt;/strong&gt;, both of which are extremely permissive, business-friendly licenses &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;. That might sound great on the surface, but here&amp;#039;s the catch: these licenses allow anyone, including multi-billion-dollar corporations, to use your code in commercial, closed-source software, modify it internally without sharing those changes, package it into proprietary products and sell it without ever giving anything back! In other words, you write the code, they profit, and they don’t owe you a thing.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83e\udd80 Rust, Big Tech, and the Illusion of Open Source Freedom&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83e\udd80_rust_big_tech_and_the_illusion_of_open_source_freedom&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;11-1115&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;💼_big_tech_loves_permissive_licenses&quot;&gt;💼 Big Tech Loves Permissive Licenses&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Almost every major Rust project, from compiler libraries to web servers to crypto crates, is licensed under &lt;strong&gt;MIT&lt;/strong&gt;, &lt;strong&gt;Apache 2.0&lt;/strong&gt;, or &lt;strong&gt;BSD&lt;/strong&gt; &lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;. These licenses &lt;strong&gt;don’t require companies to open source any derivative work&lt;/strong&gt;. This is not a bug; it’s a feature, especially if you&amp;#039;re a corporation that wants to keep your codebase locked down and competitive.
Compare that to the &lt;strong&gt;&lt;abbr title=&quot;GNU General Public License&quot;&gt;GPL&lt;/abbr&gt; (General Public License)&lt;/strong&gt;, which says “Yes, you can copy, fork, and modify this code, but whatever you build with it must also remain &lt;strong&gt;open source&lt;/strong&gt;.” &lt;sup&gt;&lt;a href=&quot;#fn__3&quot; id=&quot;fnt__3&quot; class=&quot;fn_top&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;abbr title=&quot;GNU General Public License&quot;&gt;GPL&lt;/abbr&gt; protects &lt;strong&gt;freedom&lt;/strong&gt;, not just access. It ensures that if you benefit from a public commons, you must also contribute back to it. In contrast, MIT/Apache licenses let corporations take from the commons without giving anything back.
&lt;/p&gt;

&lt;p&gt;
This isn’t theoretical. Among the many examples of this practice, there’s a long-standing precedent: &lt;strong&gt;Apple’s macOS and iOS&lt;/strong&gt; are built on &lt;strong&gt;Darwin&lt;/strong&gt;, which is a fork of &lt;strong&gt;FreeBSD&lt;/strong&gt; and &lt;strong&gt;OpenBSD&lt;/strong&gt; &lt;sup&gt;&lt;a href=&quot;#fn__4&quot; id=&quot;fnt__4&quot; class=&quot;fn_top&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt;.
Apple took that code, modified it heavily, and added proprietary layers like the &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt;, frameworks, and drivers. They contributed back a few pieces, but the majority of macOS and iOS is now &lt;strong&gt;closed-source&lt;/strong&gt;.
BSD’s permissive licensing &lt;strong&gt;allowed&lt;/strong&gt; this, and Apple used it to build one of the most locked-down consumer operating systems in the world, &lt;strong&gt;based on a free and open foundation&lt;/strong&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83d\udcbc Big Tech Loves Permissive Licenses&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83d\udcbc_big_tech_loves_permissive_licenses&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1116-2786&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;🦀_what_about_rust&quot;&gt;🦀 What About Rust?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Rust is in a similar position, big tech companies like &lt;strong&gt;Microsoft, Amazon, Google, and Meta&lt;/strong&gt; are increasingly relying on Rust for performance-critical and security-sensitive software &lt;sup&gt;&lt;a href=&quot;#fn__5&quot; id=&quot;fnt__5&quot; class=&quot;fn_top&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#fn__6&quot; id=&quot;fnt__6&quot; class=&quot;fn_top&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt;. They’re pushing for Rust adoption in the kernel, in networking, in browsers, even in operating systems.
&lt;/p&gt;

&lt;p&gt;
And where do they get their Rust libraries from?
&lt;/p&gt;

&lt;p&gt;
From &lt;strong&gt;you&lt;/strong&gt; - the open source developer publishing crates on &lt;strong&gt;crates.io&lt;/strong&gt; under the MIT license &lt;sup&gt;&lt;a href=&quot;#fn__7&quot; id=&quot;fnt__7&quot; class=&quot;fn_top&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
These companies consume these crates, integrate them into production systems, and often &lt;strong&gt;never contribute back&lt;/strong&gt;, because the license doesn’t require them to. And because the language ecosystem encourages permissive licensing, &lt;strong&gt;the community is effectively building Big Tech’s infrastructure for free&lt;/strong&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83e\udd80 What About Rust?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83e\udd80_what_about_rust&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2787-3874&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;exploitation_of_open_source&quot;&gt;Exploitation of Open Source&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There’s a growing disconnect between the ideals of open source and the &lt;strong&gt;reality of exploitation&lt;/strong&gt; under permissive licenses. Developers often think they’re building tools for the community, for education, for the public good. But when corporations use your unpaid labor to enhance proprietary systems that generate billions, while you maintain your crate at night, unpaid and burnt out, it’s worth asking who is really benefiting from all this freedom?
&lt;/p&gt;

&lt;p&gt;
The &lt;strong&gt;MIT and Apache 2.0&lt;/strong&gt; licenses were created in a different era, with different assumptions about collaboration and trust. In 2025, it’s clear: permissive licenses have become a &lt;strong&gt;strategic asset for big tech&lt;/strong&gt;, and an &lt;strong&gt;unpaid burden for the people who write and maintain the code&lt;/strong&gt;.
&lt;/p&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/blog:foss_freedom_illusion?codeblock=0&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
September &lt;span class=&quot;nu0&quot;&gt;17&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2025&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Exploitation of Open Source&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;exploitation_of_open_source&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3875-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Rust licensing: &lt;a href=&quot;https://www.rust-lang.org/policies/licenses&quot; class=&quot;urlextern&quot; title=&quot;https://www.rust-lang.org/policies/licenses&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.rust-lang.org/policies/licenses&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Crates.io license stats: Check &lt;a href=&quot;https://lib.rs&quot; class=&quot;urlextern&quot; title=&quot;https://lib.rs&quot; rel=&quot;ugc nofollow&quot;&gt;https://lib.rs&lt;/a&gt; to filter by license»fn2&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__3&quot; id=&quot;fn__3&quot; class=&quot;fn_bot&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;abbr title=&quot;GNU General Public License&quot;&gt;GPL&lt;/abbr&gt; License: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.gnu.org/licenses/gpl-3.0.html&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__4&quot; id=&quot;fn__4&quot; class=&quot;fn_bot&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Darwin and BSD: &lt;a href=&quot;https://opensource.apple.com&quot; class=&quot;urlextern&quot; title=&quot;https://opensource.apple.com&quot; rel=&quot;ugc nofollow&quot;&gt;https://opensource.apple.com&lt;/a&gt; and &lt;a href=&quot;https://www.freebsd.org/internal/about/#license&quot; class=&quot;urlextern&quot; title=&quot;https://www.freebsd.org/internal/about/#license&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.freebsd.org/internal/about/#license&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__5&quot; id=&quot;fn__5&quot; class=&quot;fn_bot&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Microsoft using Rust in Windows: &lt;a href=&quot;https://devblogs.microsoft.com/engineering-at-microsoft/memory-safe-languages-in-windows/&quot; class=&quot;urlextern&quot; title=&quot;https://devblogs.microsoft.com/engineering-at-microsoft/memory-safe-languages-in-windows/&quot; rel=&quot;ugc nofollow&quot;&gt;https://devblogs.microsoft.com/engineering-at-microsoft/memory-safe-languages-in-windows/&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__6&quot; id=&quot;fn__6&quot; class=&quot;fn_bot&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Amazon’s Firecracker (Rust-based microVM): &lt;a href=&quot;https://firecracker-microvm.github.io&quot; class=&quot;urlextern&quot; title=&quot;https://firecracker-microvm.github.io&quot; rel=&quot;ugc nofollow&quot;&gt;https://firecracker-microvm.github.io&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__7&quot; id=&quot;fn__7&quot; class=&quot;fn_bot&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Crates licensing shown on &lt;a href=&quot;https://crates.io&quot; class=&quot;urlextern&quot; title=&quot;https://crates.io&quot; rel=&quot;ugc nofollow&quot;&gt;https://crates.io&lt;/a&gt;, e.g., &lt;a href=&quot;https://crates.io/crates/serde&quot; class=&quot;urlextern&quot; title=&quot;https://crates.io/crates/serde&quot; rel=&quot;ugc nofollow&quot;&gt;https://crates.io/crates/serde&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/blog:do_what_you_love">
        <dc:format>text/html</dc:format>
        <dc:date>2026-08-30T18:15:33+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>do_what_you_love</title>
        <link>https://wiki.devilplan.com/blog:do_what_you_love</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;do_what_you_love_for_a_living_and_you_might_end_up_hating_it&quot;&gt;&amp;quot;Do what you love for a living, and you might end up hating it.&amp;quot;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\&amp;quot;Do what you love for a living, and you might end up hating it.\&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;do_what_you_love_for_a_living_and_you_might_end_up_hating_it&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;10-76&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;how_turning_passion_into_a_job_can_destroy_it&quot;&gt;How Turning Passion Into a Job Can Destroy It&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-liveforever.png?w=400&amp;amp;tok=718f4c&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
We live in a culture obsessed with passion. Inspirational quotes flood social media: &lt;em&gt;“Follow your dreams!”&lt;/em&gt;, &lt;em&gt;“Do what you love and you’ll never work a day in your life!”&lt;/em&gt; They sound nice. Uplifting, even. But if you’ve ever actually tried to turn what you love into your career, you’ll know the reality is often very different, and far less romantic.
&lt;/p&gt;

&lt;p&gt;
The idea that you should turn your passion into your profession is one of those seemingly wise sayings that often fall apart when put into practice.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;“But Luci, I do what I love for a living, and I’m happy!”&lt;/em&gt; Are you, though? Would you really do your job as a hobby, for no pay? 
&lt;/p&gt;

&lt;p&gt;
I realize I’m speaking from a place of privilege: coding is something I genuinely enjoy as a hobby, and I’m fortunate enough to do it professionally as well, not as much fun but I tolerate it. So rather than taking my perspective as a universal truth, consider it a starting point for your own reflections on the matter.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How Turning Passion Into a Job Can Destroy It&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_turning_passion_into_a_job_can_destroy_it&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;77-1157&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;the_moment_passion_becomes_obligation&quot;&gt;The Moment Passion Becomes Obligation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
I tried to follow that quote. Yes, even though it’s often attributed to Steve Jobs, a figure that I do not respect. Nothing personal, but I deeply dislike the closed, proprietary ecosystem Apple created. I grew up immersed in Linux and open systems. A world built on freedom and curiosity. Apple, to me, represents the opposite. I tried with music, my first and biggest love. Creating, playing, experimenting, it’s my outlet and my joy. I wanted to give it a shot professionally, under the illusion that performing my niche genre would somehow pay the bills. But at one point, while living in Miami-Florida, I was struggling financially. Rent was barely manageable. So I leaned on my music skills to survive. I joined a Top 40 cover band to make some quick money.
&lt;/p&gt;

&lt;p&gt;
That decision marked the beginning of a slow, painful shift. The setlist was full of songs I hated: generic, commercial pop (Taylor Swift or Katy Perry even). Every gig felt like I was selling a piece of my soul. Over time, I started getting sloppy. I just couldn’t bring myself to care. I’d learn songs half-heartedly, I&amp;#039;d show up late to gigs, began throwing in improvised solos mid-song, singing backing vocals even when I wasn’t supposed to, basically doing anything I could to inject some life or unpredictability into the experience. Eventually, I was kicked out of the band.
At first, I was sad, it was a hit. Rent was still due. I had no backup plan beside my daily less-than-minimum-wage job (which I liked.. but not really, btw). But, as it turns out, getting kicked out was the best thing that could have happened to me.
&lt;/p&gt;

&lt;p&gt;
A couple of weeks later, by sheer coincidence, I got a call from a metal band (not exactly my favorite subgenre, but at least within the same universe) that needed a guitarist for an upcoming tour and to help record their new album. I couldn’t believe it. Suddenly, my passion came roaring back. Music felt good again, life felt good.
Of course, I was losing more money than I was making, but at least I wasn’t miserable.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Moment Passion Becomes Obligation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_moment_passion_becomes_obligation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1158-3240&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;money_will_corrupt_what_you_love&quot;&gt;Money Will Corrupt What You Love&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The real point here isn’t financial struggle, that was just a side effect. The deeper damage came from turning something sacred into a job. &lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Money changes things.&lt;/em&gt; It introduces compromise. It strips away the freedom and joy that made you love that thing in the first place. When your passion becomes your paycheck, it often becomes just another transaction. You stop playing, writing, creating from the heart. You start doing it because you &lt;em&gt;have&lt;/em&gt; to. And that changes everything.&lt;/strong&gt;
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
So here’s my advice: &lt;strong&gt;don’t do what you love for a living.&lt;/strong&gt; Do what you &lt;em&gt;like&lt;/em&gt;, or even just what you can tolerate, something stable enough to support your life without draining your soul. Save what you truly love for your personal time, where you control the pace, the direction, and the purpose. That’s where your passion can breathe and stay alive.
&lt;/p&gt;

&lt;p&gt;
ie. I tolerate coding for money, it’s something that comes effortlessly to me. It doesn’t drain my energy, and it gives me opportunities to learn things I can apply to my personal projects.
&lt;/p&gt;

&lt;p&gt;
When you protect what you love from becoming a job, &lt;em class=&quot;u&quot;&gt;it stays pure&lt;/em&gt;. &lt;em class=&quot;u&quot;&gt;You can enjoy it for what it is, not for what it pays&lt;/em&gt;.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
Next time someone says &lt;em&gt;“do what you love,”&lt;/em&gt; think carefully. That advice, as well-intentioned as it may sound, can quietly destroy your joy. Protect your passions. Keep them sacred. Let your job pay the bills. Use your job to finance your hobbies.
&lt;/p&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/blog:do_what_you_love?codeblock=0&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; a &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; ago. &lt;span class=&quot;me1&quot;&gt;Edited&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; June &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2025&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Money Will Corrupt What You Love&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;money_will_corrupt_what_you_love&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3241-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/blog:myth_of_career">
        <dc:format>text/html</dc:format>
        <dc:date>2026-08-30T18:14:16+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>myth_of_career</title>
        <link>https://wiki.devilplan.com/blog:myth_of_career</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_myth_of_careera_system_designed_to_control_you&quot;&gt;The Myth of Career: A System Designed to Control You&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-life-english.png?w=400&amp;amp;tok=12fde0&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
I’ve never believed in the idea of a career. In fact, I hate it. 
&lt;/p&gt;

&lt;p&gt;
A career is nothing more than a fabricated concept injected into our minds by society, designed to maximize the economic output. It’s not about personal fulfillment or genuine growth, it’s about making sure the system functions efficiently.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Myth of Career: A System Designed to Control You&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_myth_of_careera_system_designed_to_control_you&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;10-425&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;the_system_wants_you_to_specialize&quot;&gt;The System Wants You to Specialize&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A system works best when each component does one thing and does it perfectly. That’s the Unix philosophy, it works, and it’s the same principle companies apply when they structure their workforce. Every department has a single function. Every individual is expected to dedicate themselves to just one thing. This is why job listings demand “10 years of experience” in one specific area, it&amp;#039;s all designed to keep you locked in.
&lt;/p&gt;

&lt;p&gt;
But this expectation is &lt;strong&gt;dehumanizing&lt;/strong&gt;. It strips away individuality, curiosity, and growth, reducing people to mere cogs in a machine. The system is simply structured to function this way by people who will get richer from its output. The real problem is that we’ve been conditioned to accept it from childhood. 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Think for yourself and question authority!&lt;/strong&gt;
You must question everything, react instead of blindly believing what they tell you, and mostly, think with your own head.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The System Wants You to Specialize&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_system_wants_you_to_specialize&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;426-1391&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_education_system_is_a_trap&quot;&gt;The Education System is a Trap&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
From an early age, we are manipulated into believing that career is the only path forward. The education system doesn’t exist to educate, it exists to train you for a job, to shape you into a worker who will contribute to the economy. Even teachers, the very people who enforce this mindset, are often unaware of the role they play. They have been brainwashed themselves.
&lt;/p&gt;

&lt;p&gt;
Think about it: asking a child what they want to do in 10 years is absurd. Interests change. Passions evolve. Yet, society pressures us to choose a career path before we even understand ourselves.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Education System is a Trap&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_education_system_is_a_trap&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1392-1999&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;learning_should_be_driven_by_curiosity_not_career&quot;&gt;Learning Should Be Driven by Curiosity, Not Career&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
People flex their skills on LinkedIn, trying to validate themselves in front of others to make a career. Everyone seems so busy showcasing their achievements, it feels so miserable… If you&amp;#039;re going to compete, let it be with yourself, grow and improve for your own fulfillment.
&lt;/p&gt;

&lt;p&gt;
Every meaningful thing I’ve learned in life has been out of curiosity, never because I felt pressured to fit into a career. When you pursue knowledge for the sake of enjoyment, rather than obligation, learning becomes a lifelong journey rather than a means to an economic end.
&lt;/p&gt;

&lt;p&gt;
I’ve never been drawn to programming competitions, even though they’re quite popular, especially during my university years. Coding has always been a personal pursuit, something I engaged-with out of genuine interest, not for recognition or comparison. It&amp;#039;s just something I enjoy doing in my private time for fun and share with like-minded people. I hated the idea that something I loved had to turn into a competition. For me, engineering is about collaboration, not rivalry. If I want to learn or build something, I just do it, not because I want to be part of some rat race.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Learning Should Be Driven by Curiosity, Not Career&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;learning_should_be_driven_by_curiosity_not_career&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2000-3199&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;choose_your_own_path&quot;&gt;Choose Your Own Path&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Some people might have a “better career” than me, but who cares? At what price? Career is just a passion killer. It’s something they drill into your head to make sure you keep feeding the system, whether it’s to help your country compete with China or to make some CEO richer. But think about it: &lt;strong&gt;do you really want to waste your whole life just so the economy can grow? Or do you actually want to live for yourself?&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Society will try to brainwash you into believing that a career is essential. But when you step back and see the bigger picture, you’ll realize it’s all just a way to keep you in line. You don’t have to play by those rules. Follow your curiosity, embrace change, and live life on your own terms.
&lt;/p&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/blog:myth_of_career?codeblock=0&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; a &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; ago. &lt;span class=&quot;me1&quot;&gt;Edited&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; June &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2025&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Choose Your Own Path&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;choose_your_own_path&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3200-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/playground:playground">
        <dc:format>text/html</dc:format>
        <dc:date>2026-08-30T17:51:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>playground - created - external edit</title>
        <link>https://wiki.devilplan.com/playground:playground</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;playground&quot;&gt;PlayGround&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2026-08-01T00:57:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dokuwiki.svg - external edit</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:dokuwiki.svg?w=500&amp;amp;h=500&amp;amp;tok=88b7b6&quot; alt=&quot;dokuwiki.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/coding:lua:lgiquickstart">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-18T00:59:39+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>lgiquickstart</title>
        <link>https://wiki.devilplan.com/coding:lua:lgiquickstart</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;getting_started_with_lgi_lua_gtk&quot;&gt;Getting Started with LGI (Lua GTK)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
This tutorial covers everything you need to know to build your first &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; application using Lua and the GTK3 toolkit on Linux (I will be assuming Arch Linux, but any distro will work just fine). The focus will be on clean code architecture and understanding the core concepts that often confuse beginners.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Getting Started with LGI (Lua GTK)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;getting_started_with_lgi_lua_gtk&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;12-367&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before writing code, ensure the environment is set up correctly. Three main components are needed:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Lua: The programming language interpreter.
GTK3: The underlying C library that draws the windows and widgets (buttons, labels, etc.).
LGI: The Lua binding that allows your Lua code to talk to the GTK C library.&lt;/pre&gt;

&lt;p&gt;
&lt;em&gt;Luarocks (the Lua package manager) will be used for the Lua-specific libraries to ensure we have the most up-to-date version.&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Prerequisites&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;prerequisites&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;368-850&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
First, ensure you have the necessary system tools and the GTK3 library. Open your terminal:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
sudo pacman -S vim gtk3 luarocks&lt;/pre&gt;

&lt;p&gt;
Install the Lua bindings using Luarocks. This pulls down the LGI library which bridges Lua and GTK.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
luarocks install lgi
luarocks install luafilesystem&lt;/pre&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;851-1175&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;the_mental_modelhow_gtk_works&quot;&gt;The Mental Model: How GTK Works&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before typing code, it is crucial to understand how GTK (and therefore LGI) structures an application. If you skip this, the code will feel arbitrary.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Mental Model: How GTK Works&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_mental_modelhow_gtk_works&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1176-1372&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;widgets&quot;&gt;Widgets&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Everything is a “Widget”. A window is a widget. A button is a widget. A text label is a widget. You build an application by creating widgets and stacking them together.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Widgets&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;widgets&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1373-1561&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;containers_and_packing&quot;&gt;Containers and Packing&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
A Window widget can only hold one child item.
If you want a window with 5 buttons, you cannot simply “add” 5 buttons to the window. The window will reject them.
Instead, you add a Container (like a Box) to the window, and then you “pack” your 5 buttons into that Box.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;visual_representation&quot;&gt;Visual Representation&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;Window
    Box (Container)
        Button 1
        Button 2
        Label&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Containers and Packing&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;containers_and_packing&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1562-1991&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;properties_as_tables&quot;&gt;Properties as Tables&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
In traditional C programming, setting a button label looks like a function: &lt;code&gt;gtk_button_set_label(btn, &amp;quot;Click Me&amp;quot;)&lt;/code&gt;.
In LGI Lua, we use a cleaner object-oriented style. Properties are treated like table fields:
&lt;/p&gt;
&lt;pre class=&quot;code lua&quot;&gt;btn&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Click Me&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Properties as Tables&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;properties_as_tables&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1992-2281&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;first_application&quot;&gt;First Application&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
We will build a simple “Greeter” application. It will have a text input field, a button, and a result label.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;First Application&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;first_application&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2282-2422&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;project_setup&quot;&gt;Project Setup&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Create a directory for your project to keep things organized. We will use Vim to create and edit our main file.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mkdir lua_greeter
cd lua_greeter
vim main.lua&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Project Setup&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;project_setup&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;2423-2621&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;writing_the_code&quot;&gt;Writing the Code&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Paste the following code in vim. Read the comments (lines starting with –) to understand what each part does.
&lt;/p&gt;
&lt;pre class=&quot;code lua&quot;&gt;&lt;span class=&quot;co1&quot;&gt;-- 1. LOAD THE LIBRARY&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; lgi &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;lgi&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; Gtk &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; lgi&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Gtk&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;3.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 2. INITIALIZE GTK&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- This function checks the system environment and prepares the GTK engine.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- It must be called before creating any widgets.&lt;/span&gt;
Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;init&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 3. CREATE THE MAIN WINDOW&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; window &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Window &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    title &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;My First LGI App&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    default_width &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    default_height &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- CONNECTING SIGNALS:&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- When the user clicks the &#039;X&#039; button, the &#039;destroy&#039; signal is emitted.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We connect this directly to Gtk.main_quit to stop the application loop.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Without this, the window would close, but the process would keep running in the background.&lt;/span&gt;
on_destroy &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;main_quit
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 4. CREATE CONTAINERS&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Since a Window can only hold one item, we create a vertical Box.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- This Box will stack our items top-to-bottom.&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; vbox &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Box &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    orientation &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;VERTICAL&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    spacing &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;         &lt;span class=&quot;co1&quot;&gt;-- 10 pixels of space between children&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Margins create padding around the edges of the box inside the window&lt;/span&gt;
margin_top &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_bottom &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_start &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_end &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 5. CREATE WIDGETS&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; entry &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Entry &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    placeholder_text &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Type your name here...&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; btn &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Button &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Greet Me&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; resultLabel &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Label &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Result will appear here...&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 6. DEFINE LOGIC (SIGNAL HANDLERS)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We define what happens when the button is clicked.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- &#039;on_clicked&#039; is a special event listener built into Gtk.Button.&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; btn&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;on_clicked&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; entry&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;text &lt;span class=&quot;co1&quot;&gt;-- Access the text property of the entry widget&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    resultLabel&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Please enter a name!&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
    resultLabel&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Hello, &amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;..&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;..&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;!&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 7. ASSEMBLE THE UI&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We use pack_start to add widgets to our Box container.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Syntax: box:pack_start(widget, expand, fill, padding)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- expand (false): Should this widget take up all extra vertical space? (No)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- fill (false): If expanded, should the widget fill that space? (No)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- padding (0): Extra pixels outside the widget.&lt;/span&gt;
&amp;nbsp;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;entry&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;btn&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- For the label, we set expand to &#039;true&#039;. It will take all remaining empty space.&lt;/span&gt;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;resultLabel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- Finally, add the fully populated Box to the Window.&lt;/span&gt;
window&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;add&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;vbox&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 8. RUN THE APPLICATION&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- show_all() renders the window and all its children.&lt;/span&gt;
window&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;show_all&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- Gtk.main() starts the Event Loop.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- The program pauses here and waits for user actions (clicks, key presses).&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- It will only exit when Gtk.main_quit() is called.&lt;/span&gt;
Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Press Esc to exit Insert Mode, then type :wq and press Enter to save and quit Vim.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Writing the Code&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;writing_the_code&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;2622-5462&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;running_the_application&quot;&gt;Running the Application&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Back in the terminal, run your script with the Lua interpreter:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;lua main.lua&lt;/pre&gt;

&lt;p&gt;
You should see a native Linux window appear. Try typing your name and clicking the button.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Running the Application&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running_the_application&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;5463-5686&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;key_concepts_deep_dive&quot;&gt;Key Concepts Deep Dive&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Key Concepts Deep Dive&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;key_concepts_deep_dive&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;5687-5722&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;the_event_loop&quot;&gt;The Event Loop&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
You will notice that the script does not finish execution immediately. It hangs at the line Gtk.main(). This is intentional.
&lt;/p&gt;

&lt;p&gt;
&lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; applications are event-driven. They do not run linearly from start to finish; they wait. The Gtk.main() function creates a loop that constantly listens for events (mouse movements, clicks, system redraw requests). The program sleeps inside this loop until an event occurs.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Event Loop&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_event_loop&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5723-6152&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;layout_management_packing&quot;&gt;Layout Management (Packing)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The pack_start function is the heart of GTK layout. It determines how widgets behave when you resize the window.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Expand (true/false): Does the widget grow if the window gets larger?
Fill (true/false): If the widget grows, does the content fill the new space, or does the widget just float in the center?&lt;/pre&gt;

&lt;p&gt;
Example:
If you set a Button to expand=true and fill=false, the button would stay its normal size but float in the middle of a large empty space when you maximize the window.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Layout Management (Packing)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;layout_management_packing&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6153-6686&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;finding_documentation&quot;&gt;Finding Documentation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
LGI documentation is sparse, but you can use the official GTK3 C documentation and “translate” it to Lua mentally.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;C Syntax: gtk_button_new_with_label(&amp;quot;Hello&amp;quot;)

Lua Syntax: Gtk.Button { label = &amp;quot;Hello&amp;quot; }

C Syntax: gtk_window_set_title(win, &amp;quot;Title&amp;quot;)

Lua Syntax: window.title = &amp;quot;Title&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Resource: Search for GTK3 Reference Manual online. It lists all widgets (Buttons, ComboBoxes, Scrollbars) and their properties, which apply directly to LGI.
&lt;/p&gt;
&lt;hr /&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/coding:lua:lgiquickstart?codeblock=6&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; February &lt;span class=&quot;nu0&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2026&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Finding Documentation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;finding_documentation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;6687-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/sidebar">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-25T18:53:18+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>sidebar</title>
        <link>https://wiki.devilplan.com/sidebar</link>
        <description>

&lt;div class=&quot;table sectionedit1&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/start&quot; class=&quot;wikilink1&quot; title=&quot;start&quot; data-wiki-id=&quot;start&quot;&gt; 🏠 HOME&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;11-35&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;blog_📝&quot;&gt;Blog  📝&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit3&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:myth_of_career&quot; class=&quot;wikilink1&quot; title=&quot;blog:myth_of_career&quot; data-wiki-id=&quot;blog:myth_of_career&quot;&gt; 💭 The Myth of Career&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:do_what_you_love&quot; class=&quot;wikilink1&quot; title=&quot;blog:do_what_you_love&quot; data-wiki-id=&quot;blog:do_what_you_love&quot;&gt; ❤️ Do what you love&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:dont_trust_apple&quot; class=&quot;wikilink1&quot; title=&quot;blog:dont_trust_apple&quot; data-wiki-id=&quot;blog:dont_trust_apple&quot;&gt; 🍏 Apple Client Side Scanning &amp;amp; Privacy Violations&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:foss_freedom_illusion&quot; class=&quot;wikilink1&quot; title=&quot;blog:foss_freedom_illusion&quot; data-wiki-id=&quot;blog:foss_freedom_illusion&quot;&gt; 🦀 Rust, Big Tech, the Illusion of Freedom&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;59-331&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:tech:solid_unix&quot; class=&quot;wikilink1&quot; title=&quot;blog:tech:solid_unix&quot; data-wiki-id=&quot;blog:tech:solid_unix&quot;&gt; 📏 SOLID &amp;amp; Unix&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;333-380&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Blog  \ud83d\udcdd&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;blog_\ud83d\udcdd&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;37-381&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;linux_🐧&quot;&gt;Linux 🐧&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:overview&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:overview&quot; data-wiki-id=&quot;linux:zfs:overview&quot;&gt; 📁 ZFS Overview&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:raid&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:raid&quot; data-wiki-id=&quot;linux:zfs:raid&quot;&gt; 🛠️ ZFS Raid&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:usb_backup&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:usb_backup&quot; data-wiki-id=&quot;linux:zfs:usb_backup&quot;&gt; 🔌 ZFS USB Backup&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:encryption&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:encryption&quot; data-wiki-id=&quot;linux:zfs:encryption&quot;&gt; 🔒 ZFS Encryption&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;405-591&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit7&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:hd-migration&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:hd-migration&quot; data-wiki-id=&quot;linux:btrfs:hd-migration&quot;&gt; 🔄 BTRFS Migration to&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:compression&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:compression&quot; data-wiki-id=&quot;linux:btrfs:compression&quot;&gt; 🗜️ BTRFS Compression&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:trim&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:trim&quot; data-wiki-id=&quot;linux:btrfs:trim&quot;&gt; 🎯 BTRFS Optimization&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:error-checks&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:error-checks&quot; data-wiki-id=&quot;linux:btrfs:error-checks&quot;&gt; ❗ BTRFS Error Checks&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table4&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;593-816&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit8&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:docker:installation&quot; class=&quot;wikilink1&quot; title=&quot;linux:docker:installation&quot; data-wiki-id=&quot;linux:docker:installation&quot;&gt; 🐳 Docker Installation&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:docker:network_debug&quot; class=&quot;wikilink1&quot; title=&quot;linux:docker:network_debug&quot; data-wiki-id=&quot;linux:docker:network_debug&quot;&gt; 🌐 Docker Network Tools&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table5&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;818-939&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Linux \ud83d\udc27&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;linux_\ud83d\udc27&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;382-940&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;coding_-_lua☽⋆&quot;&gt;Coding - Lua☽⋆&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit10&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/coding:lua:lgiquickstart&quot; class=&quot;wikilink1&quot; title=&quot;coding:lua:lgiquickstart&quot; data-wiki-id=&quot;coding:lua:lgiquickstart&quot;&gt; 🌙 Lua LGI Quick Start&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table6&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;972-1030&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Coding - Lua\u263d\u22c6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;coding_-_lua\u263d\u22c6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;941-1031&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;coding_-_qt_💻&quot;&gt;Coding - Qt 💻&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit12&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/coding:qt:quickstart&quot; class=&quot;wikilink1&quot; title=&quot;coding:qt:quickstart&quot; data-wiki-id=&quot;coding:qt:quickstart&quot;&gt; ⚡ Qt Quick Start&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table7&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;1061-1109&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Coding - Qt \ud83d\udcbb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;coding_-_qt_\ud83d\udcbb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;1032-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/blog:dont_trust_apple">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T19:15:23+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>dont_trust_apple</title>
        <link>https://wiki.devilplan.com/blog:dont_trust_apple</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;apple_client_side_scanning_data_control_and_violation_of_privacy&quot;&gt;Apple Client Side Scanning, Data Control and Violation of Privacy&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Apple Client Side Scanning, Data Control and Violation of Privacy&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;apple_client_side_scanning_data_control_and_violation_of_privacy&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;10-78&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;do_i_trust_apple&quot;&gt;Do I trust Apple?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
No, absolutely not! I don’t trust Apple for the same reasons I don’t trust other big tech corporations or any closed-source ecosystem.
&lt;/p&gt;

&lt;p&gt;
If your trust comes from “they promised they’re not evil,” mine comes from documented behavior that says otherwise.
Their reputation relies on marketing slogans like “we protect your privacy” while my skepticism is based on facts, history and hard evidence.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wiki.devilplan.com/_detail/blog:ddog-apple-bl.jpg?id=blog%3Adont_trust_apple&quot; class=&quot;media&quot; title=&quot;blog:ddog-apple-bl.jpg&quot;&gt;&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple-bl.jpg?w=400&amp;amp;tok=794888&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Do I trust Apple?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;do_i_trust_apple&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;79-544&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;what_s_client_side_scanning&quot;&gt;What’s Client Side Scanning?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
“Client-side scanning” (&lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;) refers to analyzing data, photos, messages, files, &lt;strong&gt;locally on your device&lt;/strong&gt; &lt;em class=&quot;u&quot;&gt;before it’s encrypted or sent&lt;/em&gt;. The idea is that AI or machine learning models scan your content for illegal or harmful material (like Child Sexual Abuse Material, CSAM) &lt;strong&gt;without Apple or any third party ever needing to decrypt your data on their servers&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
In theory, assuming we believe what Apple claims, this means your phone or computer runs a model comparing your content to a database of known illegal content hashes or patterns. If the model detects a match, it triggers an alert or sends metadata to Apple or relevant authorities for further action.
&lt;/p&gt;

&lt;p&gt;
Apple’s client-side scanning system runs on certain chips:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;A11 Bionic and later&lt;/strong&gt; (iPhones from 2017 onward) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;A12 and later&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;M1, M2, M3 chips&lt;/strong&gt; (used in recent Macs and iPads) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Latest A17 Pro / M4 chips&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1322-1494&amp;quot;} --&gt;
&lt;p&gt;
This means this kind of scanning capability has been technically possible for years thanks to Apple’s Neural Engine and secure enclave hardware.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;What\u2019s Client Side Scanning?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_s_client_side_scanning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;545-1647&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;why_is_client_side_scanning_risky_what_doors_does_it_open&quot;&gt;Why is Client Side Scanning Risky? What Doors Does It Open?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
While client-side scanning is pitched as a privacy-preserving measure, &lt;strong&gt;there are major risks and concerns:&lt;/strong&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Why is Client Side Scanning Risky? What Doors Does It Open?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;why_is_client_side_scanning_risky_what_doors_does_it_open&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1648-1823&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;expands_the_scope_of_surveillance_on_users_private_data&quot;&gt;Expands the scope of surveillance on users’ private data&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Even if scanning is done locally, &lt;strong&gt;the system must have access to all your content&lt;/strong&gt; (photos, messages, files) in unencrypted form &lt;em&gt;before&lt;/em&gt; encryption. This breaks the principle of true end-to-end encryption.
&lt;/p&gt;

&lt;p&gt;
This creates a backdoor, not a traditional backdoor that Apple holds, but a &lt;strong&gt;built-in mechanism to scan all personal data on your device&lt;/strong&gt;, which governments or other actors could exploit.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Expands the scope of surveillance on users\u2019 private data&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;expands_the_scope_of_surveillance_on_users_private_data&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1824-2289&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;potential_for_false_positives_and_overreach&quot;&gt;Potential for false positives and overreach&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Machine learning models can make mistakes. Innocent content could be flagged as illegal, leading to unwarranted investigations or censorship.
&lt;/p&gt;

&lt;p&gt;
Apple or third parties could expand the scanning scope beyond CSAM to politically sensitive content, activist messages, or even legal but “undesirable” material.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Potential for false positives and overreach&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;potential_for_false_positives_and_overreach&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2290-2648&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;governmental_or_authoritarian_misuse&quot;&gt;Governmental or authoritarian misuse&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Governments with authoritarian tendencies could demand Apple or other companies &lt;strong&gt;expand scanning databases&lt;/strong&gt; to include content critical of the government, religious minorities, journalists, or political activists.
&lt;/p&gt;

&lt;p&gt;
Client-side scanning can become a tool for &lt;strong&gt;mass surveillance and suppression of dissent&lt;/strong&gt; under the guise of security.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Governmental or authoritarian misuse&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;governmental_or_authoritarian_misuse&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2649-3029&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;increased_risk_of_hacking_or_abuse&quot;&gt;Increased risk of hacking or abuse&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The scanning algorithms and databases themselves become a target for hackers. If malicious actors access these scanning components, they could &lt;strong&gt;1)&lt;/strong&gt; Reverse engineer or spoof the scanning process. &lt;strong&gt;2)&lt;/strong&gt; Introduce malicious hashes to flag innocent content, disrupt user privacy, or frame individuals.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Increased risk of hacking or abuse&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;increased_risk_of_hacking_or_abuse&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3030-3372&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;enables_broad_data_collection_and_profiling&quot;&gt;Enables broad data collection and profiling&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
While Apple claims only metadata or alerts are sent if matches occur, &lt;strong&gt;client-side scanning creates a system where detailed knowledge about your data exists on your device&lt;/strong&gt;. This could be leveraged to collect user behavior patterns or metadata, either by Apple or third parties.
&lt;/p&gt;

&lt;p&gt;
Apple or “big tech” could use this data to &lt;strong&gt;profile users, refine targeted advertising, or even sell aggregated behavioral data&lt;/strong&gt; to third parties, despite privacy promises.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Enables broad data collection and profiling&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;enables_broad_data_collection_and_profiling&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3373-3888&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;how_could_big_tech_exploit_client_side_scanning&quot;&gt;How Could Big Tech Exploit Client Side Scanning?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Eroding End-to-End Encryption:&lt;/strong&gt; client-side scanning introduces a &lt;strong&gt;“soft” backdoor&lt;/strong&gt; that can be widened over time, allowing tech companies to access user content under the pretext of safety.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Expanding Surveillance Beyond CSAM:&lt;/strong&gt; The scanning scope could gradually broaden from child abuse material to drug-related content, political opinions, or copyrighted content, increasing user data exposure.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Selling or Monetizing User Data:&lt;/strong&gt; Although Apple says it doesn’t sell user data, the existence of detailed metadata or flagged content creates &lt;strong&gt;new rich datasets&lt;/strong&gt; that could be monetized directly or indirectly by advertisers or government contracts.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Creating a Precedent for Other Companies:&lt;/strong&gt; If Apple successfully normalizes client-side scanning, other big tech players might implement &lt;strong&gt;even more invasive scanning or data collection&lt;/strong&gt; systems, accelerating privacy erosion industry-wide.
&lt;strong&gt;
Government Collaboration and Pressure:&lt;/strong&gt; Governments can compel companies to add new categories to scanning databases or share flagged data under secret orders, sidestepping traditional privacy safeguards.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How Could Big Tech Exploit Client Side Scanning?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_could_big_tech_exploit_client_side_scanning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;3889-5069&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;to_summarize&quot;&gt;To summarize:&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
While client-side scanning may seem like a privacy-preserving way to combat illegal content, &lt;strong&gt;it fundamentally shifts control of your personal data from you to big tech and governments&lt;/strong&gt; by:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Forcing devices to scan all private data locally,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Increasing surveillance capability and risk of abuse,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Weakening encryption and privacy protections,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Opening avenues for misuse, false accusations, and government overreach,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;And enabling new forms of data collection, profiling, or monetization.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;To summarize:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;to_summarize&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;5070-5591&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit13&quot; id=&quot;but_luci_i_trust_apple_their_ad_says_privacy_first&quot;&gt;But Luci... I trust Apple! Their AD says &amp;quot;Privacy First!&amp;quot;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Here are some of the legal cases from &lt;strong&gt;2025&lt;/strong&gt; involving Apple where it has been accused (or found) of violating user rights, privacy, consumer protection, misleading advertising etc.
&lt;/p&gt;

&lt;p&gt;
Keep in mind that these are just the ones I found with a relatively quick search, since compiling a comprehensive list is beyond the scope of this post, and, importantly, this only covers the year 2025, the list would have been too long if I included additional years.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;But Luci... I trust Apple! Their AD says \&amp;quot;Privacy First!\&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;but_luci_i_trust_apple_their_ad_says_privacy_first&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5592-6112&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;key_cases_legal_issues_in_2025&quot;&gt;Key Cases &amp;amp; Legal Issues in 2025&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit15&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Case / Action &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Issue &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Status / Outcome (as of 2025) &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Siri Privacy Settlement (U.S.)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Class-action lawsuit alleging Siri was listening to users’ private conversations without their consent, including instances of accidental activation, sharing or using voice data, targeting ads etc. ([The Guardian][1]) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Apple agreed to a &lt;strong&gt;$95 million&lt;/strong&gt; settlement. ([The Guardian][1]) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;France Antitrust fine over App Tracking Transparency (ATT)&lt;/strong&gt;                               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; French regulator found that Apple abused its dominant position via ATT — specifically, that ATT’s implementation was “neither necessary nor proportionate,” hurting smaller publishers dependent on third-party tracking / advertising revenue. ([Reuters][2])                                                               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Apple was fined &lt;strong&gt;150 million euros&lt;/strong&gt;. ([Reuters][2])                                                                                                &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Lawsuit by Authors over AI training using books&lt;/strong&gt;                                          &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Authors claim Apple used copyrighted books without consent to train its AI systems (“OpenELM” etc.). Accusations include using pirated “shadow libraries”. ([CNBC][3])                                                                                                                                                       &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Open, proposed class action. Seeking damages / injunctive relief. ([CNBC][3])                                                                        &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;False advertising / delay of promised Siri / Apple Intelligence features&lt;/strong&gt; (U.S. &amp;amp; Canada) &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Apple marketed advanced Siri / “Apple Intelligence” features in iPhone 16 as available or imminent, but delayed their release. Plaintiffs allege this misled consumers, and that some bought devices under false expectations. ([MacRumors][4])                                                                              &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Lawsuits filed (class actions) in both countries. As of 2025 not resolved. ([MacRumors][4])                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Developer lawsuit over external payment link injunction / App Store policy&lt;/strong&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Developers sued Apple over costs related to external payment links, anti-steering policies (i.e. policies that discourage or block linking outside the App Store), commissions etc., claiming Apple incurred revenues due to the restrictive policy, harming developers. ([MacRumors][5])                                    &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Lawsuit pending. Seeking restitution, etc. ([MacRumors][5])                                                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Apple Books e-Books / Audiobooks availability lawsuit&lt;/strong&gt;                                    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Plaintiffs allege that when Apple loses licensing rights to certain digital books/audiobooks, Apple removes them entirely from the Books store, including revoking the ability to re-download even if the user “purchased” them. They say Apple misled customers into believing purchases were “perpetual.” ([MacRumors][6]) &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Class action filed, seeking up to &lt;strong&gt;US$5 billion&lt;/strong&gt; in damages. ([MacRumors][6])                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Canadian class action over Siri / conversation recordings&lt;/strong&gt;                                &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; In Canada, class actions (e.g. Hammerco, Lex Group) have been filed alleging Apple recorded private conversations via Siri without consent, and possibly shared them with third parties. ([Hammerco][7])                                                                                                                     &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Pending. ([Hammerco][7])                                                                                                                             &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;6151-9968&amp;quot;} --&gt;&lt;hr /&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.theguardian.com/technology/2025/jan/03/apple-siri-privacy-lawsuit-settlement?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.theguardian.com/technology/2025/jan/03/apple-siri-privacy-lawsuit-settlement?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;The Guardian&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.reuters.com/technology/french-antitrust-regulator-fines-apple-150-million-euros-over-privacy-tool-2025-03-31/?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.reuters.com/technology/french-antitrust-regulator-fines-apple-150-million-euros-over-privacy-tool-2025-03-31/?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;Reuters&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.reuters.com/sustainability/boards-policy-regulation/apple-sued-over-use-copyrighted-books-train-apple-intelligence-2025-10-10/?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.reuters.com/sustainability/boards-policy-regulation/apple-sued-over-use-copyrighted-books-train-apple-intelligence-2025-10-10/?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;Reuters&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Key Cases &amp;amp; Legal Issues in 2025&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;key_cases_legal_issues_in_2025&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6113-11961&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;a_couple_of_early_cases_worth_mentioning&quot;&gt;A couple of early cases worth mentioning:&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit17&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Case &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; What Apple Did &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;2008 “Jansen case” (Watertown, NY)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Apple complied with the first court-ordered iPhone unlock. The company assisted in drafting the court order and bypassing a passcode. ([MacRumors][1]) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Multiple early cases (2008-2014 era)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; According to government filings and press reports, Apple “unlocked iPhones” or extracted some data from locked phones under court order during this period. ([CBS News][2]) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;12010-12459&amp;quot;} --&gt;

&lt;hr /&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/blog:dont_trust_apple?codeblock=0&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; October &lt;span class=&quot;nu0&quot;&gt;17&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2025&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A couple of early cases worth mentioning:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_couple_of_early_cases_worth_mentioning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;11962-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T19:14:58+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-apple-bl.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple-bl.jpg?w=500&amp;amp;h=500&amp;amp;tok=9d7751&quot; alt=&quot;ddog-apple-bl.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T16:06:07+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-apple.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple.jpg?w=500&amp;amp;h=500&amp;amp;tok=516057&quot; alt=&quot;ddog-apple.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-17T03:28:44+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-notreal2.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-notreal2.jpg?w=500&amp;amp;h=500&amp;amp;tok=fe72c5&quot; alt=&quot;ddog-notreal2.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-17T03:25:00+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-notreal.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-notreal.png?w=500&amp;amp;h=500&amp;amp;tok=93f968&quot; alt=&quot;ddog-notreal.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-17T01:33:45+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-chess.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:tech:ddog-chess.jpg?w=500&amp;amp;h=500&amp;amp;tok=b8b34c&quot; alt=&quot;ddog-chess.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-08T00:23:04+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-liveforever.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-liveforever.png?w=500&amp;amp;h=500&amp;amp;tok=9ea8b9&quot; alt=&quot;ddog-liveforever.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-06T13:48:34+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-life-english.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-life-english.png?w=500&amp;amp;h=500&amp;amp;tok=529393&quot; alt=&quot;ddog-life-english.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:14:36+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>dokuwiki.svg - created</title>
        <link>https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/0:dokuwiki.svg?w=500&amp;amp;h=500&amp;amp;tok=8969ff&quot; alt=&quot;dokuwiki.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:13:01+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>favicon.svg - created</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:favicon.svg?w=500&amp;amp;h=500&amp;amp;tok=8720b9&quot; alt=&quot;favicon.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:08:31+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>logo.png - created</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:logo.png?w=500&amp;amp;h=500&amp;amp;tok=dba1e3&quot; alt=&quot;logo.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:07:31+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ic_speaker_colored_432px.svg - removed</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:ic_speaker_colored_432px.svg?w=500&amp;amp;h=500&amp;amp;tok=c32ee3&quot; alt=&quot;ic_speaker_colored_432px.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
</rdf:RDF>
