call_end

    • Pl chevron_right

      Cassidy James Blaede: ROOST at FOSDEM 2026

      news.movim.eu / PlanetGnome • 6 February 2026 • 5 minutes

    stickers.jpg

    A few months ago I joined ROOST (Robust Open Online Safety Tools) to build our open source community that would be helping to create, distribute, and maintain common tools and building blocks for online trust and safety. One of the first events I wanted to make sure we attended in order to build that community was of course FOSDEM , the massive annual gathering of open source folks in Brussels, Belgium.

    Luckily for us, the timing aligned nicely with the v1 release of our first major online safety tool, Osprey , as well as its adoption by Bluesky and the Matrix.org Foundation. I wrote and submitted a talk for the FOSDEM crowd and the decentralized communications track, which was accepted. Our COO Anne Bertucio and I flew out to Brussels to meet up with folks, make connections, and learn how our open source tools could best serve open protocols and platforms.

    Brunch with the Christchurch Call Foundation

    Saturday, ROOST co-hosted a brunch with the Christchurch Call Foundation where we invited folks to discuss the intersection of open source and online safety. The event was relatively small, but we engaged in meaningful conversations and came away with several recurring themes. Non-exhaustively, some areas attendees were interested in: novel classifiers for unique challenges like audio recordings and pixel art; how to ethically source and train classifiers; ways to work better together across platforms and protocols.

    Personally I enjoyed meeting folks from Mastodon, GitHub, ATproto, IFTAS, and more in person for the first time, and I look forward to continuing several conversations that were started over coffee and fruit.

    Talk

    Our Sunday morning talk “Stop Reinventing in Isolation” (which you can watch on YouTube or at fosdem.org ) filled the room and was really well-received.

    Cassidy Anne

    Cassidy and Anne giving a talk. | Photos from @matrix@mastodon.matrix.org

    In it we tackled three major topics: a crash course on what is “trust and safety”; why the field needs an open source approach; and then a bit about Osprey, our self-hostable automated rules engine and investigation tool that started as an internal tool built at Discord.

    Q&A

    We had a few minutes for Q&A after the talk, and the folks in the room spurred some great discussions. If there’s something you’d like to ask that isn’t covered by the talk or this Q&A, feel free to start a discussion ! Also note that this gets a bit nerdy; if you’re not interested in the specifics of deploying Osprey, feel free to skip ahead to the Stand section.

    Room

    When using Osprey with the decentralized Matrix protocol, would it be a policy server implementation?

    Yes, in the Matrix model that’s the natural place to handle it. Chat servers are designed to check with the policy server before sending room events to clients, so it’s precisely where you’d want to be able to run automated rules. The Matrix.org Foundation is actively investigating how exactly Osprey can be used with this setup, and already have it deployed in their staging environment for testing.

    Does it make sense to use Osprey for smaller platforms with fewer events than something like Matrix, Bluesky, or Discord?

    This one’s a bit harder to answer, because Osprey is often the sort of tool you don’t “need” until you suddenly and urgently do. That said, it is designed as an in-depth investigation tool, and if that’s not something needed on your platform yet due to the types and volume of events you handle, it could be overkill. You might be better off starting with a moderation/review dashboard like Coop, which we expect to be able to release as v0 in the coming weeks. As your platform scales, you could then explore bringing Osprey in as a complementary tool to handle more automation and deeper investigation.

    Does Osprey support account-level fraud detection?

    Osprey itself is pretty agnostic to the types of events and metadata it handles; it’s more like a piece of plumbing that helps you connect a firehose of events to one end, write rules and expose those events for investigation in the middle, and then connect outgoing actions on the other end. So while it’s been designed for trust and safety uses, we’ve heard interest from platforms using it in a fraud prevention context as well.

    What are the hosting requirements of Osprey, and what do deployments look like?

    While you can spin Osprey up on a laptop for testing and development, it can be a bit beefy. Osprey is made up of four main components: worker, UI, database, and Druid as the analytics database. The worker and UI have low resource requirements, your database (e.g. Postgres) could have moderate requirements, but then Druid is what will have the highest requirements. The requirements will also scale with your total throughput of events being processed, as well as the TTLs you keep in Druid. As for deployments, Discord, Bluesky, and the Matrix.org Foundation have each integrated Osprey into their Kubernetes setups as the components are fairly standard Docker images. Osprey also comes with an optional coordinator, an action distribution and load-balancing service that can aid with horizontal scaling.

    Stand

    This year we were unable to secure a stand (there were already nearly 100 stands in just 5 buildings!), but our friends at Matrix graciously hosted us for several hours at their stand near the decentralized communications track room so we could follow up with folks after our talk. We blew through our shiny sticker supply as well as our 3D printed ROOST keychains (which I printed myself at home!) in just one afternoon. We’ll have to bring more to future FOSDEMs!

    Stickers

    When I handed people one of our hexagon stickers the reaction was usually some form of, “ooh, shiny!” but my favorite was when someone essentially said, “Oh, you all actually know open source!” That made me proud, at least. :)

    Interesting Talks

    Lastly, I always like to shout out interesting talks I attended or caught on video later so others can enjoy them on their own time. I recommend checking out:

    • Pl chevron_right

      Cassidy James Blaede: ROOST at FOSDEM 2026

      news.movim.eu / PlanetGnome • 6 February 2026 • 5 minutes

    stickers.jpg

    A few months ago I joined ROOST (Robust Open Online Safety Tools) to build our open source community that would be helping to create, distribute, and maintain common tools and building blocks for online trust and safety. One of the first events I wanted to make sure we attended in order to build that community was of course FOSDEM , the massive annual gathering of open source folks in Brussels, Belgium.

    Luckily for us, the timing aligned nicely with the v1 release of our first major online safety tool, Osprey , as well as its adoption by Bluesky and the Matrix.org Foundation. I wrote and submitted a talk for the FOSDEM crowd and the decentralized communications track, which was accepted. Our COO Anne Bertucio and I flew out to Brussels to meet up with folks, make connections, and learn how our open source tools could best serve open protocols and platforms.

    Brunch with the Christchurch Call Foundation

    Saturday, ROOST co-hosted a brunch with the Christchurch Call Foundation where we invited folks to discuss the intersection of open source and online safety. The event was relatively small, but we engaged in meaningful conversations and came away with several recurring themes. Non-exhaustively, some areas attendees were interested in: novel classifiers for unique challenges like audio recordings and pixel art; how to ethically source and train classifiers; ways to work better together across platforms and protocols.

    Personally I enjoyed meeting folks from Mastodon, GitHub, ATproto, IFTAS, and more in person for the first time, and I look forward to continuing several conversations that were started over coffee and fruit.

    Talk

    Our Sunday morning talk “Stop Reinventing in Isolation” (which you can watch on YouTube or at fosdem.org ) filled the room and was really well-received.

    Cassidy Anne

    Cassidy and Anne giving a talk. | Photos from @matrix@mastodon.matrix.org

    In it we tackled three major topics: a crash course on what is “trust and safety”; why the field needs an open source approach; and then a bit about Osprey, our self-hostable automated rules engine and investigation tool that started as an internal tool built at Discord.

    Q&A

    We had a few minutes for Q&A after the talk, and the folks in the room spurred some great discussions. If there’s something you’d like to ask that isn’t covered by the talk or this Q&A, feel free to start a discussion ! Also note that this gets a bit nerdy; if you’re not interested in the specifics of deploying Osprey, feel free to skip ahead to the Stand section.

    Room

    When using Osprey with the decentralized Matrix protocol, would it be a policy server implementation?

    Yes, in the Matrix model that’s the natural place to handle it. Chat servers are designed to check with the policy server before sending room events to clients, so it’s precisely where you’d want to be able to run automated rules. The Matrix.org Foundation is actively investigating how exactly Osprey can be used with this setup, and already have it deployed in their staging environment for testing.

    Does it make sense to use Osprey for smaller platforms with fewer events than something like Matrix, Bluesky, or Discord?

    This one’s a bit harder to answer, because Osprey is often the sort of tool you don’t “need” until you suddenly and urgently do. That said, it is designed as an in-depth investigation tool, and if that’s not something needed on your platform yet due to the types and volume of events you handle, it could be overkill. You might be better off starting with a moderation/review dashboard like Coop, which we expect to be able to release as v0 in the coming weeks. As your platform scales, you could then explore bringing Osprey in as a complementary tool to handle more automation and deeper investigation.

    Does Osprey support account-level fraud detection?

    Osprey itself is pretty agnostic to the types of events and metadata it handles; it’s more like a piece of plumbing that helps you connect a firehose of events to one end, write rules and expose those events for investigation in the middle, and then connect outgoing actions on the other end. So while it’s been designed for trust and safety uses, we’ve heard interest from platforms using it in a fraud prevention context as well.

    What are the hosting requirements of Osprey, and what do deployments look like?

    While you can spin Osprey up on a laptop for testing and development, it can be a bit beefy. Osprey is made up of four main components: worker, UI, database, and Druid as the analytics database. The worker and UI have low resource requirements, your database (e.g. Postgres) could have moderate requirements, but then Druid is what will have the highest requirements. The requirements will also scale with your total throughput of events being processed, as well as the TTLs you keep in Druid. As for deployments, Discord, Bluesky, and the Matrix.org Foundation have each integrated Osprey into their Kubernetes setups as the components are fairly standard Docker images. Osprey also comes with an optional coordinator, an action distribution and load-balancing service that can aid with horizontal scaling.

    Stand

    This year we were unable to secure a stand (there were already nearly 100 stands in just 5 buildings!), but our friends at Matrix graciously hosted us for several hours at their stand near the decentralized communications track room so we could follow up with folks after our talk. We blew through our shiny sticker supply as well as our 3D printed ROOST keychains (which I printed myself at home!) in just one afternoon. We’ll have to bring more to future FOSDEMs!

    Stickers

    When I handed people one of our hexagon stickers the reaction was usually some form of, “ooh, shiny!” but my favorite was when someone essentially said, “Oh, you all actually know open source!” That made me proud, at least. :)

    Interesting Talks

    Lastly, I always like to shout out interesting talks I attended or caught on video later so others can enjoy them on their own time. I recommend checking out:

    • Pl chevron_right

      Mathias Bonn: The Hobby Lives On

      news.movim.eu / PlanetGnome • 28 January 2026 • 1 minute

    Maintaining an open source project in your free time is incredibly rewarding. A large project full of interesting challenges, limited only by your time and willingness to learn. Years of work add up to something you’ve grown proud of. Who would’ve thought an old project on its last legs could turn into something beautiful?

    The focus is intense. So many people using the project, always new things to learn and improve. Days fly by when time allows for it. That impossible feature sitting in the backlog for years, finally done. That slow part of the application, much faster now. This flow state is pretty cool, might as well tackle a few more issues while it lasts.

    Then comes the day. The biggest release yet is out the door. More tasks remain on the list, but it’s just too much. That release took so much effort, and the years are adding up. You can’t keep going like this. You wonder, is this the beginning of the end? Will you finally burn out, like so many before you?

    A smaller project catches your eye. Perhaps it would be fun to work on something else again. Maybe it doesn’t have to be as intense? Looks like this project uses a niche programming language. Is it finally time to learn another one? It’s an unfamiliar project, but it’s pretty fun. It tickles the right spots. All the previous knowledge helps.

    You work on the smaller project for a while. It goes well. That larger project you spent years on lingers. So much was accomplished. It’s not done yet, but software is never done. The other day, someone mentioned this interesting feature they really wanted. Maybe it wouldn’t hurt to look into it? It’s been a while since the last feature release. Maybe the next one doesn’t have to be as intense? It’s pretty fun to work on other projects sometimes, too.

    The hobby lives on. It’s what you love doing, after all.

    • Pl chevron_right

      Lucas Baudin: Drawing and Writing on PDFs in Papers (and new blog)

      news.movim.eu / PlanetGnome • 28 January 2026 • 1 minute

    Nearly 10 years ago, I first looked into this for Evince but quickly gave up. One year and a half ago, I tried again, this time in Papers. After several merge requests in poppler and in Papers, ink and free text annotations support just landed in Papers repository!

    Therefore, it is now possible to draw on documents and add text, for instance to fill forms. Here is a screenshot with the different tools:

    Papers with the new drawing tools

    This is the result of the joint work of several people who designed, developed, and tested all the little details. It required adding support for ink and free text annotations in the GLib bindings of poppler, then adding support for highlight ink annotations there. Then several things got in the way adding those in Papers; among other things, it became clear that an undo/redo mechanism was necessary and annotations management was entangled with the main view widget. It was also an opportunity to improve document forms, which are now more accessible.

    This can be tested directly from the GNOME Nightly flatpak repository and new issues are welcomed.

    Also, this is a new blog and I never quite introduced myself: I actually started developing with GTK on GTK 2, at a time when GTK 3 was looming. Then I took a long break and delved again into desktop development two years ago. Features that just got merged were, in fact, my first contributions to Papers. They are also the ones that took the most time to be merged! I became one of Papers maintainers last March, joining Pablo (who welcomed me in this community and stopped maintenance since then), Markus, and Qiu.

    Next time, a post about our participation in Outreachy with Malika's internship !

    • Pl chevron_right

      Asman Malika: Mid-Point Project Progress: What I’ve Learned So Far

      news.movim.eu / PlanetGnome • 26 January 2026 • 2 minutes

    Dark mode: Manual Signature Implementation

    Light mode: When there is no added signature

    Reaching the midpoint of this project feels like a good moment to pause, not because the work is slowing down, but because I finally have enough context to see the bigger picture.

    At the start, everything felt new: the codebase, the community, the workflow, and even the way problems are framed in open source. Now, halfway through, things are starting to connect.

    Where I Started

    When I began working on Papers, my main focus was understanding the codebase and how contributions actually happen in a real open-source project. Reading unfamiliar code, following discussions, and figuring out where my work fit into the larger system was challenging.

    Early on, progress felt slow. Tasks that seemed small took longer than expected, mostly because I was learning how the project works, not just what to code. But that foundation has been critical.

    Photo: Build failure I encountered during development

    What I’ve Accomplished So Far

    At this midpoint, I’m much more comfortable navigating the codebase and understanding the project’s architecture. I’ve worked on the manual signature feature and related fixes, which required carefully reading existing implementations, asking questions, and iterating based on feedback. I’m now working on the digital signature implementation, which is one of the most complext part of the project and builds directly on the foundation laid by the earlier work.

    Beyond the technical work, I’ve learned how collaboration really functions in open source:

    • How to communicate progress clearly
    • How to receive and apply feedback
    • How to break down problems instead of rushing to solutions

    These skills have been just as important as writing code.

    Challenges Along the Way

    One of the biggest challenges has been balancing confidence and humility, knowing when to try things independently and when to ask for help. I’ve also learned that progress in open source isn’t always linear. Some days are spent coding, others reading, debugging, or revisiting decisions.

    Another challenge has been shifting my mindset from “just making it work” to thinking about maintainability, users, and future contributors. That shift takes time, but it’s starting to stick.

    What’s Changed Since the Beginning

    The biggest change is how I approach problems.

    I now think more about who will use the feature, who might read this code later, and how my changes fit into the overall project. Thinking about the audience, both users of Papers and fellow contributors, has influenced how I write code, documentation, and even this blog.

    I’m also more confident participating in discussions and expressing uncertainty when I don’t fully understand something. That confidence comes from realizing that learning in public is part of the process.

    Looking Ahead

    The second half of this project feels more focused. With the groundwork laid, I can move faster and contribute more meaningfully. My goal is to continue improving the quality of my contributions, take on more complex tasks, and deepen my understanding of the project.

    Most importantly, I want to keep learning about open source, about collaboration, and about myself as a developer.

    Final Thoughts

    This midpoint has reminded me that growth isn’t always visible day to day, but it becomes clear when you stop and reflect. I’m grateful for the support, feedback, and patience from GNOME community, especially my mentor Lucas Baudin. And I’m so excited to see how the rest of the project unfolds.

    • Pl chevron_right

      Sam Thursfield: AI predictions for 2026

      news.movim.eu / PlanetGnome • 24 January 2026 • 7 minutes

    Its a crazy time to be part of the tech world. I’m happy to be sat on the fringes here but I want to try and capture a bit of the madness, so in a few years we can look back on this blogpost and think “Oh yes, shit was wild in 2026”.

    (insert some AI slop image here of a raccoon driving a racing car or something)

    I have read the blog of Geoffrey Huntley for about 5 years since he famously right-clicked all the NFTs . Smart & interesting guy. I’ve also known the name Steve Yegge for a while, he has done enough notable things to get the honour of an entry in Wikipedia. Recently they’ve both written a lot about generating code with LLMs. I mean, I hope in 2026 we’ve all had some fun feeding freeform text and code into LLMs and playing with the results, they are a fascinating tool. But these two dudes are going into what looks like a sort of AI psychosis, where you feed so many LLMs into each other that you can see into the future, and in the process give most of your money to Anthropic.

    It’s worth reading some of their articles if you haven’t, there are interesting ideas in there, but I always pick up some bad energy. They’re big on the hook that, if you don’t study their techniques now, you’ll be out of a job by summer 2026. (Mark Zuckerborg promised this would happen by summer 2025, but somehow I still have to show up for work five days every week). The more I hear this, the more it feels like a sort of alpha-male flex, except online and in the context of the software industry. The alpha tech-bro is here, and he will Vibe Code the fuck out of you. The strong will reign, and the weak will wither. Is that how these guys see the world? Is that the only thing they think we can do with these here computers, is compete with each other in Silicon Valley’s Hunger Games?

    I felt a bit dizzy when I saw Geoffrey’s recent post about how he was now funded by cryptocurrency gamblers ( “two AI researchers are now funded by Solana”) who are betting on his project and gifting him the fees. I didn’t manage to understand what the gamblers would win. It seemed for a second like an interesting way to fund open research, although “Patreon but it’s also a casino” is definitely turn for the weird. Steve Yegge jumped on the bandwagon the same week ( “BAGS and the Creator Economy” ) and, without breaking any laws, gave us the faintest hint that something big is happening over there.

    Well…

    You’ll be surprised to know that both of them bailed on it within a week. I’m not sure why — I suspect maybe the gamblers got too annoying to deal with — but it seems some people lost some money. Although that’s really the only possible outcome from gambling. I’m sure the casino owners did OK out of it. Maybe its still wise to be wary of people who message you out of the blue wanting to sell you cryptocurrency.

    The excellent David Gerard had a write up immediately on Pivot To AI: “Steve Yegge’s Gas Town: Vibe coding goes crypto scam” . (David is not a crypto scammer and has a good old fashioned Patreon where you can support his journalism). He talks about addiction to AI, which I’m sure you know is a real thing.

    Addictive software was perfected back in the 2010s by social media giants. The same people who had been iterating on gambling machines for decades moved to California and gifted us infinite scroll . OpenAI and Anthropic are based in San Francisco. There’s something inherently addictive about a machine that takes your input, waits a second or two, and gives you back something that’s either interesting or not. Next time you use ChatGPT, look at how the interface leans into that!

    (Pivot To AI also have a great writeup of this: “Generative AI runs on gambling addiction — just one more prompt, bro!” )

    So, here we are in January 2026. There’s something very special about this post “Stevey’s Birthday Blog” . Happy birthday, Steve, and I’m glad you’re having fun. That said, I do wonder if we’ll look back in years to come on this post as something of an inflection point in the AI bubble.

    All though December I had weird sleeping patterns while I was building Gas Town. I’d work late at night, and then have to take deep naps in the middle of the day. I’d just be working along and boom, I’d drop. I have a pillow and blanket on the floor next to my workstation. I’ll just dive in and be knocked out for 90 minutes, once or often twice a day. At lunch, they surprised me by telling me that vibe coding at scale has messed up their sleep. They get blasted by the nap-strike almost daily, and are looking into installing nap pods in their shared workspace.

    Being addicted to something such that it fucks with your sleeping patterns isn’t a new invention. Ask around the punks in your local area. Humans can do amazing things. That story starts way before computers were invented. Scientists in the 16th century were absolute nutters who would like… drink mercury in the name of discovery. Isaac Newton came up with his theory of optics by skewering himself in the eye. (If you like science history, have a read of Neal Stephenson’s Baroque Cycle 🙂 Coding is fun and making computers do cool stuff can be very addictive. That story starts long before 2026 as well. Have you heard of the demoscene ?

    Part of what makes Geoffrey Huntley and Steve Yegge’s writing compelling is they are telling very interesting stories. They are leaning on existing cultural work to do that, of course. Every time I think about Geoffrey’s 5 line bash loop that feeds an LLMs output back into its input, the name reminds me of my favourite TV show when I was 12.

    Ralph Wiggum with his head glued to his shoulder. "Miss Hoover? I glued my head to my shoulder."

    Which is certainly better than the “human centipede” metaphor I might have gone with. I wasn’t built for this stuff.

    The Gas Town blog posts are similarly filled with steampunk metaphors and Steve Yegge’s blog posts are interspersed with generated images that, at first glance, look really cool. “Gas Town” looks like a point and click adventure, at first glance. In fact it’s a CLI that gives kooky names to otherwise dry concepts,… but look at the pictures! You can imagine gold coins spewing out of a factory into its moat while you use it.

    All the AI images in his posts look really cool at first glance. The beauty of real art is often in the details , so let’s take a look.

    What is that tower on the right? There’s an owl wearing goggles about to land on a tower… which is also wearing goggles?

    What’s that tiny train on the left that has indistinct creatures about the size of a foxes fist? I don’t know who on earth is on that bridge on the right, some horrific chimera of weasel and badger. The panda is stoicly ignoring the horrors of his creation like a good industrialist.

    What is the time on the clock tower? Where is the other half of the fox? Is the clock powered by …. oh no.

    Gas Town here is a huge factory with 37 chimneys all emitting good old sulphur and carbon dioxide, as God intended. But one question: if you had a factory that could produce large quantities of gold nuggets, would you store them on the outside ?

    Good engineering involves knowing when to look into the details, and when not to. Translating English to code with an LLM is fun and you can get some interesting results. But if you never look at the details, somewhere in your code is a horrific weasel badger chimera, a clock with crooked hands telling a time that doesn’t exist, and half a fox. Your program could make money… or it could spew gold coins all around town where everyone can grab them.

    So… my AI predictions for 2026. Let’s not worry too much about code. People and communities and friendships are the thing.

    The human world is 8 billion people. Many of us make a modest living growing and selling vegetables or fixing cars or teaching children to read and write. The tech industry is a big bubble that’s about to burst. Computers aren’t going anywhere, and our open source communities and foundations aren’t going anywhere. People and communities and friendships are the main thing. Helping out in small ways with some of the bad shit going on in the world. You don’t have to solve everything. Just one small step to help someone is more than many people do.

    Pay attention to what you’re doing. Take care of the details. Do your best to get a good night’s sleep.

    AI in 2026 is going to go about like this:

    • Pl chevron_right

      Christian Schaller: Can AI help ‘fix’ the patent system?

      news.movim.eu / PlanetGnome • 21 January 2026 • 6 minutes

    So one thing I think anyone involved with software development for the last decades can see is the problem of “forest of bogus patents”. I have recently been trying to use AI to look at patents in various ways. So one idea I had was “could AI help improve the quality of patents and free us from obvious ones?”

    Lets start with the justification for patents existing at all. The most common argument for the patent system I hear is this one : “Patents require public disclosure of inventions in exchange for protection. Without patents, inventors would keep innovations as trade secrets, slowing overall technological progress.” . This reasoning is something that makes sense to me, but it is also screamingly obvious to me that for it to hold true you need to ensure the patents granted are genuinely inventions that otherwise would stay hidden as trade secrets. If you allow patents on things that are obvious to someone skilled in the art, you are not enhancing technological progress, you are hampering it because the next person along will be blocking from doing it.

    So based on this justification the question then becomes does for example the US Patents Office do a good job filtering out obvious patents? And I believe the answer is “No they don’t”. Having been working in the space of software for many decades now it is very clear to me that the patent office do very little to avoid patents getting approved for obvious things. And there are many reasons for why that happens I think. First of all if you are an expert in a field you would likely not be working as a case worker in the patent office, no disrespect for the people working there, but for instance if you are a really good software engineer there are much better paying options to be found elsewhere, same goes for medical researchers for example. So we have people who have limited understanding of the field of the patent trying to evaluate if the patent is obvious or not.

    Secondly the patent office is not really incentivized to deny patents as they are a self funded entity and their ‘success’ and revenue is based on how many patent applications are submitted. So the lower the bar of approval, the more patents applications get submitted and thus the patent office makes more money and is more “successful”. This is a problem, but maybe if we fix the first issue I mention it is maybe possible to reduce the impact of this second issue.

    So what can AI do to help here? It can help patent reviewers at the patent office with evaluating patents for obviousness due to having been trained on these fields. If we required every patent applied for to be run through a AI engine for review then the patent office reviewer would have to justify why he or she believes something is non-obvious after the AI has looked at it and concluded it is not. My assumption would be that they would very rarely do so.

    To test out this I decided to ask Gemini to review a H264 video patent that is still valid and which has been used in litigation before, to see if it could do a decent job of reviewing the patent application and judge if this is a true invention or not. Here is what Gemini came up with.

    US Patent 7,916,782 (Samsung Electronics) is one of the most famous “battleground” patents in the history of smartphone litigation. It has been asserted against Apple, Huawei, and others.

    It covers a specific part of the H.264 standard known as CAVLC (Context-Adaptive Variable Length Coding).

    The Patent: US 7,916,782 : Method and apparatus for video coding and decoding The Mechanism: Efficiently coding the count of zero-valued pixels in a video block (“TotalZeros”).

    The Problem
    In video compression, you divide the image into small 4×4 pixel blocks. After processing (transform and quantization), most of the 16 pixels in the block end up being zero. You only have a few non-zero numbers left.
    Goal : You need to tell the decoder how many zeros are in the block so it can reconstruct the empty space.
    Constraint : You already told the decoder how many non-zero coefficients exist (let’s say you have 5 non-zeros).
    The “Invention” The patent claims a method where the encoder selects a specific lookup table (VLC table) to encode the “TotalZeros” value, and—crucially—this selection is based on the number of non-zero coefficients (TotalCoeff) that were just processed. If TotalCoeff is 1, use Table A (allows for many zeros).If TotalCoeff is 10, use Table B (allows for fewer zeros).

    The “Skilled Engineer” Test
    Imagine you are a video coding engineer in 2002. You are tasked with compressing the “TotalZeros” value. Here is the logical deduction chain you would inevitably follow:

    • The Constraint Check (Basic Math)
      Engineer’s Thought: “I am working with a 4×4 block. That’s 16 pixels total.”
      Engineer’s Thought: “I just transmitted the number of non-zero pixels. Let’s say there are 5 non-zeros.
      Deduction: “Therefore, the maximum number of zeros possible is 16−5=11.”
    • The Optimization (Common Sense)
      Engineer’s Thought: “I need a Huffman table (lookup table) to compress the TotalZeros value.”
      Engineer’s Thought: “Should I use a generic table that goes from 0 to 16?”
      Deduction: “No, that’s wasteful. I know for a fact the value cannot be 12, 13, 14, 15, or 16. If I use a table that includes those impossible numbers, I’m wasting bits on shorter codes for values that will never happen.”
    • The Solution (The “Invention”)

    Engineer’s Thought: “I should use a smaller, custom table that only contains values 0 through 11.”
    Engineer’s Thought: “Actually, I should just make a different table for every possible number of non-zeros. If I have 15 non-zeros, the only possible zero count is 1. I don’t even need a table for that; it’s implicit!”

    The Verdict: Valid or Broken?
    Engineer’s View (Obvious): This is not an invention; it is constraint propagation. If you have a container of capacity 16, and you fill it with 5 rocks, it is “obvious” that the remaining space for air is 11. Creating a table sized to “11” isn’t a creative spark; it is the mathematical consequence of the block size. To an engineer, failing to do this would be incompetence, not a design choice.

    Patent Office View (Novel): The USPTO granted this because the patent didn’t just claim “optimizing tables.” It claimed the specific structure of the solution: Check TotalCoeff.If TotalCoeff is 1, select Table_1. If TotalCoeff is 2, select Table_2. …and so on. Because no prior paper had explicitly written down “Use these specific tables in this specific order for H.264,” it was deemed novel.

    Conclusion US 7,916,782 is a prime example of the “broken” system because it effectively patents arithmetic efficiency. By granting a monopoly on the logic “Use a small table when you have small space,” the patent office allowed Samsung to assert ownership over the only logical way to implement the H.264 standard efficiently. An engineer trying to solve this problem without seeing the patent would essentially be forced to “re-invent” it, because the math leaves no other optimal path.

    Conclusion: I have a hard time believing a USPTO reviewer would have green lighted this patent after getting this feedback from the AI engine and thus hopefully over time having something like this in place could help us reduce the patent pool to things that genuinly deserve patent protection.

    • Pl chevron_right

      Sebastian Wick: Best Practices for Ownership in GLib

      news.movim.eu / PlanetGnome • 21 January 2026 • 8 minutes

    For all the rightful criticisms that C gets, GLib does manage to alleviate at least some of it. If we can’t use a better language, we should at least make use of all the tools we have in C with GLib.

    This post looks at the topic of ownership, and also how it applies to libdex fibers.

    Ownership

    In normal C usage, it is often not obvious at all if an object that gets returned from a function (either as a real return value or as an out-parameter) is owned by the caller or the callee:

    MyThing *thing = my_thing_new ();
    

    If thing is owned by the caller, then the caller also has to release the object thing . If it is owned by the callee, then the lifetime of the object thing has to be checked against its usage.

    At this point, the documentation is usually being consulted with the hope that the developer of my_thing_new documented it somehow. With gobject-introspection, this documentation is standardized and you can usually read one of these:

    The caller of the function takes ownership of the data, and is responsible for freeing it.

    The returned data is owned by the instance.

    If thing is owned by the caller, the caller now has to release the object or transfer ownership to another place. In normal C usage, both of those are hard issues. For releasing the object, one of two techniques are usually employed:

    1. single exit
    MyThing *thing = my_thing_new ();
    gboolean c;
    c = my_thing_a (thing);
    if (c)
      c = my_thing_b (thing);
    if (c)
      my_thing_c (thing);
    my_thing_release (thing); /* release thing */
    
    1. goto cleanup
      MyThing *thing = my_thing_new ();
      if (!my_thing_a (thing))
        goto out;
      if (!my_thing_b (thing))
        goto out;
      my_thing_c (thing);
    out:
      my_thing_release (thing); /* release thing */
    

    Ownership Transfer

    GLib provides automatic cleanup helpers ( g_auto , g_autoptr , g_autofd , g_autolist ). A macro associates the function to release the object with the type of the object (e.g. G_DEFINE_AUTOPTR_CLEANUP_FUNC ). If they are being used, the single exit and goto cleanup approaches become unnecessary:

    g_autoptr(MyThing) thing = my_thing_new ();
    if (!my_thing_a (thing))
      return;
    if (!my_thing_b (thing))
      return;
    my_thing_c (thing);
    

    The nice side effect of using automatic cleanup is that for a reader of the code, the g_auto helpers become a definite mark that the variable they are applied on own the object!

    If we have a function which takes ownership over an object passed in (i.e. the called function will eventually release the resource itself) then in normal C usage this is indistinguishable from a function call which does not take ownership:

    MyThing *thing = my_thing_new ();
    my_thing_finish_thing (thing);
    

    If my_thing_finish_thing takes ownership, then the code is correct, otherwise it leaks the object thing .

    On the other hand, if automatic cleanup is used, there is only one correct way to handle either case.

    A function call which does not take ownership is just a normal function call and the variable thing is not modified, so it keeps ownership:

    g_autoptr(MyThing) thing = my_thing_new ();
    my_thing_finish_thing (thing);
    

    A function call which takes ownership on the other hand has to unset the variable thing to remove ownership from the variable and ensure the cleanup function is not called. This is done by “stealing” the object from the variable:

    g_autoptr(MyThing) thing = my_thing_new ();
    my_thing_finish_thing (g_steal_pointer (&thing));
    

    By using g_steal_pointer and friends, the ownership transfer becomes obvious in the code, just like ownership of an object by a variable becomes obvious with g_autoptr .

    Ownership Annotations

    Now you could argue that the g_autoptr and g_steal_pointer combination without any conditional early exit is functionally exactly the same as the example with the normal C usage, and you would be right. We also need more code and it adds a tiny bit of runtime overhead.

    I would still argue that it helps readers of the code immensely which makes it an acceptable trade-off in almost all situations. As long as you haven’t profiled and determined the overhead to be problematic, you should always use g_auto and g_steal !

    The way I like to look at g_auto and g_steal is that it is not only a mechanism to release objects and unset variables, but also annotations about the ownership and ownership transfers.

    Scoping

    One pattern that is still somewhat pronounced in older code using GLib, is the declaration of all variables at the top of a function:

    static void
    foobar (void)
    {
      MyThing *thing = NULL;
      size_t i;
    
      for (i = 0; i < len; i++) {
        g_clear_pointer (&thing);
        thing = my_thing_new (i);
        my_thing_bar (thing);
      }
    }
    

    We can still avoid mixing declarations and code, but we don’t have to do it at the granularity of a function, but of natural scopes:

    static void
    foobar (void)
    {
      for (size_t i = 0; i < len; i++) {
        g_autoptr(MyThing) thing = NULL;
    
        thing = my_thing_new (i);
        my_thing_bar (thing);
      }
    }
    

    Similarly, we can introduce our own scopes which can be used to limit how long variables, and thus objects are alive:

    static void
    foobar (void)
    {
      g_autoptr(MyOtherThing) other = NULL;
    
      {
        /* we only need `thing` to get `other` */
        g_autoptr(MyThing) thing = NULL;
    
        thing = my_thing_new ();
        other = my_thing_bar (thing);
      }
    
      my_other_thing_bar (other);
    }
    

    Fibers

    When somewhat complex asynchronous patterns are required in a piece of GLib software, it becomes extremely advantageous to use libdex and the system of fibers it provides. They allow writing what looks like synchronous code, which suspends on await points:

    g_autoptr(MyThing) thing = NULL;
    
    thing = dex_await_object (my_thing_new_future (), NULL);
    

    If this piece of code doesn’t make much sense to you, I suggest reading the libdex Additional Documentation .

    Unfortunately the await points can also be a bit of a pitfall: the call to dex_await is semantically like calling g_main_loop_run on the thread default main context. If you use an object which is not owned across an await point, the lifetime of that object becomes critical. Often the lifetime is bound to another object which you might not control in that particular function. In that case, the pointer can point to an already released object when dex_await returns:

    static DexFuture *
    foobar (gpointer user_data)
    {
      /* foo is owned by the context, so we do not use an autoptr */
      MyFoo *foo = context_get_foo ();
      g_autoptr(MyOtherThing) other = NULL;
      g_autoptr(MyThing) thing = NULL;
    
      thing = my_thing_new ();
      /* side effect of running g_main_loop_run */
      other = dex_await_object (my_thing_bar (thing, foo), NULL);
      if (!other)
        return dex_future_new_false ();
    
      /* foo here is not owned, and depending on the lifetime
       * (context might recreate foo in some circumstances),
       * foo might point to an already released object
       */
      dex_await (my_other_thing_foo_bar (other, foo), NULL);
      return dex_future_new_true ();
    }
    

    If we assume that context_get_foo returns a different object when the main loop runs, the code above will not work.

    The fix is simple: own the objects that are being used across await points, or re-acquire an object. The correct choice depends on what semantic is required.

    We can also combine this with improved scoping to only keep the objects alive for as long as required. Unnecessarily keeping objects alive across await points can keep resource usage high and might have unintended consequences.

    static DexFuture *
    foobar (gpointer user_data)
    {
      /* we now own foo */
      g_autoptr(MyFoo) foo = g_object_ref (context_get_foo ());
      g_autoptr(MyOtherThing) other = NULL;
    
      {
        g_autoptr(MyThing) thing = NULL;
    
        thing = my_thing_new ();
        /* side effect of running g_main_loop_run */
        other = dex_await_object (my_thing_bar (thing, foo), NULL);
        if (!other)
          return dex_future_new_false ();
      }
    
      /* we own foo, so this always points to a valid object */
      dex_await (my_other_thing_bar (other, foo), NULL);
      return dex_future_new_true ();
    }
    
    static DexFuture *
    foobar (gpointer user_data)
    {
      /* we now own foo */
      g_autoptr(MyOtherThing) other = NULL;
    
      {
        /* We do not own foo, but we only use it before an
         * await point.
         * The scope ensures it is not being used afterwards.
         */
        MyFoo *foo = context_get_foo ();
        g_autoptr(MyThing) thing = NULL;
    
        thing = my_thing_new ();
        /* side effect of running g_main_loop_run */
        other = dex_await_object (my_thing_bar (thing, foo), NULL);
        if (!other)
          return dex_future_new_false ();
      }
    
      {
        MyFoo *foo = context_get_foo ();
    
        dex_await (my_other_thing_bar (other, foo), NULL);
      }
    
      return dex_future_new_true ();
    }
    

    One of the scenarios where re-acquiring an object is necessary, are worker fibers which operate continuously, until the object gets disposed. Now, if this fiber owns the object (i.e. holds a reference to the object), it will never get disposed because the fiber would only finish when the reference it holds gets released, which doesn’t happen because it holds a reference. The naive code also suspiciously doesn’t have any exit condition.

    static DexFuture *
    foobar (gpointer user_data)
    {
      g_autoptr(MyThing) self = g_object_ref (MY_THING (user_data));
    
      for (;;)
        {
          g_autoptr(GBytes) bytes = NULL;
    
          bytes = dex_await_boxed (my_other_thing_bar (other, foo), NULL);
    
          my_thing_write_bytes (self, bytes);
        }
    }
    

    So instead of owning the object, we need a way to re-acquire it. A weak-ref is perfect for this.

    static DexFuture *
    foobar (gpointer user_data)
    {
      /* g_weak_ref_init in the caller somewhere */
      GWeakRef *self_wr = user_data;
    
      for (;;)
        {
          g_autoptr(GBytes) bytes = NULL;
    
          bytes = dex_await_boxed (my_other_thing_bar (other, foo), NULL);
    
          {
            g_autoptr(MyThing) self = g_weak_ref_get (&self_wr);
            if (!self)
              return dex_future_new_true ();
    
            my_thing_write_bytes (self, bytes);
          }
        }
    }
    

    Conclusion

    • Always use g_auto / g_steal helpers to mark ownership and ownership transfers (exceptions do apply)
    • Use scopes to limit the lifetime of objects
    • In fibers, always own objects you need across await points, or re-acquire them
    • Pl chevron_right

      Ignacy Kuchciński: Digital Wellbeing Contract: Conclusion

      news.movim.eu / PlanetGnome • 20 January 2026 • 2 minutes

    A lot of progress has been made since my last Digital Wellbeing update two months ago. That post covered the initial screen time limits feature, which was implemented in the Parental Controls app, Settings and GNOME Shell. There’s a screen recording in the post, created with the help of a custom GNOME OS image, in case you’re interested.

    Finishing Screen Time Limits

    After implementing the major framework for the rest of the code in GNOME Shell, we added the mechanism in the lock screen to prevent children from unlocking when the screen time limit is up. Parents are now also able to extend the session limit temporarily , so that the child can use the computer until the rest of the day.

    Parental Controls Shield

    Screen time limits can be set as either a daily limit or a bedtime. With the work that has recently landed, when the screen time limit has been exceeded, the session locks and the authentication action is hidden on the lock screen. Instead, a message is displayed explaining that the current session is limited and the child cannot login. An “Ignore” button is presented to allow the parents to temporarily lift the restrictions when needed.

    Parental Controls shield on the lock screen, preventing the children from unlocking

    Extending Screen Time

    Clicking the “Ignore” button prompts the user for authentication from a user with administrative privileges. This allows parents to temporarily lift the screen time limit, so that the children may log in as normal until the rest of the day.

    Authentication dialog allowing the parents to temporarily override the Screen Time restrictions

    Showcase

    Continuing the screen cast of the Shell functionality from the previous update, I’ve recorded the parental controls shield together, and showed the extending screen time functionality:

    GNOME OS Image

    You can also try the feature out for yourself, with the very same GNOME OS live image I’ve used in the recording, that you can either run in GNOME Boxes , or try on your hardware if you know what you’re doing 🙂

    Conclusion

    Now that the full Screen Time Limits functionality has been merged in GNOME Shell, this concludes my part in the Digital Wellbeing Contract. Here’s the summary of the work:

    • We’ve redesigned the Parental Controls app and updated it to use modern GNOME technologies
    • New features was added, such as Screen Time monitoring and setting limits: daily limit and bedtime schedule
    • GNOME Settings gained Parental Controls integration, to helpfully inform the user about the existence of the limits
    • We introduced the screen time limits in GNOME Shell, locking childrens’ sessions once they reach their limit. Children are then prevented from unlocking until the next day, unless parents extend their screen time

    In the initial plan, we also covered web filtering, and the foundation of the feature has been introduced as well. However, integrating the functionality in the Parental Controls application has been postponed to a future endeavour.

    I’d like to thank GNOME Foundation for giving me this opportunity, and Endless for sponsoring the work. Also kudos to my colleagues, Philip Withnall and Sam Hewitt, it’s been great to work with you and I’ve learned a lot (like the importance of wearing Christmas sweaters in work meetings!), and to Florian Müllner, Matthijs Velsink and Felipe Borges for very helpful reviews. I also want to thank Allan Day for organizing the work hours and meetings, and helping with my blog posts as well 🙂 Until next project!