A “fork,” in programming terms, is an open-source code modification. Usually, the forked code is similar to the original, but with important modifications, and the two “prongs” comfortably co-exist. Sometimes a fork is used to test a process, but with cryptocurrencies, it is more often used to implement a fundamental change, or to create a new asset with similar (but not equal) characteristics as the original.
Hard forks - it's a permanent divergence in the blockchain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules. A hard fork is a change to a protocol that renders older versions invalid. If older versions continue running, they will end up with a different protocol and with different data than the newer version. This can lead to significant confusion and possible error.
Soft forks - it's a divergence in the blockchain caused by non-upgraded nodes not following new consensus rules. A soft fork can still work with older versions.
In the simplest terms, hard and soft forking describe two separate ways of updating the cold wallet software when the latest version looks a bit compatibility with the previous versions.