Share your preferred bsd or linux distribution which is not FreeBSD.

I've been using Gentoo Linux since 2000 and I still love it. I was also a developer for them for a few years in the SELinux team.

I managed to convert all the companies I worked at to it - once had 1300 instances of Gentoo at the same time at a VPN provider.

Pros:
- the package manager - a large number of USE flags that allow fully custom dependency trees for the entire OS. just define '-*' as a primary USE flag and then enable only what you know you use. great way to dodge exploit vectors in code you're not interested in.
- everything can be replaced including the init provider. so a system without systemd or even without dynamic devfs/udev is possible. I'm still rocking sysvinit from the depths of time with daemontools on top.

Cons:
- the package manager - it's written in python, which I detest with passion
- all python packages that end up clogging up the package update process due to unmet dependecies

Please tell me they have a separate Python dependency chain for installing Python packages critical to the python package installer?
 
I recently repaired and refurbished my daughter's old laptop and installed CachyOS on it with root-on-zfs and COSMIC as a DE. Nice combo but I'm still in the honeymoon phase with FreeBSD/XFCE.
 
Last Thursday my Debian went down and stuck too much time to recover it's RAID.

I've been running that server since 2008. But I am considering replace it's OS with FreeBSD. My experience with this amazing operating system gave me such confidence to put it in production for next year.
That lvm system on Debian is not match for our ZFS in FreeBSD.
My system seem wasted too much time to recover from that crash (energy outage). Só I decide to migrate.
I've learned a lot from Debian but I'm learning more last six years with one server, two desktops and one laptop.

Once in FreeBSD there is no turning back.

And for my window manager I cannot, anymore, go on without DWM.
 
Please tell me they have a separate Python dependency chain for installing Python packages critical to the python package installer?

well, not exactly.

portage (this package manager we're talking about) can be set to create custom binary packages after the compilation of every package (just like in FreeBSD where make creates a pkg after compiling a port).
I have these binary packages made available to other servers via https so I don't compile every single package hundreds of times on different servers. portage is thus able to retrieve a package remotely and install it if all USE flags, compilation flags, architecture, etc match for that package between the local setup and the remote one.

in desperate cases (it only happened to me maybe twice in the last 20 years) one can wget a binary package compiled on a different server and simply unpack it with tar into /. so it's possible to get by without the package manager in an emergency.
 
I have these binary packages made available to other servers via https so I don't compile every single package hundreds of times on different servers.
How does Portage handle accidental linkage? An issue I always find tricky to describe but I will try to explain:

If I have an install of Gentoo with 8000+ packages installed and try to build something like SDL2, Qt or Qemu this could well end up with a considerably different build compared to if I built the same software on a minimal Gentoo install (~20 packages).

This is because the CMake FindPackage, GNU autotools, et al for better or for worse tend to pull in random stuff dependending on what they find. Does portage have policies to avoid this (i.e building each package in a chroot with minimal dependencies)?

I like many parts of Gentoo (a standard *base*, a ports-like system, exotic platform support). Never gotten round to having a play with it though.
 
How does Portage handle accidental linkage? An issue I always find tricky to describe but I will try to explain:

If I have an install of Gentoo with 8000+ packages installed and try to build something like SDL2, Qt or Qemu this could well end up with a considerably different build compared to if I built the same software on a minimal Gentoo install (~20 packages).

This is because the CMake FindPackage, GNU autotools, et al for better or for worse tend to pull in random stuff dependending on what they find. Does portage have policies to avoid this (i.e building each package in a chroot with minimal dependencies)?

I like many parts of Gentoo (a standard *base*, a ports-like system, exotic platform support). Never gotten round to having a play with it though.

this is a very interesting thought experiment, and I understand your point. I cannot give you an authoritative answer, instead I will give you just a few pointers that I'm able to wrap my head around.

1. have a look at qemu's ebuild here (this is basically a shell script that's equivalent to a port Makefile)
at line 61, defined as IUSE those are the USE flags that can be enabled/disabled for this package.

at line 501 - this is one of the functions that gets called during the configure stage of the package. all the states of those USE flags are built up in the conf_opts variable via the use_enable, conf_, usex functions.
so as you see most configure options get --enable-FOO --disable-FOO-ed explicitly when ./configure is run prior to compilation.

2. in Gentoo there is a script called revdep-rebuild that I use after every single update session. this scripts detects if there is any binary on the system that's dynamically linked against a missing library.
your scenario would eventually generate a hit if remotely compiled packages are being installed, a lib was picked up accidentally and the lib is not properly marked as a dependency in the ebuild. while I guess this might happen, I have never seen this corner case on my systems - and I actually actively look for this kind of breakage.
a simplified FreeBSD version of this script is here btw: FreeBSD revdep-rebuild.sh , originally made for this breakage

3. during (library) package removals portage checks if the .so file that should be removed from the filesystem is used by any binary. if the answer is yes then the package is marked as removed, but the .so is kept on the filesystem until the package containing the binary that still used that lib is removed.

4. portage uses a sandbox to make sure that filesystem writes are limited to the build directory during the build process, but there is no special dependency-limiting chroot.

hope that helps, I never looked under the cover since python is not a language I understand.
 
Being a big user of audio pro software that are into external repositories, I shifted to gentoo and looked back only one time. But a few months later I was back to gentoo. And with time, I get really happy that gentoo support both openrc and systemd. So my machine are systemd free.

With gentoo, as it is a source based distribution, the dependencies of a given software are what is installed into the machine, which imply the external software from an overlay remain always in sync with the main tree.

Another gentoo goodies is that you can set the system to install a stable amd64 kernel and kernel headers, when the rest of the system is ~amd64 (something like debian testing), and get both a very stable system and the last software updates.
 
Back
Top