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