It was the "this software is not secure" that would freak people out.
Imagine that you have pre-Segwit node, and that Segwit is suddenly activated. Or that you have pre-Taproot node, and Taproot is activated. If you have some old node, executing only old rules, then there may be some coins, which will move, and your node will have no idea, how to check them.
When new soft-forks are activated, miners are setting specific bits in block header versions, so that everyone knows, that the new BIP is going to activate, and that miners are ready to execute new rules. And then, old users can get a message, like "please upgrade". But in testnets, miners can mine any blocks. Sometimes, some people simply think: "Block version? Let's put whatever, nobody cares about it". And because it doesn't make the block "invalid", then they check all values, without masking it. And then, sometimes your node can check these headers, and interpret it as "oh, so new soft-fork is in progress, I should display the warning". And that's how you get it.
I wonder if they could make these errors more specific.
Not really, because these things are needed for mainnet. And because miners can trigger any warning, then in testnets, you can see all kinds of warnings, that are possible. If one day, someone will implement a warning, that "SHA-256 is broken, please upgrade", or "ECDSA is broken, please send coins to quantum-safe addresses", then don't be surprised, if you see such things in testnet, even if everything will be still safe.
Also, in the very old versions, there was an
alert system. And then, by knowing a specific private key, it was possible to display literally any message in all clients, if you were a developer. It is now disabled, with the famous "alert key compromised" message. But in this frame, any scary text can be displayed, especially in testnet. For example:
https://en.bitcoin.it/wiki/File:Prefinal_alert.pngSo, if you want to know exactly, why a given text is displayed, then you should simply save a given text (for example by making a screenshot), and locate it in the source code of your client. Then, I guess you will find it nearby block header version, transaction version, or in a similar place, where it can be triggered.
Edit:
https://github.com/bitcoinknots/bitcoin/blob/29.x-knots/src/validation.cpp#L3303 std::vector<bilingual_str> warning_messages;
if (!m_chainman.IsInitialBlockDownload()) {
const CBlockIndex* pindex = pindexNew;
for (int bit = 0; bit < VERSIONBITS_NUM_BITS; bit++) {
WarningBitsConditionChecker checker(m_chainman, bit);
ThresholdState state = checker.GetStateFor(pindex, m_chainman.GetConsensus(), m_chainman.m_warningcache.at(bit));
if (state == ThresholdState::ACTIVE || state == ThresholdState::LOCKED_IN) {
const bilingual_str warning = strprintf(_("WARNING: Unknown new rules activated (versionbit %i) - this software is not secure"), bit);
m_chainman.GetNotifications().warningSet(kernel::Warning::UNKNOWN_NEW_RULES_ACTIVATED, warning);
warning_messages.push_back(warning);
}
}
See? It is just about the bits in the block header version. Bitcoin Core has a little bit different warnings than Knots, so this exact text is specific to this client. If it is too scary, then you should complain to them, or simply change it in your version.