blob: 1bc8448545960ba8f2861e647a526205f83bdad7 (plain
# Notes on BlackBerry OS 10 development in 2017
I recently broke my seven-year streak of only using smartphones in the tradition of Nokia's fabled N900. The reason for this change was the growing age of my Jolla phone combined with my continued desire for a working physical keyboard^[i.e. something better than the [TOHKBDv2](/article/nokia_heir_and_hardware_keyboards/)]. In today's market overflowing with faceless, exchangeable, uninspired and uniform touch-only devices this left me no choice but to opt for the last true BlackBerry: The Passport.
## Thoughts on OS 10
The BlackBerry Passport is the last device that was both manufactured by RIM and runs their QNX based OS 10 operating system. OS 10 offers everything you can expect from a state of the art smartphone operating system. Furthermore its communication stack is beyond comparison and renders any third-party mail, calendar, task and contact applications redundant - as one would expect of a device built by the erstwhile mobile handset pioneer. The system integrates perfectly with the hardware and features true multitasking that is exposed to the user in a Maemo-like fashion. One very nice feature is the keyboard's touch capability that allows for text-navigation and scroll movements without touching and thus obscuring the actual screen. Although the native app catalog obviously doesn't feature as many applications as are available on the big platforms I don't miss anything^[Especially since it offers an Android runtime analogously to what I am used to on Sailfish OS].
QNX is a unixoid real-time operating system that is very interesting in its own right. A nice side benefit of this is the ability to run a native terminal emulator and execute cross-compiled UNIX tools in the way I got used to during my time with Maemo and Sailfish OS. Sadly BlackBerry OS 10 is deprecated and won't receive future support as the whole platform has been discontinued^[I am not convinced by RIM's externally manufactured Android smartphone. Neither the build quality nor the software are anywhere near to what they offered with the Passport. I fear that they will further degrade the keyboard quality in future devices and expect them to fully disappear from the market within the next couple of years.].
Luckily I found the system to be very stable and feature complete. Thus I don't see any immediate problems requiring continued support - as long as I can compile and install my own code.
OS 10 application development is based mostly on C++ and Qt/QML which suits my preferences quite nicely. Additionally the default stack includes a Python 3.2 interpreter as well as the ability to install and run arbitrary APKs.
## Momentics IDE
BlackBerry offers a [native SDK](https://developer.blackberry.com/native/download/) which bundles a Eclipse-based IDE called _Momentics_ in addition to a full set of CLI utilities spanning the full development process. Installing and running it on my preferred distribution was straight forward. The only issue I encountered was the need to manually pass the path to an older XUL runner instance:
`~/tmp/xul/xulrunner` contains the extracted contents of a matching [XUL runtime version 10.0](https://ftp.mozilla.org/pub/xulrunner/releases/10.0/runtimes/) archive.
While enabling the development mode in the device's settings menu is just a toggle flick away and only requires a device password to be defined actually installing a program archive generated by Momentics requires one to register with RIM in order to be able to sign the archive. Fortunately enough this process is completely free and devoid of any further organisatory hurdles.
When I first tried to connect to my Passport via the IDE I encountered an SSL authentication error. All my attempts at solving this by temporarily disabling authentication via JVM flags failed. This issue also extended to browser based device access using e.g. [BB10 App Manager](https://www.gridbook.org/pb-app-mgr/) which failed due to a invalid server response. In fact the only thing that worked was the SSH connection initiated via the SDK's CLI utilities:
./blackberry-connect $device_ip -password $device_password -sshPublicKey ~/.rim/bbt_id_rsa.pub
After some investigation I was able to trace this issue to some custom system update trickery I performed during the first days of setting up the device^[Namely impatiently forcing an OS upgrade using [Sachesi](https://github.com/xsacha/Sachesi)]. Luckily this was easily solved by resetting the device to the latest OS 10 version via the official [autoloader](https://crackberry.com/blackberry-os-10332205-autoloader-files-now-available).
After solving this issue Momentics turned out to be a workable IDE that seems to be enough for most purposes. Should this turn out to be a premature assessment it will be worthwhile to check out older versions of _Qt Creator_ which include BlackBerry 10 support. And if everything visual fails there are still the SDK's CLI utilities that allow for fully text driven packaging, signing and deployment of applications:
λ ~/t/m/b/h/l/x/u/bin ● ls | grep blackberry
## Device-local development
As the alert reader might have noticed everything described in the last section hinges on the continued willingness of BlackBerry to generate and distribute development certificates without which one cannot deploy applications to physical devices. This is probably one of the primary tradeoffs one makes when leaving the world of open mobile systems behind.
Luckily there is a way to cross compile, install and run arbitrary CLI programs without even enabling the development mode: [mordak/playbook-dev-tools](https://github.com/mordak/playbook-dev-tools).
This set of scripts developed by the same person that wrote the premier [native terminal emulator for OS 10](https://github.com/mordak/Term48) offers a fully automated systems that compiles and installs _GCC 4.6.3_ amongst further development and system utilities.
It remains to be investigated if this entry point can be expanded to device-local development of full Cascades-based UI applications.