<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP – Linux und Ich</title>
	<atom:link href="https://linuxundich.de/en/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://linuxundich.de/en</link>
	<description>A German Linux blog, in English</description>
	<lastBuildDate>Fri, 23 Oct 2026 14:37:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>PHP2Shell: How to check your Docker containers for the PHP vulnerability</title>
		<link>https://linuxundich.de/en/php2shell-check-docker-containers/</link>
					<comments>https://linuxundich.de/en/php2shell-check-docker-containers/#comments</comments>
		
		<dc:creator><![CDATA[Christoph Langner]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 07:53:20 +0000</pubDate>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Homelab]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Server]]></category>
		<guid isPermaLink="false">https://linuxundich.de/en/php2shell-check-docker-containers/</guid>

					<description><![CDATA[The critical PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 also affect self-hosted services. A small loop shows which Docker containers still ship a vulnerable PHP version.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Since October 21, PHP2Shell has been all over the news. Behind the catchy name are two vulnerabilities in PHP, CVE-2026-109618 and CVE-2026-109619, which let attackers run code on a web server with a crafted HTTP request, no login required. The PHP developers rate both at 9.2 under CVSS 4.0, and according to <a href="https://watchtowr.com/intelligence/php-cve-2026-109618-faq/">watchTowr</a> the flaw is already being exploited. If you self-host, now is the time to take a look.</p>



<p class="wp-block-paragraph">The holes are plugged in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. For PHP 8.1 and older there are no regular releases with the fix so far, so the only way out is moving to a supported branch. On a regular server, the package manager takes care of that. Docker is a different story: every container brings its own PHP, and that PHP stays exactly as old as the image.</p>



<h2 class="wp-block-heading">Which container runs which PHP?</h2>



<p class="wp-block-paragraph">So the first question is: which containers on my little home server actually contain PHP? For Nextcloud or WordPress that&#8217;s obvious, for self-built images or small web apps less so. Instead of going through every container by hand, the following loop asks all running containers for their PHP version and compares it with the patched releases right away.</p>



<pre data-lui-file="php2shell-check.sh" class="wp-block-code"><code>for c in $(docker ps --format '{{.Names}}'); do
  v=$(docker exec &quot;$c&quot; php -r 'echo PHP_VERSION;' 2&gt;/dev/null) || continue
  case &quot;${v%.*}&quot; in
    8.5) fix=8.5.12 ;;
    8.4) fix=8.4.27 ;;
    8.3) fix=8.3.36 ;;
    8.2) fix=8.2.35 ;;
    *)   fix=99 ;;
  esac
  if [ &quot;$(printf '%s\n' &quot;$fix&quot; &quot;$v&quot; | sort -V | head -n1)&quot; = &quot;$fix&quot; ]; then
    printf '\e[32m%-30s %-8s ok\e[0m\n' &quot;$c&quot; &quot;$v&quot;
  else
    printf '\e[31m%-30s %-8s anfällig?\e[0m\n' &quot;$c&quot; &quot;$v&quot;
  fi
done</code></pre>



<p class="wp-block-paragraph">The loop silently skips containers without PHP. For all others, the version shows up in green if it is at least at the patch level and in red if it is below. PHP 8.1, 7.x and older also end up in red, because there simply is no fix for them. The red lines say “anfällig?”, German for “vulnerable?”. On my server, the result looks like this:</p>



<pre class="wp-block-code"><code>$ ./php2shell-simple.sh
nextcloud-app-1                8.5.12   ok
nextcloud-cron-1               8.5.12   ok
linuxundich-test-wordpress-1   8.3.36   ok
planetfoss-web                 8.3.33   anfällig?
sisu-web                       8.4.26   anfällig?</code></pre>



<p class="wp-block-paragraph">So Nextcloud and the test WordPress had already pulled their updates, while PlanetFOSS and the site for Sisu were still lagging behind. By the way, the question mark after “vulnerable” is on purpose. The loop only compares version numbers. If an image uses the PHP package from Debian, Ubuntu or Alpine, the fix may have been backported without the number changing. In that case, only the distribution&#8217;s security advisories can tell you more.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fda305d&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fda305d" class="wp-block-image wp-lightbox-container"><img fetchpriority="high" decoding="async" height="877" width="1397" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/wp-content/uploads/2026/10/php2shell-simple.webp" alt="Split terminal window on bender: on the left the script php2shell-simple.sh with line numbers, on the right its output with green and red container names and their PHP versions"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">The loop as a small script on the left, its output on the right: planetfoss-web and sisu-web show up in red, the rest in green.</figcaption></figure>



<p class="wp-block-paragraph">For a closer look, there is <a href="https://github.com/EXT-IT/php2shell-check">php2shell-check</a> by EXT IT. The MIT-licensed script is read-only and judges PHP by package versions rather than just the version number, so it also takes backported fixes into account. It looks into Docker containers, FPM pools and old processes that are still running, and on request sends a harmless request to your website. For the containers it needs root or membership in the docker group.</p>



<p class="wp-block-paragraph">The project page suggests the usual one-liner with <code>curl</code> and <code>sudo bash</code>. For a script that runs with root privileges on my server, I&#8217;m not too fond of that. Better download the script together with <code>SHA256SUMS</code> from the releases, check it with <code>sha256sum -c SHA256SUMS</code>, skim through it once and then start it by hand. According to the developers, a “not vulnerable” is no guarantee, by the way:</p>



<pre class="wp-block-code"><code>$ sudo bash php2shell-check.sh https://eure-seite.example</code></pre>



<p class="wp-block-paragraph">On my home server I ran the script with sudo. As a member of the docker group it would see the containers without root as well, but running processes of other users and some logs would stay hidden. This is how I fetched and started it:</p>



<pre class="wp-block-code"><code>$ curl -fsSLO https://github.com/EXT-IT/php2shell-check/releases/latest/download/php2shell-check.sh
$ chmod +x php2shell-check.sh 
$ sudo ./php2shell-check.sh </code></pre>



<p class="wp-block-paragraph">The verdict matches the loop: planetfoss-web with PHP 8.3.33 and sisu-web with PHP 8.4.26 are vulnerable, Nextcloud and the test WordPress are not. On top of that, it found a stopped container from Tuxsucht that my loop had completely missed:</p>



<pre class="wp-block-code"><code>PHP in docker containers
  [ OK ] container      nextcloud-app-1 (nextcloud:35-apache)
         PHP 8.5.12 (fixed from 8.5.12)
[...]
  [VULN] container      planetfoss-web (planetfoss-web:local)
         PHP 8.3.33, fixed in 8.3.36
         -&gt; Update PHP to 8.3.36 or later (container: pull the new image and recreate)
[...]
  [VULN] container      sisu-web (sisu-web:local)
         PHP 8.4.26, fixed in 8.4.27
[...]
  [WARN] container      php83 (stopped, tuxsucht-php)
         stopped, but its image ships PHP 8.3.33: it comes back vulnerable on the next start
[...]
Summary  2 vulnerable, 3 undecided, 12 warnings, 11 ok</code></pre>



<p class="wp-block-paragraph">Sure, <code>docker ps</code> only lists running containers, and a stopped container doesn&#8217;t accept any requests. But if someone starts it again at some point, the hole is back right away. The script is also very clear about mod_php: all five running containers serve PHP through the Apache module, and the advisory demonstrates a complete attack without login against exactly this setup.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fda3622&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fda3622" class="wp-block-image wp-lightbox-container"><img decoding="async" height="877" width="1397" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/wp-content/uploads/2026/10/php2shell-check.webp" alt="Terminal window with the output of php2shell-check on bender: color-coded VULN, WARN and OK entries for the containers planetfoss-web, sisu-web and php83"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">php2shell-check flags sisu-web as vulnerable, warns about mod_php and also finds the stopped container php83 with an old PHP.</figcaption></figure>



<p class="wp-block-paragraph">Until you can update, the script suggests a stopgap: set <code>session.upload_progress.enabled=0</code> and <code>expose_php=0</code>, and keep <code>post_max_size</code> below a quarter of <code>memory_limit</code>. The check from the outside, on the other hand, wasn&#8217;t much help. For the two websites, the script only reports that the headers don&#8217;t reveal a PHP version and that there is no WAF in front. That says nothing about the patch level, which the script honestly admits.</p>



<h2 class="wp-block-heading">And how do you update PHP?</h2>



<p class="wp-block-paragraph">Don&#8217;t update anything inside the container itself, it would be gone again with the next recreate. Instead, pull the new image in the respective Compose directory and recreate the container with it. For self-built images with their own Dockerfile you need <code>docker compose build --pull</code>, so that Docker also fetches a fresh base image:</p>



<pre class="wp-block-code"><code>docker compose pull &amp;&amp; docker compose up -d</code></pre>



<p class="wp-block-paragraph">Important: of course this only helps if the base image already contains the patched version. According to <a href="https://www.it-connect.tech/php2shell-and-docker-how-to-check-and-update-your-php-containers/">IT-Connect</a>, the new tags initially even showed up without an image behind them, but by now generic tags such as <code>php:8.3-apache</code> ship the patched PHP. If your Dockerfile pins a fixed version like <code>php:8.4.24-fpm</code>, you have to bump it yourself. Simply run the loop again after the update. Take care of the containers that are reachable from the internet first.</p>



<p class="wp-block-paragraph">The PlanetFOSS test environment shows what this looks like in practice. Its image is based on <code>php:8.3-apache</code>, and the Dockerfile only adds extensions such as GD and Intl. My deploy script does call <code>docker compose up -d --build</code>, but that doesn&#8217;t fetch a new base image, it takes the one from August out of the cache. That&#8217;s where the old PHP 8.3.33 came from. Only <code>--pull</code> fetches the fresh version:</p>



<pre class="wp-block-code"><code>$ cd /data/docker/planetfoss
$ docker compose build --pull web
$ docker compose up -d web</code></pre>



<p class="wp-block-paragraph">After a good minute the new image was ready, and the container ran PHP 8.3.36. The database in the same Compose project stays untouched, because both commands only address the web service. Afterwards the loop shows PlanetFOSS in green, and php2shell-check also reports only sisu-web as vulnerable. The old image is still lying around on disk as a leftover, by the way; <code>docker image prune</code> cleans it up.</p>



<pre class="wp-block-code"><code>$ ./php2shell-simple.sh
[...]
nextcloud-cron-1               8.5.12   ok
linuxundich-test-wordpress-1   8.3.36   ok
sisu-web                       8.4.26   anfällig?</code></pre>



<p class="wp-block-paragraph">All in all, PHP2Shell is a good example of how self-hosting with Docker is convenient, but the updates don&#8217;t come by themselves. heise has collected <a href="https://www.heise.de/en/news/php2shell-Critical-flaws-allow-code-injection-in-PHP-11494897.html">more details on the vulnerabilities</a>. How to keep containers up to date without a lot of fiddling, I covered in <a href="https://linuxundich.de/en/keeping-docker-containers-up-to-date-with-dockcheck/">Keeping Docker containers up to date with Dockcheck</a>. How do you keep your containers up to date?</p>
<hr><p>☕ <strong>Support Linux und Ich</strong><br>Thanks for reading <a href="https://linuxundich.de/en/">Linux und Ich</a>. If you enjoy the blog and would like to support my work, you will find more information on the <a href="https://linuxundich.de/en/support/">donation page</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://linuxundich.de/en/php2shell-check-docker-containers/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>PlanetFOSS: Linux news that sorts itself</title>
		<link>https://linuxundich.de/en/planetfoss-launch-linux-news-bundles-supernovas/</link>
					<comments>https://linuxundich.de/en/planetfoss-launch-linux-news-bundles-supernovas/#respond</comments>
		
		<dc:creator><![CDATA[Christoph Langner]]></dc:creator>
		<pubDate>Tue, 20 Oct 2026 07:42:13 +0000</pubDate>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PlanetFOSS]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[RSS]]></category>
		<guid isPermaLink="false">https://linuxundich.de/en/?p=270</guid>

					<description><![CDATA[PlanetFOSS collects Linux and open source news from German and English sources and organizes it on its own: identical stories become bundles, new topics become comets, big events become supernovas. No AI service involved, just a bit of statistics.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Longtime Linux users have known Planet sites forever. <a href="https://planet.gnome.org/">Planet GNOME</a>, <a href="https://planet.debian.org/">Planet Debian</a>, or <a href="https://planet.ubuntuusers.de">Planet ubuntuusers</a> (in German) collect the blogs of one project on a single page, neatly stacked, newest post on top. That works fine as long as you only care about one project. But if you want to know what&#8217;s going on across the whole Linux and open source world, you&#8217;re still clicking through dozens of sites or tending a bursting feed reader.</p>

<p class="wp-block-paragraph">That&#8217;s exactly what <a href="https://planetfoss.net/">PlanetFOSS</a> is for. The site has been running in a trial phase for a few days, and starting today I&#8217;d like to launch it officially. The idea is a planet that isn&#8217;t tied to one project but collects across topics: distributions, desktops, the kernel, self-hosting, gaming, security, politics. The sources are publishers, blogs, project sites, and video channels, in German and English, and every visitor decides which language they want to see.</p>

<h2 class="wp-block-heading">A magazine, not a list</h2>

<p class="wp-block-paragraph">Visually, PlanetFOSS takes its cue from a modern computer magazine rather than the classic Planet list. There&#8217;s a lead story, cards with an image and a teaser, categories, and a bar with the topics of the day. The site only takes what the source sites themselves provide for previews, meaning Open Graph data or the content of the RSS feed. Every card links straight to the original article. There are no full texts.</p>

<p class="wp-block-paragraph">I also put some effort into privacy. The preview images are stored as WebP on PlanetFOSS&#8217;s own server, so no visitor IP ends up on third-party servers. There are no cookies, no external scripts, and no tracking. You can still mark articles with a star as worth reading, without an account: instead of a CAPTCHA, your browser solves a small computing puzzle, and the star is only remembered locally in your browser.</p>

<p class="wp-block-paragraph">Under the hood, it&#8217;s good old PHP with MySQL, no framework, on ordinary shared hosting. Every five minutes, a cron job kicks off a cycle: fetch feeds, enrich new articles, sort them, rebuild the front pages. The real work, though, isn&#8217;t the fetching but the sorting. A site with more than a hundred sources quickly turns into a wall of text when ten sites report on the same thing.</p>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb2d66&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb2d66" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-1024x576.webp" alt="The Solar System page (Das Sonnensystem) on planetfoss.net in Firefox on Fedora, a grid of source cards such as heise online, Golem.de, GNU/Linux.ch, and c't 3003" class="wp-image-263" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/02-sonnensystem-quellen.webp 1920w" sizes="(max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">The Solar System page lists all 172 sources, each with its language, type of source, and activity over the last seven days.</figcaption></figure>

<h2 class="wp-block-heading">Same news, one bundle</h2>

<p class="wp-block-paragraph">When a new Firefox version comes out, it feels like everyone writes about it. On a regular Planet site, you&#8217;d see Firefox ten times in a row. That&#8217;s why PlanetFOSS compares every new article with all articles from other sources published in the last 48 hours. If the title contains the same topic with the same version number, say &#8220;Firefox 158&#8221; or &#8220;Ubuntu 26.10&#8221;, the articles end up in a shared bundle, even across the language barrier.</p>

<p class="wp-block-paragraph">There are two more signals. If two news items link to the same primary source, such as the release notes or a press release, they very likely belong together. Run-of-the-mill targets like GitHub or Wikipedia don&#8217;t count. As a last resort, the aggregator compares the titles themselves: stop words get thrown out, and if half of the remaining words match and the titles share a topic, it&#8217;s a bundle.</p>

<p class="wp-block-paragraph">The motto here: better to bundle too little than to bundle wrong. A missing &#8220;also at&#8221; hardly anyone notices, but two unrelated stories lumped together stand out right away. On the front page, bundles with two sources appear as a card with a source bar underneath. From three sources on, it becomes a story card that&#8217;s twice as wide in the grid and lists every additional report with its own headline and its own link to the original.</p>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb3c6e&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb3c6e" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-1024x576.webp" alt="Desktop category on PlanetFOSS, magnifier on the GNOME 50.6 card from 9to5Linux with the line Also at Linuxiac (Auch bei)" class="wp-image-264" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/03-buendel-quellen-leiste.webp 1920w" sizes="auto, (max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">When two sources cover the same story, PlanetFOSS adds the second one under the card as an &#8220;Also at&#8221; (Auch bei) bar, here Linuxiac on GNOME 50.6.</figcaption></figure>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb4969&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb4969" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-1024x576.webp" alt="Double-width story card on the GNOME OS Preview with Phoronix as the main article and further reports from LWN.net, 9to5Linux, This Week in GNOME, and LinuxNews, magnifier on the label 6 sources reporting" class="wp-image-265" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/04-buendel-story-karte.webp 1920w" sizes="auto, (max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">From three sources on, a bundle becomes a story card: six sources report on the GNOME OS Preview, the others are listed to the right.</figcaption></figure>

<h2 class="wp-block-heading">New topics without a dictionary</h2>

<p class="wp-block-paragraph">PlanetFOSS has a dictionary with terms like GNOME, Plasma, Proxmox, or Steam. It helps with the categories, which a small <a href="https://www.ibm.com/think/topics/naive-bayes">Naive Bayes classifier</a> also assigns, and with version topics. The thing is, the open source world keeps coming up with new names that aren&#8217;t in any dictionary. During the first tests, I noticed <a href="https://getartcraft.com/">ArtCraft</a>, for example: seven articles about a new project, and the site hadn&#8217;t picked up on any of it.</p>

<p class="wp-block-paragraph">Since then, PlanetFOSS looks for new names on its own. A candidate has to appear in the titles of at least three sources within the last 48 hours (four if only one language is involved), but no more than once in the four weeks before. Then there&#8217;s a little trick: a name is never written in lowercase. That filters out words like &#8220;released&#8221; or the German &#8220;Sicherheitslücke&#8221; (security hole) without endless stop word lists. Whatever is left becomes a new topic.</p>

<h2 class="wp-block-heading">Comets and supernovas</h2>

<p class="wp-block-paragraph">Now it gets interesting. The name sets the scene: when a topic suddenly gets a flood of coverage, say on the release day of a new Ubuntu version, it becomes a supernova, a sudden, very bright outburst. A topic that&#8217;s only just picking up speed is a comet. And once the outburst is over, there&#8217;s still an afterglow for a while.</p>

<p class="wp-block-paragraph">A comet appears as soon as at least three different sources write about a topic within twelve hours. Its cards get a badge, and it moves to the front of the topic bar. So that general catch-all topics like the Linux kernel don&#8217;t become permanent comets, they also need twice as many sources as usual. If a comet can&#8217;t keep up the momentum, it drops back to a normal topic.</p>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb57ab&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb57ab" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-1024x576.webp" alt="Fedora desktop with Firefox and the PlanetFOSS front page, magnifier on the topic bar In Orbit (Im Orbit) with Linux-Kernel 7.3, GNOME, and Linux-Kernel, below it the supernova band with its activity chart" class="wp-image-266" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/01-startseite-supernova.webp 1920w" sizes="auto, (max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">The &#8220;In Orbit&#8221; (Im Orbit) bar leads with the supernova Linux-Kernel 7.3, and below it burns its band with eleven posts from nine sources.</figcaption></figure>

<p class="wp-block-paragraph">A supernova needs more. Four sources have to report within 24 hours, almost all of them in the last twelve hours. The topic has to be broad, meaning it reaches at least two types of sources (publisher, blog, project, video) or shows up in both languages. On top of that, it needs at least three times as many sources as its average over the last four weeks. Otherwise, every week with some Ubuntu news would be a supernova.</p>

<p class="wp-block-paragraph">PlanetFOSS knows some things in advance. A release calendar holds the known dates for Ubuntu, GNOME, KDE Plasma, Fedora, Debian, the kernel, and Firefox. If a topic falls within that window, one source fewer is enough to ignite. At the same time, no more than two supernovas may burn at once, so the front page doesn&#8217;t drown in nonstop fireworks. If there are more candidates, the strongest ignite and the rest stay comets for the time being.</p>

<p class="wp-block-paragraph">A supernova burns for at least twelve hours. After that, it cools down once nothing new arrives for six hours or the number of sources drops below half of its peak. If a second wave comes along, such as the first reviews a few days after a release, it can ignite again. After 72 hours, the topic goes to the archive, but its topic page stays online and keeps collecting later posts.</p>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb6544&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb6544" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-1024x576.webp" alt="Topic page Linux-Kernel 7.3 on planetfoss.net with the supernova label and cards from Bootlin, heise online, UbuntuHandbook, Linuxiac, and other sources" class="wp-image-267" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/06-themenseite-supernova.webp 1920w" sizes="auto, (max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Every topic gets its own page with all its posts, here the supernova Linux-Kernel 7.3 with reports in German and English.</figcaption></figure>

<h2 class="wp-block-heading">How the front page comes together</h2>

<p class="wp-block-paragraph">When a supernova is burning, it gets its own band at the very top above the lead story, showing the number of posts and sources and a row of cards, sorted by official announcements, news, reviews, how-tos, and videos. Whatever is in that band doesn&#8217;t show up again further down. On top of that, PlanetFOSS sends a post to the <a href="https://mastodon.social/@planetfoss">@planetfoss account on Mastodon</a> half an hour after a supernova ignites.</p>

<p class="wp-block-paragraph">For everything else, the site hands out points. The score takes into account the size of the bundle, the stars from visitors, an active supernova topic, and the weight of the source. All of that is divided by the age of the article, so older posts gradually slide down. Stories that many sources cover stay up longer, but not forever.</p>

<p class="wp-block-paragraph">For the lead story, importance beats freshness, but the candidates come from the last 24 hours and preferably bring a large image. The age of a bundle is the age of its second-newest report: if more sources keep writing, it stays up front, but a single latecomer isn&#8217;t enough. If a post has already been the lead for more than eight hours, it loses half of its points, and after 14 hours three quarters.</p>

<figure data-wp-context="{&quot;imageId&quot;:&quot;6af1e6fdb7771&quot;}" data-wp-interactive="core/image" data-wp-key="6af1e6fdb7771" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="576" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-1024x576.webp" alt="PlanetFOSS front page with a large lead story on Trailblazers from GamingOnLinux, two cards and the list More top stories (Weitere Top-Meldungen) on the right, below them the sections Latest and Star moments (Neueste, Sternstunden)" class="wp-image-268" srcset="https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-1024x576.webp 1024w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-300x169.webp 300w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-768x432.webp 768w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-1536x864.webp 1536w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-1600x900.webp 1600w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen-1280x720.webp 1280w, https://linuxundich.de/en/wp-content/uploads/2026/10/05-aufmacher-top-meldungen.webp 1920w" sizes="auto, (max-width: 781px) 100vw, 680px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">The lead story comes from the last 24 hours, next to it are the top stories, each one from a different source.</figcaption></figure>

<p class="wp-block-paragraph">To keep one busy source from filling the whole page, the selection also looks for variety. In the lead story and the top stories next to it, every post comes from a different source, and the &#8220;Latest&#8221; section shows at most two articles from the same site. That way, smaller blogs get their spot next to the big publishers, and the front page looks a little different every time you visit.</p>

<h2 class="wp-block-heading">Statistics instead of AI</h2>

<p class="wp-block-paragraph">By the way, there&#8217;s no AI in PlanetFOSS that summarizes texts or guesses topics. Everything runs on counting, comparing, and a handful of thresholds. In my opinion, that&#8217;s actually the better way: it costs nothing, sends no data anywhere, and stays traceable. When a supernova ignites, you can say exactly why. That said, I did build the site myself with AI assistance.</p>

<p class="wp-block-paragraph">Of course, it didn&#8217;t work without some fine-tuning. Early on, for example, a supernova ignited for Microsoft Defender, even though the four news items were spread over 18 hours. Since then, an outburst has to be genuinely fresh. Ubuntu 26.10 also ignited two hours late on its release day at first, because it was measured against all Ubuntu news. That&#8217;s why version topics now get their own baseline.</p>

<p class="wp-block-paragraph">I keep an eye on cases like these, and for that the site saves a snapshot of topics, bundles, and lead stories every six hours. So the logic will surely keep changing. A wrong bundle or a comet that shouldn&#8217;t be one can be corrected by hand in the admin area. The algorithm dutifully respects those corrections on its next run.</p>

<p class="wp-block-paragraph">Just head over to <a href="https://planetfoss.net/">planetfoss.net</a> and tell me what you think. Which sources are you still missing, and which blogs, magazines, or other publications from the German- or English-speaking Linux and open source world absolutely belong on the planet? I&#8217;m happy to take suggestions in the comments. And if you run a blog yourself and would rather not be included, the site of course also offers a way to opt out.</p>

<p class="wp-block-paragraph"><strong>Update:</strong> Why the stars on PlanetFOSS no longer use frosted glass, and what that has to do with a memory leak in WebKitGTK, is covered in <a href="https://linuxundich.de/en/webkitgtk-memory-leak-backdrop-filter/">WebKitGTK 2.54: Tiny Star, Massive Memory Leak</a>.</p>
<hr><p>☕ <strong>Support Linux und Ich</strong><br>Thanks for reading <a href="https://linuxundich.de/en/">Linux und Ich</a>. If you enjoy the blog and would like to support my work, you will find more information on the <a href="https://linuxundich.de/en/support/">donation page</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://linuxundich.de/en/planetfoss-launch-linux-news-bundles-supernovas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
