I agree in general. I often get really aggravated about this issue. I can't stand fixed-length free-upgrade periods; it makes no sense. So if you are a developer, and you take an extended vacation, then release an upgrade the day after my 12-month period has expired, I'm out of luck?
That's nonsense. Upgrade eligibility should be based on version numbers, and nothing else--not time, not the name of the application, not cutesy new icons and toolbar button graphics, and not what company just bought it out and decided it's time to rake in some cash.
I can't stand when a vendor releases a major-version update, and the only changes are new, splashier colors, and a few token changes. This happens all the time.
The sub-issue that pisses me off the most is when an application has bugs that get fixed in the updated version, but ignored in the old version. That forces me to pay to obtain a fix to a product defect, and it puts a snarl on my face.
I wouldn't say that upgrades should occur every two years, though. Upgrades should happen when upgrades are feasible and sensible. How often depends on the product genre, the product itself, and on the people behind it. If the current version of the product has significant issues, or a significant number of issues, fix them. If you're working on a new version that does fix those issues, give people a free or seriously-reduced-cost upgrade. And people who give up their personal time to help improve your product should always get a free update.