<?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/gnome/feed.xml</id>
  <title>Pascal Garber – GNOME</title>
  <updated>2026-10-29T00:00:00Z</updated>
  <link rel="self" type="application/atom+xml" href="https://jumplink.eu/de/blog/tags/gnome/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://jumplink.eu/de/blog/tags/gnome/"/>
  <author>
    <name>Pascal Garber</name>
    <uri>https://jumplink.eu/</uri>
  </author>
  <entry>
    <id>https://jumplink.eu/de/blog/learn6502/</id>
    <title>Learn 6502 Assembly als GNOME-App</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/learn6502/"/>
    <published>2026-10-29T00:00:00Z</published>
    <updated>2026-10-29T00:00:00Z</updated>
    <summary>Learn 6502 Assembly ist eine GNOME-App mit Tutorial, Editor, Debugger und virtuellem Display, basierend auf Nick Morgans easy6502.</summary>
    <content type="html">&lt;p&gt;Der 6502 ist der Prozessor von Commodore 64, NES und Apple II. Nick Morgans &lt;a href=&quot;https://github.com/skilldrick/easy6502&quot;&gt;easy6502&lt;/a&gt; ist ein Web-Tutorial, das seine Assemblersprache Schritt für Schritt erklärt. Daraus habe ich eine native GNOME-App gemacht: &lt;strong&gt;Learn 6502 Assembly&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Das steckt drin:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Ein interaktives Tutorial&lt;/strong&gt;, das die Kernkonzepte durchgeht.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Code-Editor&lt;/strong&gt; mit Syntaxhervorhebung.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Assembler und ein Debugger&lt;/strong&gt;, die Register, Flags und Speicher zeigen, während der Code läuft.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein virtuelles Display&lt;/strong&gt;, auf dem man das Ergebnis sieht und mit dem sich kleine Spiele und Grafiken bauen lassen.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Die App ist in TypeScript mit GJS und libadwaita geschrieben und wird mit &lt;a href=&quot;https://gjsify.org/&quot;&gt;gjsify&lt;/a&gt; gebaut. Das Repository enthält mehr als die Desktop-App: Assembler, Simulator und Disassembler stecken in einem eigenen Paket, &lt;code&gt;@learn6502/core&lt;/code&gt;, und derselbe Code treibt auch eine Web-Version und eine Android-App an. Tutorial-Inhalte und Übersetzungen sind ebenfalls eigene Pakete, übersetzt wird auf Weblate.&lt;/p&gt;
&lt;p&gt;Die App gibt es auf &lt;a href=&quot;https://flathub.org/apps/eu.jumplink.Learn6502&quot;&gt;Flathub&lt;/a&gt;. Der Code steht unter GPL-3.0, der Tutorialtext unter CC BY 4.0, wie im Original.&lt;/p&gt;</content>
    <category term="GNOME"/>
    <category term="gjsify"/>
  </entry>
  <entry>
    <id>https://jumplink.eu/de/blog/why-gjsify/</id>
    <title>Warum gjsify</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/why-gjsify/"/>
    <published>2026-10-28T00:00:00Z</published>
    <updated>2026-10-28T00:00:00Z</updated>
    <summary>gjsify bringt die Standard-APIs von Node.js und dem Web nach GJS, damit TypeScript-Apps und npm-Pakete nativ auf GNOME laufen.</summary>
    <content type="html">&lt;p&gt;GNOME-Apps lassen sich in JavaScript schreiben. Die Laufzeit heißt GJS und basiert auf SpiderMonkey. GJS ist aber weder Node.js noch ein Browser: Es gibt kein &lt;code&gt;node:fs&lt;/code&gt;, kein &lt;code&gt;fetch&lt;/code&gt;, kein &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; und kein npm-Ökosystem. Viele Bibliotheken, ob HTTP-Client, Game-Engine oder Krypto-Bibliothek, setzen APIs voraus, die GJS nicht hat.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gjsify.org/&quot;&gt;gjsify&lt;/a&gt; schließt diese Lücke. Es baut die Node.js-, Web- und DOM-APIs auf GNOMEs eigenen Bibliotheken nach:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Im Code&lt;/th&gt;&lt;th&gt;gjsify setzt es um auf&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;node:fs&lt;/code&gt;, &lt;code&gt;node:net&lt;/code&gt;, &lt;code&gt;node:crypto&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Gio, GLib&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;WebSocket&lt;/code&gt;, &lt;code&gt;XMLHttpRequest&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Soup 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; 2D und WebGL&lt;/td&gt;&lt;td&gt;Cairo, Gtk.GLArea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WebRTC, WebAudio, &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;GStreamer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;node:sqlite&lt;/code&gt;&lt;/td&gt;&lt;td&gt;libsqlite3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Damit stehen die Standard-APIs in GJS zur Verfügung. Bibliotheken, die für Node.js oder den Browser geschrieben wurden, laufen jetzt direkt unter GJS, ohne Browser-Engine und ohne Node.js-Laufzeit. Es gibt keinen Zwischenserver, kein mitgeliefertes Chromium und keinen Aufruf von Node. Heraus kommt eine echte GTK-4- und Adwaita-App, die sich als Flatpak ausliefern lässt und trotzdem die Sprache der übrigen JavaScript-Welt spricht.&lt;/p&gt;
&lt;h3&gt;Und andersherum&lt;/h3&gt;
&lt;p&gt;Wer lieber mit Node.js oder Bun arbeitet, kann das weiter tun. Dafür habe ich auch den umgekehrten Weg gebaut: Die GJS-APIs, also GTK, Adwaita und alles andere, was GObject Introspection anbietet, stehen auch unter diesen Laufzeiten zur Verfügung. So laufen alle nativen APIs unter allen Laufzeiten.&lt;/p&gt;
&lt;p&gt;Und sie verhalten sich dort gleich. Das stelle ich mit Tests sicher: Dieselben Tests prüfen die Node.js-APIs, die Web-APIs, die GObject-Introspection-APIs und die GJS-Laufzeit-APIs auf jeder Laufzeit, und das Ergebnis muss überall genau dasselbe sein. Deshalb lässt sich die Laufzeit während der Entwicklung einfach wechseln, ohne den Code anzufassen.&lt;/p&gt;
&lt;p&gt;Das öffnet auch andere Systeme: Mit gjsify lassen sich GJS-Apps für macOS und Windows ausliefern, als &lt;code&gt;.app&lt;/code&gt; und &lt;code&gt;.dmg&lt;/code&gt; beziehungsweise als Programmordner und &lt;code&gt;.msi&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Was ich davon wollte&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Zuerst nativ auf GNOME.&lt;/strong&gt; GJS ist das Hauptziel.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Das Ökosystem, unverändert.&lt;/strong&gt; Der Test ist, ob npm-Pakete so laufen, wie sie sind. Die Game-Engine Excalibur.js, WebTorrent, socket.io, three.js, axios und das Anthropic-MCP-SDK laufen über gjsify auf GJS, geprüft mit ihren eigenen Upstream-Tests.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Quelltext, mehrere Laufzeiten.&lt;/strong&gt; GJS, Node.js, Bun, der Browser und NativeScript. Jedes Paket gibt an, welche davon es erreicht, und der Build wählt die passende Implementierung.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Kein Node.js nötig.&lt;/strong&gt; Installieren, Bauen, Starten, Testen, Veröffentlichen und der Flatpak-Schritt laufen auf GJS selbst.&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Warum ich meine Apps so baue&lt;/h3&gt;
&lt;p&gt;TypeScript, das Web und sein Werkzeug kenne ich gut, und ich will GNOME-Apps schreiben, ohne das zu verlassen. &lt;a href=&quot;https://github.com/gjsify/ts-for-gir&quot;&gt;ts-for-gir&lt;/a&gt; liefert mir Typen für GTK und jede andere introspektierbare Bibliothek, gjsify die APIs und die Werkzeugkette. Meine eigenen Apps wie &lt;a href=&quot;https://jumplink.eu/beifahrer/&quot;&gt;Beifahrer&lt;/a&gt;, &lt;a href=&quot;https://jumplink.eu/steuererklaerung/&quot;&gt;Steuererklärung&lt;/a&gt; und &lt;a href=&quot;https://flathub.org/apps/eu.jumplink.Learn6502&quot;&gt;Learn 6502 Assembly&lt;/a&gt; sind der erste Test: Fehlt etwas, behebe ich es in gjsify, statt es in der App zu umgehen.&lt;/p&gt;
&lt;p&gt;Der Code liegt auf &lt;a href=&quot;https://github.com/gjsify/gjsify&quot;&gt;GitHub&lt;/a&gt;, die Dokumentation auf &lt;a href=&quot;https://gjsify.org/gjsify/&quot;&gt;gjsify.org&lt;/a&gt;.&lt;/p&gt;</content>
    <category term="gjsify"/>
    <category term="GNOME"/>
  </entry>
</feed>