Remix.run Logo
vbezhenar 3 hours ago

Managed Kubernetes is easier than VM. It provides high-level concepts, allowing you to deploy programs with less friction. It does it at a cost of complicated programs running below, but you won't find simple things. Modern CPU alone is insanely complicated machine. You can achieve simplicity by building your product on complicated foundations and Kubernetes is one of these foundations.

Another example of complexity is compiler. Even assembly compiler brings a lot of complexity for modern software. Yesterday I wrote dumb empty program with 3 assembly instructions to syscall exit. To link that program, I had to deal with the following sections: .rela.dyn, .rela.plt, .plt, .text, .note.gnu.property, .got, .got.plt, .data, .bss. Of those sections, only .text contained useful data, but GNU software generates them all and wanted my linker script to handle them all. I spent few days researching about it and I still have very little idea what's happening there. And that's the lowest layer possible: x86_64 assembly. For something as simple as C language, it'll be magnitudes more complex, with plethora of C standards, GNU extensions, compiler optimisations, hundreds of compiler flags.

IT is complicated and there's nowhere to run. You can only choose some building blocks, pretend that they're fundamental and simple, and build upon them. Most C programmers probably ignore all those sections, have no idea what they do and just let default linker scripts do their work. But the sections are there and complexity is there, it's just hidden below layer you usually look at.