The calendar has turned another page, and it's finally time for our eagerly awaited monthly update! We're thrilled to share what our community has been building and improving since last month. Before we get to that, let's talk about the most recent Linux After Dark episode: It seems when the four hosts do a distro challenge, they do it properly. They didn't just try postmarketOS on one or two devices, but on all of these: ASUS Transformer Pad 3G, Linx 7 tablet (Generic X86_64), Motorola Moto G 2015, PinePhone Pro, PinePhone, Pinebook Pro and Acer R11/ASUS C200/Lenovo Duet 3 (Chromebooks). The resulting episode is not only very entertaining, but also gives many insights into first use experiences!
Organizational
We have applied for an NGI0 grant for Collation + i18n support in musl libc and it has been accepted! Collation allows set ordering based on locales, and follows a certain set of established rules and standards. Internationalization provides basic functionality in the language of choice for the user like dates, times, numbers, and monetary symbols. The implementation will be done by main author and maintainer of musl libc Rich and will benefit postmarketOS, Alpine Linux and all other users of musl libc. Thanks Rich, Pablo and NLNet!
knuxify is our newest Trusted Contributor! They work a lot on the postmarketOS wiki, are mainlining the Broadcom Kona series chipsets, co-maintaining the Exynos 4 close to mainline kernel fork and more. Read their TC page for more information. Thanks knuxify!
We wrote detailed blog posts on finances and priorities for 2025. Thanks Pablo and Oliver!
Our Matrix/IRC bridge is now self-hosted. Thanks Luca, Ferass, Oliver!
GitLab CI with our custom runner now works reliably (#101). Thanks Oliver!
GNOME 48
GNOME 48 is now in Alpine edge and it brings massive performance improvements with dynamic triple buffering and more, new fonts, notification stacking and many other great changes! Shortly afterwards, GNOME Shell on Mobile has been rebased as 48.mobile.0 (skipping 47 with a jump from 46-mobile.1, !6361, !6369). Compared to the last release, it brings window placement and input improvements. The seek buttons were removed, if you want to get involved to bring them back see #4900. Since the rebase the accent colors are now working (!6372, as it can be seen in the title image of this blog post). Thanks Jonas, Achill and all GNOME contributors!
Other GNOME related changes
- GNOME-based UIs now have ffmpegthumbnailer in new installations, "so that the file managers and choosers - Nautilus by default - show thumbnails not only for images but also videos. Apart from being a nice-to-have, it can help prevent privacy issues like uploading/sending wrong videos - an increasingly realistic scenario as camera recording becomes more usable." (!6300). Thanks Robert M.!
 
Epiphany's user agent was updated. "Our epiphany got blocked by https://gitlab.gnome.org/ due to their new AI scraping protection. […] Nowadays Epiphany uses a dynamic user agent by default depending on the chassis reported by systemd-hostnamed (e.g. mobile or desktop)" (!6293, v24.12: !6316). Thanks Achill!
File manager Nautilus can now show network shares as various gvfs packages are now getting installed (!6314). Thanks Stephanie!
COSMIC
The COSMIC desktop environment is now available in Alpine and postmarketOS (!6274). Clayton wrote a nice blog post about his journey from "nearly 15 years of using lightweight tiling window managers (i3wm, then Sway)" to packaging COSMIC and using it as daily driver: When Tiles Align: A stubborn Sway user tries COSMIC
If you want to try it out too, we now have pre-built postmarketOS edge images with COSMIC for generic-x86_64 and the Thinkpad X13s (!124). And of course you can build your own COSMIC image with pmbootstrap for any device. Thanks Clayton!
mobile-config-firefox
The 4.5.0 and 4.6.0 releases have been tagged with the following changes:
Per-site user-agent spoofing (makes e.g. YouTube use its proper mobile site, !77). Thanks Danny and people working on furios-firefox-tweaks!
Using defaultPref() instead of pref() where possible, allowing users to override almost all preferences set by mobile-config-firefox via
about:config(!69). Thanks Danny!Adjustments for latest Firefox versions (!73, !74, !75, !78). Thanks Peter, Danny!
The 4.6.0 version made it into postmarketOS edge and v24.12 (!6377, !6382). For more background information on how these changes are developed, check out Peter's MFC17 and MFC18 posts.
pmbootstrap
The FDE passphrase can now be set from an environment variable (!2538). This will be used by the upcoming os-installer packaging (!6320), "which is a nice little OS installer thing that we can use to install pmOS on laptops/tablets and stuff like that. […] Currently it only offers GNOME, KDE, and XFCE desktop environments, but it's pretty easy to add more later." Thanks Clayton!
When running
pmbootstrap ci, it is now possible to select multiple scripts in the interactive prompt, with a comma separated list (and working tab-completion) (!2574). Thanks Anri!Locale configuration is now written to
/etc/locale.confinstead of just writing it into an/etc/profile.d/script. This is wheresystemd-localedexpects it, and allows other programs through its APIs to change the value (!2547). Thanks Achill!Various fixes and improvements for the recently introduced cross-native2 cross compilation method (!2563, !2564, !2565, !2566, !2568, !2577, !2571, !2581). Thanks Clayton, Stefan, Oliver, Casey!
Various other fixes and improvements (!2578, !2540, !2569, !2553, !2575, !2572, !2579). Thanks Theresa, Frieder, Stefan, Oliver, Anri, Casey!
pmaports
New device ports
This time we have 4 new device ports:
- Amlogic P241 reference board (!6099). Thanks Ferass!
 - Microsoft Lumia 640 (!6294). Thanks Ermine!
 - Samsung Galaxy S10+ (!6161). Thanks rodent!
 - Ugoos AM3 (!6276). Thanks J.!
 
Kernel packaging
Initial camera 📷 support has been merged for the OnePlus 6 in !6291 and several MSM89x7 devices (Motorola Moto E5 Plus, Motorola Moto G5s, Xiaomi Redmi 3S, Xiaomi Redmi 4 Standard, Xiaomi Redmi 4A) in !6327, !6368. Thanks to Barnabás, Casey, DrGit, Joel, KiciukVasiliy, Robert M., vldly, and everybody else who has helped with developing and testing, this is absolutely amazing!
Below we have many more great changes, find details by clicking the MRs:
- Update Google Veyron devices to Linux 6.6.y (!6201). Thanks Daniel F.!
 - linux-next: add BINFMT_MISC (!6275). Thanks Casey!
 - linux-xiaomi-ido: upgrade kernel to 3.10.108 (!6256). Thanks Kidd!
 - linux-postmarketos-qcom-sm8150: update to v6.13-sm8150 and takeover mantainership (!6224). Thanks Pan!
 - linux-postmarketos-qcom-sm6350: upgrade to 6.13.4 (!6261). Thanks Luca!
 - linux-postmarketos-qcom-sdm845: update to 6.14-rc5 and add cameras for op6 (!6291). Thanks Joel!
 - linux-postmarketos-qcom-sdm670: backport the qcom-spmi-adc-tm5 scaling fix (!6298). Thanks Richard A.!
 - generic-x86_64 | google-x64cros: Add 'psi=1' to kernel_cmdline (!6303). Thanks Aster!
 - linux-postmarketos-qcom-sm7150: Upgrade to 6.13.7 (!6318). Thanks Jens!
 - linux-postmarketos-amlogic: fix wifi on Ugoos AM3 (!6319). Thanks J.!
 - linux-next: enable qcom CPUCP mbox (!5814). Thanks Casey!
 - device-lg-judy{ln,p},linux-postmarketos-qcom-sdm845: backport judy uart devicetree entry to fix getty (!6324). Thanks Paul!
 - linux-postmarketos-qcom-sdm660: upgrade to 6.13.7 (!6321). Thanks Alexey M.!
 - linux-postmarketos-msm89x7: Upgrade to v6.13.6-r0 📷 (!6327). Thanks Barnabás!
 - linux-next: enable USB_SND_CARD (!6343). Thanks Casey!
 - linux-postmarketos-allwinner: upgrade to 6.13.8_git20250323 (!6345). Thanks Arnav!
 - linux-postmarketos-mediatek-mt8173: upgrade to 6.14 (!6355). Thanks Adam!
 - samsung-j1mini3g: Fix kernel build, switch to Samsung's sparse image format (!6349). Thanks r10nw7fd3!
 - samsung-coreprimevelte: kernel changes (!6362). Thanks Duje!
 - linux-postmarketos-qcom-sm8150: Upgrade to v6.14.0 (!6367). Thanks Pan!
 - linux-postmarketos-mediatek-mt8183: upgrade to 6.12.21 (!6358). Thanks Brady!
 - linux-postmarketos-qcom-msm89x7: Upgrade to v6.14-r0 📳 📷 (!6368). Thanks Barnabás!
 
Other device specific changes
OnePlus 6: libcamera tuning files were added for IMX371 and IMX376. "Only containing black levels for now. This should only slightly increase image quality, but apparently also works around a bug in libcamera making the output all black, with occasional purple or red flashes". A bit later a workaround was added for other devices that don't have tuning files (!6299, !6328). Thanks Robert M.!
Generic SM7150: Device-specific packages (xiaomi-davinci and xiaomi-surya) have been removed in favor of a new generic qcom-sm7150 package! This is now possible by booting through sm7150-mainline/u-boot as second stage bootloader and systemd-boot (edge post, !6286, !377, !373, !123). Thanks Jens!
Generic SM7150: Feedbackd udev rules were added for drv260x haptics in preparation for adding the Xiaomi Mi Note 10 / Mi CC9 Pro and Xiaomi Mi Note 10 Lite (!6364). Thanks Alexander!
Samsung Galaxy Tab 3 7.0: Audio and zram were fixed, and the port now uses pipewire (!6260). Thanks Yahia!
Samsung Galaxy Note9: a workaround was added to fix that the touchscreen was not working when booted with a plugged in charger (!6219). Thanks Thorben!
Google Pixel 3a XL: the
unl0kr-fbforcerefreshquirk has been added to fix that unl0kr did not show up (!6281). Thanks Richard A.!LG G7 ThinQ, LG V35 ThinQ: getty on ttyMSM0 has been enabled: "USB Cereal works out-of-the-box on judyln (probably judypn too) with this change" (!6302, !118). Thanks Paul!
Samsung Galaxy S9: Audio is now working! Also initfs modules have been added, which provide "touchscreen and haptics support when in initramfs. This allows to use onscreen keyboard in initramfs debug mode" (!6322, !6310). Thanks Dzmitry!
SDM660: Battery modules for some SDM660 devices are added to the initfs. "Having battery charger and fuelgauge modules in initfs will allow device battery to be charged e.g. in debug-shell mode, instead of slowly discharging and dying. This also fixes asus-x00td; it already had some battery modules init modules-initfs, but rradc was forgotten, and it is a required dependency for charger" (!6336). Thanks Alexey M.!
ODROID HC2: MBR partition type is used again (GPT interferes with the firmware) and the big.LITTLE switcher is now disabled by default: "With it enabled, only 4 cores are enabled at a time, and the kernel switches between the big and little cores. However, in a server workload, it's more likely that a user wants all 8 cores to work simultaneously. Disable the switcher by default by providing the no_bL_switcher cmdline option. It can still be re-enabled by writing 1 to /sys/kernel/bL_switcher/active." (!6342, !6350). Thanks knuxify!
Lenovo ThinkPad X13s: rootfs now always gets resized to the full partition size (!6340). Thanks Clayton!
Google Pixel C: the depthcharge is now compressed with lzma, fixing the build (!6353). Thanks Denys!
Apple Macbook Air M1: GPU was fixed by adding proper mesa and gallium packages (mesa-asahi) (!6360). Thanks EDK!
Amazon Echo Dot 2nd gen: Audio has been enabled with a basic pulseaudio setup "for both speaker and headphone jack. It only gets acceptable results with 48kHz audio right now using paplay, resampled audio seems to produce a lot of crackle and popping from the audio buffer underflowing, although some tweaks could still be done to improve playback performance" (!6304). Thanks Connor!
Xiaomi Mi Note 10 / Mi CC9 Pro: socinfo has been added to hexagonfs-firmware-loader (!1). Thanks Alexander!
systemd
Asteroid and Kodi packaging were adjusted to work with systemd (!6160, !6363). Thanks Bart, Achill!
The out-of-memory killer systemd-oomd has been enabled (!6246). Thanks Clayton!
The bug that new systemd presets don't get applied on upgrade has been fixed (!6120). Thanks Jane!
Macros used for generating systemd subpackages have been refactored and a trigger script for reloading/restarting services when related packages get upgraded has been added (!6334, !6346). Thanks Casey, Clayton, Oliver!
The tailscale system service now uses the nftables backend (!6344). Thanks Casey!
Various upgrades of systemd-enabled packages (!6137, !6240, !6266, !6283, !6289, !6290, !6337, !6339, !6347, !6351, !6352, !6371). Thanks Achill, Bart, Jane, Clayton, Achill, Oliver!
Various fixes and improvements (!6254, !6265, !6194, !6288, !6313, !6287, !6348). Thanks Oliver, Clayton, Devin, Casey!
initramfs
Kernel command-line handling was significantly improved and related tech debt has been resolved. A new info log level can now be enabled via dracut-compatible
rd.infoflag, and postmarketOS arguments are now standardized underpmos.xyz(!6172). Thanks Casey!postmarketOS can now boot from a multi-device btrfs volume (!5508/imported). Thanks Fell!
Through a new
deviceinfo_usb_network_host_addrsetting, a deterministic USB network host address can now be configured. "The USB network host address is used by some hosts (e.g. Ubuntu) to define the interface name. Making the host address deterministic can simplify host network configuration" (!6232). Thanks David F.!
Other pmaports changes
Plasma Mobile: Dolphin gets installed instead of Index as file manager for new installations (!6255). Thanks Devin!
The
deviceinfo_disable_dhcpdis now honoured in NetworkManager scripts too, not only during init (!6230). Thanks David F.!apk-tools v3 is now configured to use
cache-predownload. "This allows safer installation of packages, since the upgrade doesn't fail with a half-installed system if the download fails while installing. Note that this will only take effect when Alpine upgrades to apk-tools 3." (!5921). Thanks Achill!udev-based firmware loading has been removed: "udev no longer supports using userspace to service kernel requests for firmware. While the kernel can be configured to send such requests to userspace, udev will not do anything about them" (!6332). Thanks sicelo!
Various smaller fixes and improvements (!6258, !6126, !6284, !6244, !6301, !6308, !6297, !6248, !6315, !6305, !6323, !6325, !6330, !6333, !6317, !6370, !6373, !6376, !6377). Thanks sicelo, David H., Pablo, Clayton, Stefan, Oliver, Luca, Dzmitry, Gianluca, Samuel, Pan, Barnabás!
unl0kr
With a new CLI option, a custom message can now be shown above the enter password prompt (as in the screenshot) (!39). Thanks Vladimir!
Appending
\nat the end of passwords is now optional: It "is the right thing to do when you print a password to a tty or a text file. But different tools process it differently. For example, cryptsetup strips the newline character, but systemd-cryptsetup with a password agent does not." (!40). Thanks Vladimir!
Performance of the main loop has been optimized (!38). Thanks Vladimir!
Various smaller improvements and fixes (!41, !42, !44, !43). Thanks Johannes, Vladimir, Colin!
msm-firmware-loader
- Support for modern QCOM devices (SM7150 and newer) has been added (!16). Thanks Jens!
 - msm-firmware-loader.sh can now load sns.reg from the persist partition (!17). Thanks Barnabás!
 - A/B detection has been fixed with qbootctl on non-AB device (!18). Thanks Jens!
 
Artwork and homepage
Handdrawn illustrations have been added to the artwork repository, the community driven tree illustation in this section is one of them (#19). These look amazing, we will be able to use them in presentations etc. in the future! Thanks vstovis!
Logo variations in transgender pride colors have been added to the artwork repository, in celebration of the International Transgender Day of Visibility (!63, Mastodon). Thanks Aster!
New mirrors have been added: ftp.halifax.rwth-aachen.de and mirror-sg.mainlining.org (!368). Thanks Jens!
Misc
- mrhlpr now uses Part-of trailer instead of adding MR ID to subject (!70). Thanks Casey!
 swclock-offsetnow supports the busyboxdatecommand (!6, !6295). Thanks Clayton, Jakko!- msms-cros-efs-loader now has a systemd drop-in config for rmtfs (!4). Thanks Brady!
 - Various fixes and improvements (!3, !5, !11, !72, !122, !125, !126). Thanks Pablo, Sertonix, Stefan, Pan, rodriguezst!
 
And what's next?
Events are coming up:
- Linux App Summit 2025 (#3, April 25th to 26th in Tirana, Albania and online)
 - FLISoL Bogotá "025 (#4, April 26th in Bogotá D.C Colombia and online)
 - FOSSY 2025 (#1, July 31st - Aug 3rd in Portland, OR USA)
 - FrOSCon 20 (#5, August 16th - 17th in Sankt Augustin, Germany)
 - Linux Day 2025 (#2, October 25th in Palermo, Italy)
 
Related links point to a new events repository for better organizing (!1, !2, !4, !380). Thanks Pablo, Clayton, Federico, Ranny, Achill for setting this up!
Help wanted
- We are looking for people who would like to support us with organizing events, see #103.
 - You can send us topics to include in the next blog post by commenting in: #198
 - If you appreciate the work we're doing with postmarketOS and want to support us, consider contributing financially via OpenCollective.
 



