The primary difference between a Bitcoin softfork vs hardfork, is their behaviour with regard to "do nothing" nodes.
If a node does nothing, then it automatically rejects a hardfork. On the other hand, it automatically accepts a softfork.
To accept a hardfork, you must upgrade your node.
To reject a softfork, you must upgrade your node.
(To accept a softfork, even if you are disinterested, you should still upgrade your node, to stay secure.)