4 ms·
Articles like this are excellent for learning how something is fundamentally implemented, if you are willing to ignore the original intent, which is to discoura
by daenz 6y ago
Articles like this are excellent for learning how something is fundamentally implemented, if you are willing to ignore the original intent, which is to discourage people from using the resulting abstraction. I feel sad at how it comes across as angrily reductionist ("it's just X + Y + Z!")...totally missing how the result is more than the sum of its parts.
Docker is a win because they have mainstreamed self-contained, "vm-like" applications that achieve native performance. The collective developer mind can now neatly wrap up the idea of an application into an execution environment that can be easily shared and distributed.
But again, these posts are useful because in the reductionist ranting, the author often lifts the curtain on how these abstractions really work, and that alone is useful to teach.
- ForHackernews 6y ago> The collective developer mind can now neatly wrap up the idea of an application into an execution environment that can be easily shared and distributed. I think we used to call that a 'binary', but I'm old.
- rashkov 6y agoIsn't the reliance on dynamic linking what got us into this mess in the first place? System-wide dependencies are a bad idea. apt-get / brew / yum should not be your software's packaging / dependency system, but that's what a large portion of C/C++ software does. Docker is a strong solution to the problem of dependency conflicts between different software packages. It's what allows me to run software that only works with gcc 7 while my system is on gcc 8.
- stingraycharles 6y agoThat’s just one part of Docker. The other part is the security aspects; you cannot “escape” the container (easily). This cannot be achieved with plain static linking, but you’ll need cgroups etc for that. Docker just combined these concepts elegantly in a way that “clicked” with many people, and was fairly pragmatic. The only major complaint I have about docker is its client/server model, it just makes so many things more complicated. It seems podman is doing great work in this area though.
- ansible 6y ago> Isn't the reliance on dynamic linking what got us into this mess in the first place? Dynamic linking was a terrific solution to code size issues... 30 years ago. Back at the dawn of 32-bit computing, it was typical to see a multi-user machine with 1MB of RAM, for everyone to share. Also, back then, systems weren't so well connected, and library releases happened once a year or so. Security wasn't as big a concern. I can't help but think that if we (as an industry) had moved towards a Nix-like package system, we might not have gone down the container route. You just specify which exact versions of which libraries your application depends on, that's it.
- rashkov 6y agoAgreed, but also curious: what's to stop software packages from statically linking everything? Does it require re-writing or redesigning code, or is it just a matter of flipping a compiler flag?
- maple3142 6y agoThis is what I think too. Linux ecosystem mostly depends on dynamic linking, in a way that statically compiling all the dependencies is not easy. The flag "-static" isn't magic, so building a static binary from a project without official static linking support is hard. Recently, I just tried to build a php binary for a system I don't have root access. Since that system don't have many things that are required to build php, I decided to build a static binary on my computer. Then, its dependencies are really complicated to compile with static linking, so I still can't get it work.
- c22 6y agoYou are old! We have a lot more than two developers now.
- jayd16 6y agoSure but now you can compose multiple binaries across many runtimes into a portable unit.