I am currently using Linux Mint (after a long stint of using MX Linux) after learning it handles Nvidia graphics cards flawlessly, which I am grateful for. Whatever grief I have given Ubuntu in the past, I take it back because when they make something work, it is solid.
Anyways, like most distros these days, Flatpaks show up alongside native packages in the package manager / app store. I used to have a bias towards getting the natively packed version, but these days, I am choosing Flatpaks, precisely because I know they will be the latest version.
This includes Blender, Cura, Prusaslicer, and just now QBittorrent. I know this is probably dumb, but I choose the version based on which has the nicer icon.
Absolutely not, and this article goes into quite a few reasons why:
https://blog.brixit.nl/developers-are-lazy-thus-flatpak/
Sadly there’s reality. The reality is to get away from the evil distributions the Flatpak creators have made… another distribution. It is not a particularly good distribution, it doesn’t have a decent package manager. It doesn’t have a system that makes it easy to do packaging. The developer interface is painfully shoehorned into Github workflows and it adds all the downsides of containerisation.
While the developers like to pretend real hard that Flatpak is not a distribution, it’s still suspiciously close to one. It lacks a kernel and a few services and it lacks the standard Linux base directory specification but it’s still a distribution you need to target. Instead of providing seperate packages with a package manager it provides a runtime that comes with a bunch of dependencies.
If you need a dependency that’s not in the runtime there’s no package manager to pull in that dependency. The solution is to also package the dependencies you need yourself and let the flatpak tooling build this into the flatpak of your application. So now instead of being the developer for your application you’re also the maintainer of all the dependencies in this semi-distribution you’re shipping under the disguise of an application. And one thing is for sure, I don’t trust application developers to maintain dependencies.
Even if there weren’t so many holes in the sandbox. This does not stop applications from doing more evil things that are not directly related to filesystem and daemon access. You want analytics on your users? Just requirest the internet permission and send off all the tracking data you want.
Developers are not supposed to be the ones packaging software so it’s not hard at all. It’s not your task to get your software in all the distributions, if your software is useful to people it tends to get pulled in.
Another issue is with end users of some of my Flatpaks. Flatpak does not deal well with software that communicates with actual hardware. A bunch of my software uses libusb to communicate with sepecific devices as a replacement for some Windows applications and Android apps I would otherwise need. The issue end users will run in to is that they first need to install the udev rules in their distribution to make sure Flatpak can access those USB devices. For the distribution packaged version of my software it Just Works™
I do most things via flatpakk by default. It provide an aditional layer of reliability to the apps I use. When somehing goes wrong, with a new update or st like that, it would just break the app rather than my entire system. The sandboxing is definitely a plus when using something like WINE, as a lot of games/apps required a specific version of it. Managing them when they are installed natively is really stressful, since mistake there can break you system as well. All of these Flatpak benefits is doublely important when I recommend Linux to less tech-savy people, i.e. my cousin/mom.
Nevertheless, there are apps that have worse-that-native flatpak version, or required to be native to be full-featured (system configuration, i.e. Dconf).
i avoided flatpacks before.
but now that i tried out silverblue and had to rely heavily on them,
i have to admit that flatpacks are not nearly as bad as i thought.the only issues i encountered are with steam (might not start propperly on first launch)
and with ides(terminal starts inside the sandbox)other than that it works great.
I accept that I’m in the minority on these things, but I value simplicity really highly, and I mean “simple” as a very specific concept that’s different from “easy”. It can be harder to resolve library dependencies on a system where everything is installed using the native package manager and common file systems, but nothing is as “simple” as ELF binaries linking to .so files. Nested directories branching off of
/
is “simpler” than containers.Do I have any practical reason for preferring things this way? Not really. There are some ancillary benefits that come from the fact that I’m old and I already know how to do more or less anything I need to do on a Unix system, and if you tell me I need to use flatseal or whatever, I’d rather just use users and groups and tools that have been fine for me for 25 years. But that’s not really why I like things this way. I have no issue with embracing change when it otherwise appeals to me --I happily try new languages and tools and technology stacks all the time. What it really is is that it appeals to the part of my brain that just wants to have a nice orderly universe that fits into a smaller set of conceptual boxes. I have a conceptual box for how my OS runs software, and filling that box with lots of other smaller little different boxes for flatpack and pyenv and whatever feels worse to me.
If they solved practical problems that I needed help solving, that would be fine. I have no problem adopting something new that improves my life and then complaining about all the ways I wish they’d done it better. But this just isn’t really a problem I have ever really needed much help with. I’ve used many Unix systems and Linux distributions as my full-time daily use systems since about 1998, and I’ve never really had to spend much effort on dependency resolution. I’ve never been hacked because I gave some software permissions it wouldn’t have had in a sandbox. I don’t think those problems aren’t real, and if solving them for other people is a positive, then go nuts. I’m just saying that for me, they’re not upsides I really want to pay anything for, and the complexity costs are higher than whatever that threshold is for me.
Your knowledge of Unix systems is incredibly powerful, and I highly respect that. You are in control of your system, which is the ultimate goal of personal computing. It is even more powerful that your mental models are reflected in your system. That is super cool, I hope to get their some day.
I am also very happy you enjoy trying out new technologies, and don’t have the grumpy jadedness of just using what you always use.
For me I thoroughly enjoy learning new skills that unlocks the power of all my many computers, and put them to use. Computing should be fun and empowering, and too often people deprive themselves of fun.
No, because I don’t have a very powerful computer
Even if I did, I would still prefer to have native applications because it would be more permissive
I am totally ignorant, do flatpaks use a lot more processing?
They can take longer to start up, which can suck on older hardware. It’s not as bad as it used to be though. Once they’re running there shouldn’t really be any difference. The main drawback is actually that Flatpaks use more storage space.
I am glad that the startup times have improved, that bodes well for future startup times. Using up more storage really is what makes it suck for everyone. I thought that it was more efficient, since I see a lot of .platform, and I assumed those are libraries shared across flatpak apps that use those dependencies.
I am almost sure AppImage has the same problem? I don’t know, people do rated that better though.
Storage space mostly isn’t as bad as it is with AppImages. Each AppImage stores all the libraries it needs, even if they are shared with another one. They can’t even know if they have shared libraries. A single AppImage will probably actually use less storage than a single Flatpak if you only have one, just because the AppImage only uses exactly the libraries it needs, while Flatpaks use shared sets of them. That being said, Flatpaks generally get less bad the more of them you use, because of the shared libraries. They’re still a whole extra set of libraries on top of your system ones though, plus they put out a new set every year. Apps that are still under active development generally get updated to the latest version, but older apps that are basically finished often require older libraries, so that’s more space used. Overall for a one off program when you’re not using universal packaging systems regularly AppImages are mostly better, but if you’re going to be using them regularly Flatpak quickly becomes far better. It still uses more storage space than just using native apps though.
Another difference between Flatpak and AppImage is that it can be kind of a pain to theme Flatpaks to match the rest of your system, and I don’t know of any good way to do it with qt6 apps yet, but it’s just straight up impossible to theme AppImages. They can technically have themes built into them, but unless you’re using Adwaita, or maybe Breeze if you’re lucky, they just don’t, and having to rebuild your own custom AppImage completely defeats the main benefit of using AppImages.
I use Flatpaks for everything I can. I like how Flatpak keeps apps in a container isolated from my system. Also, Flatpaks contains every lib in every version I need for my installed apps, which means It does not rely on my system libs, and I like It, cause my system libs is to make my system works only.
Flatpaks are just the future of packaging
Great explanation and rationale for using Flatpaks! I hope others with questions see this.
I understand how people may be annoyed by the redundancy of every app packaging their own lib, but I swear those are measured in kilobytes, and people tend to be so obsessively minimalist it is a non-issue. Then again, minimalist are probably compiling their software.
I disagree. The other day I wanted to install some audio app that came in flatpak install format (I’ll check and add the name later). The app was less than 30MB in size, but the installation included 300MB of a previous version of org.freedesktop!
I think that is one time download of a library so the app can run. Also, any other app that needs it.
It seems to me that the biggest complaint people have with flatpaks are the space it takes.
I wonder if the blow up in GBs was an early buggy behavior?
On my main PC I use for gaming I run Arch and prefer native packages whenever I can use them. I’m quite happy to have this one computer by a hobby project, and native applications just make more sense on something as up to date as Arch when they’re available. I have started to prefer Flatpak over AUR packages though. The AUR is pretty overrated, in my opinion.
On my laptop and anything else I install Linux on I usually just use LMDE, and I’ll often prefer the Flatpak, just because it’s way more up to date. There are some apps that Mint keeps up to date native versions of, and there are some apps that come preinstalled that I just don’t care about having the latest version of, but for everything else I usually just download the Flatpak.
I don’t like flatpak or snap or any of them. System libraries exist for good reason, just because your computer is stupid fast and you have enough disk for the library of Congress a couple times over doesn’t mean you should run a veritable copy of your whole operating system for each program. IMO it’s lazy.
Sandboxing is a different thing though, if that’s the purpose then it’s doing it right.
I have a ton of flatpaks which means packages are shared between them, so no it’s not lazy or a copy of the whole system. It makes a ton of sense for stability.
Updates are diff’s so downloading and updating is fast. Not entire packages.
Making every package work with only a certain version of a dependency and hoping it is stable doesn’t make a lot of sense.
You’ve just moved the packaging problem from distributions to app developers.
The reason you have issues is historically app developers weren’t interested in packaging their application so distributions would figure it out.
If app developers want to package deb, rpm, etc… packages it would also solve the problem.