Das Salz und Pfeffer in der Programmierung: NaCl (Native Client SDK)

Salz und Pfeffer – mit NaCl (Native Client SDK) C/C++ im Browser programmieren

Wer Geschwindigkeit benötigt, der kommt an Salz und Pfeffer nicht vorbei. Ein Artikel von Hans Christian Wilhelm.

Dank hochoptimierter JavaScript Engines und Just-In-Time Compilern, lassen sich in modernen Browsern selbst komplexe Anwendungen realisieren.
Allerdings handelt es sich immer noch um eine Kompromisslösung zwischen der Ladezeit der Webseite und Optimierung des JavaScript Codes. Kommt
es wirklich auf Performance an, kommt man nicht an Compiler Sprachen wie C und C++ vorbei. Hierfür stellt der Google Chrome Browser das Native
Client SDK (NaCl) bereit, mit dem es möglich ist C/C++ für den Browser zu Programmieren. Der resultierende Maschinencode ist hochoptimiert und läuft
auf jedem x86 und x64 kompatiblen Prozessor, und kann über ein <embed> Tag in die HTML Seite eingebunden werden.

1 Einführung

Der Chrome Native Client (NaCl) ist eine von Google entwickelte Technologie um im Browser kompilierten C/C++ Code auszuführen und erweitert so die Möglichkeiten
der Webprogrammierung über JavaScript hinaus. Das Open-Source SDK läuft auf jeder Plattform auf dem der Chrome Browser zur Verfügung steht, also Windows, Linux und
Mac. Neben den benötigten Libraries beinhaltet das SDK auch alle nötigen Werkzeuge um Native Client Code zu generieren und im Browser auszuführen.

2 Anwendungsgebiete

Benutzung bestehender Software : NaCl ermöglicht es bereits bestehende Software Komponenten auch für den Browser verfügbar zu machen. Man erspart sich das neuimplementieren
und debuggen von Code, der bereits funktioniert.
Desktop Anwendungen : NaCl macht es möglich bestehende Desktop und Enterprise Anwendungen auf den Browser zu migrieren. Dabei überlässt man das Number Crunching
dem Native Client und überlasst dem Browser das Darstellen der GUI und das Handling der Benutzereingaben.
Native Client (NaCl) in der Chrome sandbox

Abbildung 1: NaCl in der Chrome sandbox
Multimedia : Codecs für die Verarbeitung von Video, Bildern und Sound können nativ ohne Geschwindigkeitsverluste im Browser ausgeführt werden.
Spiele : Durch API’s für Multithreading, OpenGL und low-latency Audio ermöglicht der Native Client Spiele die flüssig im Browser laufen. Z.B. Ist die DOS-Box nach NaCl
portiert worden und man kann Klassiker wie Monkey Island oder Duke Nukem eingebettet in einer Webseite zocken [NaClBOX].

3 Anatomie oder Salz und Pfeffer

Damit ein eingebundenes Native Client (NaCl) Modul mit seinem Host Browser kommunizieren kann, hat Google passend zu NaCl die Pepper Plugin API (PPAPI) entwickelt.
Mit der Hilfe der Pepper API kann ein NaCL Modul, über ein Event basiertes Message System, Funktionen des Browsers Steuern. Z.B.

  •  JavaScript ansteuern
  •  FileIO
  •  Audio
  •  3D Graphik

4 Fazit

Auch wenn der Native Client nach einer vielversprechenden Lösung für High-Performance-Computing im Browser aussieht, muss man doch mit der Einschränkung leben, das NaCl
nicht Cross Browser kompatibel ist, was dieWahl des Browsers doch ziemlich einschränkt. Darüber hinaus gibt es noch weitere schwere bis mittelschwere Einschränkungen.
Native Client (NaCl) mit Pepper Bridge

Abbildung 2: Pepper Bridge

  •  Keine IDE Integration
  •  Schwer zu debuggen
  •  Nur Threadding keine Sub-Prozesse
  •  Keine TCP/UDP Sockets
  •  Keine Unterstützung für blocking IO
  •  Inline Assembler muss den NaCl Validator überleben
  •  Pepper API Aufrufe sind nur aus dem NaCL main Thread möglich

Literatur

[NaCl] Google Chrome Native Client https://developers.google.com/native-client
[NaClBOX] Native Client Dos-Box http://www.naclbox.com/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.