... to add to your question, ... or have reasons because of which they cannot upgrade or change easily or at all (i.e. without disproportionately large costs, or because of technical reasons - think things which are made with a lifespan of 30-40 years).
... but to answer it, when there is no more a significant number of users who use it, and who are willing to pay for it (support). Otherwise, if one drops support for product X, another company will start providing it.
End of support usually comes because of several reasons:
- end of development (from the programmer's side, e.g. lack of funds, unwillingness to port to another platform/OS/compiler, death of programmer)
- change of factors on which the programmer cannot influence (e.g., change of platform, hardware unavailability)
- end of need for the product (i.e. it is no longer sought by the market)