sooooooooo. yeah. I wrote about computers. sue me.
Dr UNIX, or: How I Learned to Stop Worrying and Love C
hi kids!!! do you like POSIX?
who doesn't love POSIX? and UNIX more generally! everything is a file, no matter how poor of an abstraction that may be for whatever it is you're trying to abstract!
not too long ago, a less enlightened version of myself might have gone on a long winding screed about the status quo of the Computer estalishment. I would have exhaustively outlined the way in which each and every layer of the Stack provides terrible abstractions for the next floor up to deal with, each of them existing mostly for hysterical raisins, each with seemingly equally little thought put to its design, despite there being literal decades of research about it.
but you know what? fuck that. you don't need to hear from yet another internet stranger that the UNIX security model (that is, ACLs on files) makes it so hard to reason about actual security concerns in the ways they manifest in the real world that it is essentially useless; that UNIX makes sandboxing so hard that in practice we just box entire systems, in all their 2 gigabyte glory, just so we can run your shitty hello world python web server and its 30 megabytes of glorious dependencies. that the linux kernel allocates memory that doesn't exist because its process model demands that entire address spaces be cloned (which wouldn't even be possible if not for COW.) that you need hardware memory protection because users are just allowed to pull pointers out of their asses to whatever memory location they damn please. that the maximum size of the C stack, the fundamental control flow data structure in a C machine, is just kinda "idk, whatever number your kernel chose lol". that there exists an entire industry (called cybersecurity, because apparently the 90s never left) whose only purpose is to find all the issues that these poor abstractions create and then write dramatic headlines about them (or, in some darker cases, sell clueless end users snake oil to "mitigate" them, rarely actually fixing any of the underlying problems (a responsibility which more often than not ends up falling on free software developers.))
but fuck all that. this type of analysis fundamentally misunderstands the nature of the problem. because that's the thing, it is not an engineering problem — well, it kind of is, but the poor engineering is just symptom of a much deeper problem, a social one.
most programs aren't written out of a desire to pursue some abstract notion of beauty. most programs are written for the same reason that cash registers and gutter gratings are made. and those that are don't generally have to care about the Real World. so in practice everything just ends up being cobbled together on top of whatever "just works".
and you know what? I'm totally fine with that. not because I'm actually fine with it in any way whatsoever, but because I hate computers too much to care. and yet we live in a world that increasingly relies on computers to function. if all computers on earth were to magically fail spotaneously as of writing, the entire supply chain that keeps the first world afloat would collapse.
is there anything that you, my esteemed reader, can personally do about any of this? well, yes actually! you can do silly things. monty python were already doing it in the 70s with things other than computers, so let's do it with computers too! write silly programs that simulate space travel! make weird noises! make wobbly things that twirl and then flop over! if you want to delude yourself into thinking that writing better languages and better machines on top of the Establishment makes much sense at all, write it in whatever silly language you happen to enjoy the most! silly type systems and syntax and semantics and metasyntax and metasemantics are all fair game. or you could just not care and write it in C, I won't judge you too hard (frankly, I would too.)
can you trust your bank to keep your money safe in a database that receives regular updates straight from the internet every day and whose concurrency model only like 3 people in the development team understand? well you can, but you can also opt to use paper money you can touch, smell and taste instead. computers aren't THAT old, and people were manging fine before then.
so next time someone attempts to sell you something by having you fill a shitty form, rendered dynamically using a javascript canvas, running inside your browser sandbox to protect it from the horrors of the system beneath, 30 million SLOC worth of potential bugs (or, how djikstra would have had us call them, programming errors), stare them dead in the eye and smile, and then do a backflip and fail miserably and nearly break your neck because you can't actually do backflips SILLY. or don't. I control you either way.
love y'all <3 take care.