2019-06-23-two-years.md 28.3 KB
Newer Older
Oliver Smith's avatar
Oliver Smith committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
title: "Two years of postmarketOS"
date: 2019-06-23
---

## Our Journey Towards a Sustainable Mobile OS

[#grid side#]
[![](/static/img/2019-06/samsung-lt01wifi-xfce4-thumb.jpg){: class="w300 border"}](/static/img/2019-06/samsung-lt01wifi-xfce4.jpg)

[#grid text#]
Wouldn't it be great if you could take any obsolete smartphone from the past ten years and replace its outdated and insecure software with a maintained, modular free software stack? How about then using it as a Raspberry Pi-like device for your next tinkering project? With some constraints, postmarketOS makes this possible today for [139 booting devices](https://wiki.postmarketos.org/wiki/Devices). Every single package in the whole OS can be updated, with the only exceptions being the vendor's Linux kernel and firmware blobs (if you plan on using them). In a few cases, it is even possible to switch out the discontinued vendor kernel forks with the upstream kernel releases straight from Linus Torvalds.
[#grid end#]

[#grid side#]
[![](/static/img/splash.jpg){: class="w300 border"}](/static/img/splash.jpg)

[#grid text#]
We have made it easy for fellow hackers to [install](https://wiki.postmarketos.org/wiki/Installation_guide) our [Alpine Linux](https://alpinelinux.org)-based distribution on all kinds of mobile devices, to [port new ones](https://wiki.postmarketos.org/wiki/Porting_to_a_new_device), and to change each and every piece of the operating system. Development can be done from any Linux distribution, with no requirements except for installing our lightweight [pmbootstrap](https://gitlab.com/postmarketOS/pmbootstrap/) program. People use it on a daily basis to create amazing contributions.
[#grid end#]

[#grid side#]
[![](/static/img/phonepile.jpg){: class="w300 border"}](/static/img/phonepile.jpg)

[#grid text#]
Yet we are still at the beginning and full of potential to eventually breathe so much new life into these obsolete pocket computers, that they may one day become usable as actual phones again. We are here to stay, and we are celebrating two years of extending, improving and having fun with the platform and community that could potentially end the madness of planned obsolescence in the mobile phone market!
[#grid end#]

## User Interfaces

30
Let's start our summary of what happened since [the last update post](/blog/2019/01/16/600-days-of-postmarketOS/) with UI related news. Alpine developer [@maxice8](http://alpinelinux.gitlab.com/leo) packaged [elogind](https://github.com/elogind/elogind) in our upstream distribution, which means we can finally use a proper display manager. [@PureTryOut](https://gitlab.com/PureTryOut) created a patch [to use lightdm](https://gitlab.com/postmarketOS/pmaports/merge_requests/379) instead of the previous approach of hacking `/etc/inittab` for autologin on TTY1 and kicking off a `/etc/profile.d/` script that does a half-hearted job of setting up the session. Almost all UIs expect such a display manager, therefore we will have less compatibility problems moving forward.
Oliver Smith's avatar
Oliver Smith committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

### Phosh
[#grid side#]
[![](/static/img/2019-06/pinephone-phosh-thumb.jpg){: class="w300 border"}](/static/img/2019-06/pinephone-phosh.jpg)

[#grid text#]
In fact, Purism's [Phosh](https://source.puri.sm/Librem5/phosh) UI (for the upcoming [Librem 5](https://puri.sm/products/librem-5)) did not work without elogind at all. But now that we have it, we can run Phosh on top of postmarketOS in QEMU. [The initial patches for the port were merged](https://gitlab.com/postmarketOS/pmaports/merge_requests/8) at the beginning of this month.

Even though the patches have obviously not seen much testing at this point, [@MartijnBraam](https://gitlab.com/MartijnBraam) has already managed to run it on the [PinePhone](https://www.pine64.org/pinephone/) devkit. The display resolution is clearly off, but touch input was reported to be working.


[#grid bottom#]
[![](/static/img/2019-06/phosh-lockscreen-thumb.jpg)](/static/img/2019-06/phosh-lockscreen.jpg)
[#grid end#]

### Plasma Mobile

[#grid side#]
<video controls width="300" height="533" class="border" autoplay="autoplay" loop>
<source src="/static/video/2019-06/plamo-librem5-pinephone-thumb.webm" />
Videos of Plasma Mobile on the <a href="/static/video/2019-06/librem5-plamo.webm">Librem 5</a> and <a href="/static/video/2019-06/pinephone-plamo.webm">PinePhone</a> devkits
</video>
[#grid text#]
We've gotten [Plasma Mobile](https://plasma-mobile.org) to run on both the Librem 5 ([video](/static/video/2019-06/librem5-plamo.webm)) and PinePhone ([video](/static/video/2019-06/pinephone-plamo.webm)) devkits &mdash; with fully free software GPU drivers! Please note that the ports to these devices are still early days and that the sluggish performance is due to the GPU drivers still being in development.

As usually, [@PureTryOut](https://gitlab.com/PureTryOut) has been keeping the Plasma Mobile stack up-to-date with the latest versions. He also created a [`postmarketos-ui-plasma-mobile-extras`](https://gitlab.com/postmarketOS/pmaports/merge_requests/214) package which effectively allows users to choose whether they want only the base installation, or a fully blown one with extra apps like a PDF reader, calendar and music player.

58
We like to upstream everything that makes sense, so with help from our Alpine friends, [@PureTryOut](https://gitlab.com/PureTryOut) got [all](https://github.com/alpinelinux/aports/pull/7992) [of](https://github.com/alpinelinux/aports/pull/8204) [the](https://github.com/alpinelinux/aports/pull/8328) [KDE Frameworks 5](https://github.com/alpinelinux/aports/pull/8333) and [Plasma](https://github.com/alpinelinux/aports/pull/8860) [desktop](https://github.com/alpinelinux/aports/pull/8891) into Alpine and is maintaining them there from now on. The only packages we plan to keep specifically in postmarketOS are either mobile specific or development versions.
Oliver Smith's avatar
Oliver Smith committed
59 60 61 62 63 64 65 66

[#grid end#]

### Unity 8
[#grid side#]
[![](/static/img/2019-06/pinephone-unity8-thumb.jpg){: class="w300 border"}](/static/img/2019-06/pinephone-unity8.jpg)

[#grid text#]
Oliver Smith's avatar
Oliver Smith committed
67
Speaking of upstreaming, [@z3ntu](https://gitlab.com/z3ntu) contributed quite a few musl-specific patches back to Unity and [UBports](https://ubports.com/). After iterating over the next release, we were able to [drop nine Mir patches](https://gitlab.com/postmarketOS/pmaports/merge_requests/276) in the postmarketOS port! The [initial version](https://gitlab.com/postmarketOS/pmaports/merge_requests/27) of the Unity packaging is only available for x86_64 so far, because of cross compilation issues. That was a few months ago, and today there is [only one package left](https://gitlab.com/postmarketOS/pmaports/merge_requests/227) that can not be cross compiled properly. For testing purposes, he compiled it natively and took a photo of Unity 8 starting up on the aarch64 PinePhone devkit.
Oliver Smith's avatar
Oliver Smith committed
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
[#grid end#]

### Shelli

[#grid side#]
<video controls width="300" height="533" class="border" autoplay="autoplay" loop>
<source src="/static/video/2019-06/nexus5-shelli-thumb.webm"/>
<a href="/static/video/2019-06/nexus5-shelli.webm">Video of shelli's gesture code in action!</a>
</video>
[#grid text#]

Besides giving a [presentation](https://media.ccc.de/v/osmodevcon2019-109-osmocombb-layer1-on-mediatek-status-report) on his current progress of porting the free software baseband firmware osmocom-bb to MediaTek devices, [@unrznbl](https://gitlab.com/unrznbl) got his [Shelli UI](https://gitlab.com/unrznbl/shelli) into postmarketOS. The essential piece is a [Grafitti](https://en.wikipedia.org/wiki/Graffiti_(Palm_OS))-inspired [gesture recognition program](https://gitlab.com/unrznbl/gesture) that he started six years ago: it allows writing single letters at a time by drawing a rough shape of the letter across the whole screen. As you can see in the [video](/static/video/2019-06/nexus5-shelli.webm), the gesture for tab (to use tab completion), is slashing from bottom left to top right, and "Enter" is the reverse gesture.

Now what does this strange input method have to offer in contrary to the usual on-screen-keyboard way of doing things? The radical difference that sets it apart from literally all other mobile UIs today is that it runs entirely on the TTY. Users get a minimalist environment with nothing but tiny and resource-efficient terminal applications. Certainly not for everyone, but there are folks who like to do the same on their PC and there are more use cases that can be explored from here, such as using Shelli as a fallback UI in case the graphical UI does not start up, or extending it with text-to-speech for blind people.
[#grid end#]

[#grid bottom#]
[![](/static/img/2019-06/shelli-gesture-numbers-thumb.jpg)](/static/img/2019-06/shelli-gesture-numbers.png)
[![](/static/img/2019-06/shelli-gesture-letters-thumb.jpg)](/static/img/2019-06/shelli-gesture-letters.png)
[#grid end#]

### CoreApps

[#grid side#]
[![](/static/img/2019-06/coreapps-from-website-thumb.jpg){: class="w300 border"}](/static/img/2019-06/coreapps-from-website.png)

[#grid text#]
[@rahmanshaber](https://gitlab.com/rahmanshaber) and the [CuboCore](https://cubocore.gitlab.io) team are the creators of a relatively young project called [CoreApps](https://wiki.postmarketos.org/wiki/CoreApps). It provides several lightweight and touchscreen-friendly applications with a consistent look that work on low-end systems without hardware acceleration. The latter is a perfect match for postmarketOS, because most devices (especially right after the initial porting phase) do not have hardware-accelerated graphics working.

He created an initial port, and now most applications can be installed on postmarketOS. As of writing, the postmarketOS port is missing proper theming for CoreApps, which is why it looks a bit weird on the images below. For comparison, we have added a reference screenshot of how it should look once proper theming support is added.
[#grid end#]
[#grid bottom#]
[![](/static/img/2019-06/pinephone-corepaint-thumb.jpg)](/static/img/2019-06/pinephone-corepaint.jpg)
[![](/static/img/2019-06/bullhead-corefm-thumb.jpg)](/static/img/2019-06/bullhead-corefm.jpg)

[#grid end#]

### Sway

[Sway](https://swaywm.org), the Wayland drop-in replacement for the i3 window manager, is already packaged in Alpine so it was a rather easy exercise for [@Danct12](https://gitlab.com/Danct12) to [make it available](https://gitlab.com/postmarketOS/pmaports/merge_requests/374) in the postmarketOS UI selection that is provided by pmbootstrap. He reminded us in the merge request that it needs hardware acceleration to work.

## Mainlining

You may have noticed in previous blog posts that [@opendata26](https://gitlab.com/opendata26) has been one of the driving forces in the mainline-related aspects of postmarketOS. Unfortunately he has been seemingly absent from the Internet for the last few months. We certainly miss him not only because of his great contributions, but because it was fun talking to him and he was always incredibly helpful towards anyone. From his username, and the way he answered questions, some newcomers would even be under the impression that they were chatting with an AI. We sincerely hope all is well with him!

Nevertheless, his absence does not mean all mainlining progress work as stopped. There is more motivation than ever in our community to get devices mainlined. So much actually, that we had to create a dedicated [#postmarketOS-mainline](https://wiki.postmarketos.org/wiki/Matrix_and_IRC) channel.

### Google (Samsung) Galaxy Nexus

[#grid side#]
[![](/static/img/2019-06/samsung-maguro-5.1.0-thumb.jpg){: class="w300 border"}](/static/img/2019-06/samsung-maguro-5.1.0.jpg)

[#grid text#]
For instance, there is a thrilling report from [@drebrez](https://gitlab.com/drebrez) about [mainlining the Galaxy Nexus](https://gitlab.com/postmarketOS/pmaports/issues/175). Although the OMAP4460 [SoC](https://en.wikipedia.org/wiki/System_on_a_chip) is supported in mainline Linux, actually booting it on the device made it panic and reboot instantly. By starting with only a stub for the [device tree source](https://en.wikipedia.org/wiki/Device_tree), there was no way to get logs or other useful clues about the crash from the device. No USB, no serial and of course no working display or anything beyond that.

So he applied his best hacking skills and configured the kernel to [wait forever](https://cateee.net/lkddb/web-lkddb/PANIC_TIMEOUT.html) when said panic occurs, and edited the code to do an [emergency_restart()](https://elixir.bootlin.com/linux/v5.0-rc2/ident/emergency_restart) in one particular interesting location. After compiling and booting once more, the device would either hang forever, or reboot at once. That way he knew whether the code where he patched in the restart would get executed or not. A few hours later, he patiently narrowed down the troublemakers (mostly clock setup related).
[#grid end#]

[#grid side#]
<video controls width="300" height="533" class="border" autoplay="autoplay" loop muted>
<source src="/static/video/2019-06/samsung-maguro-5.1.0-earphone.webm"/>
<a href="/static/video/2019-06/samsung-maguro-5.1.0-earphone.webm">Video of music playing from the earphone</a>
</video>
[#grid text#]
When the offending code was commented out, the device would finally boot up to the initramfs (and of course crash there at some point). The above two paragraphs are just a simplified summary of what it took to get that first feeling of success in the mainlining endeavor. It should illustrate how many more mind-boggling problems had to be solved throughout the next months to get the following working:
USB, MMC (internal flash storage), battery reporting and charging, volume and power keys, accelerometer, gyroscope, barometer and finally the display as you can see in the photo.

You are probably wondering what the video next to this paragraph is all about: it shows that even the earphone audio is working! (The video is muted by default, you can enable the audio manually or try this [direct link](/static/video/2019-06/samsung-maguro-5.1.0-earphone.webm)). Also we have another video of the Galaxy Nexus [booting into XFCE4 with the 5.1.0 based kernel](https://www.youtube.com/watch?v=-BTL4pRrBUM). For anyone looking to mainline their own smartphone, reading the original issue is worthwhile: a lot of the steps that were taken are so well documented, that they could practically serve as blueprint for future mainline ports.
[#grid end#]

### Google (LG) Nexus 5

While the mainlining tale just began for the Galaxy Nexus, the Nexus 5 (MSM8974 SoC) is on the other end of the spectrum. Pretty much everything besides audio has been working [one year ago](/blog/2018/06/09/one-year/#nexus-5-floss-modem-stack-with-mainline), with comparatively few small patches on top of the 4.17-rc3 kernel instead of the nearly two million lines of added code in the 3.4-based downstream kernel. But do not underestimate what it takes to resolve the remaining quirks, and to rebase and replace the remaining out-of-tree hacks up to the very last line with beautiful patches that integrate with the rest of the kernel source and are finally worth of getting accepted upstream. [@masneyb](https://gitlab.com/masneyb) is determined to get this task done for the Nexus 5. You can take a look at the [crazy amount of patches](https://masneyb.github.io/nexus-5-upstream/) he has gotten merged in this undertaking, together with a few patches that are still in review.

Thanks to these efforts, we can run postmarketOS on the Nexus 5 with a [5.2-rc3 based kernel](https://gitlab.com/postmarketOS/pmaports/merge_requests/450) (WIP merge request) that has less out-of-tree patches than ever before!

### Ouya

We are publishing this blog post by coincidence one month before the [online services of the Ouya Android gaming console get shut down](https://www.theverge.com/2019/5/22/18635800/razer-ouya-kickstarter-gaming-service-shutting-down-june-25). Once this happens, the once highly anticipated crowdfunding sensation will be as useful as a paper weight with the original software stack. However, it is possible to install postmarketOS on it. Moreover [@ryang2678](https://gitlab.com/ryang2678)'s [patches](https://gitlab.com/postmarketOS/pmaports/merge_requests/269) allow running a slightly patched 5.0 mainline kernel and use the grate free software userspace driver to get accelerated graphics with its Tegra 3 SoC. The latter is not exactly stable so far, and audio support is still missing, but this is a nice foundation for expanding the lifetime of a gaming console that should surely be able to run a bunch of retro emulators for the next ten years.


### More Mainlining
[#grid side#]
[![](/static/img/2019-06/samsung-i927-mate-thumb.jpg){: class="w300 border"}](/static/img/2019-06/samsung-i927-mate.jpg)

[#grid text#]
Rather than take up too much of your time with updates on device mainlining progress, we'll make the updates for the remaining phones a bit shorter. [@cerg2010cerg2010](https://gitlab.com/cerg2010cerg2010) put a kernel close to 5.1.12 mainline on the [Samsung Captivate Glide](https://gitlab.com/postmarketOS/pmaports/merge_requests/195) (Tegra SoC, photo). He reports, that the [Midori browser works very well](/static/img/2019-06/samsung-i927-midori.jpg) with latest grate drivers, even better than stock WebView from Android. Next up is [@zhuowei](https://gitlab.com/zhuowei), who put an incredible amount of work into his [Google Pixel 3 XL](https://gitlab.com/postmarketOS/pmaports/issues/153) (SDM845 SoC), to get from next to nothing all the way to penguins greeting him in the booting process.
[#grid end#]

Finally [@Mis012](https://gitlab.com/Mis012) started [mainlining his sm-a300fu](https://gitlab.com/postmarketOS/postmarketos.org/merge_requests/78#note_179126145) (Samsung Galaxy A3 2015) and teamed up with [@lambdadroid](https://github.com/lambdadroid) who is working on the similar sm-a500fu (both have a MSM8916 SoC).


## Infrastructure

### Sourcehut (sr.ht)

Bad infrastructure news first: we did not manage to move our binary package repository to [sourcehut](https://sourcehut.org/) just yet. [As outlined in the 600 days post](/blog/2019/01/16/600-days-of-postmarketOS/#new-srht-based-binary-repository), building on top of sourcehut will make maintaining the binary repo easier and more transparent. The whole thing will scale better and allow us to move towards a stable postmarketOS version. But we are still working on the postmarketOS specific part that will orchestrate the build jobs. In fact, we have a PHP based version that is about 90% feature complete, but has some hard to resolve bugs and no test cases. Long story short, we made the tough decision of starting over with a Python 3 version and with focus on testing from the beginning. Using the same programming language as pmbootstrap decreases friction for development, for writing tests, and increases the bus factor. If somebody is interested in helping us out, [get in touch](https://gitlab.com/postmarketOS/build.postmarketos.org/issues).

### Crossdirect

In more pleasant announcements, [cross-compiling in pmbootstrap](https://wiki.postmarketos.org/wiki/Build_internals#Cross-compile_types) was completely revamped with [@zhuowei](https://gitlab.com/zhuowei)'s [crossdirect](https://gitlab.com/postmarketOS/pmbootstrap/issues/1731) method. With this change there is no longer a need to run distccd on localhost anymore, which neatly resolves the distccd-behind-sshd performance bottleneck that [had to be introduced earlier](https://gitlab.com/postmarketOS/pmbootstrap/merge_requests/1649) for [security reasons](https://github.com/distcc/distcc/issues/155).


### Continuous Integration

The heart of postmarketOS development are the package build recipes in [pmaports.git](https://gitlab.com/postmarketOS/pmaports/). In order to shorten code reviews, [@ollieparanoid](https://gitlab.com/ollieparanoid) has once again improved the CI scripts. A new check makes sure that we [always increase versions of modified packages](https://gitlab.com/postmarketOS/pmaports/merge_requests/382). Sometimes we don't want to bump the version though, for example when we only enable another architecture. In that case, we can skip the new check with `[ci:skip-vercheck]` in the commit message. Similarly `[ci:skip-build]` allows [skipping the test build](https://gitlab.com/postmarketOS/pmaports/merge_requests/210) (e.g. because we know it won't finish within the one hour timeout), while still running [checksum verification](https://gitlab.com/postmarketOS/pmaports/merge_requests/371) and all other CI tests.

### Pre-built Images / hwtest

[#grid side#]
[![](/static/img/2019-06/hwtest-thumb.jpg){: class="w300 border"}](/static/img/2019-06/hwtest.png)

[#grid text#]
[@MartijnBraam](https://gitlab.com/MartijnBraam) has created [images.postmarketos.org](https://images.postmarketos.org) to host pre-built installations for the PinePhone, and we will probably add more devices in the future. He also wrote the terminal program [hwtest](https://wiki.postmarketos.org/wiki/Checking_hardware_with_hwtest), which tests a whole bunch of mobile hardware related components and reports the status back in an elegant overview. It allows, for example, quickly checking for regressions after a kernel upgrade and, as you have probably guessed, this makes it a perfect candidate for including in automated testing in the future.
[#grid end#]

### GCC-4

One thing we have learned from the long list of ported devices is that some downstream kernels will only compile with certain GCC versions. Or, even worse, they may compile with a newer GCC but then they won't boot. The latter is of course a nightmare to resolve. [@mberndt](https://gitlab.com/mberndt) [did it anyway](https://gitlab.com/postmarketOS/pmaports/merge_requests/132#note_139339268) and allowed his HTC Desire Z to be built with GCC-6 instead of GCC-4! To spare other porters from this pain, [@drebrez](https://gitlab.com/drebrez) [added GCC-4](https://gitlab.com/postmarketOS/pmbootstrap/merge_requests/1754) shortly afterwards. So now we have [GCC-8 (in Alpine), GCC-6 and GCC-4](https://wiki.postmarketos.org/wiki/Vendor_kernel_specific_package#GCC_version).

### Hybris
[#grid side#]
[![](/static/img/2019-06/xiaomi-santoni-hybris-thumb.jpg){: class="w300 border"}](/static/img/2019-06/xiaomi-santoni-hybris.jpg)

[![](/static/img/2019-06/samsung-klte-hybris-thumb.jpg){: class="w300 border"}](/static/img/2019-06/samsung-klte-hybris.jpg)

[#grid text#]

While on the subject of workarounds for vendor kernels, [@asriel-danctnix](https://gitlab.com/asriel-danctnix), [@Danct12](https://gitlab.com/Danct12) and [@minlexx](https://gitlab.com/minlexx) are trying to get optional Android driver support for their phones integrated into postmarketOS. They are targeting their [Xiaomi Redmi 4X](https://gitlab.com/postmarketOS/pmaports/merge_requests/420) (first photo) and [Samsung Galaxy S5](https://gitlab.com/postmarketOS/pmaports/merge_requests/332) (second photo), and are of course streamlining the necessary [libhybris](https://wiki.postmarketos.org/wiki/Hybris) packaging for all devices in the process, for example with the new [hybris-base](https://gitlab.com/postmarketOS/pmaports/merge_requests/351) meta package. The photos show the libhybris test for GPU functionallity running successfully. Support for audio is being worked on by packaging [pulseaudio-modules-droid](https://gitlab.com/postmarketOS/pmaports/merge_requests/448) from SailfishOS.

[#grid end#]

## 26 new booting devices (139 total)

<!-- Generated with: 'pmos-stats new-devices --md 7f1c8ba865015e61ce9d571ffc5424f1b524e95f'
     Start subject: kde/applications*: update to 18.12.0 [skip ci] (!135)
     Current master (for next time): 95592e8fb9b183e80495e1a6ef5ff32021b95015
     Current subject: main/postmarketos-ui-plasma-mobile: fix dependency name (!451)
     Total device count from pmbootstrap. -->

[#grid side#]
[![](/static/img/2019-06/samsung-gts210velte-thumb.png){: class="w300"}](/static/img/2019-06/samsung-gts210velte.jpg)
[![](/static/img/2019-06/oppo-find-7a-thumb.png){: class="w300"}](/static/img/2019-06/oppo-find-7a.jpg)
[#grid text#]

* [CHUWI Hi10 Plus `chuwi-hi10plus`](https://wiki.postmarketos.org/wiki/CHUWI_Hi10_Plus_(chuwi-hi10plus))
* [HTC One XL `htc-evita`](https://wiki.postmarketos.org/wiki/HTC_One_XL)
* [HTC One SV `htc-k2ul`](https://wiki.postmarketos.org/wiki/HTC_One_SV_(htc-c520e))
* [HTC One M7 `htc-m7`](https://wiki.postmarketos.org/wiki/HTC_One_M7_(htc-m7))
* [HTC One S `htc-ville`](https://wiki.postmarketos.org/wiki/HTC_One_S_(htc-ville))
* [HTC Desire Z (vision) `htc-vision`](https://wiki.postmarketos.org/wiki/HTC_Desire_Z_(htc-vision))
* [LG G3 Beat `lg-d722`](https://wiki.postmarketos.org/wiki/LG_G3_Beat_(lg-d722))
* [LG Optimus L5 `lg-e610`](https://wiki.postmarketos.org/wiki/LG_Optimus_L5)
* [LG Optimus L7 II `lg-vee7e`](https://wiki.postmarketos.org/wiki/LG_Optimus_L7_II)
* [Meizu Pro 5 `meizu-turbo`](https://wiki.postmarketos.org/wiki/Meizu_Pro_5_(meizu-turbo))
* [Motorola Moto G5 `motorola-cedric`](https://wiki.postmarketos.org/wiki/Motorola_Moto_G5(motorola-cedric))
* [Motorola Moto G5s `motorola-montana`](https://wiki.postmarketos.org/wiki/Motorola_Moto_G5s(motorola-montana))
* [Nokia 1 `nokia-frt`](https://wiki.postmarketos.org/wiki/Nokia_1_(nokia-frt))
* [OPPO Find 7a `oppo-find-7a`](https://wiki.postmarketos.org/wiki/OPPO_FIND_7a_(oppo-find-7a)) *(2nd photo)*
* [PINE64 PinePhone devkit `pine-dontbeevil`](https://wiki.postmarketos.org/wiki/Pine_Don't_be_evil_devkit)
* [Planet Gemini PDA `planet-geminipda`](https://wiki.postmarketos.org/wiki/Planet_Computers_Gemini_PDA_(planet-geminipda))
* [Purism Librem 5 Devkit `purism-librem5dev`](https://wiki.postmarketos.org/wiki/Purism_Librem5_Devkit)
* [Samsung Galaxy S Relay 4G `samsung-apexq`](https://wiki.postmarketos.org/wiki/Samsung_Galaxy_S_Relay_4G_(samsung-apexq))
* [Samsung Galaxy Tab S2 9.7 LTE (SM-T819) `samsung-gts210velte`](https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Tab_S2_9.7_LTE_(samsung-gts210velte)) *(1st photo)*
* [Samsung Galaxy S7 edge `samsung-hero2lte`](https://wiki.postmarketos.org/wiki/Samsung_Galaxy_S7_Edge_(samsung-hero2lte))
* [Samsung Galaxy S7 `samsung-herolte`](https://wiki.postmarketos.org/wiki/Samsung_Galaxy_S7_(samsung-herolte))
* [Samsung Captivate Glide `samsung-i927`](https://wiki.postmarketos.org/wiki/Samsung_Captivate_Glide_(samsung-i927))
* [Samsung Galaxy Tab 3 8.0 `samsung-lt01wifi`](https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Tab_3_8.0)
* [TrekStor SurfTab wintron 7.0 `surftab-wintron7.0`](https://wiki.postmarketos.org/wiki/Trekstor_Surftab_Wintron_7.0_(surftab-wintron7.0))
* [Xiaomi Mi 2 `xiaomi-aries`](https://wiki.postmarketos.org/wiki/Xiaomi_Mi_2)
* [Xiaomi A1 `xiaomi-tissot`](https://wiki.postmarketos.org/wiki/Xiaomi_Mi_A1_(xiaomi-tissot))
* [ZTE Blade AF3 `zte-p731a20`](https://wiki.postmarketos.org/wiki/ZTE_Blade_AF3)
[#grid end#]

*Thanks to: everyone who ported these devices, see the contributors section in each device's wiki page.*


## Raw Numbers

- 243 people in the [main channel](https://wiki.postmarketos.org/wiki/Matrix_and_IRC) *(-172)*
- 3066 [/r/postmarketOS](https://www.reddit.com/r/postmarketOS/) readers *(+974)*
- 1474 [merged MRs](https://gitlab.com/groups/postmarketOS/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged) *(+329)*
- 987 [closed issues](https://gitlab.com/groups/postmarketOS/-/issues?scope=all&utf8=%E2%9C%93&state=closed) *(+142)*
- 359 [open issues](https://gitlab.com/groups/postmarketOS/-/issues?scope=all&utf8=%E2%9C%93&state=opened) *(+108)*
- 173 contributors in [pmaports.git](https://gitlab.com/postmarketOS/pmaports) (`git shortlog --summary --numbered | wc -l`) *(+40)*

## Outro

[#grid side#]
[![](/static/img/2019-06/hammerhead-convergence-thumb.jpg){: class="w300 border"}](/static/img/2019-06/hammerhead-convergence.jpg)

[#grid text#]
Now that you're here, let's just assume that you have read this entire post and so we will reward you with an easter egg. [@MartijnBraam](https://gitlab.com/MartijnBraam) created a dark mode for this very website, so if you configure your browser appropriately and open this page again, it will look entirely differently. Mind blown, right?

Another thing we did not want to miss out on is of course convergence. That is a fancy word people use to describe a consistent interface for both your desktop and your phone. Next to this paragraph is a prime example of how convergence should be done with postmarketOS.
[#grid end#]

With that critical piece of information out there, and with grateful thoughts towards everybody who contributed: let's get right into the next year of exciting postmarketOS development! \o/

## Comments

Oliver Smith's avatar
Oliver Smith committed
269 270
* [Reddit](https://old.reddit.com/r/postmarketOS/duplicates/c44si9/postmarketos_two_years_of_sustainable_phone_os/)
* [HN](https://news.ycombinator.com/item?id=20255299)