Die Evolution der Programmierumgebungen hat in den letzten Jahren einen bedeutenden Schritt mit der Nutzung von WebAssembly (WASM) erlebt. WebAssembly ermöglicht es, Programmiersprachen, die traditionell nativ auf Rechnern oder Servern laufen, performant im Browser auszuführen. Eine der jüngsten und spannendsten Entwicklungen ist die Einführung von R – einer der populärsten Statistik- und Datenanalyse-Sprachen – direkt im Browserumfeld mit der neuen WebAssembly-Distribution emscripten-forge. Diese Innovation eröffnet vor allem für die wissenschaftliche Datenanalyse und interaktive Notebooks neue Aussichten. QuantStack, ein wegweisendes Entwicklerteam, hat unter maßgeblicher Federführung von Isabel Paredes und finanzieller Unterstützung durch die Bill & Melinda Gates Stiftung intensiv daran gearbeitet, den R-Sprachumfang für JupyterLite als Browser-basiertes Jupyter-Frontend zu ermöglichen.
Unter Einsatz von Technologien wie Emscripten und einem modernen Toolchain-Ökosystem wurde der R-Interpreter für das emscripten-wasm32 Ziel kompiliert. Damit verschwinden die bislang relevanten serverseitigen Restriktionen, da die Berechnung vollständig im Browser des Endnutzers ausgeführt wird. Die Bedeutung dieser Entwicklung ist insbesondere im Vergleich zu klassischen JupyterHub-Architekturen sichtbar. Dort benötigt jeder Nutzer eine eigene Server-Session, die hohe Ressourcen beansprucht und oft einen spezialisierten DevOps-Support erfordert, um hochskalierbar zu bleiben. JupyterLite verfolgt einen grundlegend anderen Ansatz: Es bildet die komplette Entwicklungsumgebung im Browser ab und setzt dabei auf WebAssembly-Kernels.
Die Vorteile liegen auf der Hand: Jeder Nutzer kann ohne Installation oder Backend-Abhängigkeiten eigene Notebooks ausführen – eine echte Demokratisierung der wissenschaftlichen Verarbeitung und ein enormer Schritt für die Zugänglichkeit von datenwissenschaftlichen Tools weltweit. Im Gegensatz zum Fokus auf Python, die traditionell das Herzstück der Jupyter-Community bildet, ist das JupyterLite-System von Anfang an sprachagnostisch konzipiert. Die Integration von R verdeutlicht diese Strategie und zeigt, dass das Ökosystem für weitere Programmiersprachen offen ist. So wird auch das Paketmanagement auf Basis von mamba und conda-forge zu einem zentralen Baustein, der über das Python-Universum hinaus Erweiterungen erlaubt. Die Cross-Kompilierung von R-Paketen für die WebAssembly-Plattform erlaubt dabei eine flexible und modulare Entwicklung von wissenschaftlichen Umgebungen im Browser.
Die Komplexität bei der Portierung von R basiert nicht zuletzt auf der Vielzahl an notwendigen Abhängigkeiten und der Programmiersprache selbst. R verwendet zahlreiche native Bibliotheken in C, C++ und besonders Fortran – etwa bei BLAS und LAPACK für numerische Berechnungen. Das Übersetzen dieser Komponenten nach WebAssembly erforderte eine ausgefeilte Toolchain. Der traditionelle C/C++ Cross-Compiler Emscripten wurde durch die Integration der Fortran-Compiler Flang erweitert. Flang, als Teil des LLVM-Projekts, leistet den entscheidenden Beitrag, die Fortran-Abhängigkeiten zuverlässig in WebAssembly ausführbar zu machen.
Dabei mussten umfangreiche Anpassungen vorgenommen werden, die unter anderem die Codegenerierung für das WebAssembly-Ziel sowie die Datenstrukturgrößen betreffen. Diese Patches tragen nachhaltig zur Verbesserung von Flang für zukünftige Anwendungen bei. Ein weiteres technisches Hindernis war die Entwicklung einer geeigneten Laufzeitbibliothek für Fortran, die mit Emscripten kompatibel ist. Die erfolgreiche Integration von libflang sichert die korrekte Ausführung zahlreicher R-Pakete, die Fortran-Code enthalten. Die Kombination aus Cross-Compiler, Laufzeitbibliothek und fertigen Paketrezepten bildet die Grundlage für eine stabile R-Umgebung im Browser.
Doch die Herausforderung geht weit über das reine R-Basis-System hinaus. R erfordert vielfältige Bibliotheken wie libiconv, zlib, bzip2 und viele mehr, die ebenfalls für WebAssembly portiert und auf die EmScripten-Plattform angepasst werden mussten. Besonders Problematisch erwies sich libcurl aufgrund seiner socket-basierten Netzwerkarchitektur, die nicht mit der sandboxed Umgebung von WebAssembly kompatibel ist. Daher musste libcurl forciert deaktiviert werden, was Einschränkungen für bestimmte R-Pakete nach sich zieht, die auf Netzwerkzugriffe angewiesen sind. Auch grafische Fähigkeiten von R wurden mit eingebracht.
Für die Darstellung von Grafiken wurden Bibliotheken wie libpng, cairo und pango erfolgreich cross-kompiliert. Die Cross-Kompilierung von glib, einer tiefen Abhängigkeit hiervon, war aufgrund seines Threadings-Mode sehr herausfordernd. Allerdings sorgten community-getriebene Patches dafür, dass Multithreading deaktiviert wurde und Emscripten kompatibel ist. Der Bauprozess von R selbst erwies sich als besonders anspruchsvoll, da R einen sogenannten Bootstrap-Ansatz verfolgt und während des Compilierens R-Skripte ausführt, um weitere Komponenten zu generieren. Dies funktioniert normalerweise nicht in einer Cross-Kompilierungssituation, weil die erzeugten binären Dateien für WebAssembly nicht nativ auf dem Hostsystem laufen.
Deshalb wurde ein zweiteiliger Build-Prozess realisiert, bei dem zunächst R und Rscript auf dem Hostsystem erzeugt werden, um anschließend R selbst für WebAssembly zu kompilieren. Dieser Ansatz ermöglicht die korrekte Erzeugung aller internen Datenbank- und Indexdateien. Parallel dazu mussten Systemaufrufe und Features, die WebAssembly nicht unterstützt, entfernt oder deaktiviert werden. Beispielsweise wurde die Nutzung von Xlib durch cairo abgelöst, um eine funktionale Bitmap-Grafikausgabe zu gewährleisten. Insgesamt wurden verschiedene Patches angewendet, die R zur WebAssembly-fähigen Plattform umgestalten.
Die Paketvielfalt von R ist essenziell für den produktiven Einsatz. Viele Pakete sind rein in R implementiert und daher problemlos auf emscripten-forge lauffähig. Für Pakete mit kompilierter Komponente werden spezifische Rezepte entwickelt. Dank der Mitwirkung der Community stehen bereits zahlreiche populäre Pakete zur Verfügung, wodurch ein vollwertiges Ökosystem entsteht. Die meisten Pakete lassen sich problemlos mit simplen Kommandos cross-kompilieren, manche erfordern geringfügige Anpassungen.
Damit Anwender R komfortabel im Browser nutzen können, ist ein Jupyter-Kernel notwendig. Der populäre IRkernel basiert auf ZeroMQ, welches im WebAssembly-Umfeld nicht nutzbar ist. Daher wurde Xeus-R favorisiert, eine Konzeption, die auf einem nativen Jupyter-Protokoll aufsetzt und speziell für JupyterLite entwickelt wurde. Xeus-R besitzt die gleiche Funktionalität für reichhaltige Darstellungen und wird durch die Nutzung der IRdisplay und repr R-Pakete ergänzt. Das Zusammenspiel von Xeus-R und JupyterLite ist ein Musterbeispiel für moderne Softwarearchitektur, da der Kernel nicht nur mit R-Code arbeitet, sondern auch ein in-memory-Dateisystem im Browser verwaltet.
Die Installation und Verwaltung von Paketen erfolgt mit mambajs – einer JavaScript-Implementierung des Paketmanagements –, die On-Demand Pakete aus conda-Umgebungen in das JupyterLite-Dateisystem lädt. Dieses Verfahren ist äußerst innovativ und wurde maßgeblich von der Python-Community mit Pyodide inspiriert und auf R übertragen. Für die Community und Entwickler gibt es vorgefertigte Vorlagen und Tools, um eigene JupyterLite-Deployments mit dem R-Kernel und individuellen Paketen auf GitHub Pages zu erstellen. Die Anpassung erfolgt durch einfache environment.yml-Dateien, welche die gewünschten Pakete definieren.
So können maßgeschneiderte R-Umgebungen für verschiedenste Lern-, Forschungs- oder Präsentationszwecke bereitgestellt werden. Die laufende Arbeit bei QuantStack und Partnern zielt darauf ab, weitere Features in Xeus-R zu integrieren, beispielsweise interaktive Jupyter Widgets. Ebenso steht die Modularisierung der Kernkomponenten an, die eine bessere Verzahnung mit etablierten Lösungen wie IRkernel ermöglichen soll. Außerdem werden weitere Programmiersprachen unter Verwendung derselben WebAssembly-Paketmanagement-Infrastruktur vorbereitet. Diese innovative WebAssembly-Distribution von R markiert einen bedeutenden Meilenstein auf dem Weg, statistische und datenwissenschaftliche Werkzeuge weltweit einfach und ohne technischen Mehraufwand verfügbar zu machen.
Die Kombination aus moderner Compiler-Technologie, umfangreichen Paketen und einem browserbasierten Entwicklungsframework wie JupyterLite bietet Forschern, Lehrenden und Studierenden neue Möglichkeiten, Daten direkt im Browser zu analysieren und zu visualisieren, ohne sich um Installation oder Infrastruktur kümmern zu müssen. Die offene Entwicklung, bei der die Community zum Mitwirken eingeladen ist, und die Unterstützung durch Förderinstitutionen wie die Bill & Melinda Gates Foundation betonen die gesellschaftliche Relevanz der Bemühungen. Mit R in der Browserumgebung wird ein weiterer Schritt für die Demokratisierung der Datenwissenschaft und die Beschleunigung von Forschung und Lehre realisiert – eine Entwicklung, die in den kommenden Jahren sicherlich noch weitreichende konzepte prägen wird.