| Containers halfway solved some big existing problems that most people don't seem to see very well. Packaging is hard, and both debian-based and rpm-based (and really most other's I've seen) are pretty awful. (except BSDs, which I've had a lovely time with) They're slow, they're stateful, writing them involves eldritch magic and a lot of boilerplate, and they're just frequently broken. Unless you're installing an entire OS from scratch you're probably going to have a hard time getting your system into the same state as somebody else's. And running that from-scratch OS install is definitely possible in a as-code way, it can take an hour. Containers came along and provided a host of things traditional packaging systems didn't and they took over by storm and with them came a whole lot of probably unnecessary complexity from people wanting to add things. Adding things without ending up with a huge mass of complexity is hard and takes a lot of context knowledge. So we ended up solving a host of problems with containers and creating a whole new set along the way. |
A few random examples (not the best you could find, just something I've used recently):
- re-packaging pre-built binaries:
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=visua...
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=nomad...
- building C from source
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=tinc-...
- building Go from source
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=yay
- patching and building a kernel
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=linux...