Fuchs als Plattform

Erste Schritte mit Firefox OS
Keine Kommentare

Mozilla kündigte sein Mobilcomputerbetriebssystem mit großem Tamtam an – in Deutschland lieferte Congstar das Onetouch Fire an seine Kunden aus. Seit diesem Zeitpunkt hört man nur mehr wenig von der Plattform. Wir fragen: wie geht es FFOS?

Im Rahmen der Erstauslieferung arbeitete Mozilla mit dem spanischen Start-up Geeksphone zusammen: Die Iberier erwiesen sich als Meister der Unterproduktion, Entwickler mussten wochenlang warten. Zu allem Überfluss hatte das Buchungssystem mit vielen Kreditkartentypen seine liebe Not.

Doch damit nicht genug, denn die erste Hardwaregeneration war größtenteils von miserabler Qualität. Die Geeksphone-Produkte erwiesen sich als mangelhaft verarbeitet und stellenweise fehlerhaft; der Keon war im Vergleich zu anderen europäischen Smartphones stark unterkommissioniert. Firefox OS 1.0 musste zudem ohne Hardwarebeschleunigung auskommen – die Performance war dementsprechend nicht sonderlich berühmt.

Wieso FFOS?

Smartphones sind in der „entwickelten Welt“ weit verbreitet: in Europa, Amerika und Teilen von Asien haben sie klassische Dumbphones fast komplett verdrängt. In Afrika sieht die Situation dramatisch anders aus: Systeme wie M-Pesa funktionieren auf J2ME-Hardware, die für 30 US-Dollar ihren Besitzer wechselt.

Große Mengen von Arbeitsspeicher sind in diesem Preisbereich nicht finanzierbar. Da die Darstellung moderner Webseiten immense Mengen von RAM voraussetzt, waren die Browser derartiger Geräte meist mehr als grottig. Mozilla umgeht dieses Problem durch den in Abbildung 1 gezeigten Kniff.

Abb. 1: Wo ist der Grafikstack? (Bildquelle: Mozilla)

Abb. 1: Wo ist der Grafikstack? (Bildquelle: Mozilla)

Auf klassischen Betriebssystemen teilt sich der Browser den knappen Arbeitsspeicher mit einem mehr oder weniger umfangreichen GUI-Stack: Böse Zungen würden davon sprechen, dass das Telefon unter zwei Softwareschichten stöhnt und ächzt.

Mozilla umgeht dieses Problem durch Erweiterung des Browsers. Die als Gecko bezeichnete HTML5-Darstellungsschicht arbeitet direkt mit dem Kernel zusammen. Das eigentliche Benutzerinterface des Telefons entsteht in Form von Webseiten, die in Gecko ausgeführt werden; Duplikationen lassen sich auf diese Art und Weise effektiv vermeiden.

Die Meriten dieser Architektur zeigen sich beim Öffnen einer Webseite. Mit dem – aus Hardwaresicht primitiven – Geeksphone Keon lässt sich sehr bequem surfen. Vergleichbar ausgestattete Smartphones mit Android oder Windows Phone bieten weitaus schlechtere Performance.

Firefox OS setzt auf die Nutzung von JavaScript und HTML5, es ist also nicht möglich, das Betriebssystem mit „nativem“ Code zu versorgen. Klassisches Java lässt sich – im Moment – überhaupt nicht ausführen, während die C++-Laufzeitumgebung Emscripten bei größeren Projekten (Stichwort Qt) mit mangelhafter Performance nervt.

Die Fokussierung auf JavaScript als Entwicklungsumgebung führt zudem dazu, dass Code zwangsweise quelloffen wird. Komplexe Algorithmen lassen sich nur durch die Verlagerung auf einen hauseigenen Server schützen – dass die App dann nur bei bestehender Internetverbindung funktioniert, ist der Preis der Sicherheit.

Alles im Browser

Firefox OS kommt ohne dedizierte Entwicklungsumgebung aus: Wer Applikationen für die Plattform erstellen möchte, tut dies mit dem Firefox-Browser für den Desktop. Mozilla bietet eine spezielle Developer-Edition an, die sich unter Unix nach dem Entpacken durch Anwerfen der Firefox-Binärdatei anwerfen lässt:

tamhan@TAMHAN14:~/Desktop/deadstuff/2015August/SUSFFOS/firefox$ ./firefox
(process:14127): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed

Achten Sie darauf, dass das Terminal während der gesamten Programmausführung geöffnet bleiben muss, diverse dort aufscheinende Fehlermeldungen sind indes ohne größere Relevanz. Die Developer-Edition arbeitet mit einem eigenen Profil, weshalb sie neben einer normalen Version von Firefox existieren kann. Achten Sie lediglich darauf, dass die Developer-Edition von Haus aus Statistiken an Mozilla zurückschickt: Dieses Verhalten lässt sich unter Preferences | Advanced | Enable Firefox Developer Edition Health Report deaktivieren. Klicken Sie danach auf das WebIDE-Symbol, um die im Browser integrierte Entwicklungsumgebung zu starten (siehe Abb. 2).

Abb. 2: Das Weltkugelsymbol erlaubt das Öffnen der Firefox-OS-Entwicklungsumgebung

Abb. 2: Das Weltkugelsymbol erlaubt das Öffnen der Firefox-OS-Entwicklungsumgebung

Emulatoren für Handcomputerbetriebssysteme sind im Allgemeinen anfällig. Firefox OS ist eine löbliche Ausnahme, denn der Emulator funktioniert perfekt. Achten Sie dabei darauf, eine weit verbreitete Version zu wählen: Firefox OS 1.3 ist eine vernünftige Baseline, da die Vorgängergeräte keine nennenswerte Performance bieten. Version 2.0 führt ein signifikantes Redesign der Benutzerschnittstelle durch: Es kann unter Umständen sinnvoller sein, die zweite Version als Baseline zu wählen.

Wir wollen in den folgenden Schritten mit Version 2.0 arbeiten. Klicken Sie auf Select Runtime | Simulators | Firefox OS 2.0, um den Simulator zu starten. Wenn es im Rahmen des Starts zu einem Fehler in der Art „No D-BUS daemon running“ kommt, so müssen Sie die Developer-Edition mit Rootrechten neu starten.

Time-outs beim Öffnen der Debuggerkonsole sind auf einen in älteren Simulatoren enthaltenen Bug zurückzuführen, der indes nur selten auftritt. Wenn Ihr System betroffen ist, wechseln Sie stattdessen auf Version 2.2 des Simulators.

Da Mozilla sein eigenes Add-on im Moment nicht signiert (Abb. 3), müssen Sie unter firefox:config die Eigenschaft xpinstall.signatures auf False setzen.

Abb. 3: Das ist kaum Sinn der Übung

Abb. 3: Das ist kaum Sinn der Übung

In Rom, wie die Römer …

Technisch erfahrene Nutzer finden sich normalerweise auch in seltsam gestalteten Apps zurecht. Wer mit Windows Mobile, Symbian und Palm OS hantiert hat, scheitert höchstens an der Benutzerschnittstelle von Blender. Wer das erste Handy seines Lebens in der Hand hat, sieht die Situation anders: Konsistenz ist für ihn von eminentester Bedeutung.

Firefox OS ist vergleichsweise einfach aufgebaut. Abbildung 4 zeigt den Programmstarter – Widgets bietet das Betriebssystem aus weiser Voraussicht erst gar nicht an.

Die einzelnen Apps orientieren sich im Großen und Ganzen an der Gestaltung des Material-Designs. Mozilla legt dabei immensen Wert auf den Header, der mit Buttons und Unterzeilen ausgestattet werden darf.

Die bereitstehenden Human Interaction Guidelines enthalten weitere Vorgaben. Mozilla bittet seine Entwickler beispielsweise darum, bei der Auswahl der Akzentfarben aus einigen dutzend vorgegebenen Schattierungen zu wählen.

Abb. 4: Alles ordentlich und aufgeräumt

Abb. 4: Alles ordentlich und aufgeräumt

Die ersten Schritte

Nach diesen einführenden Überlegungen wollen wir nun mit der eigentlichen Realisierung eines Beispielprogramms beginnen. Klicken Sie auf Project | New App, und wählen Sie daraufhin die Option Privileged App aus. Als Name wollen wir SUSFFOS annehmen: Bei der Auswahl des zu verwendenden Work-Verzeichnisses haben Sie freie Wahl.

WebIDE generiert daraufhin die in der Abbildung 5 gezeigte Struktur, die sich – bis auf die für die App-Einstellungen zuständige Manifest-Datei – nicht von einer klassischen Webseite unterscheidet.

Abb. 5: Web-Apps sind verpackte Webseiten

Abb. 5: Web-Apps sind verpackte Webseiten

Da das manuelle Neuimplementieren der sowieso vorhandenen Steuerelemente nicht wirklich sinnvoll ist, greifen wir stattdessen auf die als „Building Blocks“ bezeichnete Widget-Sammlung zurück. Die bereitstehende Komponentensammlung war für Firefox OS 2.0 vorgesehen; sie wird jedoch auch für die Versionen 2.1 und 2.2 empfohlen.

Es empfiehlt sich das Herunterladen des rund 310 MB großen Gesamtarchivs. Ist dies nicht möglich, so bietet sich alternativ auch ein Fallback auf die Sub-Version an.

Besuchen Sie im nächsten Schritt die bereitstehenden Deployment-Anweisungen für die jeweilige Komponente. Wir wollen einen Header implementieren: Kopieren Sie also die Datei headers.css und den /headers/Unterordner in das Stammverzeichnis des von der WebIDE erstellten Projekts.

Der eigentliche Zusammenbau des Formulars erfolgt sodann anhand des dort vorgegebenen Beispiels. Für die Realisierung eines Headers wäre Listing 1 die „Mindestanforderung“ (Abb. 6).

<!doctype html>
<html>
<head>
  <link href="headers.css" rel="stylesheet" type="text/css">
  <style>
    html, body {
      margin: 0;
      padding: 0;
      font-size: 10px;
      font-family: sans-serif;
      background-color: #fff;
    }   

  </style>
</head>
<body>
<section role="region">
  <header>
     <menu type="toolbar"><button>done</button></menu>
    <h1>Hallo SUS</h1>
  </header>
  <header>
    <h2>Hier gibt es mehr!</h2>
  </header>
</section>

</body>
</html>
Abb. 6: Dieser Header ist nicht besonders kompliziert

Abb. 6: Dieser Header ist nicht besonders kompliziert

Beachten Sie, dass es bei der Realisierung der Steuerelemente mitunter zu seltsamen Dependancen kommt. So funktionieren Header nur dann, wenn das im Listing gezeigte Style Sheet eingebunden wird. Als einfacher Workaround bietet sich die Erstellung einer „leeren“ App anhand des vorgegebenen Beispiels an, die danach Schritt für Schritt erleichtert wird. Am Ende bleibt auf diese Art und Weise ein „Skelett“, das ins eigentliche Formular transferiert wird.

Aus didaktischen Gründen wollen wir unser kleines Beispiel noch um einen „ValueSelector“ ergänzen; dabei handelt es sich um einen Hybriden aus List- und Combobox. Zu seiner Realisierung benötigen wir neben den Inhalten von value_selector.css samt Ordner auch den Ordner /Icons/ und die Datei icons.css. Die darin enthaltenen Symbole lassen sich mit den meisten Steuerelementen kombinieren und sollten schon aus diesem Grund in jedes Firefox-OS-Projekt wandern.

Für den Wechsel zwischen den beiden Seiten nutzen wir zudem jQuery, das aus Bequemlichkeitsgründen direkt aus der Cloud eingebunden wird. Die aus dem vorigen Schritt bekannte Seite mit dem Header wechselt nun in ein <div>-Tag. Die eigentliche Intelligenz des Selektors sitzt in einem weiteren <div> (Listing 2).

<div id="form2">
  <form role="dialog" data-type="value-selector">
    <section class="scrollable">
      <h1>Select</h1>
      <ol role="listbox">
        <li role="option" id="elemA"><label role="presentation"> <span>A</span></label></li>
        <li role="option" id="elemB"><label role="presentation"> <span>B</span></label></li>
        <li role="option" id="elemC"><label role="presentation"> <span>C</span></label></li>
        <li role="option" id="elemD"><label role="presentation"> <span>D</span></label></li>
      </ol>
    </section>
  </form>
</div>

App.ss ist für die Realisierung der Logik zuständig. Da wir uns auf das Anzeigen des Selektors und das Deaktivieren durch Klick auf die Option A beschränken, sieht der Code aus wie in Listing 3.

$(document).ready(function() {
  $('#form2').hide();

  $( "#launchKnob" ).click(function() 
  {
   $('#form1').hide();
   $('#form2').show();

  });
  $('#elemA').click(function()
  {
   $('#form1').show();
   $('#form2').hide();
    
  });
});

Web auf Speed

Mozilla betritt mit Firefox OS technisches Neuland. Seit den ersten und nur wenig erfolgreichen Versionen von Palm WebOS gab es kein Betriebssystem, das sich ausschließlich durch JavaScript ansprechen lässt. Daraus folgt, dass viele dringend benötigte Funktionen schlichtweg nicht spezifiziert sind. So gib es z. B. keinen Webstandard für den Zugriff auf die Kamera.

Firefox OS begegnet diesem Problem durch die Einführung von als Web-API bezeichneten Programmierschnittstellen. Meist handelt es sich dabei um hauseigene Schnittstellen, die Mozilla anderen Browserherstellern zur Implementierung anbietet.

Firefox OS mit Cordova
Das Hantieren mit den hauseigenen Schnittstellen von Firefox OS ist nicht jedermanns Sache. Adobe verspricht mit einer Portierung von Cordova Abhilfe, die einen Gutteil der von Android und iOS mitgebrachten Plug-ins unterstützt.
Achten Sie beim Recycling der Benutzerschnittstelle darauf, dass Firefox OS nicht mit allen GUI-Frameworks zusammenarbeitet. Das von WebOS bekannte Enyo nervt beispielsweise mit Problemen beim Auswerten von Touchscreen-Ereignissen.

Die Qualität der APIs ist von Fall zu Fall unterschiedlich: In manchen Bereichen zeigt sich Mozilla von der mitdenkenden Seite, während man anderen Modulen noch eine gewisse Unreife anmerkt. Eindeutig ist indes, dass sich die Version 2.0 auch in dieser Hinsicht stark verbessert hat.

Kommunikation mit Firefox OS

Heutige Handcomputerapplikationen erledigen die an sie gestellten Aufgaben meist im Zusammenspiel mit einem Server. Firefox OS bietet mehrere Kommunikationsmöglichkeiten an: klassisches XHR ist natürlich implementiert, setzt beim Zugriff auf beliebige Domains aber das Vorhandensein einer nur für privilegierte Applikationen verfügbaren Permission voraus.

WebSockets sind von Mozillas Geschenk an die Entwicklerschaft nicht betroffen: Wer die betreffende Permission deklariert, kann nach Lust und Laune kommunizieren. Als Backend kommt dabei in vielen Fällen Node.js zum Einsatz; wenn Sie aus irgendwelchen Gründen lieber auf „klassischere“ Entwicklungsumgebungen setzen möchten, müssen Sie nur nach einer für Sie geeigneten WebSocket-Implementierung suchen. Frameworks wie Qt unterstützen die HTTP-Abart mittlerweile out of the box.

Paradox ist die Entscheidung, die an sich vollständige TCP-Socket-Implementierung nur für privilegierte Applikationen freizugeben. Dies ist insofern kritisch, als die im nächsten Schritt im Detail vorgestellten Produkte hoher Zertifikationsstufe aufwändige QA-Prozesse durchlaufen müssen. Support für UDP ist in Firefox OS im Moment nicht vorgesehen.

Achtung: Kastensystem!

Symbian OS begegnete dem Aufkommen von Handcomputerviren durch die Einführung von Platform Security. Die dahinterstehende Idee ist einfach: Wenn Entwickler die von ihren Programmen verwendeten Capabilities vor der Nutzung deklarieren müssen, so lassen sich empfindliche Apps leichter erkennen und einer sorgfältigeren Kontrolle unterziehen.

In Firefox OS erfolgt die Deklaration an zwei Stellen. Das Type-Attribut legt die Art der Applikation fest, während das Permissions-Array die angeforderten Berechtigungen samt einer Erklärung für die Anforderung enthält. Im Fall unseres Projektskeletts sieht dies so aus:

"type": "privileged",
"permissions": {
  "systemXHR": {
    "description": "Required to load remote content"
  }
}

Firefox-OS-Applikationen lassen sich gemäß der in Abbildung 7 gezeigten Taxonometrie unterteilen. Der wichtigste Unterschied ist die Verteilung: Eine am Server des Entwickler liegende Applikation muss sich nicht lange mit QA aufhalten, bekommt aber nur wenige Rechte. Ein weiterer Unterschied ist, dass webbasierte Apps im Firefox OS Store nicht als aktualisiert erscheinen können und somit auf einen wichtigen Marketingvorteil verzichten müssen.

Abb. 7: Mozilla kennt mehrere Arten von Applikationen

Abb. 7: Mozilla kennt mehrere Arten von Applikationen

Achten Sie darauf, dass privilegierte Applikationen einer vergleichsweise strengen Verifikation unterliegen. So ist das direkte Einbinden von JavaScript nach folgendem Schema verboten – Event Handler müssen wie weiter oben gezeigt initialisiert werden:

<button onclick="buttonClicked">Aktiviere Selektor</button>
</section>

Statistische Verteilung der Nutzerschaft

Auf Firefox OS basierende Hardware ist zum Zeitpunkt der Drucklegung in 28 Ländern verfügbar. Als Anbieter eines wissenschaftlichen Taschenrechners kann das Unternehmen des Autors auf genaue Informationen über die Verteilung der Nutzerschaft zurückgreifen.

Ein am 3. August gezogener „Durchschnitt“ ergibt das in Abbildung 8 gezeigte Bild.

Abb. 8: Nutzer von Firefox OS finden sich „abseits des Mainstreams“

Abb. 8: Nutzer von Firefox OS finden sich „abseits des Mainstreams“

Aus der Logik folgt, dass diese Kundenverteilung die Lokalisation der Applikationen wichtiger werden lässt. In vielen der in der Abbildung an führender Stelle genannten Staaten spricht man nicht oder nur sehr leidlich Englisch; wer sein Produkt (und die dazugehörenden Metadaten) in der Sprache des Ziellands anbietet, schafft sich Freunde.

Probleme mit M

Die Dokumentation von Firefox OS hat sich seit der Auslieferung des Betriebssystems wesentlich verbessert; die Arbeit mit der WebIDE macht richtig Spaß. Bei aller Euphorie dürfen Sie als Entwickler allerdings nicht vergessen, dass die kommerzielle Zukunft des Systems alles andere als gesichert ist.

Erstens sei die Kontroverse um Brendan Eich genannt. Seine Position im Bezug auf gleichgeschlechtliche Partnerschaften ist mit Sicherheit nicht die meine: Das rapide Zurückziehen der Person signalisierte trotzdem organisatorische Verwundbarkeit.

Problem Nummer zwei ist die unsichere finanzielle Situation des Mutterhauses. Firefox verliert seit längerer Zeit Marktanteile – die Spielereien mit Google dürften sich auf die finanzielle Gesundheit nicht positiv auswirken.

Was bleibt?

Wir wollen diesen Artikel mit einer kleinen Parabel beenden. Der Anbieter einer Firefox-OS-Applikation sprach mit einem seiner in Afrika lebenden Poweruser: Der gute Herr war Universitätsprofessor im Staatsdienst.

Nach Meinung des Autors wird Firefox OS in Entwicklungsländern erfolgreich sein und seine Aufgabe erfüllen: Eine abgespeckte Version der Firma Mozilla kann vom Verkauf von Lizenzen und/oder Apps leben: Die Masse eines „Africa Rising“ kompensiert die minimalen Einkommen pro Nutzer. Entwickler in der „westlichen Welt“ werden davon indes nur wenig profitieren.

Als westlicher Entwickler kann man am Rand mitspielen und sich daran erfreuen, der Welt eine gute Tat getan zu haben.

Aufmacherbild: Fox abstract isolated von Shutterstock / Urheberrecht: Romanya 

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
X
- Gib Deinen Standort ein -
- or -