I created a script that always installs apps from their official source
https://github.com/Tsu-gu/appfetch/
It’s a proof of concept of an idea I had a while ago. I dislike having to hunt down apps for my Linux machine when I want them from an official source. Some apps are packages as tarballs, some as .debs, some as install scripts that download a binary, some are flatpaks and snaps.
I created a yaml file with only verified apps from flathub and snapcraft, and added a few apps outside of them that I could think of.
The ultimate goal is the user just typing the names of what they want, and the script will just get it. They shouldn’t waste time with picking the right source.
I like this idea, but with the increase in supply chain attacks, I’m reluctant to use it. I’ve been much more reticent about installing from AUR, and my use of github projects has drastically slowed down since I now feel as if I have to read all the source code for everything I get.
I’ve sandboxed programs before, and I may just start making that standard practice, but still… it makes me angry. It’s, like: this is why we can’t have nice things. There are precious few OSS supply chain static code analysis tools, and there are a lot of languages I don’t know well enough to review, or which have such broad or deep dependency trees that it’s more work than it’s worth. The most frustrating is the dampening effect it’s having on OSS. It only pushes people to only use programs from big commercial companies.
Anyway, none of that is directly related to your program, which is really cool. Sadly, if there aren’t any positive developments in the OSS ecosystem for attacking the supply chain problem, cool projects like this are not going into my toolbox.
That’s understandable. Truth be told I probably wouldn’t trust this either if I didn’t make it. Anything can be hiding in the custom field.
Now I’m wondering, if it were bundled with an OCI sandboxing system, that would address my issues with Flatpack and Snap. Technology has moved on and Flatpack has stagnated, and Snap’s just an attempt to centralize control and distribution. It’s time for a redesign, specifically focusing on supply chain attacks, with sandboxing all the way down.
I like the idea ! And looked at the project on github. But … snap disgust me so much more than searching the right source, i’m not adapting to it. But still nice thinking!
Thank you, and fair enough.
Maybe add something in the search results to indicate the app’s origin? Or even just a way to choose search sources?
I understand that people treat snap as if it was a contagious virus but the developers chose the method purposely. A lot of KDE apps are only distributed as snaps for example, k3b comes to mind. VLC as well.
There are flatpak versions but they aren’t official, which defeats the point a bit.
I do however plan to somehow add the ability to prefer flatpak, since a few of the entries have both a flatpak and snap field.
the developers chose the method purposely
They chose it because it’s often the only way they can distribute packages to Ubuntu users. Which was the whole point all along; Canonical taking control of app distribution.
But why choose snap only? Flatpak works on Ubuntu just fine, and on other distros obviously, so they could just choose that. Blender only officially support snap too. Vivaldi for example made a blog post about how snap has better sandboxing of chromium. https://social.vivaldi.net/@ruario/113164179328218870
But why choose snap only?
Because they don’t want to support flatpak.
Well then that has nothing to do with Canonical forcing developers to use snap if they want to appear in the software centre.
wild
a lot of KDE packages are only distributed as snaps
Sounds like Obtainium on Android.
The thing that concerns me is that it downloads an unofficial source.
Those are all official sources tho, but you have to trust me not to put in malicious commands of course.
Oh so you are essentially personally maintaining the sources list?
Yep. I did automate it the best I could (I’m not creating entries for thousands of apps manually) but it will indeed require manual maintenance as the apps will change their installation methods over time.
Genuine question: Why would I use this as opposed to Nix? Between nixpkgs and the NUR, there are an insane amount of packages available, and you can build everything from source if you wish.
It’s meant for people who prefer their apps from the official sources rather than repackaged. All this script dies is make it easy so you don’t have to google the app’s name and search for an install method on its website.
right, that’s what nix does if you build from source
If you want to build from source, this brings nothing of value. Nix has pretty much everything.
with that being the case, correct me if I’m wrong, but your pitch is that users should trust your manually compiled and maintained commands to install things because you’re guaranteeing that the binaries being installed by your commands are from official sources, and that is better (in at least some cases) than cached binaries from something like nixpkgs, where the trust we are asked to give is that the cache is built correctly from source.
I like to get software directly from the developers, and this just makes it easier. I don’t want to compile anything, and I don’t mind any of the package formats. I just don’t like that every app uses a different one so it’s a pain in the ass to install them.
Whether you trust the list not to execute malicious commands is up to you.
I think that using some “custom” package names for internal args is not the best choice.
Anyway, later I’ll take a better look at it and probably contribute to it. Ty
Could you elaborate? I’m not the best programmer so I’m open to suggestions.
I saw that “version” and “update” are inside apps.yaml instead inside the program itself like “search”. I see why version helps to be there which gets updated with the list, but the update link looks more like a quirk to be inside apps list. And it would make sense to distinguish program version and apps list version.
That’s a good point. I will also probably need a better update method than rm -rf-ing the files and replacing them with each update.