3 ms·
An old Jargon entry that nicely captures the scope of the problem: http://www.catb.org/jargon/html/R/recompile-the-world.html http://www.catb.org/jargon/html/R
by bitwize 3y ago
An old Jargon entry that nicely captures the scope of the problem:
http://www.catb.org/jargon/html/R/recompile-the-world.html http://www.catb.org/jargon/html/R/recompile-the-world.html
- anthk 3y agoLess than a problem with ccache, and OpenBSD solved the time_t issue long ago. But sometimes I envy common lispers, you livepatch any crap like nothing. Also, 9front: megafast system recompilation so the worst of the issue would be rebooting a machine.
- knorker 3y ago> OpenBSD solved the time_t issue long ago. It's amazing how quickly you can solve problems when you're fine breaking user space between releases. Not that Linux has a perfect record, but it's much harder when you actually try.
- anthk 3y agoUpgrading is not an issue, now you have vmd and a lot of mirrors still have both the old TGZ sets, ramdisks, kernels and packages to be able to virtualize old machines just in case.
- knorker 3y agoI agree that it's a fine use case. I'm just saying it's simpler if you allow yourself a fresh start. Won't work well for games and other stuff you can't just recompile on your own. Going mainframe mode and virtualizing the previous generation has problems in that the older releases don't get security fixes, and may not work as well with tuning and monitoring. I would not want to run a 10 year old OpenBSD, virtual or not. E.g. the speculative execution patches would be nontrivial to backport. But it has valid use cases.
- anthk 3y agoMost games can be either recompilable or able to being run with xnaify or similar Mono/C# wrappers.
- knorker 3y agoSure, they're recompilable. If whoever has the source recompiles them. Well, turns out ABI stability was not enough to make gamers use Linux, but it's an example. A better example would maybe be the Oracle database. You could maybe see them building for OpenBSD. But not if that means they'd sign up for rebuilding every six months the ABI has potentially broken in the new release. I would not say that this is the reason OpenBSD hasn't yet been the OS of choice for the Oracle sales team, of course.
- sillywalk 3y agoI'd prefer to refer to it as 'changing userspace', as opposed to breaking it. The ABI is changed, and userspace/ports are updated to use the new ABI. Users just upgrade as usual, and don't see any 'breakage'. It wouldn't work for Linux, because the kernel and glibc + the rest of userspace are developed separately. Slides on OpenBSD's transition to 64-bit time_t https://www.openbsd.org/papers/eurobsdcon_2013_time_t/index.html https://www.openbsd.org/papers/eurobsdcon_2013_time_t/index.... "I have altered the ABI. Pray I do not alter it further." -- Theo de Raadt https://marc.info/?l=openbsd-tech&m=157489277318829&w=2 https://marc.info/?l=openbsd-tech&m=157489277318829&w=2
- knorker 3y agoLinux could probably do it despite glibc, just more carefully. But OpenBSD also broke Go binaries, with some recent changes, right? Breaking ABI towards userspace, or breaking user space? What's the difference? Binaries that used to work no longer do. If you only run packages and ports, then shrug. If all you have is packages, ports, and source, then just upgrade and recompile everything. I'm not saying it's wrong to break userspace, but it's not inaccurate to call it such. C.f. Google's monorepo, to not need to maintain an ABI. ABIs may or may not be overrated, but dropping that requirement sure make things easier.
- HumanProtractor 3y agoGo wasn't properly behaved, the OpenBSD people actually fixed it so it works properly now. It's not broken.
- knorker 3y agoThat's Hyrum's law for you. Actually that's not even fair to Go. I'm as annoyed as anyone about the many suboptimal technical choices of the Go team, but I would say that Theo saying "I have altered the ABI. Pray I do not alter it further" is quite accurate. Go in this case made a choice based on one "promise", and OpenBSD changed the deal. Even Hyrum's law is more about "as implemented". Go actually went with "as designed, in the last, what, four decades?". Syscalls actually did use to be the API, and statically linked libc really did use to be "ok". OpenBSD let security be done though the heavens fall, and that's fine. But it's MUCH easier than the alternative. So obviously much easier to make progress on.