TL;DR:
As @Alex Waters has stated, it's a centralised alert system to allow
people to shutdown their clients in response to a threat to the
overall Bitcoin network, pending a client patch to resolve the issue.
This was intended as a short term measure to counter-act perceived
problems in growing the software.
This thread on the forum has some interesting information about it (I've fixed the links to cover the moved forum):
Yes, it appeared in version 3.11. Here's the thread discussing it:
"Development of alert system"
https://bitcointalk.org/index.php?topic=898.0;all
But I think Satoshi took it out of recent builds, to avoid accusations
that he was a point of central control (because his key would be used
to sign the alert). If I can find the reference to that announcement,
I'll post it.
edit: here's the announcement about the removal of "safe mode". It's
not clear to me whether the alert itself was removed, or whether the
ability to have the alert shut down transaction processing was
removed:
Removed safe mode (0.3.19)
https://bitcointalk.org/smf/index.php?topic=2228
Clearly, Satoshi intended it to be a centralised mechanism to issue alerts that would result in clients stopping transactions (not block generation). This would act as an effective mechanism to cause clients to upgrade as a result of a bug, but a naive interpretation is that it is also a good way to shutdown an economy.
Anyone can build a standard client and replace the key requirement with one of their own, thus negating the efficacy of a system-wide shutdown due to a compromised key. Essentially, this would cause a fragmentation of the standard client as nodes seek to protect themselves from external compromise.
Satoshi notes this himself in this comment:
It can't do arbitrary actions remotely. Maybe some of you are
responding to other posters who suggested the alert system should do
more?
If there is an alert, the following json-rpc methods return an error:
sendtoaddress getbalance getreceivedbyaddress getreceivedbylabel
listreceivedbyaddress listreceivedbylabel
The remaining 14 methods function as normal.
I believe the safer option should be enabled by default. If you want
your server to keep trading and ignore an alert saying the money its
receiving might be like the money from the overflow bug, then you can
use the switch and not blame anyone else if you lose your money.
Worst case if you leave alerts enabled, your site stops trading until
you upgrade or add the -disablesafemode switch.
Getting surprised by some temporary down time when your node would
otherwise be at risk is better than getting surprised by a thief
draining all your inventory.
Someday when we haven't found any new bugs for a long time and it has
been thoroughly security reviewed without finding anything, this can
be scaled back. I'm not arguing that this is the permanent way of
things forever. It's still beta software.
Given the ongoing backlash of misunderstanding over the concept, it appears that it was decided to remove the feature and rely instead on detecting a dodgy blockchain that is longer than the longest valid one:
- Removed "safe mode" alerts "safe mode" alerts was a temporary
measure after the 0.3.9 overflow bug. We can say all we want that
users can just run with "-disablesafemode", but it's better just not
to have it for the sake of appearances. It was never intended as a
long term feature. Safe mode can still be triggered by seeing a
longer (greater total PoW) invalid block chain.
Builds:
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.19/