Der Internet Computer soll das Internet dezentralisieren und unabhängiger machen. Die Programmierung und Ausführung von Anwendungen funktioniert über WebAssembly, um den Entwickler:innen die Wahl der Programmiersprache zu überlassen.
Zusätzlich steht eine eigens entwickelte Programmiersprache namens Motoko zur Verfügung, um das Programmiermodell des Internet Computers noch direkter zu unterstützen. Ein Überblick.
Der Internet Computer repräsentiert eine innovative Cloud-Computing-Plattform, entwickelt, um das Internet zu dezentralisieren. Der Blockchain-basierte Internet Computer wird über ein Netzwerk unabhängiger Datenzentren betrieben und nutzt das Internet Computer Protocol (ICP). Mit ICP können Entwickler:innen Software und Daten im Internet bewegen, feste physikalische Adressen sind nicht mehr notwendig. Ein algorithmisches Governance-System, das sogenannte Network Nervous System (NNS), steuert die Plattform. Mittels einer Token-Ökonomie sollen Infrastruktur-Betreiber und Anwendungsentwickler:innen unabhängig voneinander agieren und so zum programmierbaren Web zurückkehren können. Das native Hosting und der Wegfall von Legacy Software machen es deutlich einfacher, Web-Anwendungen zu entwickeln.
Flexibilität durch WebAssembly
Um Anwendungen im Internet bereitzustellen, waren Entwickler:innen bisher auf das wenig performante JavaScript angewiesen. Um auch andere Programmiersprachen nutzen zu können, entwickelte das World Wide Web Consortium (W3C) eine neue Methode: WebAssembly (Wasm) ist ein Low-Level-Code-Format, welches besonders portabel, sicher und effizient ist. Entwickler:innen können nun jede Programmiersprache verwenden, die sich zu Wasm kompilieren lässt. Wasm steht als Standard in fast allen aktuellen Browsern zur Verfügung. Als offener Standard und universelle Plattform kommt Wasm inzwischen vermehrt auch bei Anwendungen wie Cloud Computing, Edge Computing, Mobile, eingebetteten Systemen, IoT und Blockchain zum Einsatz.
Wasm ist – im Gegensatz zu anderen virtuellen Maschinen – nicht auf eine Programmiersprache hin optimiert, sondern abstrahiert die zugrundeliegende Hardware. Wasm funktioniert dabei als Bytecode: eine Sammlung von Befehlen, die als Zwischenstufe bei Kompilierung entsteht. Das führt zu hoher Performance, denn die Umwandlung des Bytecode in Maschinencode ist vergleichsweise einfach. Die starke Modularität und strenge mathematische Spezifikationen sorgen dafür, dass Anwendungen ohne undefinierte oder unnötige Aktionen ausgeführt werden.
Motoko: Warum noch eine neue Programmiersprache?
Bei aller Flexibilität, die Wasm bietet, gibt es einige ganz praktische Herausforderungen. Die Portierung einer bestehenden Programmiersprache auf Wasm ist mit etwas Aufwand verbunden: Zunächst müssen ein neues Compiler Backend implementiert und das Laufzeitsystem sowie die Library Primitives portiert werden. Zudem lassen sich einige Funktionen, darunter Threads, Co-Routinen, Exceptions und Tail Calls mit Wasm bisher nicht ohne weiteres umsetzen, klassische Betriebssystemfunktionen (wie zum Beispiel Dateien oder E/A) werden nur teilweise unterstützt.
Diese Lücken soll die spezialisierte Programmiersprache Motoko schließen. Sie unterstützt das Programmiermodell des Internet Computers und dessen spezifische Merkmale direkt und vereinfacht damit das Erstellen von Anwendungen. Dabei ähnelt Motoko ganz bewusst anderen modernen Sprachen: So werden beispielsweise die gewohnten Typologien aus geschweiften Klammern und Semikolons genutzt, damit versierte Entwickler:innen sich in Motoko schnell zu Hause fühlen. Jedes Konstrukt ist eine Expression, liefert also kontextbezogene Werte.
Funktionen wie Closures, Variant-Datentypen, musterbasierte Suchen und Speicheroptimierungen wie die Garbage Collection sind enthalten. Hinzu kommen kleinere, praktische Anpassungen, wie etwa, dass Zahlen per default nicht überlaufen können und lokale Variable auf immutable gesetzt sind. Motoko stellt einen interaktiv nutzbaren Interpreter und einen eigenständigen Compiler bereit, die Nutzung ist optional. Die Interaktion kann ebenso über einen Editor der Wahl mit Hilfe der dfx-Befehlszeile passieren.
Motoko und seine Akteure
Motoko basiert auf einem Modell, das mit Akteuren (Actors) arbeitet. Jede Anwendung ist ein Akteur, der mit anderen Akteuren kommuniziert, in dem Nachrichten asynchron übermittelt werden. Dabei ist der Akteur eine besondere Art von Objekt, seine Nachrichten werden in einem isolierten Zustand weitergegeben und auch isoliert voneinander verarbeitet. Das heißt, es entsteht beim Empfänger eine Warteschlange aus Nachrichten, die strikt der vorgegebenen Reihenfolge nach abgearbeitet wird (atomically execution). Motoko eignet sich deshalb gut für Szenarien, in denen gleichzeitig oder verteilt programmiert wird; denn unglückliche Konstellationen wie race conditions (das Ergebnis einer Operation ist abhängig vom zeitlichen Verhalten einer anderen) oder deadlocks (mehrere Prozesse beanspruchen ein Objekt, das der andere Thread bereits blockiert) entstehen gar nicht erst.
Auch zur Internet-Computer-Plattform passt dieses Modell gut: Denn Anwendungen werden in von Form von Kanistern (canisters) bereitgestellt. Das sind im Prinzip ebenfalls Akteure, die als Wasm-Modul dargestellt werden und über Subnetzwerke hinweg kommunizieren können. Mit der Einführung von Futures – gewissermaßen ein Platzhalter für das Ergebnis eines asynchronen Aufrufs – kann innerhalb von Motoko mit Ergebnissen gearbeitet werden, obwohl das in einem reinen Akteurs-Modell nicht funktioniert.
Darüber hinaus soll Motoko es den Nutzer:innen ermöglichen, Blockchain-Technologien zu nutzen, ohne Experte dafür zu sein. So wurden einige Blockchain-Spezialfunktionen entfernt. Stattdessen implementiert der Internet Computer eine sogenannte orthogonale Persistenz: Die Anwendung „denkt“, sie laufe ewig auf ihrem Speicherplatz. Für die Arbeit mit Motoko bedeutet das, dass sich Entwickler:innen nicht darum kümmern müssen, ihre Daten explizit zu speichern.
Motoko ist eine Möglichkeit, um Anwendungen für den Internet Computer zu entwickeln. Dank Wasm können Entwickler:innen ebenso ihre gewohnte Programmiersprache verwenden. Doch Motoko ist bewusst so nah an Wasm und dem Internet Computer angelehnt, dass Portierungsaufwände und Code-Anpassungen wegfallen. So wird Motoko zu der Programmiersprache mit der direkt im Internet programmiert werden kann. Weiterführende technische Details und Ressourcen zu Motoko sind auf dem entsprechenden GitHub-Repository verfügbar. Für zusätzliche Informationen und Netzwerkmöglichkeiten steht der DeArk.io als die deutsche Anlaufstelle und Entwickler:innen-Hub für den Internet Computer zur Verfügung.