Subscribe to future posts here
Sailfish OS update from Jolla
It’s been a busy week at Jolla HQ, preparing for our Big Berlin Birthday Bash next week. We’d love to see as many of you there as possible, and as I write this there are still just a few places available, so do grab them if you’ve not yet registered and are planning to go.
We do understand that not everyone is able to travel to Berlin, so watch this space (or at least the forum) for info about how you can get involved even if you can’t be there in person.
Hopefully some of you will also have seen vige’s detailed post on the Jolla Blog about upcoming changes to the way Sandboxing works on Sailfish OS. Ville provides some nice detail about how sandboxing works, what Jolla’s plans are for it in future releases, and how this will affect app execution. If you’re an app developer, he explains carefully about the changes you need to make to your app in order to make the most out of sandboxing, and ensure the smoothest transition as the new capabilities are rolled out. If this applies to you, please do have a careful read.
That wasn’t the only developer-oriented news this week. Ville also announced that two new APIs have been added to those allowed in Harbour. You can now use both the Sailfish WebView API and the new Sailfish Share API in your apps. In fact, you’re positively encouraged to use them. As Ville points out, they’ve actually been available for a while, but maybe weren’t as clearly signposted as they could have been.
The Sailfish OS 4.2.0 release brought a lot of improvements, but I’m quite sure many of you didn’t notice two items, as they weren’t really properly advertised in the release notes.
We’re looking forward to seeing what you do with them.
We’ve received a few requests for a newsletter RSS feed to be made available. The good news is that our forum software allows any tag or topic to be turned into an RSS feed just by careful manipulation of the URL. All you have to do is add a .rss
suffix to the end of the topic or tag URL you’re interested in (you may need to experiment a little to get it right). Every newsletter is tagged with the community-news
topic, so adding the following url into your favourite RSS reader should give you the feed you’re after. Thanks go to dhoelsch for suggesting we make this feature more widely known.
https://forum.sailfishos.org/tag/community-news.rss
Another piece of important news to note is that, as announced earlier, the venerable git.sailfishos.org git repositories have been moved to GitHub and will no longer be available after 7th October (i.e. the day this newsletter is published). Our server and networking expert ballcok has carefully created a redirect service to try to make the process smoother, but any remaining merge requests or issues that haven’t already been migrated will I’m afraid be lost in the process. If you have local copies of any of the repositories, please point them at the new github URLs, for example using something like this.
$ cd nemo-qml-plugin-email
$ git remote get-url origin
https://git.sailfishos.org/mer-core/nemo-qml-plugin-email.git
$ git remote set-url origin https://github.com/sailfishos/nemo-qml-plugin-email.git
$ git fetch upstream
We’ve also seen some exciting community announcements, including new ports, updated apps, and a rather impressive release from rinigus that allows certain Sailfish OS devices to offer improved home encryption support. All exciting developments which we’ll look at below. But first we thought we’d take a look at a rather specific piece of the Sailfish OS development process. We’ve talked about localisation before, and given shout-outs to the many motivated translators which Sailfish benefits from, but one area that we’ve not yet covered is that of localisation coordination. This important role is responsible not just for keeping the translations on track, but also for ensuring their high quality and consistency. So definitely a topic that deserves a look…
Localisation Coordination
Sailfish OS is an exceptional operating system in so many ways, and I like to think that it’s generally able to punch above its weight. It has a beautiful and original user interface, industry-leading device longevity and support, a fully-featured cross-platform IDE, unique technologies such as Android App Support, and more besides. In many cases, these benefits can only be offered because of the amazing contributions of the Sailfish OS — and broader open source — communities.
One of the areas which we can be particularly proud of is that of localisation support. Out-of-the-box Sailfish OS supports forty different languages, with a further 14 languages being worked on. Perhaps part of the reason for this is that Jolla is itself such a multi-lingual and multi-national team. Using my fingers and toes I can count at least 15 different languages spoken across the company. But that still leaves several dozen languages unaccounted for, so where do those come from? The fact is that in order to achieve such an impressive breadth of languages, incredible effort is needed from translators not just within Jolla, but across the Sailfish OS community. When you think about the effort given freely by the army of Sailfish OS community translators, it’s quite awe inspiring.
Enormous credit must of course be given to the individual translators who make this possible. But this isn’t the entire story, and in this newsletter I want to examine in a little more depth the role of not just translators, but also coordinators.
In order to help with this, I spoke to community member and coordinator of the Swedish language for Sailfish OS, Leif-Jöran Olsson (ljo), as well as to hardware and L10n engineer Simonas Leleiva (sledges), no doubt many of you will already be aware of the work of theirs and Jarkko Ahonen (jahonen).
Leif-Jöran is senior research engineer at Språkbanken Text, a language technology research institute hosted at the University of Gothenburg. He’s also a Free Software activist and proud grandfather. Besides the translation work that we’ll talk about shortly, Leif-Jöran is also working on bringing CollaboraOffice to Sailfish OS and has his own Free Software consultancy Friprogramvarusyndikatet. Check out this nice interview with him by the LibreOffice team for a bit more background. This all makes him ideally placed to help Sailfish OS localisation, and which is also maybe why he’s stepped up as a Sailfish OS community language coordinator, specialising mainly in Swedish. Here’s how Leif-Jöran describes his entry into the world of Sailfish OS:
I came in from Maemo-age through the N800. And before that I used the Sony Ericsson P900 with Symbian for a long time. But from the N800 this has been my community which evolved into what it is today. And with the arrival of the Jolla 1, the first one, I started my first port which was FBReader which I made available in OpenRepos in late January 2014 not so long after the Jolla 1 arrived. Later on I also mananged to buy a second hand Tablet so I could release an i486-build. Since working with Language technology I also engaged in the properly free text prediction work. Firstly with OKBoard, the swipe-to-type keyboard, and then with the presage-based type-on-default-keyboard in the presage keyboard team.
Both technology and languages are clearly important to Leif-Jöran. While Swedish is the language he coordinates for Sailfish OS, he also works with other languages in different contexts, including Mandarin, German and some less widely-spoken languages. “Britton, the Celtic language in Brittany/Breton” he explains “is close to my heart”.
Before we go into the coordination process, let’s first look at how the translation process works. As you might imagine, the main thrust of the translation work is taking strings inserted into the Sailfish OS user interface by designers or developers, and converting them into another language. When these strings are first created they’re written in a language called “Engineering English”. Yes, it turns out what I’ve always suspected is true: engineers don’t speak the same language as everyone else! In practice Engineering English is probably easiest to think of as the user-interface in its “raw” form, where phrases are for getting the point across, but may not be presented in the most refined way. Building on this Engineering English, the Sailfish OS translation process then happens openly, as Simonas explains:
The L10n life-cycle circles around Sailfish OS releases. Weeks before the next update we start a L10n round, and announce it on social media (Twitter & Facebook). At that point new strings are pushed out and everyone’s welcome to help bringing their language to completion. We always strive to give plenty of time for translations, and include as many weekends as feasible.
When Simonas says “L10n” he’s using special translators’ jargon in order to avoid having to type too much. It just stands for “Localisation” (i.e. “L**********n” with the 10 representing the ten asterisks). You might also occasionally come across the term “I18n” meaning “Internationalisation”. Simonas continues:
Anyone with a Jolla account can join and start helping right away, by suggesting a translation for any string appearing in the Sailfish OS UI.
How would you make such a suggestion? Using an online Web tool called Pootle. You can check it out yourself and browse through the existing translations without even having to log in.
Each release will inevitably introduce multiple individual new phrases that need to be translated, and of course they don’t all have to be translated by the same person. At any one time there may be multiple people all translating phrases for the same language. And this is where the role of the coordinator comes in. This is how Leif-Jöran describes the role of the coordinator at the point where translations started to come in via Pootle.
It is mainly about perspective, responsibility and overview I would say. Taking care of all translators’ suggestions as well as anonymous users’ suggestions. Make sure the suggestions are consistent. Making suggestions for terminology and crafting their explanations. Making the terminlogy as distinct as possible so that the translators can be guided by them. And in the end make the language used as unambiguous as possible.
Practically speaking, this involves the coordinator checking the proposed translations on Pootle, moderating them and shaping them as necessary, as Simonas explains.
The language coordinator then either approves and accepts the suggestion, or rejects and/or leaves the comment.
Not an easy process, and that’s not where the role ends. As Simonas explains, “documentation about staying consistent throughout the OS is readily available”, but coordinators have to digest this and put it into practice. This means coordinators must interact with translators and coordinators of other languages, keep up-to-date with the policy and consistency documents and also try to share best-practice between languages, checking how other coordinators tackle specific issues in other languages. As Leif-Jöran says, this requires a very careful process.
How do I approach the coordination process? Quite methodically. Noting down stuff to check basically daily. Checking things on all lists. Comparing alternative formulations, word usage choices. Are we missing terminology? Prioritising changes of older and existing translations. Discussing inflection and case changes. Handling differences of opinions. Are we agreeing enough? Are we ready to change? Going from one practice to another one? Is the tone right? Does the translation fit the space available? Rinse and repeat. Much like the dishes.
Having been acting as a translator and coordinator for many years, Leif-Jöran is now running things on a very even keel, and says he spends “about two hours per month I would guess” on the process. But for languages that are starting from scratch, a much longer period of focused effort is required. “Don’t worry,” Simonas says dryly, “localising the whole OS actually doesn’t take months, only weeks of focused effort!”
But if you’re thinking of becoming a coordinator, the best way to do it is to start small and work upwards. Starting work as a translator on an existing language is likely to be easiest. This is Leif-Jöran’s advice.
In my case I had contributed to the translations for many years. So I wanted to contribute some more and answered one of the the first calls for coordinators some years ago. Get acquainted with the current translations. Browse the policy documents. There are better (and worse) discussions on the forum too, but sometimes it is easier to reach out for a talk.
Keep this up, and Simonas says he’ll be happy to see you upgraded to a coordinator.
If your contributions are vast and regular, before too long you will be very welcome to become a coordinator, too. This way creates an efficient teamwork effort.
So far we’ve focussed mainly on the process for existing languages, where it can be relatively straightforward to jump in and fix an error or add the translation for a missing statement. But for many people the route into translating is motivated by the desire to support an entirely new language, rather than refining one of the existing ones. While the motivation to translate the OS into your own language might be pretty strong, surely this is also a huge undertaking? Well, yes, but the process can be incremental, and if you check on Pootle, you’ll see a variety of different languages at a broad mixture of different progressions. And the language doesn’t have to be fully completed for you to test it on your own device as Simonas explains:
If Sailfish OS isn’t speaking your language yet, you can step up to coordinate it, so the language then gets added to the translation tool as a community language. Once all the thousands of strings are translated, you have written a style guide, and a keyboard layout, then your language gets “officialised” and added to the Sailfish OS Settings app and flashable images. If you want to have a preview of how a yet-incomplete community language looks on your device, you can build @martonmiklos’ early language pack yourself and install it.
As you can see, there is a huge amount of effort that goes into the translation process, but it’s backed up by a group of translators that work together within the Sailfish OS community. If you’d like to get involved, there’s plenty of opportunity, and plenty of support available. You’d be very welcome to start a discussion in the forum’s Localisation section.
Let’s finish by thanking once again all of the many translators and coordinators who contribute to Sailfish OS. Or as I like to call it “S9S”.
Energy from the Community
Before getting in to our usual app round up, let’s start with rinigus’s busy fortnight. Since the last newsletter he’s updated his Xperia Tama port for the Sailfish OS Verla 4.2.0 release. The “Tama” codename refers to Sony’s Xperia XZ2 and XZ3 devices, with the port being 64-bit and based on AOSP10. This latest version updates the AOSP base, but also incorporates support for the other big area that rinigus has been working on: improved home encryption.
Available for his Tama port, and also for piggz’s port of Sailfish OS to the Volla phone, this new community-encryption solution offers some important benefits over the implementation currently seen on the official devices. As rinigus explains.
When compared to the official encryption solution, the LUKS password is provided in alphanumeric form and can be, if hardware permits, assisted by hardware-bound key.
In other words there are two benefits here. First the encryption key is generated by combining your passphrase with data locked inside a hardware-protected area of your device using ARM TrustZone key-signing. This makes it far harder to brute-force the key, because the trusted execution is configured to limit the frequency an attacker is able to test different passphrases. The limit, forced by the hardware, is set to one try every three seconds.
The challenge was to make it work against attacks by
root
and using signing seemed to be the only way to avoid any access bits available toroot
. In principle, the same signing approach is used by Google in Android to derive the key. Originally, I was planning to encrypt the key using a hardware bound key and user-provided one, but that fails as decryption is fast to report if the checksums are wrong. So, the attacker had faster reply than we wanted.
Second, the introduction of an alphanumeric passphrase, rather than the maximum-six-digit numeric PIN code on Sailfish X devices, means that password entropy can be increased significantly, so that an attacker would on average have to make a far larger number of guesses before hitting the correct key.
We can quantify this with a little bit of maths. A six-digit alphanumeric code can be any one of 106 = 1 000 000 possibilities (equivalent to approx 20 bits of entropy). In contrast a six-character alphanumeric passphrase has 966 = 782 757 789 696 possibilities (approx 39 bits of entropy). As the passphrase grows so the complexity grows, so that a 12-character passphrase has 79 bits of entropy, equivalent to a 23-digit PIN. In practice people don’t choose random passphrases, so the real entropy is far lower and the actual passphrase easier to crack; but you get the idea. Community member KuroNeko did a bit of testing using the standard Sailfish OS encryption and industry-standard password cracker hashcat and found it was possible to brute-force the 6-digit PIN in only a few minutes using a desktop computer. In contrast, a good alphanumeric password with double the number of characters, combined with the 3-second rate-limiting, would on average take many millennia to crack.
It’s worth bearing in mind that the full picture is nuanced here. For example, KuroNeko’s process isn’t possible remotely and relies on an attacker having physical access to a device in order to make an image of the phone’s contents. Increasing the complexity of passwords is of course a good defence against an attacker, but it also impacts convenience, especially when you consider that forgetting or losing your password is the equivalent of wiping your phone clean. Rinigus’s approach does also support the use of an additional 40-character recovery password you’re supposed to store separately and securely, to try to counterbalance this. Clearly a lot of thought has been put into getting that balance right.
Ultimately any change that brings the option of increased security has to be a good thing. It’s therefore exciting to see all of these developments, pushing the security of Sailfish OS even further forwards. Rinigus is continuing to work on it, but it already seems to be quite mature for Tama and Volla devices, as he explains.
We have just reached the state where all the initially planned functionality is ready. All packages involved in providing encryption solution… are tagged with their first release tags. I am planning to roll out this solution on Sony Tama port and I hope other devices will follow.
If your device isn’t yet supported but you’re still curious to see it in action, check out the nice video piggz has made of the encryption in action. Amazing work from rinigus as always.
We do of course also have four nice and newly-updated apps to share with you. There should be something for everyone here. Even if you’re not into photography, games or watching television, then you’re bound to find something that tickles your interest on Reddit using the Quickddit client (/r/sailfishos/ perhaps?).
Fernweh
Having already covered Fernweh, Piepmatz and Fernschreiber in recent newsletters, I’d not been expecting to include any updates from Sebastian J. Wolf (WerkWolf) for a while. But a new version of Fernweh caught my attention before I’d realised who the author was. Any appearance of favouritism is therefore entirely accidental. Fernweh is a Flickr client, which — in case you’re unfamiliar with Flickr — means it’s all about photos. Flickr is one of the more venerable online services, essentially a photo-sharing site that was created in 2004, bought by Yahoo soon after, and reached the peak of its popularity in 2013. Since then it was sold to flashy upstart SmugMug (actually founded before Flickr in 2002, but let’s leave that to one side), but remains a hugely popular photo sharing service.
Fernweh is a native client that makes very effective use of the Flickr API to provide a very smooth and clean interface. When accessed using the browser the Flickr website already provides a decent mobile experience, but using an app like Fernweh makes things feel much more Sailfishy and comfortable.
Fernweh supports viewing both your own and other user’s photo collections. When it comes to your own account, you can either view photos organised into albums, or the raw feed containing everything. Others’ photos can be viewed as a continuous list of “trending” photos, or the full set from a specific author. You can also search the public photos using keywords. Crucially, Fernweh only provides viewing capabilities. If you want to make changes (adding, removing, organising photos) you’ll need to return to the website.
There are some particularly nice touches, such as the way you can view the image metadata in full by tapping a photos, or the way focus is always kept on the photos (the interface staying largely out of the way). The latest update allows the app to understand links in the picture info, as well as offering new Swedish and Chinese translations from eson57 and dashinfantry respectively.
At start up you must provide your account details via the browser for the standard OAuth dance. It’s worth noting that it can take a surprising amount of time for the Flickr website to become responsive during this process. In fact I originally thought it had blocked access entirely, but don’t be fooled: be patient at it will eventually go through. The process only need completing once, so it’s worth the persevering.
Fernweh is available via the Jolla Store or OpenRepos.
Quickddit
Quickddit by Dickson Leong and Sander van Grieken (accumulator) is a comprehensively-featured native Reddit client. There are two main views to the app; first it allows you to browse all of the posts in a given subreddit; second it allows you to view all of the comments, in all their fully-threaded glory, associated with a particular post. The first page shows the image (or a still if it’s a video) associated with a post, alongside the heading and some brief details. It’s a clear and well-laid out summary and easy to get the gist of a topic. Posts can be listed in various orders (best, new, rising, controversial, etc.) just as on the Reddit website. From here you can also walk through any subreddits. Selecting a post takes you to the second view, where you have a host of additional options, including up/down voting posts, reading others’ comments or posting your own.
It’s possible to use Quickddit just as a viewer without associating it with your account, but if you want be more active, you’ll need to sign in. Tracking down the Settings page in order to do this can feel like a bit like an Easter Egg hunt. There are also many other options, including changing font, image and video sizes, and even using Tor for anonymity. The About page is similarly well hidden, but worth the effort of digging out in order to enjoy the beautifully animated wibbly-wobbly background image.
Other features provided by the Website, including making your own posts, flair and searching are also all provided. As on the website, full comment threading is provided with coloured bars to help make clear which comment another is replying too, and with the ability to expand and collapse for clarity.
Reddit can be quite a noisy place, but Quickddit does a good job of presenting what’s there in nicely structured and pretty easy to negotiate way. The latest version improves things further with some bugfixes, updated translations and an updated version of youtube-dl for accessing videos. It’s available from both the Jolla Store and OpenRepos.
Fishtheke
Fishtheke is a mediathekviewweb client for Sailfish OS. Mediathekviewweb is a website that provides online access to the functionality of the mediathekview Java app. Which — if I’ve got this right — means that Fishtheke is an app based on a website that was originally based on an app used for accessing a website. Tangled Webs.
But what really matters of course, is that Fishtheke offers access to media lobraries from a wealth of different German broadcasters, including ARD, ZDF, Arte, 3Sat and many others. The app itself doesn’t support streaming the actual programmes, but it does provide links to automatically launch them in the browser. My experience viewing the final programmes was mixed, although ultimately whether they display will come down to whether the video format is supported by the browser or not. And in practice you can select either the Mediathek database or the archive.org database, and I found the former tended to work better than the latter. As the author drily notes “archive.org’s dataset is flaky”.
The default configuration essentially allows browsing the full list of programmes, but you can also apply various filtering and sorting options (e.g. searching based on the title or description; sorting by the date the programme was aired, duration or channel). Up to a hundred items can be shown for a particular search.
The app was created by martin.st and the latest version adds the afforementioned search filters. It’s availble from the Jolla Store.
Gooble Invasion
I’ve mentioned before how it’s a shame there aren’t more native games available for Sailfish OS. Gooble Invasion is one of only a handful of native action games. It provides big, bold and colourful graphics that builds on a pretty simple concept. Essentially items drift down from the top to the bottom of the screen, and you must stop their progress by tapping on them (often more than once) before they reach the bottom.
These falling items are the “Galactic Order Of Bizarre, Lethal Entities” that explain the title of the game, and for which I’m sure there’s some suitably contrived story explaining they’re doing and why they need to be stopped, In practice they’re a surprising collection of aliens, ghosts and animals which might broadly be described as “things with eyes”.
The game play isn’t especially nuanced (it really involves a lot of quite violent tapping), but you do have the benefit of various more powerful weapons, including lighting for zapping a vertical column of Entities, wind for pushing all the Entities safely off the screen to the right, black holes that suck passing Entities in (and presumably spit them out somewhere, but nowhere you need to worry about) and so on. In Story mode completing a level grants you coins which you can use to buy more of these weapons. In Survivor mode the Entities just keep on coming at ya. In both modes, allowing more than three Entities to sneak past the bottom of the screen means Game Over.
My tapping finger isn’t as nimble as it used to be, and as the game progressed I found using these weapons to be the only way to complete some of the levels. The Entities themselves don’t get smarter, but what they lack in smarts they make up for in numbers.
ForFictionMobile which created the app no longer seems to exist as such (for example, the ForFictionMobile site that used to host high score tables, donations etc., no longer exists), but thankfully the author Zoltán Lutor (zlutor) is still updating the app, which is why there’s now an aarch64 build available from both the Jolla Store and OpenRepos. If you want to spend some time saving the world, and don’t mind risking RSI in the process, then I recommend giving it a go.
Please feed us your news
This is a community update, and frankly we can’t always keep up with all the exciting stuff happening in the Sailfish community. Plus, the less of this we have to actually write ourselves the better. So please help us out by posting your Sailfish news updates to the forum as a reply to this post. We’ll collate as much of it as possible into one easily digestable post for the next update.
And don’t forget to join us at the community meeting every other Thursday on IRC. It’s a great place to discuss any of the content you see here, or to share your ideas for future updates. The next meeting will be on the 21st October, full details here.