<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
  <id>https://jumplink.eu/de/blog/tags/android/feed.xml</id>
  <title>Pascal Garber – Android</title>
  <updated>2026-11-06T00:00:00Z</updated>
  <link rel="self" type="application/atom+xml" href="https://jumplink.eu/de/blog/tags/android/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://jumplink.eu/de/blog/tags/android/"/>
  <author>
    <name>Pascal Garber</name>
    <uri>https://jumplink.eu/</uri>
  </author>
  <entry>
    <id>https://jumplink.eu/de/blog/learn6502-everywhere/</id>
    <title>Learn 6502 läuft jetzt auf Linux, macOS, Windows und Android</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/learn6502-everywhere/"/>
    <published>2026-11-06T00:00:00Z</published>
    <updated>2026-11-06T00:00:00Z</updated>
    <summary>Learn 6502 Assembly läuft jetzt auf Linux, macOS, Windows und Android, alles aus einer TypeScript-Codebasis. Wie gjsify das möglich macht und welche Rolle KI dabei spielt.</summary>
    <content type="html">&lt;p&gt;Ich freue mich, dass &lt;a href=&quot;https://jumplink.eu/Learn6502/de/&quot;&gt;Learn 6502 Assembly&lt;/a&gt; ab Version 0.9.0 auf Linux, macOS, Windows und Android läuft 🐧🍏🪟🤖. Auf dem Smartphone lief Learn 6502 übrigens schon vorher, auf meinem OnePlus 6T mit &lt;a href=&quot;https://postmarketos.org/&quot;&gt;postmarketOS&lt;/a&gt; als ganz normale GNOME-App. Neu ist, dass es jetzt auch auf Android läuft.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://jumplink.eu/blog/2026/learn6502-everywhere-phones.webp&quot; alt=&quot;Learn 6502 auf zwei Smartphones im Herbstlaub: links ein OnePlus 6T mit postmarketOS und GNOME Mobile, rechts ein Samsung Galaxy S9 mit /e/OS&quot; loading=&quot;lazy&quot; title=&quot;Learn 6502 auf zwei Smartphones im Herbstlaub: links ein OnePlus 6T mit postmarketOS und GNOME Mobile, rechts ein Samsung Galaxy S9 mit /e/OS&quot;&gt;&lt;figcaption&gt;Learn 6502 auf zwei Smartphones im Herbstlaub: links ein OnePlus 6T mit postmarketOS und GNOME Mobile, rechts ein Samsung Galaxy S9 mit /e/OS&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Alle Downloads findest du auf der &lt;a href=&quot;https://jumplink.eu/Learn6502/de/&quot;&gt;App-Seite&lt;/a&gt;. Unter Linux ist &lt;a href=&quot;https://flathub.org/apps/eu.jumplink.Learn6502&quot;&gt;Flathub&lt;/a&gt; weiterhin der empfohlene Weg. Was die App kann, steht im &lt;a href=&quot;https://jumplink.eu/de/blog/learn6502/&quot;&gt;ersten Artikel&lt;/a&gt;. Hier geht es darum, wie eine GNOME-App auf vier Systeme kommt, ohne dass ich vier Apps pflegen muss.&lt;/p&gt;
&lt;h3&gt;Ein Code, vier Systeme&lt;/h3&gt;
&lt;p&gt;Learn 6502 ist in TypeScript geschrieben, die Oberfläche in Blueprint für GTK 4 und libadwaita. Dieser Code läuft überall, nur jeweils auf einer anderen Laufzeit:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;System&lt;/th&gt;&lt;th&gt;Laufzeit&lt;/th&gt;&lt;th&gt;GTK und Adwaita kommen von&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Linux&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gjs.guide/&quot;&gt;GJS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;der GNOME-Runtime im Flatpak&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS, Windows&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gjsify.org/gjsify/projects/node-gi/&quot;&gt;&lt;code&gt;@gjsify/node-gi&lt;/code&gt;&lt;/a&gt; und einer mitgelieferten GTK-Laufzeit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Android&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://nativescript.org/&quot;&gt;NativeScript&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gjsify.org/gjsify/adwaita/&quot;&gt;&lt;code&gt;@gjsify/adwaita-nativescript&lt;/code&gt;&lt;/a&gt;, echten Android-Views im Adwaita-Stil&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Unter Linux ist Learn 6502 eine normale GJS-App. Für macOS und Windows habe ich die Laufzeitumgebung von GJS für Node.js nachgebaut. &lt;code&gt;@gjsify/node-gi&lt;/code&gt; lädt &lt;code&gt;gi://&lt;/code&gt;-Namespaces wie GLib, Gtk und Adw in Node.js und verhält sich dabei wie GJS. Die Grundlage war &lt;a href=&quot;https://github.com/romgrk/node-gtk&quot;&gt;node-gtk&lt;/a&gt;, daraus ist node-gi entstanden und inzwischen weitgehend neu geschrieben. Damit ich mich auf &amp;quot;verhält sich wie GJS&amp;quot; verlassen kann, laufen dieselben Tests auf beiden Laufzeiten.&lt;/p&gt;
&lt;p&gt;Auf Android gibt es kein GTK. Dort läuft die App in NativeScript, und &lt;code&gt;@gjsify/adwaita-nativescript&lt;/code&gt; baut aus denselben Blueprint-Dateien native Android-Views, die aussehen wie libadwaita. Ein WebView ist nicht im Spiel. GLib und GObject kommen auch hier über node-gi.&lt;/p&gt;
&lt;p&gt;Dass GTK unter Android nicht laufen kann, stimmt so allerdings nicht mehr. Florian &amp;quot;sp1rit&amp;quot; arbeitet an einem Android-Backend für GTK, und &lt;a href=&quot;https://geopjr.dev/&quot;&gt;GeopJr&lt;/a&gt; zeigt auf &lt;a href=&quot;https://gtk4android.geopjr.dev/&quot;&gt;GTK 4 Android&lt;/a&gt; inoffizielle Test-Builds von GTK- und Adwaita-Apps wie der Adwaita-Demo oder Tuba. Damit experimentieren wir auch: Mit &lt;code&gt;@gjsify/gi-runtime-android-gtk&lt;/code&gt; bringt gjsify GTK 4 und libadwaita in eine NativeScript-App. Wenn das gut genug läuft, können wir uns den Nachbau der Adwaita-Widgets sparen und echtes GTK auf Android nutzen.&lt;/p&gt;
&lt;p&gt;Die Android-Version ist noch experimentell. Die Grundlagen funktionieren, du kannst das Tutorial lesen, Code schreiben und ihn auf der Konsole laufen lassen. Rechne aber damit, dass hier und da noch etwas hakt.&lt;/p&gt;
&lt;h3&gt;Und andersherum&lt;/h3&gt;
&lt;p&gt;Die Brücke führt in beide Richtungen. &lt;a href=&quot;https://gjsify.org/gjsify/&quot;&gt;gjsify&lt;/a&gt; bringt Node.js- und Web-APIs nach GJS und setzt sie auf GNOMEs eigenen Bibliotheken um: &lt;code&gt;node:fs&lt;/code&gt; auf Gio, &lt;code&gt;fetch&lt;/code&gt; auf Soup, &lt;a href=&quot;https://nodejs.org/api/sqlite.html&quot;&gt;&lt;code&gt;node:sqlite&lt;/code&gt;&lt;/a&gt; auf libsqlite3.&lt;/p&gt;
&lt;p&gt;Neu ist &lt;a href=&quot;https://gjsify.org/gjsify/projects/napi/&quot;&gt;&lt;code&gt;@gjsify/napi&lt;/code&gt;&lt;/a&gt;, eine Umsetzung von &lt;a href=&quot;https://nodejs.org/api/n-api.html&quot;&gt;Node-API&lt;/a&gt; für GJS. Damit lädt GJS native Node.js-Module, also &lt;code&gt;.node&lt;/code&gt;-Dateien, die eigentlich für Node.js kompiliert wurden. &lt;a href=&quot;https://github.com/WiseLibs/better-sqlite3&quot;&gt;better-sqlite3&lt;/a&gt; läuft so unverändert in GJS und liefert byteweise dieselben Ergebnisse wie unter Node.js.&lt;/p&gt;
&lt;p&gt;Mich beeindruckt, was mit KI inzwischen möglich ist. Node-API für GJS umsetzen oder die Adwaita-Widgets für Android nachbauen, das wäre für mich allein vor ein paar Jahren nicht machbar gewesen.&lt;/p&gt;
&lt;p&gt;Der Code ist damit in beide Richtungen kompatibel. Welche Laufzeit ich nehme, entscheide ich beim Bauen und nicht beim Schreiben.&lt;/p&gt;
&lt;p&gt;gjsify selbst läuft ebenfalls auf GJS. Installieren, Bauen, Testen, das Flatpak und die Pakete für macOS und Windows gehen auf einem Rechner ohne Node.js. Node.js ist eine Laufzeit, die du wählen kannst, keine Pflicht. Mehr dazu in &lt;a href=&quot;https://jumplink.eu/de/blog/why-gjsify/&quot;&gt;Warum gjsify&lt;/a&gt; und &lt;a href=&quot;https://jumplink.eu/de/blog/macos-signing/&quot;&gt;Mit gjsify GNOME-Apps für Linux, macOS und Windows ausliefern&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Ein großes Experiment&lt;/h3&gt;
&lt;p&gt;gjsify ist noch stark in Entwicklung und im Grunde ein großes Experiment. Die Idee: Jedes JavaScript, ob für Node.js oder den Browser geschrieben, soll in einer nativen Adwaita-App laufen. Ein guter Teil davon funktioniert schon. Die Game-Engine Excalibur.js, three.js, socket.io und WebTorrent laufen über gjsify auf GJS, geprüft mit ihren eigenen Test-Suites. Was noch fehlt, steht im &lt;a href=&quot;https://github.com/gjsify/gjsify/tree/main/status&quot;&gt;Projektstatus&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Angefangen hat es ohne KI&lt;/h3&gt;
&lt;p&gt;Angefangen hat alles mit &lt;a href=&quot;https://github.com/gjsify/ts-for-gir&quot;&gt;ts-for-gir&lt;/a&gt;. Ich wollte GNOME-Apps in TypeScript schreiben und brauchte dafür Typen für GTK und die anderen GObject-Bibliotheken. KI-Werkzeuge gab es damals nicht. Rund drei Jahre habe ich in meiner Freizeit daran gearbeitet, bis Parser und Generator wirklich gute Typen erzeugt haben. Heute schreibt man so einen Generator mit KI in kurzer Zeit, und er funktioniert sogar gut. Inzwischen gibt es auch neue Projekte wie &lt;a href=&quot;https://gtkx.dev/&quot;&gt;GTKX&lt;/a&gt;, die ihre Bindings ebenfalls aus GObject Introspection erzeugen.&lt;/p&gt;
&lt;p&gt;Learn 6502 selbst habe ich noch weitgehend von Hand geschrieben. Geholfen hat eine bessere KI-Autovervollständigung, und schon die war viel wert.&lt;/p&gt;
&lt;p&gt;Auch gjsify habe ich ohne KI begonnen. Einige Node.js-Module wie &lt;code&gt;node:fs&lt;/code&gt; habe ich von Hand nachgebaut und viel ausprobiert. Für eine Person war das Projekt aber zu groß. Mit KI hat sich das geändert, heute entsteht gjsify fast vollständig durch Agentic Coding.&lt;/p&gt;
&lt;p&gt;Die Regeln gebe ich vor. Linux-Standards wie die &lt;a href=&quot;https://flatpak.github.io/xdg-desktop-portal/&quot;&gt;XDG Desktop Portals&lt;/a&gt;, GJS und Web-Standards haben immer Vorrang, und wo es einen offenen Standard gibt, nutzen wir ihn. Fehlt einer App etwas, wird es in gjsify gebaut, mit Test, statt es in der App zu umgehen. Damit komme ich gerade zu sehr guten Ergebnissen. Ohne diese Hilfe wäre Learn 6502 nicht auf Android und Windows angekommen.&lt;/p&gt;
&lt;h3&gt;Warum ich KI trotzdem nutze&lt;/h3&gt;
&lt;p&gt;Ich weiß, dass KI in der Open-Source-Szene verpönt ist, und das aus gutem Grund. Die Trainingsdaten wurden ohne Zustimmung genommen, der Energieverbrauch ist hoch, und die gesellschaftlichen Folgen werden groß sein. Das alles sehe ich sehr kritisch. Aufhalten werden wir diese Entwicklung aber nicht, indem wir KI ablehnen oder ignorieren.&lt;/p&gt;
&lt;p&gt;Was wir tun können, ist KI als Werkzeug für mehr und bessere freie Software zu nutzen. Software, die uns unabhängiger von großen Konzernen macht. Und wir sollten gemeinsam offene Modelle fördern, damit die beste KI am Ende nicht einigen wenigen Menschen oder Unternehmen gehört.&lt;/p&gt;
&lt;p&gt;Deshalb habe ich auch &lt;a href=&quot;https://jumplink.eu/steuererklaerung/&quot;&gt;Steuererklärung&lt;/a&gt; gestartet. Mit der App kann jeder in Deutschland seine Steuererklärung kostenlos machen. Gerade Menschen mit wenig Geld geben oft keine Steuererklärung ab und haben dadurch am Ende noch weniger. Mein Ziel ist, die App so einfach zu machen, dass das kein Hindernis mehr ist.&lt;/p&gt;
&lt;h3&gt;Ausprobieren&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Learn 6502: &lt;a href=&quot;https://jumplink.eu/Learn6502/de/&quot;&gt;Downloads&lt;/a&gt;, &lt;a href=&quot;https://github.com/JumpLink/Learn6502&quot;&gt;Quellcode&lt;/a&gt;, Übersetzen auf &lt;a href=&quot;https://hosted.weblate.org/engage/eu-jumplink-learn6502/&quot;&gt;Weblate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;gjsify: &lt;a href=&quot;https://gjsify.org/gjsify/&quot;&gt;Dokumentation&lt;/a&gt;, &lt;a href=&quot;https://github.com/gjsify/gjsify&quot;&gt;GitHub&lt;/a&gt;, und für den Einstieg &lt;a href=&quot;https://jumplink.eu/de/blog/gjsify-first-app/&quot;&gt;Eine GNOME-App in TypeScript, in fünf Minuten&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ich hoffe, dass gjsify auch für dich ein nützliches Werkzeug ist. Rückmeldungen und Fehlerberichte nehme ich gern auf &lt;a href=&quot;https://github.com/gjsify/gjsify/issues&quot;&gt;GitHub&lt;/a&gt; entgegen.&lt;/p&gt;</content>
    <category term="gjsify"/>
    <category term="GNOME"/>
    <category term="Android"/>
  </entry>
</feed>