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.
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:
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
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 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.
https://source.puri.sm/Librem5/haegtesse/issues/1 – fills log when /dev/tty4 is not present
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 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
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
Librem5 devkit tools are the set of tools to enable the devkit that was recently shipped out to crowdfunding supporters.
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.
– 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 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.
– 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
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.
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.
– 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
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.
– 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
– https://source.puri.sm/Librem5/phosh/issues/52 – look into full screen blank support on lock
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
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.
– https://source.puri.sm/Librem5/developer.puri.sm/issues/28 – Upate GNOME Builder section
– 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 – issue with the M.2 module not being able to be mounted flat against the dev kit prototype boards, looked for the best solution and discovered that we must use a different M.2 connector with quite a different footprint (requiring some non-trivial layout rework)
– soldered HDMI wires to our tiny Mini-HDMI plug but had little-to-no success, found a custom plug breakout board which has screw terminals to make testing our HDMI circuit easier (hopefully): https://elabbay.myshopify.com/products/elabguy-hdmi-cm-bo-v1a-hdmi-type-c-male-socket-breakout-board– 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
– 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.
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!