Just FYI, I have played with generating standalone executables.
See experimential code at https://github.com/mwette/guile-freezer
This code now will bind non-system modules into an executable:
it converts your .go module files into .o files (containing binary data)
that are loaded during startup.

Two issues:
1) Guile is LPGL so I don't see how one can distribute standalone executables w/o distributing     all the means to re-build.  For example, including ice-9/boot-9.go.   Do people want to do this? 2) Guile-freezer does not work with loading in ice-9/boot-9 and friends: there are some incompatibilities
    with the startup code (e.g. how scm_ice_9_already_loaded is set).

Matt

On 8/12/25 2:33 AM, Noé Lopez wrote:
That didn't turn out well since Guile relies so much on Guix. And Guix dumps 
the binaries it compiles into /gnu/store and not inside of my CMake project, 
which is not good.

Besides, I also feel like using CMake is a losing battle anyways, since it would tie 
it to a C++ build system. Instead, what I'd probably want to do is have a guile 
script that runs and builds everything together. Fortunately, there is prior art: 
https://git.dthompson.us/chickadee/tree/chickadee/cli/bundle.scm, which was used for 
davexunit.itch.io/bonnie-bee<https://davexunit.itch.io/bonnie-bee>
https://davexunit.itch.io/super-bloom

The big problem I can think of when it comes to making a more generalized guile 
build system is that guile relies heavily on the Guix ecosystem, and everything 
in Guix is installed globally in /gnu/store. (Unless you do guix pack -RR of 
course). I don't know Guix SUPER well, but I think you could probably have your 
guile script inside a guix pack, and then run the script once you unzip it. 
However, I don't think that would work on windows, and also isn't the one-click 
executable I want.

guix pack -f appimage would do the one-click executable for linux.

So I guess after all of this, I really want to hear your thoughts on this 
effort. Should I keep trying to make this work? I'd love to submit a Pull 
Request at some point making this all work, but I want to know where I should 
put my attention into.

It sounds like a cool idea! I haven’t looked at what you have in detail
but consider that making it as an AppImage would work well for Linux, I
don’t know much about windows but I suppose there exists similar
container formats in which you can put your guile binary and scripts and
have it execute seemlessly.

The advantage of AppImage instead of having to code your own bootstrap.c
is that it will be able to load dynamic libraries as well as guile
scripts from a SquashFS archive that is contained in the binary.

I think a good way forward would be to extend chickadee’s bundle to
generate AppImages instead of tarballs.

Good day!
Noé


Reply via email to