It's a lot harder to replace components that are lower down in a stack.
Does this mean that designs tend to be better for higher level components? x86 has been around for a long time and has plenty of features we'd change in hindsight.
miniblog.
Related Posts
As a kid I didn't particularly like bosses in games: they were a bother that you couldn't skip. Now, I see so many bosses with *amazing* designs.
I think I'm just less intimidated. Platformers also let you wait until you're ready more often too.
Igalia's post on self-hosting CI runners is a masterclass in build engineering. It shows dealing with weird API constraints, but still finding good designs.
I also learnt that some CI systems use OCR on Apple's installers to automate!
What software designs require clean slate 'revolution' implementations, rather than evolution?
I can think of: borrow checking in a PL (existing code is unsafe), microkernels (architecture is too different from monokernels), and full REPLs (can't add type redefinition later).
