I’ve been using a PinePhone as my primary smartphone for the past two years, and I’d like to share my experience with it. For those unfamiliar, the PinePhone is an experimental smartphone that runs mainline Linux, rather than Android. It is developed by Hong Kong-based company called PINE64.
First of all, I would like to explain why I chose to transition to a pure Linux operating system instead of opting for a libre Android fork like LineageOS, GrapheneOS, Replicant or similar.
While it’s true that Android has an open-source core (AOSP) and these projects are doing a great work replacing Google services with alternatives that respect user freedom and privacy, we must recognize that they still rely on Google’s investment in AOSP development. Furthermore, Google is increasingly replacing many open-source AOSP components with proprietary versions, which means that maintaining a libre Android fork will require more effort over time.
Given these concerns, I felt it was essential to seek a true alternative. A viable solution is to embrace Linux-based smartphones, which is why I decided to purchase a PinePhone.
The PinePhone is often purchased by people that are looking for a secure phone, probably attracted by the privacy switches: hardware buttons that allow you to physically disconnect the camera, Wi-Fi, microphone, and more. However, I want to emphasize that, while these switches are really cool, a Linux-based smartphone is not inherently more secure than an Android smartphone; in fact, it may be less secure in some respects (excluding the backdoors, of course).
In Android, each application is highly isolated from the others, because it runs inside a sandbox created using kernel features, then additionally confined using SELinux. In contrast, on a Linux smartphone, you are running standard Linux applications with default privileges, which often lack the same level of isolation. This difference becomes evident when you run the ps
command in a standard Android terminal emulator compared to a Linux phone terminal emulator; you’ll notice significantly more processes in the latter case:
I am interested in implementing some hardening measures on my PinePhone, but that will be (hopefully) covered in another blog post. You also have to consider that applications installed with flatpak or similar systems runs with a greater isolation, so it depends on how you installed the package.
There are several models of the PinePhone, and it can be challenging to understand the differences between them. When I purchased mine, the store offered two options: the PinePhone Beta and the PinePhone Pro. The Pro model featured superior hardware and came at a higher price point. Unsure of what to expect, I opted for the PinePhone Beta primarily to save some money. In hindsight, I’m very pleased with that decision, as I later discovered that the two models are very different. Contrary to what one might assume based on the name, installing a Linux distribution on the PinePhone Beta is significantly easier than on the PinePhone Pro.
I realized this a few months ago when a friend asked me to help her installing a different Linux distribution on her PinePhone Pro. I was very surprised to find out that the installation procedure was entirely different from what I had experienced with my PinePhone Beta.
First of all, let me explain how simple installing a distro on the PinePhone Beta is.
The PinePhone has an internal storage known as eMMC, as well as an SD card slot. You can easily flash a Linux distribution directly onto the SD card, and by default, the PinePhone Beta will attempt to boot the operating system from the SD card. While it is also possible to install the OS on the eMMC, this process is more complex. The phone comes with a preinstalled operating system on the eMMC, but then you can easily experiment flashing various distros on the SD card.
In contrast, the PinePhone Pro always prioritizes booting from the eMMC, even if a distribution is available on the SD card. To change this behavior, you need to replace the bootloader from U-Boot to Tow-Boot, which is not a straightforward process. In the end, my friend and I opted to install the OS on the eMMC, which was somewhat frustrating. This issue has drawn significant criticism, including from a PostmarketOS developer who decided to leave the PINE64 community and wrote a blog post explaining his decision. The company replied to his post as well. Ultimately, it appears that the PinePhone Pro should still be regarded as a development platform, while the PinePhone Beta is somewhat more mature.
My PinePhone Beta came with Manjaro preinstalled, featuring Plasma Mobile (KDE). While the hardware of the PinePhone is not particularly powerful and so it is visibly slow, regardless of the desktop environment, I was concerned that Plasma Mobile might be too heavy and exacerbate the issue. I could try Manjaro with Phosh (a Gnome-based mobile desktop environment), but I decided to also explore a different distribution and I came across PostmarketOS, which is based on Alpine. I really liked the idea of using an Alpine-based system because it is one of the most lightweight distributions available, making it an ideal choice for a device with limited performance like this phone.
So my journey into PostmarketOS began, and I’m still very happy with it. I tried to play a bit with Manjaro as well but after an update I completely broke it without understanding why:
Something this severe never happened to me with PostmarketOS and the regression bugs that emerged sometimes were always manageable.
Nevertheless, it must be said that owning a PinePhone is not for everyone. You really need to be ideologically committed to use it as your primary device.
Aside from its slowness and poor battery life (I’ve gotten used to carrying a power bank), the main issues are the occasional crashes that make it unstable. Sometimes the mobile network disconnects for no apparent reason, and it’s possible to miss a call. Fortunately, I’ve never been one of those people that can’t live without their phone, and my friends and family know not to worry if I’m unreachable for a few hours. However, it’s clear that in today’s hyper-connected society, accepting this is a radical choice.
In the past, it also happened that the alarm didn’t work, but thankfully that hasn’t happened in a while. In any case I don’t rely on it if I need to wake up early in order to catch a train or a plane.
If I travel alone outside Italy I tend to bring a backup phone with me. This turned out to be a very wise choice. In fact, two years ago in the Netherlands, I encountered a serious issue with roaming. For some reason (perhaps due to a signal anomaly from the phone), my SIM card appeared to be blacklisted by the Dutch telecom provider, to the point where it didn’t work even when inserted into my old backup Android phone. I assume it was blacklisted because it started functioning again as soon as I returned to Italy. I had to purchase a new SIM card, and for safety, I only used it with the backup phone. The SIM stopped working while I was at Defqon.1 music festival, which resulted in my inability to call the girls with whom I was supposed to share a taxi. As a consequence, I had to pay for the entire trip on my own. I don’t know if someone saw me trying to debug mobile network issues in the middle of all that chaos, but I bet it looked pretty funny. Fortunately, this issue did not recur during my subsequent two trips back to the Netherlands.
Another crazy bug that persisted for a while caused the photos to appear green:
I thought that something was broken on the sensor, but after a software update I was able to take normal picture again.
This is a recent photo:
When it comes to the apps I use, I tend to keep a minimal set. Besides the default apps like phone, contacts, SMS, camera, and browser, I’ve installed Geary for email, Gnome Authenticator for two-factor codes, and Telegram Desktop, which has a flexible enough UI to be displayed decently on the PinePhone. It’s worth noting that Telegram Desktop unfortunately does not support end-to-end encryption. The only thing that I really miss is a good navigator app. There are some but I had installation issues and they didn’t work very well. I think it might also depends on the PinePhone GPS sensor having a really bad precision, so I don’t want to blame the software for everything.
WhatsApp cannot be installed, but for me, that’s a feature! I know, that is another radical choice. In general, it’s not possible to install any Android APK packages. In theory, it might be possible using Waydroid, but from some tests I’ve done, the apps were unusable. In any case, I believe that installing Android apps on PostmarketOS goes against the core philosophy of those who want to use a Linux-based smartphone. If you really need to run WhatsApp I suggest you to install Waydroid on your computer or use other approaches like a matrix bridge.
Speaking of nerdier things, the coolest feature of PostmarketOS is pmbootstrap, a command-line tool designed to help users build and install their customized versions of PostmarketOS. It is based on chroot and can be used to setup the full disk encryption, select the preferred kernel version and add custom packages. It also provides the possibility to select a “qemu installation”, which allow to start the system in a virtual machine.
I experimented a lot with it and I also tried to hack a bit my installation adding a binary clock to the lock screen.
I cloned phosh in my ~/code/phosh
folder, I replaced the standard clock with a binary clock and then I run the following pmbootstrap commands to generate my customized version of phosh:
pmbootstrap aportgen --fork-alpine phosh
pmbootstrap build phosh --arch=aarch64 --src=~/code/phosh
The result was the following:
My customization was then wiped by an upgrade but it was a good experiment to understand how things work.
I hope my PinePhone will last for a long time (it has been out of stock in the European market for quite a while), and I hope that PINE64 will produce new models in the future. I’ve enjoyed following the developments of PostmarketOS and how it improved over time. Battery life has notably enhanced, indicating that they have optimized various aspects, and the latest version is certainly much more stable and usable than the earlier ones.