This limit is long standing and unexplained, but it didn't always have that particular name. It was dubbed MAX_SCRIPT_ELEMENT_SIZE
in this commit, where previously it was just a magic number in script.cpp
. The restriction is found throughout the entire history from master until 0.3.22, but is missing from the 0.1.3 source. You could speculate that it was intended to be an anti-DoS restriction, but these releases retained OP_CAT
which would have allowed for nearly infinite sized stack elements regardless of the sizes of data pushes.
The 520 byte push size severely stunts Pay to Script Hash, as the entire script is pushed onto the stack it must respect the push limit. For a P2SH multisignature script this sets the upper limit to n-of-15, any larger and it would be unspendable due to 520 byte consensus rule.
Increasing this limit would be a hard forking change.