It packages ELFs + LDD visible libraries + Additional Libaries + Additional binaries + Additional arbitrary files as needed into a single POSIX SH script, the base64 encoding could be ditched and use m_ascii85 which doesn't bloat the file size up to 37% and just around 13%. Also one could simply ditch any encoding too. It works similarly to how it Nix-Portable works, but this one also adds two important things:
Bundles will remove from their dir the libraries which are found on the system. Reducing RAM usage. (happens at runtime)
Concurrent, if you have a program, let's say: Wezterm, packaged as a blob, from that terminal, you can call another instance (not the blob but the real terminal binary), without adding any overhead, also if you call the blob, it realizes that another instance is running and simply runs without unpacking new files nor modifying the ENV.
Very simple.
[experimental] If a user executes multiple different bundled programs, they can share some common libraries between them
Since its POSIX, one can use Dash, which makes execution a bit faster (with hyperfine it yielded good results in my +8 years old machine)
Testing?
Yes, I have done lots; For example, my window manager is a single file which contains Cava, Dmenu, MPV, ani-cli, yt-dlp, ytfzf, st, etc. All into a single file, all programs running inside the WM session will inherit the access to these programs.
There is also a way to call a program that is outside a blob/bundle, but giving it access to all libraries and programs in a program.blob:
So for example, someone may pack FFMPEG and call a script which uses ffplay with:
ffmpeg.blob --pbundle_link script_that_uses_ffmpegPrograms.sh
And I have made this other separate program/script which allows for further customization and also having other bundles/programs inherit access to programs inside other's:
If any of you good people want a demo of some graphical programs bundled, like for example; chocolate-doom with an included freedoom wad, I can provide those. It is also very straightforward to make wrapper scripts to do things like: A development environment packed in a single file, which for example, I made a Go + Make + some other programs bundle that included all of Go's files necessary for development, you executed the script and it simply called SH after setting a new PATH, LD_LIBRARY_PATH and the variables which PELF uses for concurrency.
Thanks for reading, I hope to see this here, since it would make nix-portable be even more portable.
NOTE: Bundles can't ship the LD loader nor the C library. They can be modified however and use patchelf to self-modify everything that depends on libraries which can't be put in another LD_LIBRARY_PATH
Hi! I like this project very much but it has a heavy dependency on Bash, and GNU coreutils, I have made this: https://github.com/xplshn/Handyscripts/blob/master/pelf
It packages ELFs + LDD visible libraries + Additional Libaries + Additional binaries + Additional arbitrary files as needed into a single POSIX SH script, the base64 encoding could be ditched and use m_ascii85 which doesn't bloat the file size up to 37% and just around 13%. Also one could simply ditch any encoding too. It works similarly to how it Nix-Portable works, but this one also adds two important things:
Testing?
Yes, I have done lots; For example, my window manager is a single file which contains Cava, Dmenu, MPV, ani-cli, yt-dlp, ytfzf, st, etc. All into a single file, all programs running inside the WM session will inherit the access to these programs.
This is how my env looks inside said WM, using Wezterm.blob
This is how the PATH looks inside said programs:
There is also a way to call a program that is outside a blob/bundle, but giving it access to all libraries and programs in a program.blob: So for example, someone may pack FFMPEG and call a script which uses ffplay with: ffmpeg.blob --pbundle_link script_that_uses_ffmpegPrograms.sh
And I have made this other separate program/script which allows for further customization and also having other bundles/programs inherit access to programs inside other's:
If any of you good people want a demo of some graphical programs bundled, like for example; chocolate-doom with an included freedoom wad, I can provide those. It is also very straightforward to make wrapper scripts to do things like: A development environment packed in a single file, which for example, I made a Go + Make + some other programs bundle that included all of Go's files necessary for development, you executed the script and it simply called SH after setting a new PATH, LD_LIBRARY_PATH and the variables which PELF uses for concurrency.
Thanks for reading, I hope to see this here, since it would make nix-portable be even more portable.
NOTE: Bundles can't ship the LD loader nor the C library. They can be modified however and use patchelf to self-modify everything that depends on libraries which can't be put in another LD_LIBRARY_PATH