Subscribe to future posts here
Sailfish OS update from Jolla
During the most recent Community Meeting we had an update from Ville Nummela (vige) who you’ll know as one of the managers of this forum, but who is also Technical Product Manager of Jolla’s Developer Offering.
Ville revealed that there will be several new APIs that will be allowed in the Jolla Store from the next release. We caught up with Ville to dig into the details, and try to find out exactly what’s happening in the Harbour.
There’s actually quite a list of new APIs which we are going to allow.
Ville explains.
Some of the APIs are more useful to developers than others. Perhaps the most anticipated new API is Sailfish Secrets and Crypto, which provides access to secure storage and cryptographic functions. These have been already used by quite a few apps, unfortunately rending them non-harbour-compatible until now.
Then we have a bunch of Sailfish UI components, which mostly provide Sailfish-looking components for various situations. These have been designed for platform apps, so their usability in third party apps can be quite low. Nevertheless, they are there now if someone wishes to use them.
QtLocation is also one that has been requested quite often. It provides map components. Our version is quite old, and there are better and more modern components for this purpose. But this one already exists in Sailfish OS, which might make it attractive for some.
And finally, we have Pillow, which is a python library for image processing.
Here we summarise the proposed new APIs. It’s possible not all of these will make it into the next release, so you should follow the repos prior to the 4.5.0 release if you want to be certain. Where documentation isn’t yet available, we’ve listed the installed location of the relevant QML components on-device:
API | PR | Repository | Documentation |
---|---|---|---|
Sailfish Secrets and Crypto | PR, PR | Repo | Docs |
QtLocation | PR | Repo | Docs |
Sailfish Media | PR | N/A | /usr/lib64/qt5/qml/Sailfish/Media |
Sailfish Contacts | PR, PR | Repo | /usr/lib64/qt5/qml/Sailfish/Contacts |
Sailfish Accounts | PR | N/A | /usr/lib64/qt5/qml/Sailfish/Accounts |
Sailfish Telephony | PR | N/A | /usr/lib64/qt5/qml/Sailfish/Telephony |
Pillow | PR | Repo | Docs |
BluezQt | PR | Repo | Docs |
There has been a lot of encouragement from the developer community to allow these APIs in the Jolla Store. Many of you will recall the API Poll held by Ville at the end of 2020, in which Sailfish Secrets and QtLocation hit the third and fifth spots respectively (QtPositioning, which was fourth, was added already back in January 2021). More recently fridlmue raised the possibility of including QtLocation during a community meeting.
Clearly this has helped shape the choices for API inclusion, while also adding some extra momentum to the process. But if these are being added now, it raises the obvious question as to why they weren’t already added in the intervening two years. Ville explains.
Of course our motivation is to have as many useful apps in Jolla Store as possible. Unfortunately quite a few apps have been disqualified because they use APIs which have not been allowed. The reasons why a certain API has not been allowed vary.
If we look at the question from the “what has changed” point of view, one thing that stands out is Sailjail. As the end user has the ability to see what the applications have access to, we feel more confident in allowing them in Harbour. So the question has really changed from “Why should we allow this?” to “Why shouldn’t we allow this?”
That’s a significant change, and one that the introduction of Sailjail always promised to unlock. To elaborate on this a little further, granting access to the Accounts API for example, has security implications that the end-user should be aware of. If any app could have access to this API it might lead the way for apps to get access without the user’s knowledge. With Sailjail, the user is always made aware and has to agree to an app accessing Accounts, before the API can be used by the app.
That’s not the only thing that’s changed though. The update to the APIs is also the result of some internal relaxation of the policies around Documentation and API stability. As Ville explained during the community meeting:
Because we lack the resources, we had to lower the bar a little bit in order to get the APIs in. While the new APIs will have their documentation in [the Developer Docs], you will find out that for most of the new APIS the documentation is quite empty, at least in the beginning.
When I spoke to Ville he elaborated on the reasoning behind this.
The reason is simple: Writing documentation is a lot of work. If we were to write the API documentation at the level you are used to, we could perhaps add one or two APIs in the upcoming release.
What this means in practice is that the level of documentation varies. Some APIs have quite a good level of documentation, while for some others the documentation is just a list of QML types and their properties and methods.
There will also be a slight relaxation around API stability. Here’s Ville again from the community meeting.
Some of the APIs are still not 100% stable, so we can’t really promise that we won’t make API breaking changes to them in the future.
The reasoning here is similar:
It takes a huge amount of work to polish the APIs. Therefore they aren’t currently perfect in many places, and we might want to polish them later on. However, many of these APIs have been in existence for a long time, and even though we know they are not perfect, the likelihood that we will change them in the near future seems low. Therefore it doesn’t make sense to forbid using the APIs just because we might change them some day.
In practice this means that in the future, the APIs might change, and when they do, it’s the responsibility of the app developers to changes their apps accordingly.
Before we wrap up, I’m interested to know whether Ville has any particular apps he’s looking forward to seeing sailing into Harbour for download from the Jolla Store. He deftly dodges my attempt to expose favouritism.
We haven’t been targeting any specific apps, but of course we would like to see as many apps as possible in the Jolla Store. I know there are a few apps which have been disqualified just because they use Sailfish Secrets and Crypto, and I would really like to see those apps make their way to Harbour.
So if you’re a developer of an app that uses one of the new APIs, we urge you to check it against the Harbour allowed QML imports, allowed libraries and allowed requires lists to see whether it will pass the updated validator and can make it into the Jolla Store. Ville has some useful advice for developers looking to do this.
If they want to take these APIs in to use, they are free to do so, and submit their apps to Harbour. One thing to note is that the allowed package dependencies for these new APIs are done using the QML API names, so in practice you need to write “Requires: qml(Sailfish.Contacts)” instead of “Requires: sailfish-components-contacts-qt5” in your spec files.
And can we expect even more new APIs to be delivered in the near future?
I would say that this is only one step on our way to make Harbour more open. A big step maybe, but it’s not the first and won’t be the last. There will always be more APIs to add.
At this time we have been looking mostly at Sailfish UI components. Of course we have been following the feedback from the developers, and that affects our decisions. The API poll which we had a while ago was a good source of insight. We might have another poll someday.
And of course, as Ville points out, “Feedback is always welcome, as are contributions”.
Repository roundup
Besides the good news about newly added APIs to Jolla harbour, one can see in this digest many updates of low-level packages to their latest upstream releases, with a large part of the work coming from mlehtima but also from community members like attah. Besides bringing the possibility to use latest capabilities, it also ensures to get all latest bug corrections from this free software world and keep the platform up to date. I’ll just quote nico from latest community meeting to conclude this introduction : “Sooooo, Sailfish 6 will have Qt6, right?”…
Homescreen
-
lipstick
, the compositor and main user interface of your phone, Tomin1’s pull request about supporting anX-DBusActivatable
key in desktop files, has been merged. JacekJagosz’s proposition to allow Discord notifications (from the Discord Android app) has also been merged. pvuorela mentioned that from Sailfish OS release after 4.4 and Android newer than version 4, this kind of modification per application should not be necessary anymore.
Browser stack
-
gecko-dev
, the browser engine, rainemak got merged his pull request to remove specific Sailfish OS skinning of buttons, inputs or textareas, as suggested by minman on this forum. -
qtmozembed
, Qt bindings for the Gecko engine, rainemak fixes a regression introduced earlier when adapting the bindings for HiDPI displays. In his message, Rainemak is mentioningapz.touch_start_tolerance
being0.0762785
. In relation to this forum message, where d.geelen is suggesting to raise this parameter to 0.5, I’m still wondering if this will actually fix the problem of tap with the browser, or if it’s not related to. -
embedlite-components
, QML components for the browser, rainemak is proposing to fix some Javascript errors related to selection. -
sailfish-browser
, the browser application itself, rainemak added a way to copy the current URL to clip board by long press on the toolbar. He also added a modification to the application to ignore PIPE signals. This may mitigate crash of a tab.
Audio / video stack
-
mlehtima is proposing to drop the
Autotools
in favour ofMeson
as a build system for various Sailfish OS specific packages related toPulse Audio
. This moves is following the upstream one, dropping theAutotools
support from version 15.0: -
gstreamer
, a multimedia framework, mlehtima is working in branch on the upgrade to latest upstream version 1.20.3 (from version 1.18.5). -
ffmpeg
, a framework to encode and decode multimedia resources, mlehtima is proposing to upgrade to upstream version 5.1.0 (from older 4.4.1). -
thumbnaild
, the daemon generating image and video thumbnails, mlehtima reworked thelibav
code to adapt to API changes introduced byffmpeg
5.0. -
sdl
, a multimedia library, mlehtima upgraded to the latest upstream version 2.24.0 (from the older 2.0.18). He also upgraded add-on libraries in the process, withlibsdl-mixer
andlibsdl-image
moving to 2.6.2,libsdl-net
to 2.2.0,libsdl-sound
to 2.0.1 andlibsdl-ttf
to 2.20.1. -
mlehtima is working on updating many low-level libraries to their latest upstream versions:
-
speex
andspeexdsp
, a library handling a free codec for speech, -
libvpx
, a VP8/VP9 video codec library, -
libogg
, an efficient music compression library, -
libwebp
, a library for encoding and decoding image in WebP format, -
libsndfile
, a library for reading and writing sound files, -
flac
, the lossless audio codec, -
sbc
, a library for Bluetooth low-complexity, sub-band codec, -
mpg123
, MPEG audio player and decoder library, -
openjpeg
, a library for image processing with wavelets, -
libjpeg-turbo
, a fast encoding and decoding library for JPEG.
-
Document stack
-
tracker
, desktop-neutral metadata database and search tool, mlehtima is proposing to upgrade to 3.3.3, it was previously 3.2.1. -
tracker-miners
, metadata extractors for tracker, mlehtima is proposing to upgrade to 3.3.1. -
poppler
, the PDF (rendering) library, attah is proposing to upgrade to the latest upstream version 22.08.0. This requires some changes on a lower-level library though. -
libjpeg-turbo
, a fast encoding and decoding library for JPEG, attah modified the build configuration to allow the more modern feature of source/destination managers working in-memory beside the older way of using FILE*. This is an ABI break, but necessary to move forward with other repository like poppler.
OS low-levels
-
mce
, mode control entity, for monitoring and handling various global modes and states, karry worked on a pull request to move from cgroup to PSI (pressure stall information) to get memory consumption of user processes. Thaodan commented on the good work and mentioned that it should work for devices with newer kernel than 4.4. From Karry experiments, this new metric will improve Sailfish OS memory management. -
libglibutil
, a library extending GLib with convenient utilities, slava committed a fix for a memory leak in unit tests. -
libsignon
, a framework to centralise signing credentials and procedures, tomin1 added a patch to increase the size of the token in the database, since some accounts are now using token larger than 4kB.
Documentation
-
qtlocation
, Qt modules to handle positioning and location, vigejolla’s pull request enabling packaging of the documentation was merge. It’s a part of the documentation task required to open more APIs in Jolla harbour. -
nemo-qml-plugin-contacts
, QML bindings to access the contact database, vigejolla added a minimal documentation skeleton for the QML plugin and also package it. It’s a part of the documentation task required to open more APIs in Jolla harbour. -
nfcd
, the daemon for near field communication, slava completed the documentation of the DBus interface regarding theGetAll()
method and itspoll_parameters
return values. -
docs.sailfishos.org
, the documentation website sources, many changes already visible have been pushed so far:- rainemak added command line tips to allow (or remove) the weather application from partner space.
- vigejolla cleaned the API page to point to the harbour page of the documentation instead of the raw source code files.
- vigejolla updated the page on allowed API in harbour to match the 4.4 version.
-
Tomin1 updated the documentation on the desktop file entry
X-DBusActivatable
. - jovirkku added a page on supported devices.
OS build
-
initrd-helpers
, convenient scripts to be used to generate the kernel init ram disks, notkit contributed a modification of the script detecting the internal device used to store the OS, for some few devices where the kernel is indexing with a ‘1’ the internal storage (usual index is ‘0’). -
mic
, an image creator for Linux distributions, martyone added a script to generate changelog from git when building with the SDK. This is aligning the SDK behaviour with the OBS one. -
scratchbox2
, the cross-compilation tool used by the SDK, martyone got two pull requests merged in, one is about fixing the code choosing if a program should be run under tooling or target environment. And the other one is about fixing builds when-t /
is passed.
SDK
-
sailfish-qtcreator
, the Qt IDE, deepbluev7 is patching a compile script to fix an issue with an argument string being passed as a translation unit. -
sdk-harbour-rpmvalidator
, the harbour validation scripts, vigejolla, in addition to the last fortnight changes to the allowed elements in Jolla harbour, has added more APIs:- for contacts (QML components and low-level handling),
- for telephony, with its QML components,
- for accounts, with its QML components,
- for Bluetooth access, with its QML components.
- and a warning about the fact that these newly allowed QML components may not be as stable as harbour rules used to ensure.
Software engineering
-
hw-ramdisk
, tools to be used to create init ramdisk for booting Sailfish OS, the pull request to obtain ramdisk independent of the moment they were created from martyone was accepted. -
sp-stress
, tools for creating stress test loads, the proposition from martyone to remove volatile information (like date and time) of the run, so stress logs can be checked over reference ones without spurious false positive results, has been merged. -
python3
, the popular and widely used programming language, Tomin1’s pull request to update the python3 package with a patch from Fedora so thatrpmbuild
uses a timestamp from the changelog, has been merged. -
meego-rpm-config
, specific rpm configuration files for Sailfish OS, direc85 has cherry-picked a patch to strip more than 256 symbols from packaged binaries and libraries. This would help building Whisperfish, as discussed in this forum thread. -
libphonenumber
, a library for manipulating international phone numbers, martyone is working on a patch to ensure build reproducibility by sorting sources during build. -
build-compare
, scripts to find out if the build result differs to a former build, martyone has merged the upgrade of the package to upstream version from 2022-06-20 and then from 2022-08-23. -
libjpeg-turbo
, a fast encoding and decoding library for JPEG, martyone modified the BUILD variable to remove any trailing elements after the ‘+’ in the version to get reproducible builds on OBS.
App roundup
Thanks to Damien for another thorough and enlightening repo roundup. We’ve seen lots of activity on the app front as well, with the following being just a selection of the recent additions and changes to the Jolla Store.
AIDA64
The first in our roundup is AIDA64 developed by FinalWire Ltd. AIDA64 provides a wealth of information about the hardware, software and status of your phone.
It’s an impressive app for many reasons. It’s excessively cross platform (Sailfish OS, iOS, Android, Ubuntu Touch, Windows Phone, Tizen and Windows are all supported), and it’s been around in one form or another for over 25 years (it’s release to the Jolla Store came in June 2016).
Open the app and you’ll be presented with twelve different categories to choose from, each one allowing you to drill down into the current status of all aspects of your phone, such as the running temperature of various components, the sensor readings, the apps installed and so on. That’s great for casual viewing, but you can also save or email the data out as a report for later inspection. The amount of data available is a bit overwhelming, but fascinating, and depending on your use-case, could also be incredibly useful.
The latest release includes something which we know many people have been waiting for: a 64-bit ARM executable to allow it to run on more recent devices. It also adds some nice new features, including information about the Android Runtime installed, Sailjail support, plus improved support for specific devices including the Mi 2, PinePhone, Xperia XA2 Dual.
Version 2.0.9 is available from the Jolla Store now.
Seabass
Yet another update to Seabass from prolific coder Mikhael Milikhin (milikhin). Seabass is a “small but perfectly formed” text file editor aimed at coders that’s especially strong on syntax colouring. It harnesses a swathe of existing code editing and viewing tools, at its core the Javascript Codemirror text editing framework. But it’s wrapped up with a nicely Sailfishy design, including a nice Read Only viewing mode. It combined both top and bottom menus, but uses a neat trick to avoid them interacting badly while scrolling. It’s a nice design.
The latest version incorporates Mikhael’s own file picker component. This simplifies the user interface, but more importantly it also allows for functionality to create new files, something which hasn’t been possible until this version.
Version 0.10.0 of Seabass is highly recommended and available from both the Jolla Store and OpenRepos.
TimeLapse Tools
TimeLapse Tools from Lukáš Karas (karry) is another app that seems to be enjoying regular updates. The very first release we covered last month. TimeLapse tools is an app of two halves. The first half allows you to capture images over a long period of time. It turns your phone into a timelapse camera, capturing still images at regular intervals over a long period of time. Depending on the time period and subject you want to capture, you might set it to take a photo once every second, once every minute, something like that.
Having captured these images, the second half of the app allows you to assemble your captured images together to form a video. Typically the video will be far shorter than the time period over which the images are captured, resulting in an accelerated replay of the events. It’s great for making slow events tractable for our short human attention spans.
The latest version adds Czech translations, adds an option to stabilise the produced video, changes the video output format for improved interoperability and fixes some bugs. Unfortunately I also experienced a bug which prevented the captured images from being assembled into a video (duly reported).
While the new features are nice, I’d recommend skipping this release if you plan to assemble the videos on your phone. It’s possible to work around the bug by moving files around, but hopefully it can be fixed to avoid this in the next release.
Version 0.2 of TimeLapse tools is available from both the Jolla Store and OpenRepos.
Mah Solitaire
Mah Solitaire had a slew of updates earlier this year, with app author Mark Washeim (poetaster) even managing to get his changes to make it work better with mobile devices and Sailfish OS in particular incorporated upstream. So as an app it’s already quite refined, and the latest update adds Spanish translations to the mix.
Mah Solitaire is a single-player game build around the classic Mahjong tileset, which are initially stacked in a specific layout but in a random order onto the board. The entire set contains four of each tile type and as a player it’s your job to match them in pairs. Each pair matched is removed from the board. Your objective: remove all the tiles.
It’s a simple enough premise, complicated by the fact that tiles must be free of horizontal neighbours and must be at the top of the stack before they can be removed. Some care and strategy is therefore required to remove them in the correct order. A misstep can result in an insoluble arrangement of tiles.
Although the game scores you based on your time, there’s no explicit pressure, so it can be a surprisingly calming way to pass the time. Each play through is different and there are over fifty different board styles to choose from, providing plenty of longevity.
Mah Solitaire is one of my favourite implementations, and definitely worth a try. Version 1.6.1 is available from the Jolla Store, OpenRepos and also Chum.
Please feed us your news
We hope you enjoyed this fortnight’s community news. This is your news, and frankly we can’t always keep up with all the exciting stuff happening in the Sailfish community, so please help us out by replying to this post in the forum if you’d like to see something included.
And do also join us at our community meetings on IRC, Matrix and Telegram. It’s a great place to discuss any of the content you see here, ask questions and share your ideas. The next meeting will be on the 15th September, and will be presided over by special-guest chair abranson, so worth attending for that reason alone!