Dynamic vs static linking on Windows and Inno Setup

  • I don’t care, all my plug-ins are compiled with static linking
  • The plug-ins are always compiled with dynamic linking and I don’t provide any installer anyway
  • The plug-ins are always compiled with dynamic linking and I provide an installer, but the user needs to download himself the updates or the VS redistribuable
  • The plug-ins are always compiled with dynamic linking and I provide an installer, which installs the VS redistribuable as well, included in the installer binary
  • The plug-ins are always compiled with dynamic linking and I provide an installer, which installs the VS redistribuable as well, downloaded on the fly
  • I provide different installers or versions of the plug-in with dynamic and static linking

0 voters

Hello guys !

Since a very recent Windows 10 update (see there for more information : IMPORTANT BREAKING CHANGE: JUCE will now use dynamic linking for the Windows runtime by default), it is now best practice to link dynamically the Windows runtime library to our compiled plug-ins. If we don’t do so, users might run into the “no more than 64 different plug-ins linked statically loaded in the DAW” issue on Windows 10.

In practice, is not only a matter of linking statically or dynamically the runtime librairies. Indeed, in Windows 10, when the specific update has been applied, the universal runtime library is supposed to be available. But in other cases, either simply because we are on Windows 7 to 8.1 or because the computer is not up to date, the runtime might not be available.

So, how do you handle this issue ? Do you care about the static linking issue or not anyway ?

If you care, that means that you have to provide the users a way to download what he needs to run the plug-in anyway. I see different options there :

  • Ignoring the issue and compiling everything in static
  • Telling the user that he has to update Windows or to get the last version of Visual Studio Redistribuable
  • Including in the installer a script to run the Visual Studio Redistribuable which is in the installer binary
  • Including in the installer a script to run the Visual Studio Redistribuable which needs to be downloaded on the fly (maybe the most elegant solution)
  • Providing two versions of the installer, one with plug-ins statically linked recommended for Windows 8.1 and less, one with dynamic linking for Windows 10 (kill me already for compiling, copying and setting everything there)
  • Not telling anything to user, not providing any installer, but still compiling everything dynamically :smiley:

So what’s best pratice among the real world commercial plug-ins developers ? And if you go for option “redistribuable in the installer”, would it be possible to share your experience ? I wonder if it is even possible to download automatically the VS Redistribuable with Inno Setup.

Thanks in advance !

1 Like

I think the static + I don’t care option won by far :slight_smile: I’ll do this again in one year when more users have Windows 10 + the last updates :slight_smile:

2 Likes

Responding here so watchers see the info.

In the latest preview of Windows 10, we’ve updated the FLS limit to over 4000. It’s still a best practice to dynamically link the runtime (so it can be serviced for bugs and security without recompiles, and so you don’t load 50 copies of the same code into process), but we know this was a blocking issue. The limit used to be 128, going back to Vista.

If all goes well, this will go into the Windows 19H1 release in the first half of this year.

Official announcement:
https://blogs.windows.com/windowsexperience/2019/01/09/announcing-windows-10-insider-preview-build-18312/

Pete

1 Like