Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

How do you update those tools and make sure you've deleted all the old versions? What do you do to avoid the problem of a developer SSH'ing and apt-get installing a build dependency?

Tools aren't the only part of the environment though. Setting the JAVA_HOME environment variable for a build can dramatically change the output, for example. Path ordering might affect what version of a tool is launched.

They also mean that our developers don't need to run centos 7, they can develop on windows or Linux, and test on the target platform locally from their own machine.



Setting JAVA_HOME matters, again, because the Java runtime environment is essentially dynamically linked to the Java program you’re running.

The nice thing about fully statically linked executables can just be copied between machines and ran. If Java worked this way, the compiler would produce a (large) binary file with no runtime dependancies, and you could just copy that between computers.

Rust and Go don’t give you a choice - they only have this mode of compilation.

Docker forces all software to work this way by hiding the host OS’s filesystem from the program. It also provides an easy to use distribution system for downloading executables. And it ships with a Linux VM on windows and macos.

But none of that stuff is magic. You could just run a VM on macos or windows directly, statically link your Linux binaries and ship them with scp or curl.

The killer feature of docker is that it makes anything into a statically linked executable. You can just do that with most compilers directly.


java home is an example. CC is another one for most C build systems, goroot.

> But none of that stuff is magic.

I never said it was, I simply said that docker does more than statically link binaries.

>You could just run a VM on macos or windows directly, statically link your Linux binaries and ship them with scp or curl.

https://news.ycombinator.com/item?id=9224

> The killer feature of docker is that it makes anything into a statically linked executable.

The killer feature of docker is it gives you an immutable*, versionable environment that handles more than just scp'ing binaries.


> CC is another one for most C build systems, goroot.

The benefit docker provides here is giving users a simple, reproducible, downloadable environment with no external dependencies.

I'm not saying Docker is useless in the current build environment. On the contrary - Having a convenient way to sandbox, ship and execute arbitrary execution environments and statically linked executables is really useful.

I think this is such a great idea we should make debian work closer to this model. Nix is a fantastic step in this direction and it'd be great if more distributions followed suit.

Debian and friends fill your hard drive with of weird, non-reproducible versions of various dynamically linked libraries. The fact I can't take a binary on my x86_64 linux machine and run it on your x86_64 linux machine is an embarrassment. Moving toward static linking and fully reproducible builds would be a tremendous help here.

Docker feels like a kludgy hack. I'd love a world where docker isn't necessary because its best ideas have been lowered into the OS itself.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: