Skip to main content


modern programming is like,

"if you're using bongo.rs to parse http headers, you will need to also install bepis to get buffered read support. but please note that bepis switched to using sasquatch for parallel tokenization as of version 0.0.67, so you will need the bongo-sasquatch extension crate as well."

old-time programming is like,

"i made a typo in this function in 1993. theo de raadt got so angry he punched a wall when he saw it. for ABI compatibility reasons, we shan't fix the typo."

just call it creat, nobody’s gonna use it outside of bell labs anyway

Alex P. 👹 reshared this.

tired: they called it creat because of a linker limitation

wired: they called it creat so the syscall definitions would line up in a source listing and instantly regretted it when the Berkeley kids started mocking them

inspired: they called it creat because it creats files

(also, the hole in the wall is now part of the ABI and can't be fixed either)

@meena
it's a load-bearing feature now

[the whole wall begins to sag dangerously as the structural damage takes its toll]

load-bearing, i say

@Mina
@meena Just put a Krusty poster over it.
@Mina

Theo is still kinda like that TBH, though he is probably more likely to just address you using an insulting nickname from this day forward than get physically destructive. Moving mountains is still generally easier than breaking ABI compatibility.

But yeah apart from that particular bubble modern programming is a perpetually raging tyre fire.

modern web programming is like:

use React...have the React core team change their mind each year and then gas lights everyone into thinking, "no yeah this was always the plan."

"We're dropping this API feature as it looks like only one project relies on it." That's my project!!! Now I've got to spend a month hacking the hackiest hack

Ten years ago, I worked for a company with "Reimbursement" in the name of the company. We had a DB table column where it was spelled: reimbrusment

It's in the name of the god damn company, and someone couldn't spell it right. And since it was in a vital (and quite large) table, we couldn't just fix it without massive database downtime.

I bet it still hasn't been fixed.

Meanwhile, the build systems that they use.
Meme image.
"Old Build Systems"
"New Build Systems"
"Corporate needs you to find the differences between this picture and this picture."
"They're the same picture."
me, every time I accidentally access a bsd system
@scottmichaud my solutions to search stuff are:
find | grep bla
find | xargs grep bla
It doesn’t work of BSD and OS X. I try it at least five times a day as I use a Mac everyday. Sure I accept it was made to work this way, but really, would it hurt to allow me to type two characters less?
@scottmichaud
Yes. I try to work with the subset that is in common for my small projects, but downloaded code is always a crapshoot.
@scottmichaud as someone who uses both macOS and Linux, this is so true

@scottmichaud

"find" vs. "find ." *grr*
My blood boils everytime. :<

a lot of people on here are fans of bepis.rs

that's not a real website but it could be

it could be your website

Kinda makes me wonder about who invented version numbers, and when, and whether they anticipated the depth of the logical labyrinth they'd seeded.
so that's why openbsd work under the "fuck backward compatibility" mentality...
also "the comments contain a recipe for french onion soup passed down by my dad's grandmother that, if deleted, cause the project to stop compiling for some reason. we have investigated at length but have no idea why. possibly a segment issue. delete/modify the comments at your own risk"

Funny and I agree with the overall sentiment, but #OpenBSD breaks ABI with every release.

I don't know Theo de Raadt, so can't say whether he would punch a wall, but he would likely have responded so gruffly as to make the typoist punch a wall.

woah. Version 0.0.67?? That’s bleeding edge - everyone is still on 0.0.32 ffs. Next you’ll want us to use a 0.1.x release. We are YEARS away from this people.
modern programs have the fortunate of not being deployed on a trillion machines and mainlined in thousands of distributions too. someone said "adoption is a feature you cannot design for" and it's been breaking my heart ever since I read that

Old time programming is like being handed a stack of headerless tapes with no formats or identification.

US social security file. Population level. Decades. Straight EBCDIC.

Just the starters….

Theo, of course, wrote about the incident in chapter 6 of his seminal 1996 book "The Circuit Revolution".

Following the depreciation of sasquatch, bepis migrated to ponk2 for parallel tokenisation. In order to upgrade to bepis 0.0.70 or later, users must also migrate from bepis-sasquatch to bepis-ponk2.

On a similar note https://m.youtube.com/watch?v=Pbw5SjxFS8s
This... Is accurate. And disturbing. Mostly disturbing, to be honest, but also very accurate.
Honestly I prefer the old-time approach. Much of modern software is a ridiculous mess of a dumpster fire.

In my mind the difference that really stands out is compiler friendliness. It used to be HARD to change your toolchain.

Today: If you want to build this, you need to use the 2024.04.01 or higher patch release of weelang. 2024.06.x may work, I haven't tested those yet.

Once upon a time: If your cc doesn't understand function prototypes, set the KRSTANDARD define. If your system doesn't have /usr/include/floob.h but uses usr/include/sys/floob.h, set the SYSFLOOB define. If...

I've taken courses and read books on programming and I feel like none of that has had much of anything to do with what developers actually do.
This entry was edited (4 months ago)
our k8s cluster is called “poggers”
there’s a good reason this remains one of my favorite tech talk slides of all time.
Tech talk slide titled “my linkedin profile” listing well known technologies and some hard to pronounce names and a subtitle of “I typically ask recruiters to point out which of these are pokemon.” Full list:
R, python, javascript, shiny, dplyr, purrr, ditto,
ggplot, d3, canvas, spark, sawk, pyspark, sparklyR,
lodash, lazy, bootstrap, jupyter, vulpix, git,
flask, numpy, pandas, feebas, scikit, pgm, bayes,
h2o.ai, sparkling-water, tensorflow, keras, onyx,
ekans, hadoop, scala, unity, metapod, gc, cli/c++,
krebase, neo4j, hadoop.
The best header to parse with bongo.rs is of course Referer: because it mixes in some of that old timey flavor
losing my goddamn mind over “version 0.0.67” 🤣

@rallias
theo de raadt punching walls is as real as bepis.rs

which is to say, a gratuitous exaggeration for the sake of a joke

@liw exceot you don't get to choose the level of stability that suits you. Others choose it for you. And you choose it for everyone else.
@wolf480pl Hmmm. I choose my dependencies, and part of that is evaluating their stability. I don't allow others to impose work on me, such as by requiring the stability I provide, unless they compensate me, or I feel like it.
@liw where do you find those stable dependencies? IIRC even gcc isn't fully backwards-compatible these days
@wolf480pl I think you are trying to make a point, but I am entirely failing to understand what it is. However, I'm not interested in combat by debate, so I'll bow out of this discussion now.

Sorry, that was a bit too combative on my part.

What I meant is that I find it difficult and frustrating to try to find dependencies that have similar stability guarantees to the kernel.

What's even more frustrating is that often the programming languages in which those dependencies are written aren't themselves stable.

Which is why I feel like I don't have much choice in deciding how much change comes my way from upstream.

Reminds me of why I avoid Python/Ruby/… and so by elimination ended up picking Perl (when I'm not targetting shells that conform to POSIX), because yeah the language is the biggest dependency of all.

That said I'd say C is pretty close to "linux doesn't breaks userspace" as the linux kernel actually does, but it is very very rare (mostly with old APIs being removed, or like a.out being removed), and for C it's mostly a case where you have to pay attention to warnings and use things like UBSan.

I mean this is literally what happened to the 'Referer' header in HTTP: https://en.wikipedia.org/wiki/HTTP_referer

tl;dr, it should be spelled 'Referrer', but since it got baked into the spec back in the 90's we still have to use the misspelled version.

I thought openbsd broke the ABI at each release?
very angry at how accurate this is