Let's start off with mentioning that both these new phones are great steps forward for Linux. While they will probably not beat Android and iOS in popularity, they will at least give Linux power users a device that can be called a Linux phone instead of the usual "technically it's running Linux because that's only a kernel". These phones not only run the latest, mainline Linux kernel, they also have the desktop stacks people are already familiar with.

A development version of Ubuntu Touch running on the PinePhone Don't be evil devkit

Instead of focusing on software, I'll be comparing the hardware, as the former is something that should be universal, which means that anything that's written for one Linux phone should be able to run on the others.

Comparing the hardware is way more interesting. While a lot of articles just seem to copy the released spec sheet for the devices I'll be comparing the specs as checked by the schematics. The nice thing is that both phones have their schematics downloadable online so things can be fact-checked.

The SoC

Both the phones run on a 64-bit ARMv8 SoC, both contain four Cortex-A53 cores, the major difference is that the i.MX8 SoC in the Librem 5 is newer, It's a 2017 SoC and has some nice newer features like USB 3.0. The NXP SoCs seem generally well supported by mainline Linux so it seems to be an obvious choice for an open phone.

The PinePhone has an Allwinner A64 SoC from 2015. While it's generally known that Allwinner violates the GPL, they do have a great reverse-engineering effort run by the linux-sunxi community. Since this SoC has been worked on for several years a lot of the features in it already work on a current Linux kernel, the SoC is also well supported in u-boot which greatly helps the boot process.

Obligatory section about blobs

The perfect Linux phone wouldn't have any blobs (that is, parts of closed-source code), sadly the world isn't perfect and there's such a thing as ISPs. To be able to actually use the phone for calling/texting/mobile data it needs to have a modem and there are no existing practical solutions for this. Both phones have the same solution to this problem; stick the modem in a blackbox behind the USB bus.

The second part of of the blobbiness of phones is Wi-Fi, which in the case of the PinePhone is handled by the RTL8723CS chip. This chip has an open driver available (though not yet in mainline) but does need a firmware patch, the firmware patch is sent to the chip by the kernel driver when it's booting and it runs on the CPU in the Wi-Fi chip. This is a lot better than the userspace binary driver needed by some Android phones but not perfect. The Librem 5 doesn't have any info on what Wi-Fi chipset is used.

The third category of blobs is those required for booting the system. This is the part where the true mess of the ARM ecosystem shines through. A SoC boots by first running a small piece of software from the internal ROM of the SoC using a tiny amount of SRAM that's inside the SoC. This is responsible for loading the DRAM init code and boot the second phase loader, which in both phones is u-boot. The DRAM init code is usually the proprietary "blob" part. On the Librem 5 this part is moved to a separate CPU to load it so it isn't on the main system. On the PinePhone this is fixed by the sunxi community making a replacement in u-boot.

Kill switches

Both phones have them, but they are implemented differently. Purism put 3 kill switches to the side of the phone. One kills the modem, one kills WiFi and one kills the cameras/audio. If all three are killed then another circuit will kill the power to the GPS chip and disconnect the sensor bus.

The PinePhone doesn't have the kill switches on the outside, but instead behind the back cover it has a DIP switch with 6 toggles, 5 of which are kill switches. They control the modem, Wi-Fi, microphones, rear camera and front camera, in that order. The 6th contact on the DIP switch is for the headphone connector: in the "on" position the headphone connector is a normal audio connector, while in the "off" position it becomes a UART/serial port instead. This mode is compatible with the serial port adapter that PINE64 already sells for the Pinebook laptops and it gives access to the u-boot logs and – depending on the OS configuration – also kernel logs and maybe a shell.

The killswitches on the PinePhone, sadly I don't have a Librem 5 to photograph.

While the Librem 5 doesn't have access to a serial port over one of the external connectors it is possible to get a boot shell by making and inserting an debug card in one of the m.2 slots. On both phones end users should never have to worry about this, but it's great to have for operating system development.

One of the unique features of the Librem 5 is the smart card reader. It has a miniSIM-sized slot for a smartcard (so for a credit-card sized smartcard you'd have to punch out the chip with a sim tool). I don't know about the implementation details except for that it's connected to the STM32 chip in the phone. Hopefully this will be Just Working™ with gpg2 in Linux.

Connectivity

Both phones use USB modems for their 2G/3G/LTE connectivity. This is very similar to how the USB "Internet dongles" work. It's a Qualcomm modem in a blackbox attached over USB so that the phones don't have to deal with any of the communication and firmware for that.

In the PinePhone case PINE64 managed to put a Quectel EG25-G modem, which comes in a pretty big package, taking up most of the board space on the back. The upside of this modem is that it's supporting a lot of bands. The modem should be usable worldwide.

The Librem 5 has the modem on a replaceable m.2 card. Purism offers 4 different modems, an US and EU variant of the Gemalto PLS8 and the US/AS variant of the BroadMobi BM818.

Band PP (EG25-G) L5 (PLS8-E) L5 (PLS8-US) L5 (BM818-E1) L5 (BM818-A1) GSM 850 ✔ ✔ ✔ ✔ GSM 900 ✔ ✔ ✔ ✔ GSM 1800 ✔ ✔ ✔ ✔ GSM 1900 ✔ ✔ ✔ ✔ B1 ✔ ✔ ✔ B2 ✔ ✔ ✔ ✔ B3 ✔ ✔ lte lte B4 ✔ ✔ ✔ B5 ✔ ✔ ✔ ✔ B7 ✔ ✔ ✔ B8 ✔ ✔ ✔ B12 ✔ ✔ B13 ✔ ✔ B17 ✔ ✔ B18 ✔ B19 ✔ B20 ✔ ✔ ✔ B25 ✔ ✔ B26 ✔ ✔ B28 ✔ B38 ✔ ✔ B39 ✔ B40 ✔ ✔ B41 ✔ ✔ ✔ B66 ✔

While the modem in the Librem 5 can be replaced by newer/better ones in the future (and at any time), the PinePhone supports more out of the box.

On the WiFi side the Librem 5 supports a lot newer standards, it's a dual-band Wi-Fi chip (abgn) which also has a Bluetooth 4.1 radio. The PinePhone uses the RTL8723CS chip that only supports the 2.4Ghz band (bgn) and has an Bluetooth 4.0 radio.

One of the major features of the m.2 slots in the Librem 5 is that they allow for some modularity. It isn't to the level of Google's Project Ara, but you have two slots where you can put in any module that works on USB. While the default configuration is modem/WiFi+BT, there isn't really anything stopping you from putting anything else in it, except for the m.2 "keying" the slots have. The modem is in an m.2 B-key slot, while the WiFi card is in an m.2 E-key slot. While this means you won't be placing an NVMe card in it, newer WiFi standards will be probably possible, if the antennas allow.

Storage and Memory

Both phones have eMMC 5.0 storage, the PinePhone having 16GB and the Librem 5 32GB. While this isn't a lot when compared to modern Android devices, it's fine for running Linux. The storage space required for a KDE Plasma Mobile setup is less than a gigabyte for example while the current Android installations already use 5-6GB of eMMC.

Both phones also have a microSD card slot. There is a difference in implementation though. On the PinePhone the SD slot is connected to the MMC bus of the SoC, it is possible to boot from the SD card if an operating system is written to it, exactly like the PINE64 single board computers. If both the eMMC and the SD card are bootable then the SD card is booted.

On the Librem 5 the microSD card slot is connected through an USB card reader chip. the same chip also acts as an USB hub for the two m.2 slots in the phone. This shouldn't have any impact on end users though as long as the USB bus doesn't get saturated.

On the RAM side the Librem 5 has 3GB LPDDR4 memory. The PinePhone has 2GB (slightly) slower LPDDR3 memory. While this isn't a lot, it's enough to run a good Linux desktop.

Audio

The audio setup is pretty much identical in both phones, A speaker, an earpiece, a microphone and a headset connector are present. The difference is that the PinePhone uses the built in DAC/ADC in the A64 SoC and the Librem 5 has an external codec, the Wolfson WM8962.

The PinePhone headphone output is driven directly by the SoC and has an 100dB A-weighted signal/noise ratio. The Librem 5 has 98dB A-weighted signal/noise. The codec in the A64 SoC doesn't have further specs available, which makes comparing pretty hard.

I've tried the headset output on the PinePhone with an Audio Technica ATH-M50x and either I'm starting to become deaf or this thing outputs pretty great audio.

This headset is almost as expensive as the PinePhone

Cameras

The PinePhone has an Omnivision OV5640 rear camera, It's a 5MP sensor but the laws of physics limit the optical resolution to 1.8MP, this put's it at nearly fullHD output. The images that come out of it aren't great and it's probably improvable a lot by disabling the built-in noise reduction (because that's the main cause of "blobby" pictures).

The Librem 5 lists only the camera resolution for the rear camera as 13MP, so I don't have enough information yet to actually calculate the optical resolution, but it's most likely much better than the PinePhone's.

Conclusion

You did it! You reached the end. So here are supposed to be some profound words about the devices. They both run Linux. If both succeed I'll be happy.

The whole Linux phone ecosystem has a bit of a bootstrap problem: there isn't a lot of software development for Linux phones because there aren't phones to run it on. There aren't phones to run it on because there's no OS. Hopefully this will be solved by these two new devices.

In any case, they already made an impact on the Linux ecosystem. Purism developed and added libhandy (responsive/mobile-friendly Gtk widgets) support to core GNOME apps so they can be used on more devices. KDE Plasma Mobile gets better each week. Apps are being written for both.

Maybe 2020 will be the year of the Linux Phone, skipping that desktop thing.

Martijn Braam is a postmarketOS developer. You can follow him on Mastodon and YouTube.