> All in one small self-contained executable.
Size of algernon executable: 24.4 MiB
Size of nginx-full executable: 1.1 MiB
Size of apache2 executable: 648K
> All in one small self-contained executable.
Size of algernon executable: 24.4 MiB
Size of nginx-full executable: 1.1 MiB
Size of apache2 executable: 648K
Right now a "hello world" application in Go has comparable size to an OS with full GUI.
- it increases amount of storage to store multiple versions of containers (when you have an internal app and do frequent releases it adds quickly)
- it increases amount of data transferred on every deployment
- increases amount of memory used (the whole point of containers, was to efficiently use hardware (BORG), although a lot of people today miss that reason and run containers on VMs)
They're all compiled languages doing (roughly) the same operations. There is an order of magnitude difference in the number of instructions in one compared to the other.
Apache is more likely to be entirely cached whereas the others aren't.
Size matters for performance.... if you're not CPU bound, fine, but to say its immaterial is naive.
Image size is currently not the most important metric, but - guessing how your average node.js package already looks today - demanding people ignore it completely will probably set you on the road of multi TB images that also contain the developer's favorite desktop environment in the medium future.
Media storage would go on spinning rust disks anyways separate from the SSD(s).
Find a case where it's actually too slow, ok, but saying "A does X, and X can lead to Y, therefore A does Y" is wrong.
If you say the size of the binary is an issue, then give the issue, not how it could (or not) be an issue.
Hopefully we can get smaller binaries by Go 1.13.
In fact, the readme of this project is really thorough!
Can you run ldd on all of these and then report the combined size for each binary+libraries?
$ echo $((`ldd /usr/sbin/apache2 | cut -d">" -f 2 | sed "s/(.*$//;s/ //" | xargs du -L | cut -f 1 | sed "s/$/+/" | xargs echo` 0))
3200
So 3.2 MB of shared library dependencies. 1.8 MB just being the libc which is almost guaranteed to be used by a different program already.
Not if we're talking about containers :)
I don't know why the grandparent was downvoted. Go binaries are not small and the claim that this is a "small" single executable is untrue.
Hopefully the Go team will give us a flag to decide for ourselves whether to optimise for executable size or initialisation time. I know I'm fed up of uploading 50Mb files over dodgy wifi+vpn connections to update my server.
(edit fix repetition of design)
[1] https://golang.org/cmd/go/#hdr-Compile_packages_and_dependen... [2] https://golang.org/cmd/link/
The original is at: https://science.raphael.poss.name/go-executable-size-visuali...
Size does matter and not just in sense that it is using resources. The largest part of the 24 MB probably never gets executed but it adds unnecessary complexity that may hide bugs and security flaws.
Sadly, the Go package that provides support for QUIC does not compile with gccgo, yet.