The simplicity of single-file Golang deployments
When I was stuck doing a web application in Java 15 years ago, I hated everything about it except for the deployment story, which boiled down to a single .war file being pushed to the server.<p>When we upgraded to Perl, I liked that system so we designed deployment around &quot;PAR&quot; files in a similar way, bundling all of the dependencies together with the application in the CI build process, and I wrote a tiny bit of infrastructure that essentially moved a symlink to make the new version live.<p>Google uses MPM and hermetic packaging of configuration with binaries: <a href="https:&#x2F;&#x2F;sre.google&#x2F;sre-book&#x2F;release-engineering&#x2F;#packaging-8ksQTeum" rel="nofollow">https:&#x2F;&#x2F;sre.google&#x2F;sre-book&#x2F;release-engineering&#x2F;#packaging-8...</a><p>The way I see it, Docker is basically this same thing, generalized to be independent of the language&#x2F;application&#x2F;platform. As a practical matter, it still fundamentally has the &quot;one file&quot; nature.<p>I don&#x27;t see what&#x27;s special or better about compiling everything into a single binary, apart from fetishizing the executable format. In any system at scale, you still have to solve for the more important problems of managing the infrastructure. &quot;I can deploy by scping the file from my workstation to the server&quot; is kind of a late 90s throwback, but golang is a 70s throwback, so I guess it fits?