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."

in reply to Alex P. 👹

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

Alex P. 👹 reshared this.

in reply to [object Object]

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

in reply to Alex P. 👹

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

@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
in reply to Alex P. 👹

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.

in reply to Alex P. 👹

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."

in reply to Alex P. 👹

"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
in reply to Alex P. 👹

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.

in reply to Alex P. 👹

@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?
in reply to Alex P. 👹

@scottmichaud
Yes. I try to work with the subset that is in common for my small projects, but downloaded code is always a crapshoot.
in reply to Alex P. 👹

Kinda makes me wonder about who invented version numbers, and when, and whether they anticipated the depth of the logical labyrinth they'd seeded.
in reply to Alex P. 👹

so that's why openbsd work under the "fuck backward compatibility" mentality...
in reply to Alex P. 👹

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"
in reply to Alex P. 👹

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.

in reply to Alex P. 👹

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.
in reply to Alex P. 👹

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
in reply to Alex P. 👹

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….

in reply to Alex P. 👹

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.

in reply to Alex P. 👹

On a similar note m.youtube.com/watch?v=Pbw5SjxF…
in reply to Alex P. 👹

This... Is accurate. And disturbing. Mostly disturbing, to be honest, but also very accurate.
in reply to Alex P. 👹

Honestly I prefer the old-time approach. Much of modern software is a ridiculous mess of a dumpster fire.
in reply to Alex P. 👹

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...

in reply to silverwizard

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 (5 months ago)
in reply to Alex P. 👹

there’s a good reason this remains one of my favorite tech talk slides of all time.
in reply to Alex P. 👹

The best header to parse with bongo.rs is of course Referer: because it mixes in some of that old timey flavor
Unknown parent

Alex P. 👹

@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

in reply to Lars Wirzenius

@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.
in reply to Wolf480pl

@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.
in reply to Lars Wirzenius

@liw where do you find those stable dependencies? IIRC even gcc isn't fully backwards-compatible these days
in reply to Wolf480pl

@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.
in reply to Lars Wirzenius

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.

in reply to Wolf480pl

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.

in reply to Alex P. 👹

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

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.