call_end

    • chevron_right

      Daniel García Moreno: Python 2

      news.movim.eu / PlanetGnome • 27 January • 2 minutes

    python2.png

    In 2020, the Python foundation declared Python 2 as not maintained anymore .

    Python 2 is really old, not maintained and should not be used by anyone in any modern environment, but software is complex and python2 still exists in some modern Linux distributions like Tumbleweed.

    The past week the request to delete Python 2 from Tumbleweed was created and is going through the staging process.

    The main package keeping Python 2 around for Tumbleweed was Gimp 2, that doesn't depends directly on Python 2, but some of the plugins depends on it. Now that we've Gimp 3 in Tumbleweed, we are able to finally remove it.

    Python 2

    The first version of Python 2 was released around 2000, so it's now 25 years old. That's not true, because software is a living creature, so as you may know, Python 2 grew during the following years with patch and minor releases until 2020 that was the final release 2.7.18.

    But even when it was maintained until 2020, it was deprecated for a long time so everyone "should" have time to migrate to python 3.

    Py3K

    I started to write python code around the year 2006. I was bored during a summer internship at my third year of computer science, and I decided to learn something new. In the following months / years I heard a lot about the futurist Python 3000 , but I didn't worry to much until it was officially released and the migration started to be a thing.

    If you have ever write python2 code you will know about some of the main differences with python3:

    • print vs print()
    • raw_input() vs input()
    • unicode() vs str
    • ...

    Some tools appeared to make it easier to migrate from python2 to python3, and even it was possible to have code compatible with both versions at the same time using the __future__ module.

    You should have heard about the six package, 2 * 3 = 6. Maybe the name should be five instead of six, because it was a Python "2 and 3" compatibility library.

    Python in Linux command line

    When python3 started to be the main python, there were some discussion about how to handle that in different Linux distributions. The /usr/bin/python binary was present and everyone expect that to be python2, so almost everyone decided to keep that relation forever and distribute python3 as /usr/bin/python3, so you can have both installed without conflicts and there's no confusion.

    But python is an interpreted language, and if you have python code, you can't tell if it's python2 or python3. The shebang line in the executable python scripts should point to the correct interpreter and that should be enough like #!/usr/bin/python3 will use the python3 interpreter and #!/usr/bin/python will use python2.

    But this is not always true, some distributions uses python3 in /usr/bin/python like Archlinux or if you create a virtualenv with python3, the python binary points to the python3 interpreter, so a shebang like #!/usr/bin/python could be something valid for a python3 script.

    In any case, the recommended and safest way is to always use python3 binary because that way it'll work correctly "everywhere".

    Goodbye

    It's time to say goodbye to python2 , at least we can remove it now from Tumbleweed. It'll be around for some more time in Leap, but it's the time to let it go.

    • wifi_tethering open_in_new

      This post is public

      danigm.net /python2.html

    • chevron_right

      Tim Janik: JJ-FZF 0.25.0: Major New Features

      news.movim.eu / PlanetGnome • 25 January

    The jj-fzf project has just seen a new release with version 0.25.0. This brings some new features, several smaller improvements, and some important changes to be aware of. For the uninitiated, jj-fzf is a feature-rich command-line tool that integrates jj and fzf, offering fast commit navigation with…
    • wifi_tethering open_in_new

      This post is public

      testbit.eu /2025/jj-fzf-0.25.0

    • chevron_right

      Felipe Borges: Time to write proposals for GSoC 2025 with GNOME!

      news.movim.eu / PlanetGnome • 24 January

    It is that time of the year again when we start gathering ideas and mentors for Google Summer Code .

    @ Mentors , please submit new proposals in our Project ideas GitLab repository before the end of January.

    Proposals will be reviewed by the GNOME GSoC Admins and posted in https://gsoc.gnome.org/2025 when approved.

    If you have any doubts, please don’t hesitate to contact the GNOME Internship Committee.

    • wifi_tethering open_in_new

      This post is public

      feborg.es /time-to-write-proposals-for-gsoc-2025-with-gnome/

    • chevron_right

      Adetoye Anointing: Extracting Texts And Elements From SVG2

      news.movim.eu / PlanetGnome • 23 January • 3 minutes

    Have you ever wondered how SVG files render complex text layouts with different styles and directions so seamlessly? At the core of this magic lies text layout algorithms—an essential component of SVG rendering that ensures text appears exactly as intended.

    Text layout algorithms are vital for rendering SVGs that include styled or bidirectional text. However, before layout comes text extraction —the process of collecting and organizing text content and properties from the XML tree to enable accurate rendering.

    The Extraction Process

    SVGs, being XML-based formats, resemble a tree-like structure similar to HTML. To extract information programmatically, you navigate through nodes in this structure.

    Each node in the XML tree holds critical details for implementing the SVG2 text layout algorithm, including:

      • Text content
      • Bidi-control properties (manage text directionality)
      • Styling attributes like font and spacing
    Understanding Bidi-Control

    Bidi-control refers to managing text direction (e.g., Left-to-Right or Right-to-Left) using special Unicode characters. This is crucial for accurately displaying mixed-direction text, such as combining English and Arabic.

    A Basic Example
    <text>
      foo
      <tspan>bar</tspan>
      baz
    </text>
    

    The diagram and code sample shows the structure librsvg creates when it parses this XML tree.

    Here, the <text> element has three children:

      1. A text node containing the characters “foo”.
      2. A <tspan> element with a single child text node containing “bar”.
      3. Another text node containing “baz”.

    When traversed programmatically, the extracted text from this structure would be “foobarbaz”.

    To extract text from the XML tree:

      1. Start traversing nodes from the <text> element.
      2. Continue through each child until the final closing tag.
      3. Concatenate character content into a single string.

    While this example seems straightforward, real-world SVG2 files introduce additional complexities, such as bidi-control and styling, which must be handled during text extraction.

    Handling Complex SVG Trees

    Real-world examples often involve more than just plain text nodes. Let’s examine a more complex XML tree that includes styling and bidi-control:

    Example:

    <text>
      "Hello"
      <tspan font-style="bold;">bold</tspan>
      <tspan direction="rtl" unicode-bidi="bidi-override">مرحبا</tspan>
      <tspan font-style="italic;">world</tspan>
    </text>
    
    text extraction illustration credit: Federico (my mentor) credit: Federico (my mentor)

    In this example, the <text> element has four children:

      1. A text node containing “Hello”.
      2. A <tspan> element with font-style: bold, containing the text “bold”.
      3. A <tspan> element with bidi-control set to RTL (Right-To-Left), containing Arabic text “مرحبا”.
      4. Another <tspan> element with font-style: italic, containing “world”.

    This structure introduces challenges, such as:

      • Styling: Managing diverse font styles (e.g., bold, italic).
      • Whitespace and Positioning: Handling spacing between nodes.
      • Bidirectional Control: Ensuring proper text flow for mixed-direction content.

    Programmatically extracting text from such structures involves traversing nodes, identifying relevant attributes, and aggregating the text and bidi-control characters accurately.

    Why Test-Driven Development Matters

    One significant insight during development was the use of Test-Driven Development (TDD) , thanks to my mentor Federico. Writing tests before implementation made it easier to visualize and address complex scenarios. This approach turned what initially seemed overwhelming into manageable steps, leading to robust and reliable solutions.

    Conclusion

    Text extraction is the foundational step in implementing the SVG2 text layout algorithm. By effectively handling complexities such as bidi-control and styling, we ensure that SVGs render text accurately and beautifully, regardless of direction or styling nuances.

    If you’ve been following my articles and feel inspired to contribute to librsvg or open source projects, I’d love to hear from you! Drop a comment below to share your thoughts, ask questions, or offer insights. Your contributions—whether in the form of questions, ideas, or suggestions—are invaluable to both the development of librsvg and the ongoing discussion around SVG rendering. 😊

    In my next article, we’ll explore how these extracted elements are processed and integrated into the text layout algorithm. Stay tuned—there’s so much more to uncover!

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /yorubad-dev/2025/01/23/extracting-texts-and-elements-from-svg2/

    • chevron_right

      Dave Patrick Caberto: DIY 12V DC Power Supply

      news.movim.eu / PlanetGnome • 23 January • 6 minutes

    Let’s talk about our journey of creating something from scratch (almost?) for our Electronics I final project. It wasn’t groundbreaking like a full-blown multi-featured DC power supply, but it was a fulfilling learning experience.

    Spoiler alert: mistakes were made, lessons were learned, and yes, we had fun.

    Design and Calculations

    Everything began with brainstorming and sketching out ideas. This was our chance to put all the knowledge from our lectures to the test—from diode operating regions to voltage regulation. It was exciting but also a bit daunting.

    The first decision was our power supply's specifications. We aimed for a 12V output —a solid middle ground between complexity and functionality. Plus, the 5V option was already claimed by another group. For rectification, we chose a full-wave bridge rectifier due to its efficiency compared to the half-wave alternative.

    Calculations? Oh yes, there were plenty! Transformers, diodes, capacitors, regulators—everything had to line up perfectly on paper before moving to reality.

    We started at the output, aiming for a stable 12V. To achieve this, we selected the LM7812 voltage regulator . It was an obvious choice: simple, reliable, and readily available. With an input range of 14.5 to 27V, it could easily provide the 12V we needed.

    Since the LM7812 can handle a maximum input voltage of 27V, a 12-0-12V transformer would be perfect. However, only a 6-0-6V transformer was available, so we had to make do with that. Regarding with the diode, we used 1N4007 diodes as it is readily available and can handle our desired specifications.

    Assuming the provided input voltage for the regulator is 15.5V, which is also the output of the rectifier $ V_{\text{p(rec)}} $, the output voltage of the secondary side of the transformer $ V_{\text{p(sec)}} $ must be:

    $$ V_{\text{p(sec)}} = V_{\text{p(rec)}} + 1.4V = 15.5V + 1.4V = 16.9V_{\text{pk}} $$

    Note: The 1.4V was to account for the voltage drop across the diodes.

    or in RMS,

    $$ \frac{16.9V_{\text{pk}}}{\sqrt{2}} = 11.95V_{\text{rms}} $$

    This is perfect four our 6-0-6V transformer maximum output voltage of 12V in RMS.

    Using the formula for ripple factor,

    $$ r = \frac{V_{\text{r(pp)}}}{V_{\text{dc}}} $$

    $$ V_{\text{r(pp)}} = r \times V_{\text{dc}} $$

    we can determine the value of the filter capacitor, given a ripple factor $ r $ of 3% or 0.03, and output DC voltage $ V_{\text{dc}} $ of 12V.

    $$ V_{\text{r(pp)}} = \frac{V_{\text{p(rect)}}}{f \times R_\text{L} \times C} $$

    $$ C = \frac{V_{\text{p(rect)}}}{f \times R_\text{L} \times V_{\text{r(pp)}}} = \frac{V_{\text{p(rect)}}}{f \times R_\text{L} \times r \times V_{\text{dc}}} $$

    We also know that a typical frequency of the AC input is 60Hz and we have to multiply it by 2 to get the frequency of the full-wave rectified output.

    $$ f = 2 \times 60Hz = 120Hz $$

    Also, given the maximum load current of 50mA, we can calculate the assumed load resistance.

    $$ R_{\text{L}} = \frac{V_{\text{dc}}}{I_{\text{L}}} = \frac{12V}{50mA} = 240\Omega $$

    Substituting the values,

    $$ C = \frac{15.5V}{120Hz \times 240\Omega \times 0.03 \times 12V} = 1495 \mu F \approx 1.5 mF $$

    Here is the final schematic diagram of our design based on the calculations:

    Schematic Diagram

    Construction

    Moving on, we had to put our design into action. This was where the real fun began. We had to source the components, breadboard the circuit, design the PCB, and 3D-print the enclosure.

    Breadboarding

    The breadboarding phase was a mix of excitement and confusion. We had to double-check every connection and component.

    Circuit Overview

    Breadboard Close-up

    It was a tedious process, but the feeling when the 12V LED lit up? Priceless.

    Initial Testing

    PCB Design, Etching and Soldering

    For the PCB design, we used EasyEDA. It was our first time using it, but it was surprisingly intuitive. We just had first to recreate the schematic diagram, then layout the components and traces.

    EasyEDA Schematic

    Tracing the components on the PCB was a bit tricky, but we managed to get it done. It is like playing connect-the-dots, except no overlapping lines are allowed since we only had a single-layer PCB.

    PCB Tracing

    At the end, it was satisfying to see the final design.

    PCB Layout

    We had to print it on a sticker paper, transfer it to the copper board, cut it, drill it, etch it, and solder the components. It was a long process, but the result was worth it.

    PCB Soldered

    Did we also mention that we soldered the regulator in reverse for the first time? Oops. But hey, we learned from it.

    Custom Enclosure

    To make our project stand out, we decided to 3D-print a custom enclosure. Designing it on SketchUp was surprisingly fun.

    3D Model

    It was also satisfying to see the once a software model come to life as a physical object.

    3D Printed

    Testing

    Testing day was a rollercoaster. Smoke-free? Check. Output voltage stable? Mostly.

    Line Regulation Via Varying Input Voltage

    For the first table, we vary the input voltage, and we measured the input voltage, the transformer output, the filter output, the regulator output, and the percent voltage regulation.

    Trial No. Input Voltage ($ V_{\text{rms}} $) Transformer Output ($ V_{\text{rms}} $) Filter Output ($ V_{\text{DC}} $) Regulator Output ($ V_{\text{DC}} $) % Voltage Regulation
    1 213 12.1 13.58 11.97 5
    2 214 11.2 13.82 11.92 5
    3 215 10.7 13.73 12.03 10
    4 216 11.5 13.80 11.93 10
    5 217 10.8 13.26 12.01 9
    6 218 11.0 13.59 11.92 9
    7 220 11.3 13.74 11.92 2
    8 222 12.5 13.61 11.96 2
    9 224 12.3 13.57 11.93 10
    10 226 11.9 13.88 11.94 10
    Average - 11.53 13.67 11.953 5.5

    Note: The load resistor is a 22Ω resistor.

    Table 1 Graph

    Load Regulation Via Varying Load Resistance

    For the second table, we vary the load resistance, and we measured the input voltage, the transformer output, the filter output, the regulator output, and the percent voltage regulation.

    Trial No. Load Resistance ($ \Omega $) Transformer Output ($ V_{\text{rms}} $) Filter Output ($ V_{\text{DC}} $) Regulator Output ($ V_{\text{FL(DC)}} $) % Voltage Regulation
    1 220 10.6 11.96 10.22 16.4385
    2 500 10.7 12.83 11.43 4.1120
    3 1k 11.1 13.05 11.46 3.8394
    4 2k 11.1 13.06 11.48 3.6585
    5 5k 10.6 13.20 11.49 3.5683
    6 6k 10.9 13.26 11.78 1.0187
    7 10k 11.2 13.39 11.85 0.4219
    8 11k 11.3 13.91 11.87 0.2527
    9 20k 11.3 13.53 11.89 0.0841
    10 22k 11.1 13.27 11.90 0
    Average - 10.99 13.15 11.54 3.3394

    Note: The primary voltage applied to the transformer was 220V in RMS. The $ V_{\text{NL(DC)}} $ used in computing the % voltage regulation is 11.9 V.

    Table 2 Graph

    Data Interpretation

    Looking at the tables, the LM7812 did a great job keeping the output mostly steady at 12V, even when we threw in some wild input voltage swings—what a champ! That said, when the load resistance became too low, it struggled a bit, showing the limits of our trusty (but modest) 6-0-6V transformer. On the other hand, our filtering capacitors stepped in like unsung heroes, keeping the ripples under control and giving us a smooth DC output.

    Closing Words

    This DC power supply project was a fantastic learning experience—it brought classroom concepts to life and gave us hands-on insight into circuit design and testing. While it performed well for what it is, it’s important to note that this design isn’t meant for serious, high-stakes applications. Think of it more as a stepping stone than a professional-grade benchmark.

    Overall, we learned a lot about troubleshooting, design limitations, and real-world performance. With a bit more fine-tuning, this could even inspire more advanced builds down the line. For now, it’s a win for learning and the satisfaction of making something work (mostly) as planned!

    Special thanks to our professor for guiding us and to my amazing groupmates—Roneline, Rhaniel, Peejay, Aaron, and Rhon—for making this experience enjoyable and productive (ask them?). Cheers to teamwork and lessons learned!

    If you have any questions or feedback, feel free to leave a comment below. We’d love to hear your thoughts or critiques. Until next time, happy tinkering!

    • wifi_tethering open_in_new

      This post is public

      seadve.github.io /blog/12-diy-12v-dc-power-supply/

    • chevron_right

      Michael Meeks: 2025-01-22 Wednesday

      news.movim.eu / PlanetGnome • 22 January

    • Catch up with Dave - our talented cartoonist with whom I've been working on something new and exciting: to build a weekly strip to try to communicate the goodness, humour & intricacy around software, communities, ecosystems and more:
    • All Hands meeting, packed and set off for the Univention Summit .
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-01-22.html

    • chevron_right

      Jonathan Blandford: Crosswords 0.3.14

      news.movim.eu / PlanetGnome • 22 January • 3 minutes

    I released Crosswords-0.3.14 this week. This is a checkpoint release—there are a number of experimental features that are still under development. However, I wanted to get a stable release out before changing things too much. Download the apps on flathub! ( game , editor )

    Almost all the work this cycle happened in the editor. As a result, this is the first version of the editor that’s somewhat close to my vision and that I’m not embarrassed giving to a crossword constructor to use. If you use it, I’d love feedback as to how it went.

    Read on for more details.

    Libipuz

    Libipuz got a version bump to 0.5.0. Changes include:

    • Adding GObject-Introspection support to the library. This meant a bunch of API changes to fix methods that were C-only. Along the way, I took the time to standardize and clean up the API.
    • Documenting the library. It’s about 80% done, and has some tutorials and examples. The API docs are here .
    • Validating both the docs and introspections. As mentioned last post , Philip implemented a nonogram app on top of libipuz in Typescript. This work gave me confidence in the overall API approach.
    • Porting libipuz to rust. I worked with GSoC student Pranjal and Federico on this. We got many of the leaf structures ported and have an overall approach to the main class hierarchy. Progress continues.

    The main goal for libipuz in 2025 is to get a 1.0 version released and available, with some API guarantees.

    Autofill

    I have struggled to implement the autofill functionality for the past few years. The simple algorithm I wrote would fill out 1/3 of the board, and then get stuck. Unexpectedly, Sebastian showed up and spent a few months developing a better approach. His betterfill algorithm is able to fill full grids a good chunk of the time. It’s built around failing fast in the search tree, and some clever heuristics to force that to happen. You can read more about it at his site .

    NOTE: filling an arbitrary grid is NP-hard. It’s very possible to have grids that can’t be easily solved in a reasonable time. But as a practical matter, solving — and failing to solve — is faster now.

    I also fixed an annoying issue with the Grid editor. Previously, there were subtabs that would switch between the autofill and edit modes. Tabs in tabs are a bad interface, and I found it particularly clunky to use. However, it let me have different interaction modes with the grid. I talked with Scott a bit about it and he made an off-the-cuff suggestion of merging the tabs together and adding grid selection to the main edit tab. So far it’s working quite nicely, though a tad under-discoverable.

    Word Definitions and Substrings

    The major visible addition to the Clue phase is the definition tab . They’re pulled from Wiktionary , and included in a custom word-list stored with the editor. I decided on a local copy because Wiktionary doesn’t have an API for pulling definitions and I wanted to keep all operations fast. I’m able to look up and render the definitions extremely quickly.

    New dictionary tab I also made progress on a big design goal for the editor: the ability to work with substrings in the clue phase. For those who are unfamiliar with cryptic crosswords, answers are frequently broken down into substrings which each have their own subclues to indicate them. The idea is to show possibilities for these indicators to provide ideas for puzzle constructors.

    Note: If you’re unfamiliar with cryptic clues, this video is a charming introduction to them .

    It’s a little confusing to explain, so perhaps an example would help. In this video the answers to some cryptic clues are broken down into their parts. The tabs show how they could have been constructed.

    Next steps?

    • Testing: I’m really happy with how the cryptic authoring features are coming together, but I’m not convinced it’s useful yet. I want to try writing a couple of crosswords to be sure.
    • Acrostic editor: We’re going to land Tanmay’s acrostic editor early in the cycle so we have maximum time to get it working
    • Nonogram player: There are a few API changes needed for nonograms
    • Word score: I had a few great conversations with Erin about scoring words — time for a design doc.
    • Game cleanup: I’m over due for a cycle of cleaning up the game. I will go through the open bugs there and clean them up.

    Thanks again to all supporters, translators, packagers, testers, and contributors!

    • chevron_right

      Andy Wingo: here we go again

      news.movim.eu / PlanetGnome • 21 January • 3 minutes

    Good evening, fey readers. Tonight, a note on human rights and human wrongs.

    I am in my mid-fourties, and so I have seen some garbage governments in my time; one of the worst was Trump’s election in 2016. My heart ached in so many ways, but most of all for immigrants in the US. It has always been expedient for a politician to blame problems on those outside the polity, and in recent years it has been open season on immigration: there is always a pundit ready to make immigrants out to be the source of a society’s ills, always a publisher ready to distribute their views, always a news channel ready to invite the pundit to discuss these Honest Questions, and never will they actually talk to an immigrant. It gives me a visceral sense of revulsion, as much now as in 2016.

    What to do? All of what was happening in my country was at a distance. And there is this funny thing that you don’t realize inside the US, in which the weight of the US’s cultural influence is such that the concerns of the US are pushed out into the consciousness of the rest of the world and made out to have a kind of singular, sublime importance, outweighing any concern that people in South Africa or Kosovo or Thailand might be having; and even to the point of outweighing what is happening in your own country of residence. I remember the horror of Europeans upon hearing of Trump’s detention camps—and it is right to be horrified!—but the same people do not know what is happening at and within their own borders, the network of prisons and flophouses and misery created by Europe’s own xenophobic project. The cultural weight of the US is such that it can blind the rest of the world into ignorance of the local, and thus to inaction, there at the place where the rest of us actually have power to act.

    I could not help immigrants in the US, practically speaking. So I started to help immigrants in France. I joined the local chapter of the Ligue des droits de l’Homme , an organization with a human rights focus but whose main activity was a weekly legal and administrative advice clinic. I had gone through the immigration pipeline and could help others.

    It has been interesting work. One thing that you learn quickly is that not everything that the government does is legal. Sometimes this observation takes the form of an administrative decision that didn’t respect the details of a law. Sometimes it’s something related to the hierarchy of norms , for example that a law’s intent was not reflected in the way it was translated to the operational norms used by, say, asylum processing agents. Sometimes it’s that there was no actual higher norm, but that the norms are made by the people who show up, and if it’s only the cops that show up, things get tilted copwards.

    A human-rights approach is essentially liberal, and I don’t know if it is enough in these the end days of a liberal rule of law. It is a tool. But for what I see, it is enough for me right now: there is enough to do, I can make enough meaningful progress for people that the gaping hole in my soul opened by the Trumpocalypse has started to close. I found my balm in this kind of work, but there are as many paths as people, and surely yours will be different.

    So, friends, here we are in 2025: new liver, same eagles . These are trying times. Care for yourself and for your loved ones. For some of you, that will be as much as you can do; we all have different situations. But for the rest of us, and especially those who are not really victims of marginalization, we can do things, and it will help people, and what’s more, it will make you feel better. Find some comrades, and reach your capacity gradually; you’re no use if you burn out. I don’t know what is on the other side of this, but in the meantime let’s not make it easy for the bastards.

    • wifi_tethering open_in_new

      This post is public

      wingolog.org /archives/2025/01/21/here-we-go-again

    • chevron_right

      Sam Thursfield: Status update, 21/01/2025

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

    Happy new year everyone!

    As a new year’s resolution, I’ve decided to improve SEO for this blog, so from now on my posts will be in FAQ format.

    What are Sam Thursfield’s favourite music releases of 2025?

    Glad you asked. I posted my top 3 music releases here on Mastodon . (I also put them on Bluesky , because why not? I was swayed by Christine Lemmer-Webber’s insightful comparison vs. Mastodon to the Fediverse .).

    Here is a Listenbrainz playlist with these and my favourites from previous years. There’s also a playlist on Spotify, but watch out for fake Spotify music. I read a great piece by Liz Pelly on how Spotify has created thousands of fake artists to avoid paying musicians fairly .

    What has Sam Thursfield learned at work recently?

    That’s quite a boring question, but ok. I used FastAPI for the first time. It’s pretty good.

    And I have been learning the theory behind the C4 model , which I like more and more. The trick with the C4 model is, it doesn’t claim solve your problems for you. It’s a tool to help you to think in a more structured way so that you have to solve them yourself. More on that in a future post.

    Should Jack Dorsey be allowed to speak at FOSDEM 2025?

    Now that is a very interesting question!

    FOSDEM is a “free and non-commercial” event, organised “by the community for the community”. The community, in this case, being free and open source software developers. It’s the largest event of its kind, and organising such a beast for little to no money for 25 years running, is a huge achievement. We greatly appreciate the effort the organisers put in! I will be at FOSDEM ’25, talking about automated QA infrastructure, helping out at the GNOME booth , and wandering wherever fate leads me.

    Jack Dorsey is a Silicon Valley billionaire, you might remember him from selling Twitter to Elon Musk, touting blockchains, and quitting the board of Bluesky because they added moderation features into the protocol. Many people rolled eyes at the announcement that he will be speaking at FOSDEM this year in a talk titled “Infusing Open Source Culture into Company DNA” .

    Drew DeVault stepped forward to organise a protest against Dorsey speaking, announced under the heading “ No Billionares at FOSDEM “. More than one person I’ve spoken to is interested in joining. Other people I know think it doesn’t make sense to protest one keynote speaker out of the 1000s who have stepped on the stage over the years.

    Protests are most effective when they clearly articulate what is being protested and what we want to change. The world in 2025 is a complex, messy place though which is changing faster than I can keep up with. Here’s an attempt to think through why this is happening.

    Firstly, the”Free and Open Source Software community” is a convenient fiction, and in reality it is made up of many overlapping groups, with an interest in technology being sometimes the only thing we have in common. I can’t explain here all of the nuance, but lets look at one particular axis, which we could call pro-corporate vs. anti-corporate sentiments.

    What I mean by corporate here is quite specific but if you’re alive and reading the news in 2025 you probably have some idea what I mean. A corporation is a legal abstraction which has some of the same rights as a human — it can own property, pay tax, employ people, and participate in legal action — while not actually being a human. A corporation can’t feel guilt, shame, love or empathy. A publicly traded corporation must make a profit — if it doesn’t, another corporation will eat it. (Credit goes to Charlie Stross for this metaphor :-). This leads to corporations that can behave like psychopaths, without being held accountable in the way that a human would. Quoting Alexander Biener :


    Elites avoiding accountability is nothing new, but in the last three decades corporate avoidance has reached new lows. Nobody in the military-industrial complex went to jail for lying about weapons of mass destruction in Iraq. Nobody at BP went to jail for the Deepwater oil spill. No traders or bankers (outside of Iceland) were incarcerated for the 2008 financial crash. No one in the Sackler family was punished after Purdue Pharma peddled the death of half a million Americans.

    I could post some more articles but I know you have your own experiences of interacting with corporations. Abstractions are useful, powerful and dangerous. Corporations allowed huge changes and improvements in technology and society to take place. They have significant power over our lives. And they prioritize making money over all the things we as individual humans might prioritize, such as fairness, friendliness, and fun.


    On the pro-corporate end at FOSDEM, you’ll find people who encourage use of open source in order to share effort between companies, to foster collaboration between teams in different locations and in different organisations, to reduce costs, to share knowledge, and to exploit volunteer labour. When these people are at work, they might advocate publishing code as open source to increase trust in a product, or in the hope that it’ll be widely adopted and become ubiquitous, which may give them a business advantage. These people will use the term “ open source” or “FOSS” a lot, they probably have well-paid jobs or businesses in the software industry.

    Topics on the pro-corporate side this year include: making a commercial product better ( example ), complying with legal regulations ( example ) or consuming open source in corporate software ( example )

    On the anti-corporate end, you’ll find people whose motivations are not financial (although they may still have a well-paid job in the software industry). They may be motivated by certain values and ethics or an interest in things which aren’t profitable. Their actions are sometimes at odds with the aims of for-profit corporations, such as fighting planned obsolescence, ensuring you have the right to repair a device you bought, and the right to use it however you want even when the manufacturer tries to impose safeguards (sometimes even when you’re using it to break a law). They might publish software under restrictive licenses such as the GNU GPL3, aiming to share it with volunteers working in the open while preventing corporations from using their code to make a profit. They might describe what they do as Free Software rather than “open source”.

    Talks on the anti-corporate side might include: avoiding proprietary software ( example , example ), fighting Apple’s app store monopoly ( example ), fighting “Big Tech” ( example ), sidestepping a manufacturer’s restrictions on how you can use your device ( example ), or avoiding the hyper-corporate dystopia depicted in Snow Crash ( example ).

    These are two ends of a spectrum. Neither end is hugely radical. The pro-corporate talks discuss complying with regulations, not lobbying to remove them. The anti-corporate talks are not organising a revolution. And most topics discussed at FOSDEM are somewhere between these poles: technology in a personal context ( example ), in an educational context ( example ), history lessons ( example ).

    Many talks are “purely technical”, which puts them in the centre of this spectrum. It’s fun to talk about technology for its own sake and it can help you forget about the messiness of the real world for a while, and even give the illusion that software is a purely abstract pursuit, separate from politics, separate from corporate power, and separate from the experience of being a human.

    But it’s not. All the software that we discuss at FOSDEM is developed by humans, for humans. Otherwise we wouldn’t sit in a stuffy room to talk about it would we?

    The coexistence of the corporate and the anti-corporate worlds at FOSDEM is part of its character. Few of us are exclusively at the anti-corporate end: we all work on laptops built by corporate workers in a factory in China, and most of us have regular corporate jobs. And few of us are entirely at the pro-corporate end: the core principle of FOSS is sharing code and ideas for free rather than for profit.

    There are many “open source” events that welcome pro-corporate speakers, but are hostile to anti-corporate talks. Events organised by the Linux Foundation rarely have talks about “fighting Big Tech”, and you need $700 in your pocket just to attend them. FOSDEM is is one of the largest events where folk on the anti-corporate end of the axis are welcome.


    Now let’s go back to the talk proposed by Manik Surtani and Jack Dorsey titled “Infusing Open Source Culture into Company DNA” . We can assume it’s towards the pro-corporate end of the spectrum. You can argue that a man with a billion dollars to his name has opportunities to speak which the anti-corporate side of the Free Software community can only dream of, so why give him a slot that could go to someone more deserving?

    I have no idea how the main track and keynote speakers at FOSDEM are selected. One of the goals of the protest explained here is “to improve the transparency of the talk selection process, sponsorship terms, and conflict of interest policies, so protests like ours are not necessary in the future.”

    I suspect there may be something more at work too. The world in 2025 is a tense place — we’re living through a climate crisis, combined with a housing crisis in many countries, several wars, a political shift to the far-right, and ever increasing inequality around the world. Corporations, more powerful than most governments, are best placed to help if they wanted, but we see very little news about that happening. Instead, they burn methane gas to power new datacenters and recommend we “ mainline AI into the veins of the nation “.

    None of this is uniquely Jack Dorsey’s fault, but as the first Silicon Valley billionaire to step on the stage of a conference with a strong anti-corporate presence, it may be that he has more to learn from us than we do from him. I hope that, as a long time advocate of free speech, he is willing to listen.