Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

prop(os): Evaluate adding soar to Rhino Linux #40

Open
Azathothas opened this issue Feb 22, 2025 · 14 comments
Open

prop(os): Evaluate adding soar to Rhino Linux #40

Azathothas opened this issue Feb 22, 2025 · 14 comments
Assignees
Labels
Application Development The Application Development team for Rhino Linux Feature New feature or request OS Development OS Development Team: builder + core functionality

Comments

@Azathothas
Copy link

Note

I am the lead maintainer for Soarpkgs, the repo Soar uses.
I am certainly biased, so I encourage independent verification of any claims I have made in this thread

Hi,
I had like to discuss what assurances, features or maturity must Soar meet before the devs can consider adding it as a core component in terms of packaging.
If anyone is unaware and would like a sales pitch: https://docs.pkgforge.dev/soar/readme

  • About
    Soar is a package manager that works on all distros. (Yes, really, even on musl or something as old as cent os)
    It is written in rust (we have a basic library that others can integrate), and is licensed under MIT.
    The people involved (including me) have a long history in FOSS along with previous projects: https://docs.pkgforge.dev/orgs/readme/people

  • Features
    I highly recommend reading the comparison page: https://docs.pkgforge.dev/soar/readme for details, here I will simply copy paste the Github Readme

  • How does it help Rhino?
    Rhino would get access to a very, very large number of packages, all of which have transparent CI build logs, checksums + signing
    Rhino would also be able to ship a GUI store as we provide json metadata and all our packages are prebuilt & stored on ghcr. (See: prop(rhino-pkg): [Rhino GUI App Store] #39)
    Rhino has also been using AM for a while to support AppImage, if Rhino uses or completely switches to Soar, there would be these additional benefits:
  • Access to AM's packages without using AM (Yes, we build all packages from AM and then store them as artefacts: https://docs.pkgforge.dev/repositories/external/am)
  • We build most stuff ourself, and everything is a prebuilt i.e no random shell script running on user's system
  • We have 7,000 packages (Including AM's packages), this is even larger than homebrew's linux offerings
  • And we also meet SLSA L2 in terms of security (AM meets none): https://docs.pkgforge.dev/soar/readme/security
  • What about pacstall?
    Pacstall is a system package manager and can handle libraries. Pacstall is also suited better to installing system components & drivers.
    Soar can't handle libraries, neither can it manage anything that requires root access.

  • Does anyone else use Soar?
    Not as system component as of now.
    But the creator of https://glaucuslinux.org/ uses & can vouch for Soar.
    So do the people over at thc
    You can reach them by following the chat links on their project page and asking them about soar

@Azathothas Azathothas added Feature New feature or request triage Bug report/Feature request is yet to be evaluated by the Rhino Linux team labels Feb 22, 2025
@BISHER-AL-MASRI
Copy link

BISHER-AL-MASRI commented Feb 22, 2025

I like the prop

@amirali-dashti
Copy link

I also like this idea. It would be cool to have this alongside the "GUI App Store."

@ajstrongdev
Copy link
Member

Hello @Azathothas,

Thank you for contacting us and opening a proposal for integrating Soar into Rhino Linux. Myself and the rest of the team appreciate the work and time taken to open this proposal, and acknowledge the features Soar could bring to Rhino Linux.

We have decided not to include Soar as an option within Rhino Linux by default, or as an option within our setup wizard for the following reasons:

Rhino Linux already includes Pacstall by default which serves the needs for package management on Rhino Linux. Additionally we support additional formats such as Flatpaks, Snaps, AppImages and Nixpkgs.

We have concerns regarding the way Soar sources some of its packages. We have identified that Soar scrapes packages from Nix and the AUR. This would raise large concerns for us, if integrating into Rhino Linux, about upstream compliance, ensuring package integrity and long-term maintainability.

Finally, I see a large amount of overlap between the use-cases of Soar and Nix in providing universal packaging. Given Nix's existing capabilities, I see no advantage in using Soar over Nix.

Many thanks,
AJ - Desktop Lead.

@ajstrongdev ajstrongdev closed this as not planned Won't fix, can't repro, duplicate, stale Feb 25, 2025
@Azathothas
Copy link
Author

Rhino Linux already includes Pacstall by default which serves the needs for package management on Rhino Linux.

Pacstall has way too few packages and the GitHub issues are all about new pkg request which have gone unresolved for quite a while.

Additionally we support additional formats such as Flatpaks, Snaps, AppImages and Nixpkgs.

Flatpaks don't allow for CLI apps (Our bincache repo is only for cli apps and has about 3000 unique packages)
AppImages, well you are using AM, and if security is a concern, then...well
And your users have to write a pacstall script first, or ask it over at AM or do it manually, Soar has ~ 5000 AppImages out of the box

Nix:

  1. Try installing something as simple as bash
$ nix profile install nixpkgs#bash
  1. Note the total size it pulled in just for bash
$ nix path-info -rSh nixpkgs#bash
/nix/store/78qyrv70jf0pz76awkh9pd5lkcr325z5-xgcc-14-20241116-libgcc      197.1 KiB
/nix/store/bpdm3x8i7qwg8b7wq9h7y78qw1390ni5-libunistring-1.3               2.0 MiB
/nix/store/wm87zrqsi07as7jvr3lyzawhlql577l7-libidn2-2.3.7                  2.3 MiB
/nix/store/6q2mknq81cyscjmkv72fpcsvan56qhmg-glibc-2.40-66                 31.4 MiB
/nix/store/x8nrg8zjns1zc5nvw0sf576ak50b5gzp-ncurses-6.5                   35.0 MiB
/nix/store/l7ah0gkkfrq31iy8aliqrby81js4rh81-readline-8.2p13               35.5 MiB
/nix/store/4k90qpzh1a4sldhnf7cxwkm9c0agq4fp-bash-interactive-5.2p37       42.4 MiB
/nix/store/r2n2ss9i7hjvqs3slixm7361c4h2myq2-bash-interactive-5.2p37-man   97.3 KiB
  1. Try same experiment with Soar
#We use nixpkgs to build bash statically and then only add what's needed
#The build happens on CI, and the end user only has to download a 1.20 MB statically Linked binary
[-] bash#nixpkgs.bash:bincache (static-5.2p37) - GNU Bourne-Again Shell, the de facto standard shell on Linux (1.20 MiB)

We have concerns regarding the way Soar sources some of its packages. We have identified that Soar scrapes packages from Nix and the AUR.

Soar doesn't scrape anything, it fetches packages from our prebuilt cache.
But yes, our CI does "scrape" packages from these sources: https://github.com/pkgforge/metadata/tree/main/misc/data
But this is intentional, as we repackage these upstream packages to be portable and minimal, as shown in the nix example above.

about upstream compliance

We don't violate any Licensing or TOS (because we use the src distribution itself), and we also redistribute LICENSE file where we are required to do so.
This "scraping" is the reason why we have so many packages since most of the work is already done by upstream and we simply repackage it.

ensuring package integrity

Everything is recorded as very, very verbose log. Along with checksums: https://docs.pkgforge.dev/repositories/soarpkgs/security
And now GitHub also lets us attestations: https://github.com/pkgforge/bincache/attestations
But yes, if you can't trust upstream like NixOS, Alpine etc, then you can't trust our redistribution either.

And long-term maintainability.

Soar/Soarpkgs are "new" only in the rebrand, previously it was called toolpacks, we have been at it since early 2023

Finally, I see a large amount of overlap between the use-cases of Soar and Nix in providing universal packaging.

This is false. Nix requires installation as a daemon and will take a path, usually at /nix/store to itself.
Nix offers prebuilt cache but be prepared to use 100-200 MB of bandwidth , and if that's not what you want, then prepare to build the entire thing from source while enjoying a free heater..
And nix's packages aren't that universal. I have packaged over 1000 nixpkgs using nix, and I believe am qualified enough to know what nix and what it's not.
Further, GUI Apps are a hit/miss with nix: https://docs.pkgforge.dev/formats/packages/nixappimage#quirks

Given Nix's existing capabilities, I see no advantage in using Soar over Nix.

Soar is a 7 MB static binary, doesn't need root, doesn't need daemon, doesn't run build scripts on host, doesn't pull in 100 MB of dependencies to install a 1 MB package.


With all of that said,
I understand and respect the decision.
I wish the PacStall/Rhino Team best of luck.

@oklopfer
Copy link
Member

Pacstall has way too few packages and the GitHub issues are all about new pkg request which have gone unresolved for quite a while.

Pacstall intends to provide packages that are outside of standard APT repositories already existing on the system, as an addition, not a replacement. While we would love for maintainers to submit more packages to the repo and resolve those old requests, we as the developers are students with limited time, and can only ourselves maintain so many packages. If you have recommendations about automation, we are happy to hear your suggestions, as your project clearly has a substantial amount.

At the same time, Pacstall is a key integration of Rhino Linux that handles the majority of the core components that distinguish a Rhino install from an Ubuntu install. By and large, Rhino Linux is nothing without Pacstall, it is our most essential utility.

Flatpaks don't allow for CLI apps (Our bincache repo is only for cli apps and has about 3000 unique packages) AppImages, well you are using AM, and if security is a concern, then...well And your users have to write a pacstall script first, or ask it over at AM or do it manually, Soar has ~ 5000 AppImages out of the box

That is commendable, but most of those CLI apps appear to already be in standard Ubuntu repositories. We don't have a need for those. As for AppImages, that is also spectacular, but I think there is a bit of a marketing issue going on. It is not quite clear exactly what kind of package manager Soar is trying to be (more on that below), so if you told us that it was a huge additional AppImage repository, I think our initial reaction would have been different.

Soar doesn't scrape anything, it fetches packages from our prebuilt cache. But yes, our CI does "scrape" packages from these sources: https://github.com/pkgforge/metadata/tree/main/misc/data But this is intentional, as we repackage these upstream packages to be portable and minimal, as shown in the nix example above.

This is why in particular it is not clear what Soar is trying to be. First and foremost, Soar's "repackaging" is the textbook definition of scraping. It is fine if that is the case, and indeed makes Soar a powerful project, but in its current state you are falsely advertising what Soar really is and does. The information from the metadata link you provided, and an explanation on how Soar's "repackaging" works, should be plastered front and center on the documentation. You should be honest about what your project provides, as:

  • Completely user mode, no privileges/root/sudo required
  • Distro Agnostic
  • Native Desktop Integration
  • SLSA Build L2 Security Guarantees
  • Thousands of Prebuilt Packages (Soar User Repository)
  • Universal Package Support
  • & Much More

Actually tells me very little about what Soar is, how it works, or where its packages come from, or how they are built. That is what we mean by package integrity and long-term maintainability. One of the issues that holds Pacstall back from simply automating updates of pacscripts is the potential for a package's build method to change between versions, and the pacscript needing a manual update to remedy this. You appear to be the only person maintaining the packages for Soar, so how can you possibly ensure all 12000+ of your packages are properly up to date and non-broken upon build, unless you are purely scraping pre-existing builds from a large swath of other repositories? It is hard to be comfortable with Soar when these vulnerabilities, even if just in communication, are apparent.

Finally, I see a large amount of overlap between the use-cases of Soar and Nix in providing universal packaging.

This is false. Nix requires installation as a daemon and will take a path, usually at /nix/store to itself. Nix offers prebuilt cache but be prepared to use 100-200 MB of bandwidth , and if that's not what you want, then prepare to build the entire thing from source while enjoying a free heater.. And nix's packages aren't that universal. I have packaged over 1000 nixpkgs using nix, and I believe am qualified enough to know what nix and what it's not. Further, GUI Apps are a hit/miss with nix: https://docs.pkgforge.dev/formats/packages/nixappimage#quirks

Given Nix's existing capabilities, I see no advantage in using Soar over Nix.

Soar is a 7 MB static binary, doesn't need root, doesn't need daemon, doesn't run build scripts on host, doesn't pull in 100 MB of dependencies to install a 1 MB package.

Soar's minimalism can be a weakness as much as it can a strength. Can it bootstrap a Linux system from scratch? What exactly is the "user install"/sandbox that it does, if not like Nix?

@Azathothas
Copy link
Author

Rhino Linux is nothing without Pacstall, it is our most essential utility.

Soar isn't meant to replace existing core system package managers, as it can't manage libraries or root stuff as already said in the original prop.
As well as in the first item on our feature list:
Image
--> https://github.com/pkgforge/soarpkgs/blob/main/MANIFESTO.md?plain=1#L42
Image

most of those CLI apps appear to already be in standard Ubuntu repositories

We ingest repology data and ubuntu (even the bleeding edge ubuntu) mostly lags behind the versions. (Soar has the latest/bleeding edge version of all packages, but also provides old/stable versions at the same time)
But I agree, a distribution like Rhino that's focuses on GUI, wouldn't have a large user base who use CLI Apps.

but I think there is a bit of a marketing issue going on

The core people involved (including me) aren't native speakers, we are from Asia (Nepal).
It is hard for us to write good documentation, and we make heavy use of Tools like Google Translate etc, so please forgive us for any miscommunication.
If anyone would like to improve our docs/readme, please send us a PR.

should be plastered front and center on the documentation.

The very first sentence on Soar's Readme: https://github.com/pkgforge/soar/blob/main/README.md?plain=1#L37
Image
If you click any of the links, it takes you to our docs where it's made clear what we mean.

Actually tells me very little about what Soar is, how it works, or where its packages come from, or how they are built.

This is also on the readme: https://github.com/pkgforge/soar/blob/main/README.md?plain=1#L70
Image
And clicking any of the link takes you to docs that provide detailed explanation on how it all works

You appear to be the only person maintaining the packages for Soar, so how can you possibly ensure all 12000+ of your packages are properly up to date and non-broken upon build, unless you are purely scraping pre-existing builds from a large swath of other repositories?

Because most of it is automated.
I had to invent SBUILD specifically because no other existing specs like APKBUILD, PKGBUILD etc had the features/flexibility that was needed to ensure automation at this scale.
The way SBUILD is designed and how it works, always guarantees that you write the SBUILD for a pkg only once, and then it forever works.
If something goes wrong like some url changed, some repo vanished, the sbuild will simply fail, and it won't be built.
So broken-packages aren't even possible.
I or any other maintainer only needs to fix occasional sbuilds that are failing.
If I get hit by a truck and am unable to fix stuff manually, and all of our automation would still work.
If even then they somehow fail, it still won't break soar, as soar would only use a successfully built & verified package.

It is hard to be comfortable with Soar when these vulnerabilities

I believe, by now, I have already pointed out that soar and the related ecosystem is hardened & sanity checked by default.
Vulnerabilities would only exist of the type like the XZ backdoor i.e our source itself is malicious.
And as that whole incident made it apparent that not even mature projects are immune to it.
And if you mean something else, please point it out.

Soar's minimalism can be a weakness as much as it can a strength

https://github.com/pkgforge/soarpkgs/blob/main/MANIFESTO.md?plain=1#L48
Image

Can it bootstrap a Linux system from scratch?

Yes, there are already packages like busybox, coreeutils, util-linux and all of that is statically linked.
You don't even need soar, just use wget , download these packages and bootstrap it.
If you meant automatically? Then no, as I have already stated, soar is not meant to do system things.

What exactly is the "user install"/sandbox that it does, if not like Nix?

By user install, it is implied packages are installed in ~/.local/share or similar rather than /usr/local/bin
By sandbox, perhaps you are confusing our CI? Soar doesn't need sandbox, just like how curl/wget don't need it.
Soar uses checksums + signing to verify authenticity.
If you mean our CI Infra, we use docker with nestybox which itself runs inside podman, so double isolation. And each pkg is built separately on GitHub Actions.
To break the security here, you would need to break the security of docker/podman or github actions.
Even then anything that's done would be recorded and available as logs.

@oklopfer
Copy link
Member

oklopfer commented Feb 26, 2025

If you click any of the links, it takes you to our docs where it's made clear what we mean.

And clicking any of the link takes you to docs that provide detailed explanation on how it all works

I've read through your docs, and they still don't explain the questions I just asked in plain detail, and most of them missing entirely. I have had to learn them through you telling me through this correspondence. More importantly, you do not say anywhere plain and simple that you are just pulling prebuilt packages from other main Linux repos. You should be saying on your readme where you are getting your packages from, and not purely claiming them as your own; Soar is a coagulator of other package managers.

You appear to be the only person maintaining the packages for Soar, so how can you possibly ensure all 12000+ of your packages are properly up to date and non-broken upon build, unless you are purely scraping pre-existing builds from a large swath of other repositories?

Because most of it is automated. I had to invent SBUILD specifically because no other existing specs like APKBUILD, PKGBUILD etc had the features/flexibility that was needed to ensure automation at this scale.

That is a huge security vulnerability. Automation at such a large scale is an incredibly unsafe idea, it's exactly why packages have so many different maintainers on different repos in the first place. You also don't seem to have a test suite for the packages, you just assume that they work if they build. Dependency conflicts or missing libraries on systems are sure to pop up, and cannot be purely tested on CI - hundreds to thousands of people each work to ensure small sets of these packages work across distributions, particularly in repositories of such a massive size.

The way SBUILD is designed and how it works, always guarantees that you write the SBUILD for a pkg only once, and then it forever works. If something goes wrong like some url changed, some repo vanished, the sbuild will simply fail, and it won't be built. So broken-packages aren't even possible. I or any other maintainer only needs to fix occasional sbuilds that are failing.

Again, you are saying Soar is something that it is not, and are immediately backtracking. if "the SBUILD will simply fail", then it does not "forever work," and "broken packages" are very much possible. If you or other maintainers need to fix failing SBUILDs, then that is not guaranteeing that you write the SBUILD only once.

It is hard to be comfortable with Soar when these vulnerabilities

I believe, by now, I have already pointed out that soar and the related ecosystem is hardened & sanity checked by default. Vulnerabilities would only exist of the type like the XZ backdoor i.e our source itself is malicious. And as that whole incident made it apparent that not even mature projects are immune to it. And if you mean something else, please point it out.

See above for some security vulnerabilities, but I also again want to point out that you have a vulnerability in communicating what your project is. You should be saying more clearly that "Soar pulls prebuilt packages from the repositories of Alpine, Arch, Debian, Nix, Flatpak, Homebrew & more" and "repackages them into stripped down versions", where it then "installs these binaries to users' local directories."

What exactly is the "user install"/sandbox that it does, if not like Nix?

By sandbox, perhaps you are confusing our CI?

When I say sandbox, I mean I would assume Soar would have some kind of local sandbox to ensure all libraries needed by packages are up to date and installed on the system, as Nix does - i.e. how are you handling dependencies?

@oklopfer oklopfer reopened this Feb 26, 2025
@oklopfer oklopfer added Application Development The Application Development team for Rhino Linux OS Development OS Development Team: builder + core functionality and removed triage Bug report/Feature request is yet to be evaluated by the Rhino Linux team labels Feb 26, 2025
@oklopfer
Copy link
Member

(re-opening because we are still ongoing in discussion)

@Azathothas
Copy link
Author

Hmm, I see.

Okay let me try to re-explain:

  • Soar: Think of this as a fancy wget/curl downloader with superpowers, but it has no ability to run scripts or build packages. (End users run this)
  • Soarpkgs: The Repository where the build scripts are stored. This is similar to your pacstall/pacstall-programs repo.
  • SBUILD: A custom spec and build format, which is just fancy wrapper around yaml + bash (or any other shell). The build scripts are written in this format.
  • Sbuilder: A tool that can run a SBUILD i.e sbuild-builder (End users don't run this, only maintainers when testing locally or our CI when building it)

How it works?
Someone writes an SBUILD, adds it to soarpkgs. This SBUILD goes through a manual review by a maintainer & then approved.
Then it goes validation & linting. If it passes, it is queued at one of these repo:

Once it is queued there, it will again go through some validation and if it passes, it is queued to be build shortly on Github Actions.
Once it is built (successfully & verified), our bot will start detecting it as a new pkg, it will then be added to one of the json files here:
https://meta.pkgforge.dev/

From here, soar will detect that a new pkg was added, and then it will fetch fresh version of the databases(json files)
User runs soar, soar will do the rest.


you do not say anywhere plain and simple that you are just pulling prebuilt packages from other main Linux repos.

Because this is not accurate.
Example: Fastfetch

  1. We build it from source using a docker container: https://github.com/pkgforge/soarpkgs/blob/main/binaries/fastfetch/static.official.source.yaml#L65
  2. We also rebuild it from their officially released deb package: https://github.com/pkgforge/soarpkgs/blob/main/packages/fastfetch/archive.sharun.stable.yaml#L62

We offer two version because the statically linked one only has minimal features (due to a limitation of static linking itself), and in the first case, we git clone and build.
In the second one, we download the deb package, install it and then run sharun on it so everything is bundled as a single executable again, but that essentially works/behaves like a static binary.

Another example: Chromium

  1. We first build it using nix: https://github.com/pkgforge/soarpkgs/blob/main/packages/chromium/nixappimage.nixpkgs.ungoogled.yaml#L56
  2. Then we do heavy patching to ensure it will actually work on all distros without nix os

In either cases, do you believe it is right to call these as "just pulling prebuilt packages from other main Linux repos"?
Even when we end up rebuilding/patching most of it anyway?

You should be saying on your readme where you are getting your packages from, and not purely claiming them as your own; Soar is a coagulator of other package managers.

From the above explanation, I hope it is clear that soar doesn't "steal" packages and then calls it as our "own"

That is a huge security vulnerability. Automation at such a large scale is an incredibly unsafe idea

Nope. My professional career is in cybersecurity, I do this packaging things as a hobby. If you or someone else has an actual technical demonstration of how this is a security vulnerability, please share it with me.
We don't have enough funds for bug bounties, but we will credit whoever discovers these vulnerabilities in our hall of fame.

You also don't seem to have a test suite for the packages, you just assume that they work if they build.

Once again, the way SBUILD is designed and the way our CI works, if a pkg built, it mostly means it will work.
If it doesn't users can report such broken binaries, like here: pkgforge/soarpkgs#153
This is same as your pacstall's broken tag: https://github.com/pacstall/pacstall-programs/issues?q=state%3Aopen%20label%3A%22Broken%22

Dependency conflicts or missing libraries on systems are sure to pop up, and cannot be purely tested on CI - hundreds to thousands of people each work to ensure small sets of these packages work across distributions, particularly in repositories of such a massive size.

There seems to be some misunderstanding, probably due to my own communication skills.
By definition, Standalone, Static, Portable, these imply we don't need to think about missing libraries because we have no need to.
And once again, this can be reported if our portable package is not truly portable as discussed above.

if "the SBUILD will simply fail", then it does not "forever work,"

Yes, builds will fail. Soar won't receive new pkg updates, but soar itself and all our previously built packages will continue working forever (or as long as Github doesn't ban or delete our packages)

"broken packages" are very much possible.

They are, and I hope I have already explained what happens if this is the case.

If you or other maintainers need to fix failing SBUILDs, then that is not guaranteeing that you write the SBUILD only once.

Again, all previous versions will continue working, only newer versions won't.
So yes, write SBUILD only once, in 99% of the cases it is true.
If it is not, then no worries, the previous/last successful build still exists and will continue to exist until the maintainer can fix the SBUILD and rebuild a new version.

but I also again want to point out that you have a vulnerability in communicating what your project is.

Can't push a patch for my social skills...

You should be saying more clearly that "Soar pulls prebuilt packages from the repositories of Alpine, Arch, Debian, Nix, Flatpak, Homebrew & more" and "repackages them into stripped down versions", where it then "installs these binaries to users' local directories."

Let's find out how many of these we "pull" from the repositories of other distros?

$ curl -qfsSL "https://meta.pkgforge.dev/soarpkgs/INDEX.json" | jq -r '.[] | .build_script' | grep -Ei 'alpine|aur|cachyos|debian|nix|flatpak|brew|pypi|npm' | wc -l
219

As you might have noticed, I also used pypi & npm in the grep query, so now you can also add that soar steals from npm and pypi as well

Anyway, what's the total pkgs (sbuilds)?

$ curl -qfsSL "https://meta.pkgforge.dev/soarpkgs/INDEX.json" | jq -r '.[] | .build_script' | wc -l
1088

So what do you suggest we say now?

When I say sandbox, I mean I would assume Soar would have some kind of local sandbox to ensure all libraries needed by packages are up to date and installed on the system , as Nix does - i.e. how are you handling dependencies?

I hope by now it is clear, but once again I had like to say static binaries, portable formats (It is "plastered" all over our readme and docs) don't need libraries on the host.
Soar doesn't expect anything from the system, not even GLIBC

@oklopfer
Copy link
Member

In either cases, do you believe it is right to call these as "just pulling prebuilt packages from other main Linux repos"? Even when we end up rebuilding/patching most of it anyway?

Yes, as a large portion of the time, this is where your packages are initially coming from. You need to be more transparent about this.

You should be saying on your readme where you are getting your packages from, and not purely claiming them as your own; Soar is a coagulator of other package managers.

From the above explanation, I hope it is clear that soar doesn't "steal" packages and then calls it as our "own"

You are calling them your own, though, rather than saying that you are reusing pre-existing build scripts and prebuilt binaries from other upstream sources.

That is a huge security vulnerability. Automation at such a large scale is an incredibly unsafe idea

Nope. My professional career is in cybersecurity, I do this packaging things as a hobby. If you or someone else has an actual technical demonstration of how this is a security vulnerability, please share it with me. We don't have enough funds for bug bounties, but we will credit whoever discovers these vulnerabilities in our hall of fame.

You also don't seem to have a test suite for the packages, you just assume that they work if they build.

Once again, the way SBUILD is designed and the way our CI works, if a pkg built, it mostly means it will work. If it doesn't users can report such broken binaries, like here: pkgforge/soarpkgs#153 This is same as your pacstall's broken tag: https://github.com/pacstall/pacstall-programs/issues?q=state%3Aopen%20label%3A%22Broken%22

Pacstall is "designed" the same way, with the same kind of build checks, but that philosophy fundamentally conflicts with how packages actually work in the real world. There are always issues that pop up, which is why we have a "quality assurance" command in Pacstall, so users can ensure that packages work correctly on top of the CI. The issue you linked perfectly highlights this vulnerability, so there is your technical demonstration. The lack of a testing suite, and just having a building suite, is a major oversight for automation of this magnitude. It doesn't really matter what your professional career is, and just saying "nope it's not" does not make your case.

Dependency conflicts or missing libraries on systems are sure to pop up, and cannot be purely tested on CI - hundreds to thousands of people each work to ensure small sets of these packages work across distributions, particularly in repositories of such a massive size.

There seems to be some misunderstanding, probably due to my own communication skills. By definition, Standalone, Static, Portable, these imply we don't need to think about missing libraries because we have no need to. And once again, this can be reported if our portable package is not truly portable as discussed above.

And how have you been automatically verifying that? Or is there a possibility that a lot of your packages are actually not portable and you simply uploaded them thinking they were? How do you know/ensure the majority of the repository does not fall victim to the same issue you linked above?

if "the SBUILD will simply fail", then it does not "forever work,"

Yes, builds will fail. Soar won't receive new pkg updates, but soar itself and all our previously built packages will continue working forever (or as long as Github doesn't ban or delete our packages)

"broken packages" are very much possible.

They are, and I hope I have already explained what happens if this is the case.

If you or other maintainers need to fix failing SBUILDs, then that is not guaranteeing that you write the SBUILD only once.

Again, all previous versions will continue working, only newer versions won't. So yes, write SBUILD only once, in 99% of the cases it is true. If it is not, then no worries, the previous/last successful build still exists and will continue to exist until the maintainer can fix the SBUILD and rebuild a new version.

Again, this is overselling the project for something that it is not. If that is your logic, then Pacstall is exactly the same, older versions will continue to build and maintainers don't need to ever alter their pacscripts (except to bump versions), and the same goes for the AUR and many other repositories. But if there are problems that will inevitably arise, as you have admitted they will sometimes, you can't be calling Soar packages immutable as you currently are. Even if it is just 1%, which, given your repository size, is an enormous number of packages that would falter here.

You should be saying more clearly that "Soar pulls prebuilt packages from the repositories of Alpine, Arch, Debian, Nix, Flatpak, Homebrew & more" and "repackages them into stripped down versions", where it then "installs these binaries to users' local directories."

Let's find out how many of these we "pull" from the repositories of other distros?

$ curl -qfsSL "https://meta.pkgforge.dev/soarpkgs/INDEX.json" | jq -r '.[] | .build_script' | grep -Ei 'alpine|aur|cachyos|debian|nix|flatpak|brew|pypi|npm' | wc -l
219

Then what's with the massive lists in https://github.com/pkgforge/metadata/tree/main/misc/data? Where are all of the packages coming from? Because reading the SBUILDs, they are evidently not just coming directly from their individual, original sources.

As you might have noticed, I also used pypi & npm in the grep query, so now you can also add that soar steals from npm and pypi as well

I think you are taking my criticism the wrong way. I have not accused you of stealing, but that you are not being transparent about where your packages are initially coming from. From the way that Soar has been built, particularly looking at the git history, there had to have been massive imports from third parties, even if these were eventually stripped down. Again, this is by no means inherently wrong, but to mask this is a disservice to both the project and your users.

Anyway, what's the total pkgs (sbuilds)?

$ curl -qfsSL "https://meta.pkgforge.dev/soarpkgs/INDEX.json" | jq -r '.[] | .build_script' | wc -l
1088
So what do you suggest we say now?

I'd say I'm not really sure where you get your 12000+ number then on the link you provided earlier.

When I say sandbox, I mean I would assume Soar would have some kind of local sandbox to ensure all libraries needed by packages are up to date and installed on the system , as Nix does - i.e. how are you handling dependencies?

I hope by now it is clear, but once again I had like to say static binaries, portable formats (It is "plastered" all over our readme and docs) don't need libraries on the host. Soar doesn't expect anything from the system, not even GLIBC

You're right, it does say all over the docs that you provide static/portable binaries, but do not explain how. How are you bundling in all of the necessary libraries? How are you verifying that all of these packages are completely portable? And how is what you are doing with static libs different than what Nix does?

@Azathothas
Copy link
Author

Azathothas commented Feb 27, 2025

Yes, as a large portion of the time, this is where your packages are initially coming from.

As shown in the previous response, only ~ 220 sbuilds are like that, this is ~ 20%
Unless 20% is somehow greater than 80%, how is this a large portion...?

You need to be more transparent about this.

  1. The name of the SBUILD itself contains references if we used for example pypi:
    Image
  2. The note that is shown when any user installs any of our pkg
    Image

And how have you been automatically verifying that?
Or is there a possibility that a lot of your packages are actually not portable and you simply uploaded them thinking they were? How do you know/ensure the majority of the repository does not fall victim to the same issue you linked above?

  1. Write Good SBUILD, so there's no need for it
    As you have noticed that I alone maintain 99% of the pkg, so this implies I alone wrote the SBUILD.
    The quality of the SBUILD determines how good of a packaging it is.
    Not to oversell my skills, but I don't believe there's anyone else who compiles as many statically linked packages as me.
    I have gained lots of knowledge and learnt lots of quirks on what works and what doesn't.
    So almost all of the SBUILDs I personally wrote should work.

  2. CI
    We run ldd, objdump, readelf & more upon each pkg.
    For example: Ultimmc
    Image
    As you see here on the notes, we specifically mark unportable packages
    and if you do:
    Image

Again, this is overselling the project for something that it is not. If that is your logic, then Pacstall is exactly the same,

It is not. You are forgetting that Soar is full chaotic i.e only downloads/installs prebuilts.
I have seen the chaotic-ppr and it doesn't even have 5% of the pkg that pacstall vanilla has.
Soar has 100% of soarpkgs.

older versions will continue to build and maintainers don't need to ever alter their pacscripts (except to bump versions), and the same goes for the AUR and many other repositories.

Again, the misconception is about our pkg repository and soar.
Which I thought I had made clear in: #40 (comment)
Pacstall scripts are run by users everytime they install pkgs, and thus why you have so many issues about broken packages.
Soar's broken package report is about already built packages.
I had rather not start using red circles to mark what needs to be read...

But if there are problems that will inevitably arise, as you have admitted they will sometimes, you can't be calling Soar packages immutable as you currently are. Even if it is just 1%, which, given your repository size, is an enormous number of packages that would falter here.

End users will never even interact with our pkg repositories, aka the repo where we store build scripts.
And once again, I shall remind that soar only pulls in prebuilt packages.
And again, I shall remind if it is related to sbuilds, then it will be handled like the issue I linked.

Then what's with the massive lists in https://github.com/pkgforge/metadata/tree/main/misc/data?

This data is used for comparisons + statistics.
For example, brew has a rank, this is thanks to them collecting metrics from user.
Soar doesn't collect any such data, and GitHub doesn't make it easy for us to see what pkgs are being downloaded the most.
So we use some algorithms to compute ranks by comparing pkgs across these repositories and our own.
Image

Where are all of the packages coming from? Because reading the SBUILDs, they are evidently not just coming directly from their individual, original sources.

How many sbuilds have you actually looked through?
Because if you had, you would have realized that it is quite evident where these packages are coming from.
Please point to me a single, any sbuild where you think it is not evident

I'd say I'm not really sure where you get your 12000+ number then on the link you provided earlier.

This again is a lack of reading stuff properly.
SBUILD == build script, a single build script may provide lots of packages.
This is somewhat similar to guix: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/maths.scm?id=8a3e8f36e2a90e51fa4559beeaed1a86585d4b25

On the very same page, you would see
Image
That describes how we count, if it still not clear, read the scripts from scripts dir in this repo: https://github.com/pkgforge/metadata/

You're right, it does say all over the docs that you provide static/portable binaries, but do not explain how. How are you bundling in all of the necessary libraries?

Where is the docs where you describe how to use cmake when writing a pacscript?
Where is the docs where you describe how to use go build when writing a pacscript?
You have https://github.com/pacstall/pacstall/wiki/Pacscript-101 and we have https://docs.pkgforge.dev/sbuild/specification
In both cases, we describe how to use our spec, we don't describe how to compile a progam
I had attempted to document some guide in the past, but abandoned it: https://docs.pkgforge.dev/formats/binaries/static/build-notes
because we aren't responsible for teaching people how to use make

How are you verifying that all of these packages are completely portable?

Almost all compilers and build tools nowdays will fail and error out if they can't link libraries etc the way you tell them to.
When this happens, a maintainer manually verifies that this indeed the case and then a solution is tried but if not found, that sbuild is disabled with clear reason as to why,
Example: https://github.com/pkgforge/soarpkgs/blob/main/binaries/vsql/static.official.source.yaml#L7
another one using cargo: https://github.com/pkgforge/soarpkgs/blob/main/binaries/soar/static.mimalloc.source.yaml#L7
another one using nix: https://github.com/pkgforge/soarpkgs/blob/main/binaries/dnsperf/static.nixpkgs.stable.yaml#L7

And how is what you are doing with static libs different than what Nix does?

Nix bundles everything in the nix/root dir, it doesn't try static linking unless you tell it to.
And nix is the best build system I have used, but it is still not perfect, so only 5-10% of nix pkgs (CLI) can be statically linked.
Others, I have to build from source or use other build system


I appreciate you reopening the discussion.
I also appreciate you trying to understand soar.
But perhaps, it is time you actually use soar and then criticize us.
Because I feel like we are going in circles.
Yesterday I was going to clarify some of our docs as I thought maybe I didn't do a good job.
But when I checked them, they already contained everything you have asked.
So either the docs I wrote make sense only to me, or someone didn't actually read anything.
Either way, please feel free to close this as not planned if the answers are still not satisfactory because I think I have been answering the same questions over and over.
Wish you the best!

@Elsie19
Copy link
Member

Elsie19 commented Feb 27, 2025

Hello, I am the creator of Pacstall and I just saw this issue form. A couple things I noticed:

I think pkgforge/soar#26 is a sign that either you are doing something very suspicious or you are throwing bandwidth everywhere, both of which are not signs of good programming.


Write Good SBUILD, so there's no need for it
As you have noticed that I alone maintain 99% of the pkg, so this implies I alone wrote the SBUILD.
The quality of the SBUILD determines how good of a packaging it is.
Not to oversell my skills, but I don't believe there's anyone else who compiles as many statically linked packages as me.
I have gained lots of knowledge and learnt lots of quirks on what works and what doesn't.
So almost all of the SBUILDs I personally wrote should work.

That's not a good sign that your skills have not/cannot be transferable to others.


Some of your commits are very, very, very suspicious.

pkgforge/metadata@01622c2
pkgforge/metadata@2dc0cc6
pkgforge/metadata@a787759 (binary file uploads?)


https://github.com/pkgforge/soarpkgs/blob/b2e5cf6579beb8361916a4c1f57c098abbce42e7/packages/0ad/appimage.0ad-matters.stable.yaml#L64

I find this problematic, why are you running commands in a yaml file? This should ideally be a stateless file that only describes package declarations and dependencies, not download commands.


Pacstall scripts are run by users everytime they install pkgs, and thus why you have so many issues about broken packages.

We have 5 open (https://github.com/pacstall/pacstall-programs/issues?q=sort%3Aupdated-desc+is%3Aissue+state%3Aopen+label%3ABroken). That is not "so many".


That will segfault because of missing so files.


Overall, I think this concept is great, but the execution so far seems to be very sketchy and poorly planned. This reminds me a lot about Vlang and its controversies: a hyped up tool that was not all it promised, but with time and effort, you will have a very cool tool!

@Azathothas
Copy link
Author

Azathothas commented Feb 27, 2025

I think pkgforge/soar#26 is a sign that either you are doing something very suspicious

or you are throwing bandwidth everywhere, both of which are not signs of good programming.

Rhino has issues with mirrors on distributing it's ISOs.
I had suggested switch to hugging face in their discord group.
Instead I should have accused them of "not signs of good programming"

Some of your commits are very, very, very suspicious.
pkgforge/metadata@01622c2
pkgforge/metadata@2dc0cc6
pkgforge/metadata@a787759 (binary file uploads?)

If you had looked just a few seconds more, you would have realized these "binary" file uploads are the compressed json/db files in xz, zstd format

If you want to accuse us of "suspicious" activities, please provide more concrete proof

I find this problematic, why are you running commands in a yaml file? This should ideally be a stateless file that only describes package declarations and dependencies, not download commands.

Because it's the most flexible approach.
Since users won't run this, only our CI will, we are in control of the build environment.
This let us write scripts that are simple and let use any build tool
If we had gone through what you suggest, we would have to write helpers/parsers for each and every single build tool we use.
This is not necessary when we aren't running PKGBUILD copy cats on user's systems

That will segfault because of missing so files.

Please re-read what I said there.
And what I showed there.
This won't segfault, this will fail to run if the host doesn't have the dependencies.
It is made clear that this will need dependencies on host (in .note) and that it is not portable (also in .note)
All of these are shown to user if they try installing this pkg with soar.

Overall, I think this concept is great, but the execution so far seems to be very sketchy and poorly planned.

Again, please provide proof of "sketchy" and "suspicious" behaviour/code

poorly planned. a hyped up tool that was not all it promised, but with time and effort, you will have a very cool tool!

Sure if you say so.
I regret opening this issue.
If anyone in the future reads these discussions, I hope they will be able to make up their own conclusions as to what went wrong either with me (pkforge) or you (pacstall/rhino)


And as you have already accused of doing sketchy things and bad programming, I feel like we aren't worthy of being included in such a pristine and well-thought project like PacStall/Rhino.
Please close this as not-planned, as I won't be able to respond because I have got to fix our "suspicious" & "wasting bandwidth" problems.

@Elsie19
Copy link
Member

Elsie19 commented Feb 27, 2025

I think pkgforge/soar#26 is a sign that either you are doing something very suspicious

or you are throwing bandwidth everywhere, both of which are not signs of good programming.

Rhino has issues with mirrors on distributing it's ISOs.
I had suggested switch to hugging face in their discord group.
Instead I should have accused them of "not signs of good programming"

Some of your commits are very, very, very suspicious.
pkgforge/metadata@01622c2
pkgforge/metadata@2dc0cc6
pkgforge/metadata@a787759 (binary file uploads?)

If you had looked just a few seconds more, you would have realized these "binary" file uploads are the compressed json/db files in xz, zstd format

If you want to accuse us of "suspicious" activities, please provide more concrete proof

I find this problematic, why are you running commands in a yaml file? This should ideally be a stateless file that only describes package declarations and dependencies, not download commands.

Because it's the most flexible approach.
Since users won't run this, only our CI will, we are in control of the build environment.
This let us write scripts that are simple and let use any build tool
If we had gone through what you suggest, we would have to write helpers/parsers for each and every single build tool we use.
This is not necessary when we aren't running PKGBUILD copy cats on user's systems

That will segfault because of missing so files.

Please re-read what I said there.
And what I showed there.
This won't segfault, this will fail to run if the host doesn't have the dependencies.
It is made clear that this will need dependencies on host (in .note) and that it is not portable(also in.note`)
All of these are shown to user if they try installing this pkg with soar.

Overall, I think this concept is great, but the execution so far seems to be very sketchy and poorly planned.

Again, please provide proof of "sketchy" and "suspicious" behaviour/code

poorly planned. a hyped up tool that was not all it promised, but with time and effort, you will have a very cool tool!

Sure if you say so.
I regret opening this issue.
If anyone in the future reads these discussions, I hope they will be able to make up their own conclusions as to what went wrong either with me (pkforge) or you (pacstall/rhino)


And as you have already accused of doing sketchy things and bad programming, I feel like we aren't worthy of being included in such a pristine and well-thought project like PacStall/Rhino.
Please close this as not-planned, as I won't be able to respond because I have got to fix our "suspicious" & "wasting bandwidth" problems.

I'm on your side here, I don't want to dog on your project without offering ways to help you.

I don't understand why your first thought when I mentioned that cloudflare is shutting you down is to go and attack Rhino. That has nothing to do with anything here.

About the compressed files, we all know that that's how Jia Tan infiltrated a well respected library, and people now should be more wary of this. It also slows down git in general and is harder to diff.

Your comment about the commands running is fair, I didn't read enough before making that particular comment, but my point still stands somewhat: I think your build format should be more declarative.

About the so files, that's basically the point of a package manager. I find it odd that a package manager won't make certain packages that it provides functional out of the box.

I feel like we aren't worthy of being included in such a pristine and well-thought project like PacStall/Rhino.

We can have serious conversations without being petty about it 🙂.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Application Development The Application Development team for Rhino Linux Feature New feature or request OS Development OS Development Team: builder + core functionality
Projects
None yet
Development

No branches or pull requests

6 participants