Hi,
Lately I've developed some frustration towards FreeBSD. Mainly how it handles upgrades and updates. So, I want to give my two cents. This is by no means intended as an anry rant or anything. The FreeBSD community has always been kind to me and I don't mean to offend anyone. I just want to give some honest and (hopefully) contructive criticism.
I've been using Linux since the late nineties. Around 2011, I started using FreeBSD on several of my servers. The reason I jumped ship, was because of the excellent ZFS support FreeBSD offers. And how nicely it is integrated into the system itself. I absolutely love ZFS. I also found that the FreeBSD community is very helpfull and friendly overall. (In all fairness, I never had any negative experience with the Linux community either)
However, in recent years FreeBSD has managed to render itself completely unusable to run on production servers. Well, in my case, anyway. Let me explain what I mean.
When I run an LTS release of Ubuntu, I can be pretty certain that the OS and it packages remain pretty much the same throughout it's 5-year life cycle. Updates will be, for the most part, just security patches. Nothing fancy. Which is exactly what I expect from a server OS. I can install patches and updates without really worrying about breaking anything. Which, again, is exactly what I expect from a server OS.
The same goes for Windows. I can even install service packs (more or less what FreeBSD calls a minor upgrade) and be fairly certain that everything will work just fine, after the reboot.
But when it comes to FreeBSD, updates are rarely smooth. And to make things worse, FreeBSD pretty much forces you to upgrade. Wether you want it, or not. Because if you don't, you're going to run into a whole lot of problems later on. And it makes you do this at least once a year. On all your servers.
And this is my biggest complaint about FreeBSD. FreeBSD happily roles out a new minor release about once a year, or so. And when that happens, you have three months to upgrade your servers. After that, it becomes really difficult to maintain your server. To the point where it becomes downright impossible. You have to upgrade. And you know what, I can actually understand that. Security reasons and all. And I would happily go along. The problem is that FreeBSD tends to break things. Even between minor releases. And that is what bugs me the most. FreeBSD shouldn't do that between minor releases. It's fine between major releases. Unavoidable, even. That I understand. And that shouldn't be a problem, because major releases are years apart. When that time comes, it's a good moment to upgrade the entire server altogether and start from scratch.
The irony is that people usually praise FreeBSD for being consistent, easy and predictable. Take for example this thread on Reddit:
The thing is, that my experience is actually the complete opposite.
Let me give a few examples.
I needed to install Python-3 on one of my servers. This server was still running FreeBSD-11.1. When installing Python-3, pkg warned me that I was running an outdated version of FreeBSD, which was no longer supported. But what was I going to do? I needed Python-3. So, I installed it anyway. And it installed fine. But when I tried to run any script, it complained about libdl.so.1 not being found. It turned out that the newer versions of several packages now depend on this library, because of a change between FreeBSD-11.1 and FreeBSD-11.2. So much for consistency.
Another example is when I needed to install a website. This website needed php-gd. It installed, but now libpng complained about libz. This led me to this blogpost. Notice how he writes:
I wouldn't go as far as saying: "Screw you, FreeBSD!". But it's certainly nice to know I'm not alone in this.
And a final example is when I finally bit the bullet to upgrade a mailserver, still running FreeBSD-11.0. After the ugrade itself was done, freebsd-update told me to reinstall all installed packages. Obviously because of breakages as mentioned above. And that on it's own it already pretty ridiculous, when you think about it. I don't want to do risky stuff like this on a production server. And low and behold, when I tried to update Dovecot, I got errors. So I turned to pkg updating to find out this:
Why? Why would anyone rename a package? That isn't consistent at all. It can only create all kinds of potential problems, that could easily be avoided by not renaming the package in the first place.
To be fair, it goes on by saying:
Notice the reservation, how it should handle the rename automatically. But in my case, of course it didn't. First of all I never used pkg to install Dovecot. I had to compile it with ports, because I needed PostgreSQL support, which wasn't included in the binary pkg. So, I used postmaster, as suggested by pkg updating. After the update, email stopped working, despite Dovecot seemed to run. I quick glance in the logs learned that there was no PostgreSQL support.
So, I go to the ports directory, run
Which brings me to another complaint about FreeBSD. As far as I know, it's not possible to see wether I used pkg to install an unaltered binary package, or ports, to compile it myself. And if I used ports, I also can't see why I used ports. I other words, what options did I change, before building the package?
Maybe someone reading this thinks: "Well, you could just run
Anyway, back to the mailserver. FreeBSD also informed me that support for PostgreSQL 9.3 will end after january 2019, pretty much forcing me to do messy upgrades between versions. Which I obviously want to avoid, as long as this server is in production. Knowing myself, when I installed FreeBSD-11.0, I went with PostgreSQL-9.3, because it was the default version. And I would expect it to be supported throughout the entire 11.X life cycle. But no, FreeBSD janks it away and forces you to perform risky migrations on production servers.
I also ran into problems with automake-wrapper. I got complaints from pkg about conflicting files. Apparently automake-wrapper is obsolete now and merged with something else. Another breakage. Granted, fixing this one was easy. But still, it's one of those non-consistency problems you keep running into.
In the case of this mailserver, things got so messy, that after wasting hours of tackling one breaking package after another, I just pulled the plug and rolled back a snapshop (thank God for virtualization). Screw this! It's easier and less risky to just create a new VM, start from scratch and migrate all email(accounts).
When I perform (minor!) FreeBSD upgrades, I run into all kinds of trouble, way too often. And I have to use Google way too often, to figure out what went wrong. I have to keep track of a plethora of changes, merges, splits and whatnots of packages, via pkg upgrading. I constantly have to be on my guard and on my toes, to make sure it all goes well. Which is, to be honest, pretty nerve wracking. And it keeps coming back, every year! And most of the time it's pretty much just for the sake of upgrading. I don't gain anything from the newer versions. It offers me nothing but trouble. This is not how I want to manage my servers. I should be able to just install updates, perform the minor upgrades and be done. But sadly, that is not how FreeBSD works.
If I was running one or two servers, I could live with this. But when you're running multiple servers, stuff like this is getting on your nerves pretty quickly. Especially concidering when upgrades are usually done in the evenings and weekends.
FreeBSD should keep consistent throughout the entire life cycle of a release, including all minor upgrades. Don't remove features like make reinstall, or change dependencies like you did with libdl.so.1. Save that for major upgrades. Also, keep ports consistent throughout all minor releases. Don't suddenly rename packages. Or break stuff like libpng complaining about libz. This makes upgrading much easier and way less stressfull. And it leaves the option to just... well... not upgrade (and still be able to use ports). Or at least put it off to a more convenient time, because catching up is easy. As it should be.
I'm still concidering my options. But it's certain that I won't go on like this. Which is a shame, because I still concider FreeBSD to be a very good OS. If only it was truely consistent, like people say it is.
So, to summarize, I think the problem I have with FreeBSD can be condensed into the following statement: "FreeBSD isn't as consistent as people want you to believe. And as a result of that, it breaks way too fast, if you don't keep up. And the further you fall behind, the harder it is to catch up."
The forced minor upgrades and the changes between them, are the bane of my work. I can't do it anymore.
Lately I've developed some frustration towards FreeBSD. Mainly how it handles upgrades and updates. So, I want to give my two cents. This is by no means intended as an anry rant or anything. The FreeBSD community has always been kind to me and I don't mean to offend anyone. I just want to give some honest and (hopefully) contructive criticism.
I've been using Linux since the late nineties. Around 2011, I started using FreeBSD on several of my servers. The reason I jumped ship, was because of the excellent ZFS support FreeBSD offers. And how nicely it is integrated into the system itself. I absolutely love ZFS. I also found that the FreeBSD community is very helpfull and friendly overall. (In all fairness, I never had any negative experience with the Linux community either)
However, in recent years FreeBSD has managed to render itself completely unusable to run on production servers. Well, in my case, anyway. Let me explain what I mean.
When I run an LTS release of Ubuntu, I can be pretty certain that the OS and it packages remain pretty much the same throughout it's 5-year life cycle. Updates will be, for the most part, just security patches. Nothing fancy. Which is exactly what I expect from a server OS. I can install patches and updates without really worrying about breaking anything. Which, again, is exactly what I expect from a server OS.
The same goes for Windows. I can even install service packs (more or less what FreeBSD calls a minor upgrade) and be fairly certain that everything will work just fine, after the reboot.
But when it comes to FreeBSD, updates are rarely smooth. And to make things worse, FreeBSD pretty much forces you to upgrade. Wether you want it, or not. Because if you don't, you're going to run into a whole lot of problems later on. And it makes you do this at least once a year. On all your servers.
And this is my biggest complaint about FreeBSD. FreeBSD happily roles out a new minor release about once a year, or so. And when that happens, you have three months to upgrade your servers. After that, it becomes really difficult to maintain your server. To the point where it becomes downright impossible. You have to upgrade. And you know what, I can actually understand that. Security reasons and all. And I would happily go along. The problem is that FreeBSD tends to break things. Even between minor releases. And that is what bugs me the most. FreeBSD shouldn't do that between minor releases. It's fine between major releases. Unavoidable, even. That I understand. And that shouldn't be a problem, because major releases are years apart. When that time comes, it's a good moment to upgrade the entire server altogether and start from scratch.
The irony is that people usually praise FreeBSD for being consistent, easy and predictable. Take for example this thread on Reddit:
In general, the BSDs are cleaner and much more consistent than the GNU/Linux distros.
Things are built to last instead of the wheel being reinvented weekly.
I'm no stranger to Linux and I have a favorite distro, but I often go for BSD when I can because I usually find it easier to manage, more lightweight and simple, but just as powerful. In other words, it's most convenient.
The result for the end user is a more stable system that behaves predictably and works the way you expect.
The thing is, that my experience is actually the complete opposite.
Let me give a few examples.
I needed to install Python-3 on one of my servers. This server was still running FreeBSD-11.1. When installing Python-3, pkg warned me that I was running an outdated version of FreeBSD, which was no longer supported. But what was I going to do? I needed Python-3. So, I installed it anyway. And it installed fine. But when I tried to run any script, it complained about libdl.so.1 not being found. It turned out that the newer versions of several packages now depend on this library, because of a change between FreeBSD-11.1 and FreeBSD-11.2. So much for consistency.
Another example is when I needed to install a website. This website needed php-gd. It installed, but now libpng complained about libz. This led me to this blogpost. Notice how he writes:
In fact, there were a lot of threads indicating this issue. And pretty much all answers were the same as in this thread: “stop whining and upgrade your OS”. Yes, that’s how FreeBSD works these days, which is one of the main reasons why I’m in the process of switching back to Linux. I fail to see how a three-month support period on a release would work in production. So screw you, FreeBSD.
I wouldn't go as far as saying: "Screw you, FreeBSD!". But it's certainly nice to know I'm not alone in this.
And a final example is when I finally bit the bullet to upgrade a mailserver, still running FreeBSD-11.0. After the ugrade itself was done, freebsd-update told me to reinstall all installed packages. Obviously because of breakages as mentioned above. And that on it's own it already pretty ridiculous, when you think about it. I don't want to do risky stuff like this on a production server. And low and behold, when I tried to update Dovecot, I got errors. So I turned to pkg updating to find out this:
Now that dovecot1 has been removed from the ports tree, dovecot2 and dovecot2-pigeonhole have been renamed to simply dovecot and dovecot-pigeonhole.
Why? Why would anyone rename a package? That isn't consistent at all. It can only create all kinds of potential problems, that could easily be avoided by not renaming the package in the first place.
To be fair, it goes on by saying:
pkg should handle the rename automatically, but if you run into trouble, you can point pkg at the new origin via:
Notice the reservation, how it should handle the rename automatically. But in my case, of course it didn't. First of all I never used pkg to install Dovecot. I had to compile it with ports, because I needed PostgreSQL support, which wasn't included in the binary pkg. So, I used postmaster, as suggested by pkg updating. After the update, email stopped working, despite Dovecot seemed to run. I quick glance in the logs learned that there was no PostgreSQL support.
So, I go to the ports directory, run
make config
, enable PostgreSQL support and run make reinstall
. Only to run into error 70, at the end of the compilation. Sigh... What now? So I fired up Google to find out what was going on. It more or less came down to: "Oh yeah, we removed make reinstall. That doesn't work anymore".Which brings me to another complaint about FreeBSD. As far as I know, it's not possible to see wether I used pkg to install an unaltered binary package, or ports, to compile it myself. And if I used ports, I also can't see why I used ports. I other words, what options did I change, before building the package?
Maybe someone reading this thinks: "Well, you could just run
grep /to/some/obscure/path | sed --obscure --flags | more --black --magic
and you would get what you want." But stuff like that isn't really intuitive, isn't it? I could also keep a log. But that is messy and shouldn't be necessary in the first place. FreeBSD should provide tools to do this in a convenient and straightforward way. And if FreeBSD happens to have such tools, feel free to correct me. I'd be very happy to know.Anyway, back to the mailserver. FreeBSD also informed me that support for PostgreSQL 9.3 will end after january 2019, pretty much forcing me to do messy upgrades between versions. Which I obviously want to avoid, as long as this server is in production. Knowing myself, when I installed FreeBSD-11.0, I went with PostgreSQL-9.3, because it was the default version. And I would expect it to be supported throughout the entire 11.X life cycle. But no, FreeBSD janks it away and forces you to perform risky migrations on production servers.
I also ran into problems with automake-wrapper. I got complaints from pkg about conflicting files. Apparently automake-wrapper is obsolete now and merged with something else. Another breakage. Granted, fixing this one was easy. But still, it's one of those non-consistency problems you keep running into.
In the case of this mailserver, things got so messy, that after wasting hours of tackling one breaking package after another, I just pulled the plug and rolled back a snapshop (thank God for virtualization). Screw this! It's easier and less risky to just create a new VM, start from scratch and migrate all email(accounts).
When I perform (minor!) FreeBSD upgrades, I run into all kinds of trouble, way too often. And I have to use Google way too often, to figure out what went wrong. I have to keep track of a plethora of changes, merges, splits and whatnots of packages, via pkg upgrading. I constantly have to be on my guard and on my toes, to make sure it all goes well. Which is, to be honest, pretty nerve wracking. And it keeps coming back, every year! And most of the time it's pretty much just for the sake of upgrading. I don't gain anything from the newer versions. It offers me nothing but trouble. This is not how I want to manage my servers. I should be able to just install updates, perform the minor upgrades and be done. But sadly, that is not how FreeBSD works.
If I was running one or two servers, I could live with this. But when you're running multiple servers, stuff like this is getting on your nerves pretty quickly. Especially concidering when upgrades are usually done in the evenings and weekends.
FreeBSD should keep consistent throughout the entire life cycle of a release, including all minor upgrades. Don't remove features like make reinstall, or change dependencies like you did with libdl.so.1. Save that for major upgrades. Also, keep ports consistent throughout all minor releases. Don't suddenly rename packages. Or break stuff like libpng complaining about libz. This makes upgrading much easier and way less stressfull. And it leaves the option to just... well... not upgrade (and still be able to use ports). Or at least put it off to a more convenient time, because catching up is easy. As it should be.
I'm still concidering my options. But it's certain that I won't go on like this. Which is a shame, because I still concider FreeBSD to be a very good OS. If only it was truely consistent, like people say it is.
So, to summarize, I think the problem I have with FreeBSD can be condensed into the following statement: "FreeBSD isn't as consistent as people want you to believe. And as a result of that, it breaks way too fast, if you don't keep up. And the further you fall behind, the harder it is to catch up."
The forced minor upgrades and the changes between them, are the bane of my work. I can't do it anymore.