Softforks are backwards compatible
--

**Softforks restrict block acceptance rules** in comparison to earlier versions. 

![New valid blocks are a subset of old valid Blocks][1]

The new rules allow a subset of the previous valid blocks, therefore  all blocks considered valid by the newer version are also valid in the old version. If at least 51% of the mining power shifts to the new version, the system self-corrects:  
Blocks created by old versions of BitcoinCore that are invalid under the new paradigm might commence a short-term "old-only fork". Eventually, they would be overtaken by the chain fork creating under the new paradigm, as the hashing power working on the old paradigm would be smaller ("only old versions") than on the new paradigm ("accepted by all versions").  
However, if less than 51% of the hashing power switch to the new version, it behaves like a hardfork, and will not mend, as the chain created under the old rules has more hashing power and is incompatible to the new rules.

Hardforks are not backwards compatible
--
![Hardforks extend set of valid blocks][2]

**Hardforks ease block acceptance rules** making previously invalid blocks valid in the new version. Obviously, this is not backwards compatible as older versions will not accept the new blocks, causing the users of the old paradigm to remain on a fork indefinitely which will not mend unless everyone upgrades to the new version.


  [1]: https://i.sstatic.net/H2w70.png
  [2]: https://i.sstatic.net/MhZ1C.png