Comment by thaumasiotes
4 months ago
> I think the important innovation of Docker was the image. It let people deploy consistent version of their software or download outside software.
What did it let people do that they couldn't already do with static linking?
I can't tell if this is a genuine question or not but if it is.. deploying a Ruby on Rails app with a pile of gems that have c deps isn't fixed with static linking. This is true for python and node and probably other things I'm not thinking of.
- most languages don't really do static linking in the same way as C
- things like "a network port" can also be a dependency, but can't be "linked". And so on for all sorts of software that expects particular files to be in particular places, or requires deploying multiple communicating executables
- Linux requires that you be root to open a port below 1024, a security disaster
- some dependencies really do not like being statically linked (this includes the GNU standard library!), for things like nsswitch
Because it doesn’t need you to delve deep into the build system of every dependency and application you ever want to package?
>> It let people deploy consistent version of their software
Surprisingly "my software" depends on a lot of other stuff. Python, Ruby, PHP, JS, etc all need tens to hundreds of native libraries that have to be deployed.
>> …or download outside software.
I've worked on software that linked to ffmpeg libs.
Good luck making _that_ static.
What about the ton of languages that don't have static linking?