Funny how perceptions change depending on the angle you're looking at a problem.
Funny how perceptions change depending on the angle you're looking at a problem.
Dynamic linking makes security more difficult to reason about, which is a Bad Thing. It has many pluses, but also many minuses. And with symbol versioning it gets very problematic to actually figure out what your real code path is to begin with.
And you wouldn't need to restart the clients with static OpenSSL — you need to recompile them. And with static linking, I'm not sure how you would easily determine the linked version out to say, the minor or the micro. (Perhaps, if this is your OS's thing like nix, the package manager keeps track…)
http://manpages.debian.org/cgi-bin/man.cgi?query=checkrestar...
https://gehrcke.de/2014/06/good-to-know-checkrestart-from-de...
It not only shows processes that run older solibs, but in the case of services, it will also give you the commands to restart them :).
You only need to relink the apps, unless the newly patched library breaks its own ABI. Otherwise, it would be ideal for package distributors and package management systems to ship just a single .o file for an app, and do the final linking at package install time. Then updating a buggy static library doesn't require full recompile of any apps.
Nix generally uses dynamic linking, though the links are to absolute paths to a specific library version, so upgrading OpenSSL requires a recompile much like with static linking.
With "normal" dynamic linking, upgrading OpenSSL and restarting some service means you're now running untested code, hoping that the new version of the dynamic lib really doesn't change an interface on which your code depends. But to be fair, this is usually a good assumption.
There is no need for dynamic linking for updates. Really.
Also - weakly related - what if you want to use a plugin from vendor A inside the program of vendor B, and they live in the same address space - how are you doing it without dynamic loading?
The proprietary code isn't going to chance using system libs beyond libc, because of portability. So they likely still need to be patched separately.
Then don't do that. Seriously, RMS, ESR and others have written a plethora of well-reasoned essays indicating why proprietary software is a poor choice.
Well, I'm convinced.
'Well, don't stab yourself in the eye.'