End of the Year Report – Librem 5 – Things are awesome



Hello everyone! We have accomplished so much in the last 3 months and need to share, so prepare yourself for a dense update on the Librem 5 phone, PureOS, and software applications.

As you know, we have a number of important components in the Librem 5 that we will try outline.

Calls

Let’s start off with the Calls application. The calls application is what allows us to place phone calls and what makes the phone a

phone. In these past few months, we’ve been making this application work wonderfully. Below is a demo of the calls application receiving a phone call. So the basic support for the calls application is complete and we’re working making a great design. We’ve successfully implemented important basic features like ring tones.

If you’re interested in following the work, we’ve included the merge

requests for calls below and important issues that were created:

Merge Requests

https://source.puri.sm/Librem5/calls/merge_requests/5 – flatpak: enable access to dconf config

https://source.puri.sm/Librem5/calls/merge_requests/20 – new-call: set input hints and purpose of SearchEntry

https://source.puri.sm/Librem5/calls/merge_requests/25 – mm-provider: clarify warning a bit

https://source.puri.sm/Librem5/calls/merge_requests/23 – history-box: add empty view

https://source.puri.sm/Librem5/calls/merge_requests/19 – add i18n support

https://source.puri.sm/Librem5/calls/merge_requests/4 – add test for origin and calls

https://source.puri.sm/Librem5/calls/merge_requests/21 – add calls-application class

https://source.puri.sm/Librem5/calls/merge_requests/18 – add a call window and header bars

https://source.puri.sm/Librem5/calls/merge_requests/26 – display dialer on startup

https://source.puri.sm/Librem5/calls/merge_requests/28 – post ui change cleanups

https://source.puri.sm/Librem5/calls/merge_requests/18 – add call window and header bars

https://source.puri.sm/Librem5/calls/merge_requests/27 – flatpak support

https://source.puri.sm/Librem5/calls/merge_requests/29 – fixed memory leak

https://source.puri.sm/Librem5/calls/merge_requests/32 – pay attention to the addition and removal of a modem

https://source.puri.sm/Librem5/calls/merge_requests/33 – flatpak: Don’t build the libhandy Glade catalog

https://source.puri.sm/Librem5/calls/merge_requests/34 – cleaned up ringtone ringer

https://source.puri.sm/Librem5/calls/merge_requests/35 – providers in calls are now plugins

https://source.puri.sm/Librem5/calls/merge_requests/36 – updated calls icons

https://source.puri.sm/Librem5/calls/merge_requests/37 – flatpak building

https://source.puri.sm/Librem5/calls/merge_requests/38 – changes to support impending call history changes

Issue Requests

https://source.puri.sm/Librem5/calls/issues/18 – memory leak in find_call_holder

https://source.puri.sm/Librem5/calls/issues/19 – memory leak in set_focus

https://source.puri.sm/Librem5/calls/issues/20 – memory leak in calls_call_window_add_call

https://source.puri.sm/Librem5/calls/issues/36 – transferred TODO list to gitlab issues

https://source.puri.sm/Librem5/calls/issues/7#note_11069 – investigation into evolution data server/sqlite

https://source.puri.sm/Librem5/calls/issues/22 – DTMF fails with error Rejected send message

Hægtesse

Hægtesse is a daemon to transfer audio data between a modem and PulseAudio. It currently only supports the SIMCom SIM7100 modem but may be useful for other modems. The purpose of Hægtesse is to monitor the modem and when a call is initial to configure PulseAudio automatically for a phone call. This is a necessary component for phone calls.

Issues

https://source.puri.sm/Librem5/haegtesse/issues/1 – fills log when /dev/tty4 is not present

Merge Requests

https://source.puri.sm/Librem5/haegtesse/merge_requests/3 – Hægtesse listen to udev for the appearance of the audio TTY

https://source.puri.sm/Librem5/haegtesse/merge_requests/4 – Add full GPLv3 text

https://source.puri.sm/Librem5/haegtesse/merge_requests/5 – Build with gitlab-ci

https://source.puri.sm/Librem5/haegtesse/merge_requests/7 – fix build on PureOS

Libhandy

Libhandy is a library that extends GTK+ to be used on mobile profiles. With libhandy, you can port any GTK3 or higher app that you have into a mobile profile. If you have an application written in GTK3, reach out and we’d be happy to help you port it to libhandy. To find out more about libhandy go here:

https://source.puri.sm/Librem5/libhandy/wikis/home for our roadmap.

Here is an example of GNOME Web (epiphany) ported libhandy

Documentation and example code.

Libhandy has had made significant advancements these months with several releases made.

Libhandy is currently being used to port many core GNOME apps to the librem5

Merge requests:

https://source.puri.sm/Librem5/libhandy/merge_requests/137 – HdyDialer: Apply ‘keypad’ style class

https://source.puri.sm/Librem5/libhandy/merge_requests/145 – Don’t invoke signal handlers on finalized HeaderGroups

https://source.puri.sm/Librem5/libhandy/merge_requests/147 – add i18n support

https://source.puri.sm/Librem5/libhandy/merge_requests/146 – doc fix

https://source.puri.sm/Librem5/libhandy/merge_requests/145 – HdyHeaderGroup signal disconnections

https://source.puri.sm/Librem5/libhandy/merge_requests/146 – few documentation fixes

https://source.puri.sm/Librem5/libhandy/merge_requests/147 – enabling l10n

https://source.puri.sm/Librem5/libhandy/merge_requests/148 – g_auto* documentation

https://source.puri.sm/Librem5/libhandy/merge_requests/150 – drop Jenkinsfile

https://source.puri.sm/Librem5/libhandy/merge_requests/151 – Syntax highlight HACKING

https://source.puri.sm/Librem5/libhandy/merge_requests/152 – Init public GObject types in hdy_init()

https://source.puri.sm/Librem5/libhandy/merge_requests/153 – fixes to MacOS Build

https://source.puri.sm/Librem5/libhandy/merge_requests/154 – Add measure() methods

https://source.puri.sm/Librem5/libhandy/merge_requests/155 – drop direct access to event fields

https://source.puri.sm/Librem5/libhandy/merge_requests/156 – renaming margins for GTK4 support

https://source.puri.sm/Librem5/libhandy/merge_requests/157 – make HdyDialer a descendant of GtkBin

https://source.puri.sm/Librem5/libhandy/merge_requests/159 – fix a mention of a HdyLeaflet in the docs

https://source.puri.sm/Librem5/libhandy/merge_requests/162 – unstability acknowledgement documentation improvements

https://source.puri.sm/Librem5/libhandy/merge_requests/165 – normalize and document private header guards

https://source.puri.sm/Librem5/libhandy/merge_requests/166 – adding hdysearchbar

https://source.puri.sm/Librem5/libhandy/merge_requests/167 – remove useless libhandy options from example flatpak

https://source.puri.sm/Librem5/libhandy/merge_requests/168 – document more coding style

https://source.puri.sm/Librem5/libhandy/merge_requests/169 – reproducible build of libhandy

https://source.puri.sm/Librem5/libhandy/merge_requests/172 – hdy_init() docs improvements

https://source.puri.sm/Librem5/libhandy/merge_requests/173 – add transfer none to hdy_init()

https://source.puri.sm/Librem5/libhandy/merge_requests/174 – fix HdyHeaderGroup references

https://source.puri.sm/Librem5/libhandy/merge_requests/175 – example: put the content in a scrolled window

https://source.puri.sm/Librem5/libhandy/merge_requests/176 – add many row widgets

https://source.puri.sm/Librem5/libhandy/merge_requests/177 – leaflet: clear the children list on disposal

https://source.puri.sm/Librem5/libhandy/merge_requests/178 – build: set the shared object install directory

https://source.puri.sm/Librem5/libhandy/merge_requests/179 – update meson.build for MinGW compatibility

https://source.puri.sm/Librem5/libhandy/merge_requests/180 – build: dont’ use -fstack-protector-strong on mingw64

https://source.puri.sm/Librem5/libhandy/merge_requests/181 – update docs skeleton

Issues:

https://source.puri.sm/Librem5/libhandy/issues/57 – HdyTitleBar broken with .devel window in org.gnome.Sdk//master

https://source.puri.sm/Librem5/libhandy/issues/52 – issues compiling on OSX

Librem5-devkit-tools

Librem5 devkit tools are the set of tools to enable the devkit that was recently shipped out to crowdfunding supporters.

– https://source.puri.sm/Librem5/librem5-devkit-tools

Virtboard

Virtboard is our virtual keyboard used on the Librem 5. Work has been on-going in enabling the virtual keyboard mostly focusing on making this input working under wayland. The UX experience is still on-going. Feedback is of course encouraged.

Merge requests

– https://source.puri.sm/Librem5/virtboard/merge_requests/20 Unbreak virtboard crashing when using GCCs stack protector

– https://source.puri.sm/Librem5/virtboard/merge_requests/21 Update input-method protocol

– https://source.puri.sm/Librem5/virtboard/merge_requests/22 make virtboard fully hidden

– https://source.puri.sm/Librem5/virtboard/merge_requests/23 virtboard translations

– https://source.puri.sm/Librem5/virtboard/merge_requests/24 convert to glib mainloop

– https://source.puri.sm/Librem5/virtboard/merge_requests/25 added multiple layouts

Chatty

Chatty is our combination SMS and encrypted communication app. Chatty currently works with SMS and with the help of libpurple we can also have E2E encrypted communication as promised before.

We currently can successfully send SMS between phones. Below is a demo of the chatty doing some emoticons. You might recall last post we showed chatty doing real SMS. The UX experience is still on-going and continues to evolve. Follow along in this issue –

https://source.puri.sm/Librem5/chatty/issues/52 for how the UX is coming along.

Merge requests

– https://source.puri.sm/Librem5/chatty/merge_requests/1 Add some basic gitlab-ci

– https://source.puri.sm/Librem5/chatty/merge_requests/2 fixing the Flatpak manifest

– https://source.puri.sm/Librem5/chatty/merge_requests/3 porting the window to Glade

– https://source.puri.sm/Librem5/chatty/merge_requests/4 Remove arm special casing

– https://source.puri.sm/Librem5/chatty/merge_requests/5 don’t access inexistent header bar

– https://source.puri.sm/Librem5/chatty/merge_requests/6 Use glib’s logging

– https://source.puri.sm/Librem5/chatty/merge_requests/7 Don’t ignore compiler warnings

– https://source.puri.sm/Librem5/chatty/merge_requests/9 Fix build with a default set of warnings enabled

– https://source.puri.sm/Librem5/chatty/merge_requests/10 Enable and fix more compile warnings

– https://source.puri.sm/Librem5/chatty/merge_requests/13 Fix crash during message parsing

– https://source.puri.sm/Librem5/chatty/merge_requests/14 Make text in chat bubble copyable

– https://source.puri.sm/Librem5/chatty/merge_requests/15 Fix new messages not being displayed

– https://source.puri.sm/Librem5/chatty/merge_requests/16 Prepare chatty for translations

– https://source.puri.sm/Librem5/chatty/merge_requests/17 Fix time format display

– https://source.puri.sm/Librem5/purple-mm-sms/merge_requests/1 Add Debian packaging

– https://source.puri.sm/Librem5/chatty/merge_requests/21 – add Debian packaging

– https://source.puri.sm/Librem5/chatty/merge_requests/29 – don’t use network when verifying appdata files

– https://source.puri.sm/Librem5/purism-chatty/issues/5 Suggested closing the old project

– https://source.puri.sm/Librem5/chatty/issues/52 – improve chatty UI

Design

Most of our design is being done in GNOME upstream except of course for the UX experience in the Librem 5 specific component. Purism believes deeply in working in the upstream and we work closely with GNOME’s designers. Below are a number of design mockups that were conceived for various GNOME apps to work with libhandy.

– https://gitlab.gnome.org/Teams/Design/app-mockups/blob/master/todo/todo.png Adaptive Mockups for GNOME TODO

– https://gitlab.gnome.org/Teams/Design/app-mockups/blob/master/notes/notes.png – Adaptive Mockups for GNOME Notes

– https://gitlab.gnome.org/Teams/Design/os-mockups/blob/master/view-switcher/adaptive-view-switcher-modes.png – proposal for adaptive view switching modes (commited to implement by Adrien)

– https://gitlab.gnome.org/GNOME/Initiatives/issues/2 – new app icons for GNOME

In addition, a lot of work has gone in to designing parts of GNOME like the control center to work in a mobile context.

WLroots

WLroot is the Wayland implementation for the Librem5 and which phosh our UX shell runs on. Mostly working on getting libinput working. We did some investigations on using rust bindings, but turned out that it was more work with very little advantage.

Merge requests:

– https://packages.debian.org/source/experimental/wlroots – update debian packaging

– https://source.puri.sm/Librem5/wlroots/merge_requests/35 – input-method and text-input support to the Librem5

– https://source.puri.sm/Librem5/wlroots/merge_requests/40 – wlroots update

Issues:

– https://source.puri.sm/Librem5/wlroots/issues/6 – rootston freezes on ssh log out

– https://source.puri.sm/Librem5/wlroots/issues/18 – rootston often freezes

Phosh

Phosh is the actual visual look and feel of the Librem 5. The most significant work here is being able to detect idle and dim the screen automatically when not on battery power. Some work on the lock shield was also done and various UX fixes and features.

For more information see the merge requests before.

Merge requests

– https://source.puri.sm/Librem5/phosh/merge_requests/143 Update translations from zanata

– https://source.puri.sm/Librem5/phosh/merge_requests/153 – Drop hard coded weston-terminal from favorites

– https://source.puri.sm/Librem5/phosh/merge_requests/154 – Add a poweroff button to the settings menu

– https://source.puri.sm/Librem5/phosh/merge_requests/158 – use actual values for transform instead of looking at rotation property

– https://source.puri.sm/Librem5/phosh/merge_requests/159 – make sure setting buttons stay circular

Issues

– https://source.puri.sm/Librem5/phosh/issues/52 – look into full screen blank support on lock

Upstream Work

Purism knows it stands on the shoulders of giants. We would not be be successful without our upstream partners. We make sure that our technical debt is as small as possible, preferring to work in upstream as much as a matter of course. Below is a list of the work we have done in the various upstreams that we depend on. This is not an exhaustive list of projects since we do other upstream work for our laptops as well.

We are very proud of our upstream work and being part of these upstream projects.

– https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910640 – Debian’s libgtk-4-dev Needs to depend on libvulkan-dev

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/200 – Kept pushing making the WiFi panel adaptive

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/243 – Moving the app menu

– https://gitlab.gnome.org/GNOME/gnome-contacts/merge_requests/41 – contact deselection on creation fix

– https://gitlab.gnome.org/GNOME/gnome-contacts/merge_requests/42 – using HdyHeaderGroup

– https://gitlab.gnome.org/GNOME/gnome-contacts/merge_requests/43 – using HdyTitleBar

– https://gitlab.gnome.org/GNOME/gtk/issues/1399 – Suggested to not show dashed border in keyboard-navigable selected elements when no keyboard is available

– https://gitlab.gnome.org/GNOME/Initiatives/wikis/GNOME-apps-mobile – Helped Javier set up the initiative

– https://github.com/swaywm/wlroots/pull/1316 – don’t let the wlr_output handle the fullscreen view in case

– https://github.com/swaywm/wlroots/pull/1203 – Support input method and text input

– https://gitlab.gnome.org/GNOME/gtk/merge_requests/384 – reviewed fix for text input protocol

– https://github.com/haecker-felix/Fragments/pull/41 – fixed a text flickering

– https://gitlab.gnome.org/GNOME/gitg/merge_requests/21 – GtkActionBar for the commit tool bar

– https://gitlab.gnome.org/GNOME/gitg/merge_requests/22 – fixing the diff options sliding direction

– https://gitlab.gnome.org/GNOME/glade/issues/339 – Suggested to not destroy existing property bindings

– https://gitlab.gnome.org/GNOME/glade/issues/340 – Suggested to support property bindings

– https://github.com/swaywm/wlroots/pull/1316 – Fix bug with full screen views and overlays (otherwise it will cause trouble with full screen video/pdf vs the lock screen

– https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911146 – xwayland spurious crashes

– https://github.com/swaywm/wlr-protocols/pull/27 – securing wayland protocols

– https://gitlab.gnome.org/Community/Purism/gnome-software/tree/wip/aplazas/narrow – start of adaptive

– https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/92 – supplementary call operations

– https://gitlab.gnome.org/GNOME/gtk/issues/1447 – tried to solve input method complications in gnome-shell

– https://gitlab.gnome.org/Community/Purism/gnome-clocks/tree/librem5 – librem 5 clock application

– https://bytesgnomeschozo.blogspot.com/2018/11/gnome-at-capitole-du-libre-2018.html – blog post on Capitole du libre conference

– https://gitlab.gnome.org/GNOME/gtk/merge_requests/425 – transient window notification fix to 3.24

– https://gitlab.gnome.org/World/lollypop/merge_requests/1319 – flatpak build fix for lollypop

– https://gitlab.gnome.org/GNOME/epiphany/merge_requests/56 – make title bar more adaptive

– https://gitlab.gnome.org/GNOME/epiphany/merge_requests/59 – make search bar adaptive

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/312 – 4 adaptive panels for GNOME settings

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/313 – make shell more adaptive

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/200 – Wifi panel adaptive

– https://gitlab.gnome.org/GNOME/gnome-characters/issues/46 – icon mismatch

– https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/317 – implement new network connection editor design

– https://gitlab.freedesktop.org/mobile-broadband/ModemManager/merge_requests/59 – policy: call method name should be SendDtmf rather than SendTone

– https://gitlab.gnome.org/GNOME/libgnome-volume-control/merge_requests/3 – make debug less verbose

– https://source.puri.sm/Librem5/wlroots/merge_requests/40 – WIP: Update 0.2

– https://gitlab.gnome.org/GNOME/gnome-settings-daemon/merge_requests/43 – rework wwan plugin after upstream feedback

Documentation

This effort can never survive without documentation. In that regard, welcome David Boddie to the Librem 5 team working on documentation for the Librem 5. The whole team, while focusing on their development, are equally aware of the role of documentation and have worked diligently in making sure that people create applications for the Librem 5. With two members working exclusively on documentation and developer experience, we hope to make writing applications for the Librem 5 as easy as it can be. Feedback in improving our documentation would be most welcome!

A lot of focus was made on creating documentation on how to create Librem 5 applications with sample code.

Issues

– https://source.puri.sm/Librem5/developer.puri.sm/issues/28 – Upate GNOME Builder section

Merge requests

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/55 – GTK+ limit the documentation to libhandy 0.0.3

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/60 – update qemu

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/61 – update email lists to be lists.community.puri.sm

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/63 – add stack picture and more intro

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/68 – GTK+: add links to the GTK+ and libhandy docs

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/71 – GTK+: Note to adjust label’s xalign when ellipsized

– https://source.puri.sm/david.boddie/python-gobject-gtk3-examples – collection of simple PyGObject examples

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/84 – document phosh’s supported DBus APIs

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/85 – document some trivial phosh apis

– https://source.puri.sm/Librem5/developer.puri.sm/merge_requests/82 – added small descriptions of KDE-related technologies

Phone hardware/Dev Kit

The recent shipping of the Librem 5 dev kit represents countless hours of work with an aggressive schedule. Nicole, Eric, and Petra, along with dedicated operations staff, worked continuously for a week to package all the dev kits to be shipped out to our dev kit backers.

When it comes to software and hardware freedom, we not only do the talk, we do the walk. Everything in the dev kit, is licensed under the GNU GPL v3+. We have released the schematics for the dev kit and all source files. We encourage you to participate and bring your talents and join us!

By now everyone who ordered a dev kit would have received it and are working on the hardware to get it fully enabled from the LCD panel to user-controlled LEDs. We will be sharing more photos and videos of the dev kits in action as more and more community members advance the software around them.

In the meanwhile, our matrix channel has become a hot bed of activity as people prod and poke their dev kits, asking questions and following along with the devleopment of the phone.

As for the phone, we have confirmed the BOM (Bill of Materials) and the sourcing of parts, we are only finalizing the I.MX 8M or 8M Mini by benchmark testing. Once we have approved the design (also planned in January) we can create the necessary molds and stamps.

January is going to be really busy for Purism as we split time between the dev kit advancements and then pivoting to the Librem 5 phone hardware, but we welcome the excitement around what we’re doing. We will have a retrospective post on the dev kit tomorow (2019-01-09), so stay tuned for that!

Short Summary of the work:

– Moved to Kernel 4.18.11

– Reworked device tree for dev kit

– add texture support on GC7000 https://source.puri.sm/guido.gunther/mesa/tree/gc7000-bo-relocs, https://source.puri.sm/guido.gunther/mesa/tree/gc7000-bo-relocs

– PureOS now building on our build server using Laniakea build system

– a mechanical issue was discovered with the M.2 module not sitting flush against the board so a taller M.2 connector was used on the final dev kit design

– RedPine fixing the W_DISABLE# issue, they will use a bodge wire for our 340 dev kit units so that the HKS works as anticipated

– Fixed various issues in the nwl-dsl (mipi) driver

– picture of working HDMI – https://talk.puri.sm/_matrix/media/v1/download/talk.puri.sm/SSvCOnFIIdtgeXqmrMrjZkje

– Fixup several bugs in the imx8ms mipi dsi layer

https://source.puri.sm/Librem5/linux-emcraft/commit/2a10a1eaee8860f0f79b513497039ca21a5ded76

https://source.puri.sm/Librem5/linux-emcraft/commit/34bfd44c92bd32b4cd8c88a7943ced00c699a398

https://source.puri.sm/Librem5/linux-emcraft/commit/937cb53b89c26ba3011ea05f6ae14b1134036a6c

– Initial (WIP) LCD panel driver

https://source.puri.sm/guido.gunther/linux-imx8/commit/919a834a865824eeeeb9b98bc4932ae46a614fba

+ Look at haptic sensor. Driven by the kernel’s joystick force feedback

interface (and therefore exposed to userspace as an input

device). We’ll need write a tiny driver for that.

Purism in the Public

Purism employees are not hermits and you can find them at various conferences. Here are some of the things our employees have done.

– Dorota: Gave a talk based on Rust+Wayland research, dutifully credited Purism (video incoming… at some point): http://rust.cologne/2018/10/10/at-cisco.html

– Adrien and Francois were at Capitole du Libre, running the GNOME booth there.

FOSDEM – A number of us will be at FOSDEM doing talks and hanging out. More information on what our plans are for FOSDEM in another post.

Closing

That’s all for now! Stay tuned on these pages for new applications, the retrospective on the dev kit, and other features! Things are rolling fast! Thank you to our fans for making 2018 a wonderful year and looking forward to 2019! It’s going to be awesome! Thank you for a great year!