There can be no compromise in this debate since it is about the hardfork
mechanism itself, not scaling. The scaling debate is only the tool currently
being used to push for a hardfork.
Strictly speaking, when the miners raised the block limit they accepted, in the past, from, say, 500 KB to 1 MB, that WAS a hard fork. Each time the miners changed the actual size of blocks they accepted to make, they applied a de facto hard fork. A hard fork has nothing to do with what piece of code is actually compiled, it is what are the *actual* de facto rules at a given point that are applied, and whether a newly allowed block would have passed the de facto rules in the past. When miners were making only 500 KB blocks, if ever a 1 MB block were made, it would have been rejected at that point by his peers, while that same block is now accepted. Hence, each time the miners rose their mutually agreed-upon accepted limit on block size, that WAS already a hard fork.
Hard forks have nothing to do with code, but have to do with what the miners actually mutually accept (of course, it must be somewhere in some form of code, they don't do it by hand). They didn't accept 1 MB blocks 5 years ago, now they do (at least, as far as I understand). So that clearly is a hard fork.
Also, one must understand that the reversal of every soft fork, is a hard fork. This means that if one accepts soft forks, and one accepts the idea of "potentially going back to what it was in case of disaster", one accepts the idea of a hard fork too.
The only fundamental difference between a soft fork, and a hard fork, is that a soft fork never gives the choice to the user in the market. If a miner majority is reached with a soft fork, other miners are FORCED to follow, and at no point, there are two chains from which a user can chose in the market and vote with his money. With a (bilateral) hard fork, in principle, two prongs can emerge, and users can vote with their money in the market.
In other words, if you are afraid of the market, never accept hard forks.