FreeBSD, like everything else, sucks

scrottie on 2004-09-19T12:18:42

Dear Journal;

Tried to upgrade the FreeBSD desktop today. Couldn't for the life of me get Mozilla to build from source (after fixing dozens of prototype errors, header include errors, autocng goop, and so on, I'd get to the point where it's trying to call an undefined method - wtf? But that's another story). The binaries of Mozilla for FreeBSD don't work on my old 4.0 install. Fine. I'm due for an upgrade anyway. I grab 4.3 beta 4 off the net, burn and boot the CD, and the familiar ASCII art appears. But the keyboard doesn't work. No problem - the system has USB and PS/2 ports, so I reboot (the ACPI soft power button brings up a menu that I can't answer as the keyboard isn't work, so I do like a Windows user and yank the cord from the back). Booting up again, I drop into the 3rd stage bootloader and politely inform it that hints.atkbdc.0.disabled=1 and it should boot. It boots. The keyboard still doesn't work. Fine. I fetch a PS/2 connector keyboard from the garage. I'm glad that the installer hasn't changed, because I've learned my way around it pretty well. I mostly run NetBSD on odd RISC hardware now days (because it gives me wood), but I've used FreeBSD on and off for a long time now. I tell it I want to upgrade, tell it where to mount my existing partitions, tell it which packages I want, to use BootEasy for a boot manager, pick Gnome instead of KDE this time (haven't tried Gnome yet but I'm sick of KDE crashing on me, and this machine is just a spare, really, though I often use it when the laptop is broken as it often is or when NetBSD won't compile something I want). It starts uncomressing packages. And then it tells me it fails, and I should look at the diagnostic screen. Okay, probably something simple, I'll deal with it. The god damn package manager is now part of the upgrade process, and it can't install the new imake because the old one is installed (I'm upgrading) because programs depend on it. What on god's green Earth were they thinking? That I'm not going to install software so that the package manager can automatically remove every single dependency in the system? Do they think this is a glorified live boot CD? So after pondering all of the software I've built and installed on that thing, I decide to forcibily uninstall everything so that upgrade can proceed. Quick line shell script and I've blown everything away, restoring it to a virgin system plus a lot of garbage files littering the harddrive. Upgrade can continue. Only it can't. It immediately fills up the /tmp partition and refuses to recognize symlinks to other places. Attempting to mount a spare on it crashes. The system comes up unusable, which is to say that it doesn't come up. Fine. FreeBSD is incapable of upgrading. I've already blown away all of the software I've installed, and there's no other data worth a damn on it, so I reinstall from scratch. After spending a few short minutes uncompressing things from the CD (I remember when it took hours to go through the stack of floppies, and that was with no user software), I'm able to pick a root password and reboot. So I reboot, it comes up, I log in, and I ask it very politely to startx. It doesn't. It's using the new X.org X and I can't find a config file anywhere to serve as an example (though I probably could have Googled harder). It doesn't like an XFree86 one I have on hand. It can't find the mouse and I can't figure out how to tell it about the mouse. Fine. I'll use XFree86. I don't know what they put into the license that pissed everyone off any. Into ports I go (the original cause of all these problems, but this time I have a brand new copy with no dependencies in place). I cd into /usr/ports/x11/XFree86-4 and unobtrusively request it nicely make install. But it doesn't. It tells me that XFree86-4.4.0_1,1 is part of XFree86-4, which is a passive aggressive way of saying "no". There's a similar message for XFree86-3. I'm dumbfounded right now. There are a lot of things broken to they point they often fail. Many things are broken to the point it's surprising they work at all. I'm constantly mortified by things that vast bodies of evidence suggest work, yet I can't figure any way they could possibly work - like the upgrade process. The only way the upgrade process could possible work is if you never used ports to install a single application once the whole time you used FreeBSD before upgrading. NetBSD sucks too, with no ACPI support to speak of (telling me the battery charge but not suspending doesn't count), but upgrading the OS doesn't give a shit about my applications, which it ignores, which is absolutely the correct thing for it to do, because the OS can't possibly understand the applications, and everything works. Hell. I can download the .tgz's, uncompress them, reboot, cd into /dev, sh MAKEDEV all, and the thing just works. Perhaps FreeBSD can too. Perhaps I should have tried. I got started on NetBSD in the first place because I couldn't get the pile of 40 install floppies for Slackware, FreeBSD, or anything else out there without at least one error one place, and the first error sent you back to the start of the whole install process, but NetBSD's installer was a shell script. I could peek in and see what it was trying to do, which told me exactly what I needed to do to compensate for the situation. It was something that basically worked but didn't work well enough to be relied upon, which puts it in the top tier of my above list of failure modes. But it was a soft failure because I had a way out. Minix makes a point of having the user boot up a minimal image, partition, make filesystems, copy files, edit the fstab, and so on, to put a system together manually, from scratch. Everyone should go through this. Software that makes the upgrade process both impossibly likely to succeed and impossible to recover from any failure of is total and utter bunk. Crap. Garbage. Bullshit. This has no place amongst these self-proclaimed hackers. I liked to think that people used FreeBSD to avoid this kind of brain death that surrounds overgrown complexity and hopeless optimisism on the big Linux distros, but I guess I'm wrong, wrong, wrong. It's little wonder everyone is writing their own OS these days. A self respecting hacker can't download something else from the net and run it without this kind of idiocy. Even NetBSD keeps adding additional bootstages with more config files, more hardcoded block locations, and crap like that that makes it impossible to rsync a filesystem and boot it as an OS - complexity for the sake of complexity like this makes even me, who hates the idea of morons like me writing OSes, want to write an OS. But then I remember that the modern concept of portable code is ifdef's to decide whether the machine is Windows, Linux, or FreeBSD, and refusing to compile if it isn't one of those three, realize how utterless hopeless it is to write an OS (or even try to find an OS that isn't sabotaging the simple things with monstosities of unncessary complexity) and actually expect software to build on it, no matter how POSIX it is. POSIX - ha - what a load of bunk. Who ever wrote software that *only* needs POSIX? I mean, other than shell scripts? Oh, sure, there are a few - a Forth interpreter here and a network tool there, but I'd have to place honest to god portable software at less than 0.1% of what's out there. autoconf too is just another overgrown piece of self serving, self perpetuating rubbish that can't ever think of a reason not to add more complexity, especially if it means solving the real problem rather than racing to keep the problem contained using workarounds like some kind of software engineering game of Go. Blurgh. People should only be allowed to write software they don't want to write. That way they'll do it quickly, directly, and in a way that doesn't require ongoing porting, hints files, detection for vender specific features you shouldn't be using anyway, and so on. Some of the best programs are abandonware. xv actually builds and runs on modern systems and it hasn't been updated in 7 years. That's success! vcg too. I keep hearing about how Lisp is the natural spawn of 7 primitives, but Lisp is huge, took forever to standardize at all, and any viable implementation has a constant stream of bug fixes, portability fixes, and new features. Which is it? Is Lisp a language like Perl or any other language that's amorpheous, partially defined, niche hoping, existant only in response to its environment, or is it the natural culmination of 7 primtives? Forth was able to decide on this one - it was the culmination of a few primitives. You could write a Forth interpreter and walk away from it. It didn't turn into a monster plant you had to feed blood to to keep it working. It would probably have continued its success better if it didn't make this decision, but it isn't a bootloader that should just work and stay out of your way, it's something people have to spend a lot of time with when they use it. So, what's next? The 6 stage bootloader? Will 8 be enough? How about 10? I know indirection solves problems in IT, but we're not running Unix instances inside of a machine monitor here, we're just handing control over to the kernel, possibly with a few boot options. Yet people can't stop writing code - and the only thing they can think of is more bloody stages. "Too many chefs". I can't wrap this rant up neatly. I'm sorry. All I can do is build on it, but not explore any new directions, do anything useful, I can only keep adding more to the pile of what's already here - just like this god damn FreeBSD upgrader and all of FreeBSD's boot stages.

Blurgh!
-scott