I like gentoo's package deprecation process
artemis.sh
artemis.sh
What is really not nice is the obession with pruning the versions for each package. For a specific package, there is no serious issue with keeping several old versions hanging around in the package tree. By default the package manager understands that and the user doesn't see them. But where there is some compatibility or build issue, the user would have the option of masking the latest and keep going on an earlier version: it would still build, usually with no extra effort. It would rebuild fast if you have a build cache. You could downgrade easily if you discover an issue weeks later.
But no: most maintainers where that matters delete the previous version as soon as the new one is half in. Not a helpful obsession.
This is especially true with machines that run things on GPUs.
p.s. i am maybe well known in some gentoo circles as the person who updates machines after 12-18 months. So i'll hit every bug and gotcha over a weekend that everyone else dealt with in the past year. This occurs mostly on desktop gentoo, stuff like pipewire and the DE stack. Occasionally python will threaten to brick a machine, but tinderbox et al have gotten me out of those jams.
With debian/ubuntu, once i get something running, that's what's on that machine until i decommission the machine or the stack running on it. I don't have the time or inclination to deal with things like that. That's what containers and VMs are for.
One reason they are trimmed is because old version of $package don't build with new version of $library which is a big dependency (eg vte) that is moving forward so keeping the old ones, and maintaining them gets more and more difficult as time moves on. It's not Gentoo forcing the churn, it's the things Gentoo packages that are churning and it becomes visible at the Gentoo layer.
But your own overlay, or just pinning your build can easily solve that (eg, still using PostgreSQL 9)
Rarely, you might need to keep a dependency around. But no, usually the earlier packages still build just fine for a very long time. In the case of a high-churn package like chromium, there is a reason to be on latest - all the security patches - but when the latest doesn't build, the previous one is already gone (and would have built just fine.)
Old versions (ebuilds and patches) are really not easy to find once they are gone from the portage ebuild tree. I still don't know where they live.
If a dropped package is of interest and there's a reason it shouldn't be in the tree I usually submit it to GURU. If I use it and it probably should be saved or re-added to the tree I proxy maintain it.
When I somehow get to an old ebuild like perhaps gentoo/www-client/chromium /chromium-118.0.5993.54.ebuild here:
https://github.com/gentoo/gentoo/blob/3fb0eea1ee35033113d7af...
how do I find which gentoo portage 'files' were live at the time? (poor example - there may have been no change in this case.)
Do one emerge -avuDN world, and everything is upgraded... Now i have a browser with 50 tabs, a few processes running, chat windows, some hand-run services, a bunch of stuff, and suddenly, everything video related slows down to a crawl... API mismatch, nvidia kernel modules is one version and the 'frontend' libraries are a new version.
Swap kernel module? Nope, not without (at minimum) restarting X. Want to downgrade the frontend libs? Nope, the ebuild has been removed. Then either reboot, waste 20 minutes to set up everything, then 2 more phonecalls, since some service to test something "just for two hours, until the meeting" was running in screen for months now, and isn't running now, and after a --sync, a new version of nvidia drivers appear.... or find the old ebuild, put it in a personal overlay, and waste 20 minutes on that.
It's a pain. Just keep the old versions, an ebuild is a few kilobytes!
Not hyperbole to say that Gentoo set the course of my life. I don't use it anymore, but I'll never forget my time with it.
Long may it continue.
I got my first job in the web world because I was using Gentoo at home, and that totally defined my career as well. The day I build again a desktop computer, I think I'm going to install it again (although waking up at 4AM to check why the kernel or Konqueror weren't compiling and fixing the flag or dependency issue is certainly something I will not do again)
A Dutch friend on a filesharing IRC network walked me through an install process on my old laptop, via Skype, throughout an entire evening and some of the night. I remember how we went through one-by-one enabling certain kernel modules and reading the descriptions of what they did.
It’s handy to know because sometimes I can save day, but mostly just means I can name the older, better thing we’re spending a dump truck of money to do the hard, worse way.
Gentoo was my first Linux distro and it was cool.. It definitely taught me a lot about app building. But the expectation that every machine needs to be continuously updated at least once per month is what caused me to go to Debian. You have that server which just works and you haven't logged in there for three months.. or a laptop which you only use for travel? Prepare for broken automated updates and careful package rebuilding in just the right order.
(Actually, this is definitely doable on Nix, since there are mechanisms like "insecure" packages, but 1. I dunno if there's any for this situation (block package without explicit confirmation because it's not maintained) 2. I don't think there's any policy for this, but it would be nice if there was at least a procedure for people who wanted this kind of deprecation. It's also a bit different on Nix since it is not a rolling release distribution.)
https://github.com/NixOS/rfcs/blob/master/rfcs/0127-issues-w...
A month is generous? I mean maybe for my desktop machine. Certainly not for some headless file server.
One thing I liked about Ubuntu was how they handled the Python 2 -> Python 3 transition after version 2 was officially no longer supported.
`python` was then a non-existent command which would fail while python3 continued to work.
This way one would not accidentally run a Python 2 script which kind of worked with Python 3 but then failed under very specific circumstances, possibly even after running for a couple of days. Not even letting that script start in the first place directly after the distro upgrade was the correct thing to do.
I think that if you upgrade the OS by just changing repo URLs in apt config, the old packages will stay installed - so it will be just like in Arch situation described by the author.
For Ubuntu, their do-release-upgrade script asks you to remove packages that didn't make it to next release. https://askubuntu.com/questions/1392819/do-release-upgrade-h...
EDIT: you can find obsolete packages on your system using apt or aptitude https://askubuntu.com/questions/98223/how-do-i-get-a-list-of...
Debian guarantees than no package is removed from a release during its entire lifetime. This is why it's called Stable.
This can be extended to 5 years if you use LTS and up to 10 years if you use ELTS (but it's an external commercial service)
It's a pity that other distros refuse to learn from it since they think its ideas must be limited to source-only distribution.
It's something companies shoukd consider doing internally as well - this API is supported at this version etc. It's easier to do explicitly than implicitly (large companies usually have internal SLAs and actual written docs)
I think the point I am making is good deprecation is part of good contracts.
A user can easily (often) continue maintaining a local copy - just for their local habit. First just with the current version of the software. And nothing prevents them from taking over as public maintainer for Gentoo. Either as a mainstream package or in one of the many unofficial repositories. This is all helpful as package system features.
Arch isn't designed to hold your hand, it encourages users to do their own research and due diligence, it expects responsibility from their users.
Arch Linux is nothing more than pacman and makepkg, both are designed to give you bare-bones packaging capabilities, how you use those tools and manage your system is up to you.
pacman has the -Qm option which will show you packages that are no longer in the database, so you very much can do the same, i.e. plan ahead.
A major difference of portage (in contrast of pacman) is that portage has a lot more abstractions (USE flags, EAPI, news, etc) but those come at the cost of complexity.
After using Gentoo for about 15 years at this point every time I try to use another distro it just feels deeply unintuitive and backward.
Some of the examples I often cite:
If I want a package in Gentoo, I just run "emerge -av [package]" if need be I can alter its USE flags under /etc/portage/package.use/[package-name] and get exactly the features I want and need, and nothing else.
If that package doesn't exist, Gentoo's portage has a system where it suggests "similar" sounding packages. Like if you try to emerge "firebox" instead of "firefox" it will offer it as a correction
If I want a package in Debian/Ubuntu conversely, I type "apt-get -y install [package]" and sometimes find that oops that's not the package I want, or that package doesn't exist under that name!
Then I try searching for that package via aptitude, getting a litany of "libpackage3/5/7/9" or libpackage-something-something-dev libpackage-something-something-doc libpackage-something-something-headers and so on. It's all just very messy. There's also rarely any description as to what the package is without googling it beforehand
For many years I used Chromebooks as my portable Linux PC of choice. My rationale at the time being that Google mandated no "binary blobs" in the kernel and that all hardware support must eventually land in the upstream kernel. Along with hiring the entire Coreboot team these made extremely attractive (albeit cheap and disposable) laptops
Some of the hardware support (keyboard backlighting, trackpad etc) weren't yet in the mainline kernel. On a binary distro I would have to source out (or build my own) patched kernel manually to add this hardware support
Gentoo due to being source based provides an entire mechanism for just this, under /etc/portage/patches
This feature isn't exclusive to the kernel either. Any package you want on a Gentoo system can include any number of custom patches you desire as a user. I've used this feature additionally for enabling things like Intel ARC GPU hardware encoding support under ffmpeg while it was still in development
Gentoo's biggest draw for me however is its philosophy and dedication to "choice". Not choice in the traditional sense of "we have lots of desktop environments to pick from". Choice is etched into Gentoo's very bones by its nature as a source based distribution.
When briefly setting up a temporary NAS at a friends house I opted to simply use Fedora, thinking it would be easier than spinning up a full install of Gentoo for such a short-lived purpose
Installing Fedora and Samba I grabbed my smb.conf from home and used it as a template to set up the NAS. After starting it up I found no success in writing to the drives. I had correctly configured them in /etc/fstab, added the appropriate users and on a whim even tried chmodding the mount point just to rule that out
After a lot of googling it seemed that Fedora's SELinux was the culprit. I'm not interested in debating the merits of its inclusion or not, indeed I agree SELinux is a powerful security toolkit.
I bring it up purely to highlight Gentoo's difference in ethos and why I'm personally drawn to it. Gentoo never "does" anything for you on its own. It does not try to make any assumptions or guess your intentions as a user. I liken Gentoo to being given a bucket of Lego bricks. You have a vision in your head for what you want your system to do, and how to do it. So you build it to those specifications brick by brick.
This exists in Ubuntu/Debian - if you type `firebox` you literally get:
$ firebox
Command 'firebox' not found, did you mean:
command 'firefox' from deb firefox (1:1snap1-0ubuntu2)
Try: sudo apt install <deb name>Same. I remember when I was going through the install handbook its three stated "design principals [sic]" of openness, choice, and power [0] spoke to me.
> I liken Gentoo to being given a bucket of Lego bricks.
I recall seeing some comment (might've been ascribed to Daniel Robbins, not sure) about how "Gentoo was created to be LFS for humans."
[0]: https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Abo...
> After a month though, the package will get removed from tree along with the package mask (no need to mask a package which isn’t there anymore).
Does this mean that the package manager will just remove the package on its own automatically? If so, I take great exception to that. Removing packages like that should always involve overt user interaction.
- packages are forever
- they cannot be deleted
* with rare exception ofc