Skip to content

Installing

Mert Cobanov edited this page Jul 29, 2026 · 3 revisions

Installing

BlackBerry OS 7 installs over the air. You open a .jad in the handset's own browser and it fetches the .jar beside it. No cable, no desktop tool, no signing.

Install the published build

On the handset's browser, over plain HTTP:

http://berryssh.cobanov.run/

Tap the install link. Done.

Host it yourself

python3 tools/ota_server.py out

Open the printed URL on the handset, over Wi-Fi.

Use this script, not python3 -m http.server. A generic static server sends the wrong MIME type and the handset then shows the descriptor as a page of text instead of installing it, with no error. The two that must be right:

berryssh.jad   text/vnd.sun.j2me.app-descriptor
berryssh.jar   application/java-archive

Two rules for any host

No HTTPS redirect. The device cannot complete a modern TLS handshake, so a hostname that redirects HTTP to HTTPS is simply unreachable from it. On Cloudflare, turn off "Always Use HTTPS" for that hostname. A .dev domain cannot work at all — it is HSTS-preloaded.

Serve both files no-store. The descriptor states the jar's exact byte length, and if a cache serves an old descriptor beside a new jar the install fails silently.

Upgrading

The version in the descriptor must increase. Equal is refused as already installed, and the message does not mention versions.

Saved connections survive upgrades — the stored format is versioned and older layouts are still read.

Why plain HTTP is not laziness

An OS 7.1 browser offers TLS 1.0 at best and its trust store is from 2011. A current CDN refuses TLS 1.0 and 1.1 outright and presents a certificate chained to a root that did not exist when the handset shipped. Neither half can be worked around from the device.

This applies only to fetching the installer. Once installed, berryssh does its own cryptography and never uses the browser's TLS.

Problems: Troubleshooting.

Clone this wiki locally