Found a French blog post that talks about our XULrunner

General project discussion.
Use this as a last resort if your topic does not fit in any of the other boards but it still on-topic.
Forum rules
This General Discussion board is meant for topics that are still relevant to Pale Moon, web browsers, browser tech, UXP applications, and related, but don't have a more fitting board available.

Please stick to the relevance of this forum here, which focuses on everything around the Pale Moon project and its user community. "Random" subjects don't belong here, and should be posted in the Off-Topic board.
User avatar
jobbautista9
Board Warrior
Board Warrior
Posts: 1136
Joined: 2020-11-03, 06:47
Location: Philippines

Found a French blog post that talks about our XULrunner

Post by jobbautista9 » 2025-12-22, 02:53

https://lenain.info/fr/there-is-only-xul/

I don't speak French but it does look like a positive review. As the article says after all, there is only XUL! :twisted:
Image

Tired of creating stuff!

Avatar artwork by Shinki669: https://www.pixiv.net/artworks/113645617

XUL add-ons developer. You can find a list of add-ons I manage at http://rw.rs/~job/software.html.

User avatar
Mæstro
Keeps coming back
Keeps coming back
Posts: 908
Joined: 2019-08-13, 00:30
Location: Casumia

Re: Found a French blog post that talks about our XULrunner

Post by Mæstro » 2025-12-22, 02:56

Your link is broken. :(
Life is a fever dream Mæstro would enjoy.
How is your computer at 96°C and not on fire?
All posts 100% organic. Ash is the best letter.
What is being nice online?
Debian 10 ELTS / Official PM build

User avatar
Night Wing
Knows the dark side
Knows the dark side
Posts: 5738
Joined: 2011-10-03, 10:19
Location: Piney Woods of Southeast Texas, USA

Re: Found a French blog post that talks about our XULrunner

Post by Night Wing » 2025-12-22, 03:10

The link works for me. But it takes me to a page written in French and I do not speak French.

At this time I am using 64 bit linux Pale Moon 33.9.1 (GTK2) running in 64 bit MX Linux 25 (Infinity) Xfce.
MX Linux 25.1 (Infinity) Xfce w/Pale Moon, Waterfox, Firefox
Linux Debian 13.3 (Trixie) Xfce w/Pale Moon, Waterfox, Firefox

User avatar
Moonchild
Project founder
Project founder
Posts: 38821
Joined: 2011-08-28, 17:27
Location: Sweden

Re: Found a French blog post that talks about our XULrunner

Post by Moonchild » 2025-12-22, 08:52

Quick machine translation of the part dealing with UXP/Goanna:
Goanna & UXP
The Firefox fork Pale Moon was originally based on Gecko.

In 2016, Mozilla's planned changes to Firefox would impact all of their development.

Firefox Quantum happened, along with the end to Mozilla-style extensions (XUL/toolkit/overlay, bootstrap, and jetpack). This raised an issue... Mozilla had finally begun the final destruction of their technology. All of it was now fair game. On one hand we were glad they were finally doing it without any further pretense, but on the other hand we were saddened by the tragic destruction without even the thinnest of hopes left that they may change course and avert it.

Then there was Firefox Quantum, and with it the end of Mozilla's extensions (XUL/toolkit/overlay, bootstrap and jetpack). This raised a problem. Mozilla had finally undertaken the final destruction of their technology. On the one hand we were happy that they were finally doing something, but on the other hand we were saddened by the tragic destruction without there even being the slightest hope that they would leave a chance to change his fate and avoid it.

Moonchild Productions decided to create a fork of Gecko and named it Goanna (A monitor lizard).

Goanna is distributed in the form of UXP (Unified XUL Platform) and Pale Moon is now based on .

The fork was made since the ESR-52 version of Firefox and comes with a license comparable to the original Firefox license (MPL & others). (The licenses used are accessible to any application running with Goanna via the about:license page, as for Firefox!)

The author of the fork nevertheless indicates that he refuses to allow his personal brand to be associated with products derived from the codebase. Editor's note: The link in the license notice seems to be broken, I guess it refers to this page.

SELECT
Pronounced /ˈzuːl/ ZOOL, SELECT (XML User Interface Language) is a user interface description language developed by Mozilla.

The name XUL refers to the Ghostbusters movie Ghostbusters and the god Zuul.

XUL can only be used with a Mozilla codebase or one of its forks since Gecko (or Goanna) is the one who displays the interface.

And that's where it gets interesting!

Indeed, it was possible to use XUL directly in Firefox (Editor's note: and it is probably possible to use directly in , but I didn't try), this is what was used for the addon system for example.

But, even better, it was possible to create your own application!

Apart from large applications like Firefox, Thunderbird, or Basilisk that incorporate Gecko directly in an extremely related way, sometimes using code C++ code ... It was possible to use XUL in a much lighter way. Examples include FireFTP ( Code) or FireSSH ( Code), both of which are in pure XUL , JavaScript and without C++.

And all this was made possible thanks to...

XULRunner
XULRunner It's... uh... how to put it... A packaged version of the platform Mozilla platform ?

Originally there was ERM (Gecko Runtime Environment), then there was XRE (XUL Runtime Environment) which was finally named XULRunner.

XULRunner allows you to be embedded, but can also start Allows you to be embedded, but can also start applications applications on the three major platforms: Windows, MacOS and Linux.

A bit like a JRE (Java Runtime Environment), it is possible to have several XULRunners installed.

There was never an official releaseXULRunner, which was only considered a technological experiment, only builds Databases Mozilla is 41.0.2 .

yes, so what?
Now that we've talked about all these elements, couldn't we get something out of them? Wouldn't FOR THE SCIONCE we try to (re)make XUL in 2025? After all, it's not just games that are retro!

But before I dust off my XUL Programmer's Workbook (Yes, yes... it existed... :D)... well we need a XULRunner!

Yes because here THERE IS ONLY ZOO-

XULRunner in 2025
And well, after such an intro...

Even if it's not really documented on the website of Pale Moon website , it is possible to compile our own version of XULRunner directly from Sources of UXP... and that's exactly what we're going to do! :)

Compilation
Based on the instructions provided to build Pale Moon, You can build your own runner quite easily.

The steps are reproduced here with a little Docker twist because I don't want to install the build components directly on my machine:)

Careful, the compilation of XULRunner is an intensive operation and requires at least 8 GB of free space!

Preparation
I create a folder for everything related to UXP . I'm using a basic container using the same version of Debian as me, which will make it easier for us to do this later;)do it later ;)

Code: Select all

$ mkdir uxp
$ docker container run --rm -it -v $(pwd)/uxp:/opt/uxp --workdir /opt/uxp debian:testing
# On est désormais root dans le conteneur
...
Installing the build tools
We install the necessary tools and dependencies for the compilation:

Git : Used to retrieve the source code of UXP
aSound : An interface for audio rendering with ALSA
Bzip : For data compression
D-Bus : A message bus to allow applications to talk to each other on the same system
EGL : An interface for graphic rendering with OpenGL
GTK : Used to create GUI components with GTK 3 and GTK 2 (for plugins NPAPI Plugins )
Gconf : To store information in a database GNOME Database
M4 : To interpret macros during compilation
OpenSSL : For encrypting communications between clients and the server
Pulse : For audio rendering with PulseAudio
Python : For construction configuration tools, with Python 2.7 andPython DBus
SQLite : For managing user databases with SQLite 3
Xcb : To have C : To have bindings for X Windows for
Xt : Toolbox for X.org for window display
Zlib : To compress packets and reduce network traffic
...

Code: Select all

# Ajout de la source pour pouvoir installer Python 2.7
echo "deb http://archive.debian.org/debian/ stretch contrib main non-free" >> /etc/apt/sources.list.d/python2.list
# Mise à jour des informations de paquets du système & installation des outils requis
apt update
apt install -y build-essential git libgtk2.0-dev libgtk-3-dev libdbus-glib-1-dev \
    libegl1-mesa-dev libasound2-dev libxt-dev zlib1g-dev libssl-dev \
    libsqlite3-dev libbz2-dev libpulse-dev libgconf2-dev libx11-xcb-dev \
    yasm zip python2.7 python-dbus
# Bascule sur un utilisateur correspondant à notre utilisateur en dehors du conteneur
useradd lenain -u 1000
su - lenain
# On est maintenant un utilisateur lambda
...
Retrieving the UXP Code
We clone the code of We clone the UXP Code .

...

Code: Select all

# On récupère le code de UXP
git clone https://repo.palemoon.org/MoonchildProductions/UXP.git
# On se place dans le dossier d'UXP
cd UXP
...
Configuring the build
We create a file which will contain the necessary configuration for the compilation:.mozconfig

...

Code: Select all

bash # on passe en bash
cat >.mozconfig <<EOF
# On fait un build 64bit
_BUILD_64=1

# On indique une version de GTK 3
_GTK_VERSION=3
export MOZ_PKG_SPECIAL=gtk\$_GTK_VERSION

# On configure les options standard pour XULRunner
ac_add_options --enable-application=xulrunner
ac_add_options --enable-optimize="-O2 -w"
ac_add_options --enable-default-toolkit=cairo-gtk\$_GTK_VERSION
ac_add_options --enable-jemalloc
ac_add_options --enable-strip
ac_add_options --enable-devtools
ac_add_options --enable-av1
ac_add_options --enable-jxl
ac_add_options --enable-webrtc
ac_add_options --enable-gamepad
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --disable-necko-wifi
ac_add_options --disable-updater
ac_add_options --with-pthreads

# Option de build spécifiques à l'architecture du processeur
if [ -n "\$_BUILD_64" ]; then
  ac_add_options --x-libraries=/usr/lib64
else
  ac_add_options --x-libraries=/usr/lib
fi

# On indique le chemin vers Python 2.7
mk_add_options PYTHON=/usr/bin/python2
EOF
...
Christmas Compilation & Packaging
...

Code: Select all

# Compilation
time ./mach build # ~4m30 sur ma configuration, mais vous avez largement le temps de vous faire un café! :)
# Potit check rapide
./obj-x86_64-pc-linux-gnu/dist/bin/xulrunner --version
Mozilla XULRunner 6.8.0 - 20251221190814
# On met tout ça dans une belle archive
time ./mach package
# Et voilà !
ls -lrt obj-x86_64-pc-linux-gnu/dist/xulrunner*.bz2
-rw-rw-r-- 1 lenain lenain 51546044 Dec 21 19:15 obj-x86_64-pc-linux-gnu/dist/xulrunner-6.8.0.linux-x86_64-gtk3.tar.bz2
You can leave the container of Build container .

Congratulations, you've compiled your own version of XULRunner!

Installation
Bah... In fact... there is no need to install XULRunner , it's portable:) Unzip it wherever you want!

For the example, I'm going to install it in my:$HOME

Code: Select all

$ cd $HOME
$ cp /chemin/vers/uxp/UXP/obj-x86_64-pc-linux-gnu/dist/xulrunner-6.8.0.linux-x86_64-gtk3.tar.bz2 .
$ tar xvjf xulrunner-6.8.0.linux-x86_64-gtk3.tar.bz2
$ $HOME/xulrunner/xulrunner --version
Mozilla XULRunner 6.8.0 - 20251221190814
Hello CHOICE!
We're going to test this new runner by creating an application as basic as possible, after all this article is not a tutorial on XUL...

Creating the Application Structure
We create a folder with the following tree:

Code: Select all

.
├── application.ini
├── chrome
│   └── content
│       └── hello.xul
├── chrome.manifest
└── defaults
    └── preferences
        └── prefs.js
application.ini
This file contains information related to the XUL application that we are going to create.

Code: Select all

[App]
Version=0.1
Vendor=exemple
Name=helloxul
BuildID=monBuild
ID=20f0fbf8-dea4-11f0-a475-30560f40bd6c

[Gecko]
MinVersion=6.8.0
Warning: XULRunner, like Firefox, registers its profiles for users of an application in specific folders.

These folders are located in your user directory, in a hidden folder, depending on the setting and your .VendorNameApp

In our example, the profiles are stored in $HOME/.exemple/helloxul

chrome.manifest
This file contains information about where your app's code is located.

content helloxul file:chrome/content/
Here the application package indicates that its contents are in .helloxulchrome/content/

defaults/preferences/prefs.js
This file contains the information needed to tell XULRunner which XUL window to open by default.

pref("toolkit.defaultChromeURI", "chrome://helloxul/content/hello.xul");
Here, the default window is in the package defined earlier and is named .helloxulhello.xul

chrome/content/hello.xul
This file contains the definition of our main XUL window.

Code: Select all

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="exemple" title="Hello XUL !" width="320" height="240" 
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <button label="Clique moi!" oncommand="clicked()" />
    <description id="hello" value="Hello XUL !" style="display:none"/>

    <script>
        function clicked() {
            const element = document.getElementById("hello");
            element.style.display = (element.style.display === 'none') ? 'block' : 'none';
        }
    </script>
</window>
Without going into too much detail, we:

creates an XUL window via an element<window>
adds a button that calls the function when pressedclicked
adds a description that was initially hidden with the IDhello
adds the function that retrieves the description and changes its style to display it or notclickedhello
Mwokay letsgoooo !
All that's left is to launch our application:

$ ~/xulrunner/xulrunner ./application.ini
Did it work? Absolutely. :)

An example XUL application with a button and a description
"Oh, what a lovely soprano voice you have there..."
Okay, displaying buttons and labels is cute.

Let's edit our example by modifying it to simply add a component :hello.xul<webbrowser>

Code: Select all

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="exemple" title="Hello XUL !" width="1024" height="768" 
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <button label="Clique moi!" oncommand="clicked()" />
    <description id="hello" value="Hello XUL !" style="display:none"/>

    <script>
        function clicked() {
            const element = document.getElementById("hello");
            element.style.display = (element.style.display === 'none') ? 'block' : 'none';
        }
    </script>

    <!-- Et... hop! -->
    <vbox flex="1">
        <browser src="https://lenain.info/" flex="1" />
    </vbox>
</window>
As a character reacting with uttrycket "Holy Shit".
It worked!

In application XUL of example med en bouton och en beskrivning AND A WEBSITE DISPLAYED.
Other
I didn't really believe that in 2025, 20 years after Mozilla killed the XUL technology in the red panda, we could revive it... But that's a good thing!

Nothing now prevents someone from creating the next Chromzilla or Webkitzilla... And why not you? :)

Bonuses
I suspect that there are curious people who will read this article to the end and wonder

yes, he's cute, but what about the support of web technologies by this Gomachinahanbidulena fork?

Glad you fucking asked!

Kyan Khojandi se moquant de Paul Taylor disant: Haha, I'm glad you fucking asked.
HTML 5 Support
So I compare a XULRunner with Goanna 6.8.0 sauce with a Firefox 140.5.0esr (64-bit), a Chromium 143 and a Konqueror 25.04.0 running on the same OS via HTML5Test:

Category Subcategory XULRunner Firefox Chromium Konqueror
Semantics Parsing rules 5 5 5 5
Semantics Elements 32/33 32/33 32/33 32/33
Semantics Forms 54/66 58/66 66 66
Semantics Web Components 10 10 10 10
Device Access Location and Orientation 20 20 20 20
Device Access Sensors 0/5 0/5 5 5
Device Access Hardware 0/10 0/10 5/10 0/10
Device Access Output 10 10 10 10
Device Access Input 10 10 10 10
Connectivity Communication 40 40 40 40
Connectivity Streams 4/6 6 6 6
Connectivity Peer To Peer 40/45 45 45 45
Performance & Integration User interaction 19 19 19 19
Performance & Integration Performance 12 12 12 12
Performance & Integration Web Assembly 1 1 1 1
Performance & Integration Resource Loading 6/7 7 7 7
Performance & Integration Security 23/32 32 32 32
Performance & Integration Payments 0/5 0/5 5 0/5
Multimedia Video 29/33 29/33 29/33 29/33
Multimedia Audio 27/30 27/30 28/30 25/30
Multimedia Streaming 5 5 5 5
3D, Graphics & Effects Responsive images 15 15 15 15
3D, Graphics & Effects Vector graphics 4 4 4 4
3D, Graphics & Effects 2D Graphics 24/25 24/25 24/25 24/25
3D, Graphics & Effects 3D and VR 20/25 20/25 25 25
3D, Graphics & Effects Offscreen 2/3 3 3 3
3D, Graphics & Effects Animation 8 8 8 8
Offline & Storage Web applications 1/13 13 13 13
Offline & Storage Storage 35 35 35 35
Offline & Storage Queues 15 15 15 15
Other Scripting 32 32 32 32
Other Other 9 9 9 9
Final result:

Browser Score
Firefox 140.5.0esr (64-bit) 546/588
XULRunner sauce Goanna 6.8.0 512/588
Chromium 143 575/588
Konqueror 25.04.0 562/588


So, yes, Goanna is not at the level of an up-to-date Gecko. This can be explained, among other things, by the divergence towards features inherited from Servo and the new developments brought by Mozilla to Gecko. Some topics are not in the roadmap of the main UXP user project and are explicitly described here.

I have also reactivated in the WebRTC configuration and the Gamepad support which are disabled in the Pale Moon build instructions.

A point of attention for those who would like to play with XULRunner at the moment would be the Web applications part with the Service Workers and Push APIs.

CSS 3 support
Tested with CSS 3 Test

Browser Score
Firefox 140.5.0esr (64-bit) 3240 / 6419 (59%)
XULRunner Goanna Sauce 6.8.0 2120 / 6419 (37%)
Chromium 143 4353 / 6419 (71%)
Konqueror 25.04.0 3955 / 6419 (66%)


When I tell you that it's complicated to succeed in implementing all the features of a standard... :D

Conclusion "And what is the confidence of Lenain?"
If your question is:

Can I trust to use Goanna, Basilisk, Palemoon, < insert the web browser or browser engine you want> to use them on a daily basis, because I value my privacy and the security of my data?

The answer is:

It's up to you. Are you ready to put what you put in your briefs/panties literally in the hands of the people managing these projects:)

It's up to you to see if XULRunner can meet your needs and expectations.

Right now blows on the cover of his "XUL Programmer's Notebook", let's have fun...
"There is no point in arguing with an idiot, because then you're both idiots." - Anonymous
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite

User avatar
billmcct
Board Warrior
Board Warrior
Posts: 1099
Joined: 2012-09-04, 15:19
Location: Union City Georgia USA

Re: Found a French blog post that talks about our XULrunner

Post by billmcct » 2025-12-22, 12:16

Click the globe top right to get english.
--------------------------------------------------------------------------------------------------------------
Dell Precision 15 7550
Windows 10 Pro. 22H2 19045.5965
Xeon W-10885M
64 GB DDR4 ECC memory (128 GB max)
1 TB Samsung 9100 Pro M2 SSD (Main)
2 TB Samsung 9100 Pro M2 SSD (storage)
500 GB Corsair T500 storage M2 SSD (6 TB max)
Intel onboard GPU 1080p
Quadro RTX 5000 Max-Q GPU 4K

Pale Moon 33.9.x x64 AVX2 build

The difference between the Impossible and the Possible lies in a man's Determination.
Tommy Lasorda

User avatar
moonbat
Knows the dark side
Knows the dark side
Posts: 5767
Joined: 2015-12-09, 15:45

Re: Found a French blog post that talks about our XULrunner

Post by moonbat » 2025-12-22, 12:41

billmcct wrote:
2025-12-22, 12:16
Click the globe top right to get english.
If you wanted to return to the homepage and see a list of English posts. If you wanted that particular link to show up in English, not so much.
"One hosts to look them up, one DNS to find them and in the darkness BIND them."

Image
KDE Neon on a Slimbook Excalibur (Ryzen 7 8845HS, 64 GB RAM)
AutoPageColor|PermissionsPlus|PMPlayer|Pure URL|RecordRewind|TextFX
Jabber: moonbat@hot-chili.net

User avatar
Mæstro
Keeps coming back
Keeps coming back
Posts: 908
Joined: 2019-08-13, 00:30
Location: Casumia

Re: Found a French blog post that talks about our XULrunner

Post by Mæstro » 2025-12-22, 13:11

A friend who is now studying web design at uni in Canada told me that, within the last five years or so, websites have abandoned the traditional practise of bothering to translate their text into each target audience’s respective language, in favour of the new ‘de facto standard’ of inserting hooks to Google Translate’s API. I also know of at least a few (disreputable) museums which have begun implementing something similar: leaving all signage in English and dispensing with interpreters, referring any non-Anglophone visitor to his smartphone.

My thanks to Moonchild for posting a machine translation! Although I have got a reading knowledge of French, I suspect my proxy is somehow being denied, and reading this is easier than diagnosing.
The French author wrote: Pronounced /ˈzuːl/ ZOOL, SELECT (XML User Interface Language) is a user interface description language developed by Mozilla.
I always pronounce it /ksuːl/, even in English. :)
(Standard English words ultimately from Greek, like xylem, nonetheless take an initial /z/ in my English idiolect. Initial consonant clusters in foreign words which are accessible to German phonotactics survive in English, even if the pronunciation otherwise anglicises, hence /ˈtsuːnd(ɛ)ə/ for tsundere.)
Nothing now prevents someone from creating the next Chromzilla or Webkitzilla... And why not you? :)
I am reading these as ‘Chrome killer’, mm, on the model of Mozilla as ‘Mosaic killer’. How does our position today compare to that during the age of Internet Explorer’s dominance? I was considering making another thread for this topic in particular in the off-topic board in bed last night, even before readding this post.
So I compare a XULRunner with Goanna 6.8.0 sauce with a Firefox 140.5.0esr (64-bit), a Chromium 143 and a Konqueror 25.04.0 running on the same OS[…]
Is Konqueror being used here as a Safari substitute with the WebKit engine, or are there still a fair deal of devoted Konqueror users?
So, yes, Goanna is not at the level of an up-to-date Gecko. This can be explained, among other things, by the divergence towards features inherited from Servo and the new developments brought by Mozilla to Gecko.
The cartel which has usurped control of effective web standards is the true explanation. If everyone kept the W³C’s 2007–19 fixed recommendations, we would not be in this mess.
It's up to you. Are you ready to put what you put in your briefs/panties literally in the hands of the people managing these projects:)
You are certainly more trustworthy than anyone in that cartel.
Life is a fever dream Mæstro would enjoy.
How is your computer at 96°C and not on fire?
All posts 100% organic. Ash is the best letter.
What is being nice online?
Debian 10 ELTS / Official PM build