A complaint often raised by some people is the auto-update. While it's a nice to have feature, it requires some trust, and not everyone is willing to give that.
To find a middle ground, I suggest a "paranoid mode" implemented in the loader. It would be a (hidden) MelonPref (or any other kind of setting), that, when enabled, would require user's confirmation to continue execution after the actual emmVRC.dll is updated. This would give the user the chance to examine it and decide if they want to run it, and explicitly state when something got changed.
The suggested code flow for loader is as follows:
If paranoid mode is off, function exactly as 1.4.0 does
Get the latest emmVRC.dll hash from the server
Compare the hash with emmVRC.dll stored on disk (no file is also a hash mismatch)
If the hash matches, load the stored emmVRC.dll
If the hash doesn't match, download the new version into emmVRC.new.dll
Print a message to console, stating that it was auto-updated
Require enter press to continue
The user can examine the "new" file at this point. Closing the game by closing the console is also an option.
Starting the game again after closing it from this state should check both old and new file hashes, to notify the user in case the new-new version is different from the one they examined.
If the user accepts the new version, move the "new" file over the old one and load it as usual.
Staying on an old version is not an option - the only two options are accepting the new one (after manually checking it) or not using emmVRC
Note that this approach doesn't really affect most users and doesn't require support for random outdated versions - it just gives the users who want it a chance to see what they're gonna be executing, but staying on an old version forever is not really an option.
A complaint often raised by some people is the auto-update. While it's a nice to have feature, it requires some trust, and not everyone is willing to give that. To find a middle ground, I suggest a "paranoid mode" implemented in the loader. It would be a (hidden) MelonPref (or any other kind of setting), that, when enabled, would require user's confirmation to continue execution after the actual emmVRC.dll is updated. This would give the user the chance to examine it and decide if they want to run it, and explicitly state when something got changed.
The suggested code flow for loader is as follows:
Note that this approach doesn't really affect most users and doesn't require support for random outdated versions - it just gives the users who want it a chance to see what they're gonna be executing, but staying on an old version forever is not really an option.