Two months after the last "monthly" blog post, it's time for another double-feature. We have a lot to talk about, but let's start with what you can see in the header image. At the center is fdlamotte's Pixel 3a running SXMO and it is connected to… a G-Shock B2100! He wrote a great blog post showing how he sends notifications to the three-character-screen on the watch as well as configuring the watch (alarms etc.) from SXMO menus.
In three corners we have photos from events. The top left one is from the Plasma Sprint 2025 that took place in Graz, Austria, "co-hosted with Grazer Linuxtage where we had a KDE booth on Saturday. We show-cased KDE Plasma running on SteamDeck, Krita with drawing tablet support on Wayland, HDR support and of-course Plasma Mobile running on OnePlus 6" as Bhushan writes on his blog. Devin and Luis were there as well and wrote separate posts. Another event in Austria was the permacomputing & postmarketOS residency (photo bottom left) from Chaline.
In Argentina, the FLISoL (Latin American Free Software Installation Festival) took place where Val held a talk "Sustainability and sovereignty in your pocket with postmarketOS". She writes in #6: "It was great! There was no recording, but I could share the audience selfie I took with the motorola-nora I brought with me :D It's lower resolution than the front camera itself due to pipewire/snapshot shenanigans, but let's say its lo-fi quality in general is a privacy measure designed to thwart facial recognition :p"
Speaking of talks, Pablo also did one called "postmarketOS: opportunities and challenges of a mobile-first platform" at Linux App Summit and he was interviewed by the Association for Progressive Communications (APC) along with Clayton and Oliver.
Organizational
We have two new Trusted Contributors: Ranny and Hugo! Ranny is a designer, art creator, and has helped with the website, e.g. writing an initial version and providing artwork for the contribute page. He is also our first TC without much coding experience, and we are excited to have people as TCs with different skillsets. Hugo is a long-term contributor to both postmarketOS and Alpine Linux. He loves clean, simple solutions, and to solve problems upstream, which greatly aligns with the postmarketOS philosophy. Welcome to both of you to the team!
In our 2025-02 blog post, we mentioned that we were looking for a new name for postmarketOS. The plan for executing this change has now been mostly finished, and is only waiting a vote by the team (!6). If you want to contribute name ideas, the form will remain open until v25.06 is out.
knuxify is now an official maintainer of the wiki, and has been making remarkable improvements! There is also a new postmarketos-wiki Matrix and IRC room if you are interested in editing and helping out.
Since the last blog post, the postmarketOS team has held 4 meetings. We have now decided to make meetings always available for Trusted Contributors to join. This makes it possible to get more perspectives and have a more flat hierarchy as the project continues growing. It also reduces the organizational work needed coordinate our growing team.
Anubis has been deployed in our GitLab instance to avoid regular slowdowns we have seen from AI crawlers as well as an increase in spam registration sign-ups. It is unfortunate that we need to do this, but this is just the state of the Internet in 2025.
Continuous testing and monitoring
Our GitLab now has a new postmarketOS/continuous-testing group. We have moved the upstream-compat check there that ensures postmarketOS stays compatible with Alpine, raising errors if postmarketOS packages depend on Alpine packages that no longer exist or forked packages (such as our cross compilers) have different versions than the ones in Alpine. We plan to add more continuous tests there, for example for booting into the various UIs we have packaged and checking that we don't see any failed services, have specific programs running and so on. With CI-tron we will be able to run these tests not only in QEMU, but also on hardware (see our previous blog post Hardware testing automation: a status update for more information).
Relatedly we have been working on notifications for upstream-compat and future continuous-testing jobs, as well as our package build infrastructure and the continuous release upgrade testing. When any of these have errors, notifications like the following get sent to the postmarketos-devel room:
On the server-side we use Icinga to collect monitoring data from our jobs and to send the matrix messages. To ensure the channel doesn't get flooded, we only send notifications directly if the status for one job changes between 0|1|>=2 errors or if 12 hours have passed.
Having these notifications has already lead to lots of amazing folks in our community who happened to be online to investigate the errors and make fixes for them. Before we had the notifications, fewer people would notice the errors, it wasn't as clear which merge requests would fix them (now they are directly linked from the notifications too) and so it would take a lot longer to get the errors fixed.
Related patches are in !18, !19, !20, !20, !21, !21, !22 and !6466.
Downstream ports have been split into their own category
"At our post-FOSDEM hackathon this year, we discussed how to make it easier to distinguish between the generally more useful close-to-mainline ports and the generally barely usable downstream ports. We reached the conclusion that we will create a new device category called "downstream" where all downstream ports will go. The "testing" category will be repurposed to only include mainline ports."
This is the description of milestone 30, which has seen significant progress towards the abovely stated goal. The downstream ports were split into a separate pmaports directory (!6491, !6516, !6519), and pmbootstrap's device selection now displays the category next to each device as shown in the screenshot above (!2549). It also shows a warning when selecting a downstream port:
WARNING: samsung-a20 is a downstream port! Expect missing and broken features. See https://wiki.postmarketos.org/wiki/Downstream_kernel_specific_package
Continue? (y/n) [n]:
Regarding the device category colorization Stefan wrote: "Maybe I've played too much Borderlands over the years, but to me magenta feels more special than green. Switching them around would be strange to me. But honestly, I have no idea how one is supposed to map quality to colour. Surely someone must've done some actual research on this somewhere."
While tweaking and moving device ports around for this effort, we found that several archived and downstream kernels don't build anymore and we were wondering if we should just not provide binary packages for those anymore to reduce maintainer load. This is being discussed in #109, the current conclusion is that we will keep binaries for downstream kernels, but not for archived kernels, and move downstream kernels to archived if they stop building and nobody is fixing them. Feel free to jump into the discussion if you have an opinion on this.
Thanks Luca, Stefan, Pablo!
pmbootstrap
Versions 3.4.0, 3.4.1 and 3.4.2 have been tagged. Among many smaller improvements and fixes, 3.4 has the cross-native2 cross compiling method as biggest new feature.
QEMU on aarch64 hosts now uses EFI and virgl: "This enables faster/more featureful 3D accel support in VMs, which is necessary for running some future UIs." (!2560). Thanks Clayton!
pmbootstrap now has an option to create a single combined boot/root partition. "With recent rework in postmarketos-initramfs, we no longer need to mount the
/bootpartition in the initramfs (assuming initramfs-extra is not used). On devices that boot without accessing the boot file system (e.g. Android boot images, fastboot, ...), that makes it possible to install postmarketOS on a single (potentially encrypted) partition that contains both root (/) and/bootfiles. This avoids the extra complexity of the subpartition setup we usually use on such devices, and also avoids having to flash two partitions (when using--splitto avoid the subpartitions)" (!2512). Thanks Minecrell!When
pmbootstrap initasks for the mirror to use, you can now say "best" to measure and select the one closest to you (!2559). Thanks Jens!Instead of installing
alpine-base, pmbootstrap now installsalpine-baselayout,apk-tools,busyboxandmusl-utilsdirectly. This means we don't need to forkalpine-baseinpmaportsanymore to avoid the dependency onopenrc(!2580). Thanks Pablo!pmb:gpu-accellanddeviceinfo_gpu_acceleratedwere finally renamed topmb:drmanddeviceinfo_drmin pmbootstrap (!2591). This addresses long-standing issue #1481: " With the current classification system, devices like espresso3g can't have access to Phosh despite that it works just fine due to that it doesn't have GPU-accelerated 3D, even though this required by the Phosh shell. Marking it as GPU accelerated doesn't make sense since there is no working GPU acceleration. As such, I suggest that we rename pmb:hw-accel to pmb:drm and deviceinfo_gpu_accelerated to deviceinfo_drm to more accurately describe what these options do." The pmaports counterpart is in !6419 and will be merged soon. Thanks Anri, Stefan!Support for the s390x architecture has been added to pmbootstrap. "This is a purely emulated proof-of-concept, because s390x machines are very hard to come by. My motivations are outlined in a little presentation that I gave on the sidelines of FOSDEM 2025. Essentially: s390x is interesting because it's the last remaining (somewhat-)mainstream big-endian architecture, s390x in pmOS is interesting (though not useful) because it's the furthest thing from a smartphone [… and] s390x is already supported in Alpine" (!2536). Thanks J.!
Test coverage is now displayed in the GitLab UI (!2596, !2609). Thanks Pablo, Oliver!
Various fixes and improvements (!2539, !2576, !2582, !2583, !2584, !2585, !2586, !2587, !2589, !2593, !2594, !2595, !2598, !2599, !2600, !2603, !2604, !2605, !2606, !2608, !2612, !2613). Thanks Alexey A., Alexey M., Clayton, Anri, Luca, Stefan, Oliver, Pablo, Slonk!
New ports
This time we have 8 new device ports:
- Alcatel Telekom Puls (!6422): Another tablet that can get a second life. Thanks Error504TimeOut!
- Barnes & Noble Nook Color (!6486): E-reader back from 2010, that can also be used as a tablet. Thanks Scott!
- Jolla C2 (!6426): A community phone by Jolla. It is a Linux-first smartphone, and it is amazing to have together with a close-to-mainline kernel! Thanks Affe!
- Samsung Galaxy Tab S 10.5 LTE (!6457): Not only new, but also old re-purposed devices, like this tablet from 2014. Thanks Ocavedo!
- Xiaomi Mi TV Stick (!6121): A great device to potentially replace your "Smart TV". Thanks Ferass!
- Xiaomi Redmi Note 11 (!6398): A very recent device from 2021. Thanks Omar!
- Xiaomi Redmi Note 10S / POCO M5s (!6430): Also a device from 2021. Thanks Dan V.!
- Xiaomi Redmi Note 5 Pro (!6469): This device comes from a well-supported close-to-mainline kernel, and therefore already has many features working. Thanks Alexey M.!
New mainline ports
Additionally two existing devices got support for mainline kernels:
- OnePlus 8T (!6411). Thanks Frieder!
- Samsung Galaxy Note Pro 12.2 WiFi (!6453). Thanks Eisenbahnfan!
New generic ports
Devices with MSM8956/MSM8976 SoCs got a generic port (!5694). Thanks Barnabás!
Kernel packaging
As usually here is the long list of kernel packaging related merge requests. The list below only has the names who made the merge request, but our thanks also go out to everybody who contributes in the git repositories that are packaged there, or who contributes in another way such as testing or reviewing. Without you this would not be possible!
- kconfigcheck: Require HID_LENOVO only for x86(_64) (!6387). Thanks Luca!
- linux-postmarketos-qcom-laptop: upgrade to 6.14 (!6216). Thanks Clayton!
- linux-postmarketos-qcom-sc7280: upgrade to 6.14.0 (!6386). Thanks Luca!
- linux-postmarketos-qcom-msm8953: upgrade to v6.14.0-r1 (!6383). Thanks Barnabás!
- linux-purism-librem5: upgrade to 6.6.83 (!6396). Thanks Alistair!
- linux-postmarketos-apple: upgrade to 6.15.0-rc1 (!6392). Thanks Aster!
- ci: don't run test_kernel on linux-pam-pmos (!6418). Thanks Clayton!
- linux-postmarketos-qcom-sm7150: Upgrade to 6.15.0_rc2 (!6420). Thanks Jens!
- linux-postmarketos-exynos5: update to 6.6.87 (!6432). Thanks Henrik!
- linux-postmarketos-mediatek-mt8173: upgrade to 6.14.3 (!6400). Thanks Adam!
- linux-postmarketos-qcom-sm6350: upgrade to 6.14.0 (!6388). Thanks Luca!
- linux-postmarketos-qcom-msm8226: upgrade to 6.13.4 (!6416). Thanks Luca!
- linux-alcatel-ttab: fix missing deps: linux-headers, xz (!6446). Thanks Oliver!
- linux-next: switch to CONFIG_HZ_1000 (!6393). Thanks Casey!
- linux-samsung-coreprimevelte: use patch files (!6459). Thanks Duje!
- linux-postmarketos-grate: upgrade to 6.12.5 (!6379). Thanks Rob!
- linux-postmarketos-marvell: upgrade to 6.14.4 (!6456). Thanks Rob!
- linux-postmarketos-amlogic: upgrade to 6.12.23 (!6412). Thanks Ferass!
- linux-postmarketos-qcom-sdm670: upgrade to v6.14.5 (!6452). Thanks Richard A.!
- linux-postmarketos-qcom-sdm660: upgrade to 6.14.6 (!6498). Thanks Alexey M.!
- samsung-expressatt: boot linux-next with lk2nd to a shell (!6133). Thanks Rudraksha!
- device-asus-flo: Rename subpackage of old mainline kernel (!6505). Thanks Luca!
- Fix build in lg-w7 and samsung-s3ve3g downstream kernels (!6522). Thanks Ferass and Luca!
- downstream/linux-wiko-lenny{3,5}: add patch to replace Sun-style flags (!6542). Thanks Clayton!
- Fixes for USB on Qualcomm Snapdragon laptops in Trailblazer/linux-next (!6538). Thanks Val!
- linux-next: msm8960: expressatt: SSH via USB (!6540). Thanks Rudraksha!
- device-samsung-expressatt: Add linux-lts, linux-stable, linux-edge (!6507). Thanks Rudraksha!
- linux-sony-nicki-mainline: install dtbs (!6550). Thanks Stefan!
- device-fairphone-fp5: Add kernel modules for touch screen to modules-initfs (!6543). Thanks 五河!
- linux-postmarketos-omap: upgrade to 6.15 (!6557). Thanks sicelo!
- linux-purism-librem5: upgrade to 6.6.83pureos2 (!6549). Thanks Alistair!
- linux-postmarketos-mediatek-mt8173: upgrade to 6.15 (!6555). Thanks Adam!
- linux-next: enable ZRAM_BACKEND_ZSTD (!6544). Thanks Casey!
systemd
systemd has been adjusted upstream to work with
O_ACCMODEas defined by musl libc, in addition to glibc's definition. Before this was handled,test-fs-utilin the systemd testsuite failed (systemd!37161). Thanks Stefan!The console UI is now using systemd by default (!6415). Thanks Casey!
A patch from Purism's tree has been added to our systemd/networkmanager package for making WiFi hotspots work (!6421). Thanks Alistair!
Setting a locale with systemd has been fixed (!6535). Thanks Clayton!
Chromebooks' automatic keyboard map generation now works with systemd (!6529). Thanks George!
Various systemd service related fixes and improvements (!6401, !6443, !6450, !6477, !6487, !6494, !6499, !6502, !6509, !6568). Thanks Alistair, Bhushan, Clayton, Achill, George, Jane, Bart!
Various upgrades of systemd-enabled packages (!6365, !6374, !6448, !6461, !6462, !6483, !6503, !6532, !6546, !6559). Thanks Achill, Oliver, Bart, Robert M.!
Various smaller fixes and improvements (!6229, !6250, !6380, !6404, !6406, !6451, !6506, !6520, !6524, !6554). Thanks Clayton, Achill, Jane, Casey, Stefan, Oliver, Pablo!
pmaports
A new os-installer UI is now available, "which is a nice little OS installer thing that we can use to install pmOS on laptops/tablets and stuff like that. It runs under GNOME desktop, to support accessibility features and operate as a "live CD" like many other distro installer things do. Under the hood, this is using pmbootstrap to install pmOS onto some local storage selected by the user in the os-installer UI. It defaults to targeting the device that the user is booted into. […] Currently it only offers GNOME, KDE, and xfce desktop environments, but it's pretty easy to add more later.". You can either build you own image with pmbootstrap or use one of the pre-built images that we currently build for
generic-x86_64,lenovo-21bx,pine64-pinebookproandpostmarketos-trailblazer(!128, !6320). Thanks Clayton!The Samsung Galaxy Core Prime VE LTE and Google Pixel 3a XL have been moved to the community category of devices (!6409, !6485). Thanks Anjan, Duje!
A new UI package for the scrollable-tiling wayland compositor niri has been added (!6449). Thanks Aster!
The Raspberry Pi 5 doesn't boot with a quiet console anymore, uses DHCP and now has a working serial console with getty as well as a fix for the firmware not finding the boot partition. Full disk encryption has also been fixed. (!6504, !6513, !6536). Thanks Ellie, Henrik!
postmarketOS Welcome 0.9.0 has been released, the first major upgrade in over two years! It features a simpler and more modern swiping image on the first page, the newer postmarketOS green taken from accent colors instead of having it hardcoded, a note about keyboard activation for newer Phosh versions and a new icon on the Phosh page as well as a German translation (!27, !28, !6510, !6551). Thanks Kamila, Achill, MoonlightWave-12, Stefan!
Phosh is now configured to enable lockscreen backgrounds by default. This is disabled upstream, but as we always have a wallpaper that is adapted to mobile, it makes sense for postmarketOS. Users can change the lockscreen wallpaper with phosh-mobile-settings. (!6511). Thanks Achill!
Phosh installs now have
sound-theme-phosh, which contains for example a sound for cellbroadcast messages (!6480). Thanks Achill!The Gapless music player is now installed by default in new GNOME-based UIs (including Phosh, !6558). Thanks Clayton!
The virtual pipeline has been enabled in libcamera. "This change allows to easily create virtual cameras, which is helpful for testing and debugging purposes, both for system components like Mesa and Pipewire as well as various apps." See the MR for details on how to enable the virtual camera (!6567). Thanks Robert M.!
The buffyboard UI now rotates the on-screen keyboard based on the rotation of the framebuffer (!6534). Thanks ΞЖKƆ/QVH!
CI now builds packages in a child pipeline instead of the main one, which allows to skip jobs for unrelated architectures or if no packages have been changed. This significantly speeds up CI (!6366). Thanks Pablo!
The Framebufferphone UI has been removed, as its main package
fbpisn't building anymore with modern zig and seems abandoned (!6553). Thanks Oliver!Phone sensors of the Samsung Galaxy S9 can now be used (!6492). Thanks Dzmitry!
The dtbloader has been upgraded to 1.4.0, with several detection improvements,using the DPP partition to set the correct WiFi/Bluetooth MAC on ThinkPad X13s and Aspire 1 (!6428) and adds tentative support for the Asus Zenbook A14. Thanks Nikita!
The hexagonfs-firmware-loader has been upgraded to 1.1.0 and now supports xiaomi-beryllium and xiaomi-tucana. (!6402). Thanks Jens!
For the Samsung Galaxy Tab Pro 10.1 Wi-Fi, GPU support has been added and Wi-Fi was made more reliable (!6433). Thanks Eisenbahnfan!
Booting and using unl0kr has been fixed for the SHIFT6mq and the firmware package has been updated to now support the 8.0 and 8.1 revisions of the phone (!6454, !6455). Thanks Alexander!
The Generic x86_64 device now has modules in the initramfs to support eMMC storage (!6444). Thanks Clayton!
Most of the dependencies of Trailblazer have been moved to recommends: "None of the devices running trailblazer actually need all these daemons or firmware. Move almost everything to recommends so that users can free up space and so that customised images can be built with --no-recommends." and packaging now ensures that we always enable PAM for SSH (!6239). Thanks Casey!
Various smaller fixes and improvements (!6335, !6375, !6378, !6382, !6384, !6385, !6397, !6399, !6403, !6407, !6408, !6410, !6417, !6423, !6424, !6425, !6429, !6431, !6434, !6435, !6436, !6438, !6439, !6442, !6445, !6447, !6464, !6470, !6471, !6472, !6473, !6474, !6475, !6476, !6478, !6479, !6481, !6482, !6488, !6489, !6490, !6495, !6496, !6497, !6500, !6501, !6515, !6518, !6523, !6526, !6539, !6560, !6569, !6570). Thanks Alexey M., Alistair, Adam, Clayton, Achill, George, Henrik, ABOOTHAHIR, Anton, Casey, knuxify, Rob, Luca, Minecrell, Oliver, Pablo, Pan, revuyd, Samuel, Brady!
buffybox
Vladimir has been consistently improving our low-level suite of graphical applications that is buffybox and cleaning up the project.
Big improvements:
- Update LVGL, the low-level UI toolkit, from 9.2.0 to 9.2.2. In the process cleaning up many options: !46.
- Increase the correctness of the interaction between different processes, which could lead to unexpected failed password attempts: !53.
- Supporting building and installing buffyboard and unl0kr independently, which was a long-standing feature request: !54.
…as well as small improvements and maintenance tasks:
- Update README to reflect the move to gitlab.postmarketos.org and add missing cli options: !48.
- Improve UX in case configuration keys go wrong: !45.
- Reduce the size and the performance by using standard library functions when possible: !49.
- Fix multiple compiler warnings: !47.
- Fix a bug of mismatched types with LVGL: !52. The documentation was instead wrong, and that got also detected and reverted instead.
- Enable link-time optimizations by default to reduce the size of the binaries in approximately 15%: !55.
- Disable unused LVGL widgets that are included but not used, reducing a bit the application size: !50.
Thanks Vladimir for the work and Johannes for all the reviews!
mrhlpr
The project to support maintainers on merging and working with gitlab merge requests saw some small improvements:
As a preparation for Alpine migrating to APKv3, support for parsing v3 output was added (!72). Thanks Pablo!
As pmaports took Alpine's approach to have dynamic pipelines, mrhlpr was also added support for them in pmaports (!73). Thanks Clayton!
Documentation on how to use GitLab tokens has been added to the official docs, instead of only mentioning this in the README (!74). Thanks Rob!
Homepage
The homepage's CI now uses Ruff for linting and code format checking of the Python code (!399). We use this for several other postmarketOS repositories already (pmbootstrap, pmaports, …) and are quite happy with it as it keeps our code consistent while being ridiculously fast. Thanks Pablo!
Various smaller improvements to the homepage (!385, !386, !387, !388, !390, !391, !392, !393, !394, !395, !396). Thanks Barnabás, Achill, Rob, Luca, Stefan, Oliver, Pablo, Ranny, Hugo!
Misc
Version 0.2 of Luca's eSIM Manager app (screenshot above) has been released: "We've got significant UI improvements alongside many other additions such as an app icon, providing environment variables for lpac via the command line, error handling, eUICC 'notification' handling, viewing of eUICC chip info and appstream metainfo data!"
A new merge request for postmarketos-initramfs introduces "unit testing for the initramfs, and fix a bug found by said unit testing (see commits for details). It provides a generic way for defining per-package test jobs via included .gitlab-ci.yml files. Allowing for a lot of flexibility, initially used to unit test the initramfs" (!6182). Thanks Casey!
Two valuable improvements were made to swclock-offset to make sure that offset is properly written on shutdown (!6545, !8, !7). Thanks June, Clayton!
mobile-config-firefox has received a patch to make the URL bar wider again with most recent Firefox versions and a patch to remove an obsolete config key (!79, !80). Thanks Peter!
mobile-config-thunderbird has been adjusted to Thunderbird 137 by porting the Esmification patch from mobile-config-firefox (!2, !6413). Thanks Danny, Peter, Dylan!
Multiple improvements have been made to our Matrix and IRC bot jonathan: (!9, !14, !16, !17, !18). Thanks Clayton, Ferass!
Various CI improvements and fixes (!14, !15, !16). Thanks Oliver, Pablo!
The boot-deploy project now has a small
README_HOOKS.md(!77). Thanks Rasmus!
And what's next?
Alpine 3.22 has been released, congratulations to everybody who has worked on it! As usual this means we are finishing up the next postmarketOS release as well. See our timeline for more information. Now is a good time to join the testing team to get notified when the release is ready for testing and to help with ironing out bugs before we ship it.
Casey made a draft MR that reworks pmbootstrap so it does not require sudo anymore. It will take some time until this is finished, but when done her patches will make our distro tooling so much better: "[…] unshare the entire pmbootstrap process, this stops pmb from polluting the global mount namespaces and removes the need to have files owned by root in your pmb workdir." The MR has been opened early so people can already play around with it (!2590).
Rich posted a thread on Mastodon about upcoming musl libc changes regarding collation + i18n support. From the end: "So, the big non-technical part of this project is arriving at some consensus on what the right way to key these lookups is, and on how to make other data: collation tables, numeric/monetary properties, etc., fit into the on-disk mappable file format used. This is where it's going to be great having funded help from a project, @postmarketOS, that intends to actually use the outcome in the immediate future, and helping out on coordination with other distros & stakeholders so that we end up with something that both works and that everyone is happy with."
Help wanted
To owners of the "Bananaphone" Nokia 8110 4G: the somewhat-Phosh-based user interface Bananui that has been specifically built for this phone by Affe is looking for a new maintainer. If you are interested, get in touch in aports#17221.
We are looking into possibly forking and improving Martijn's hwtest program. If you are interested in maintaining it, let us know in #3736. sicelo wrote about it: "It has generally been very useful for testing the N900, e.g. new kernels, or stable release testing."
You can send us topics to include in the next blog post by commenting in #201. This can also be blog posts in our ecosystem related to postmarketOS.
If you appreciate the work we're doing with postmarketOS and want to support us, consider contributing financially via OpenCollective.




