In our brief experience of commercial software (what has it been? 40 years? Note: that's 2 patent terms) I can't think of very many software technologies that have lasted as a commercially viable product for 10 years let alone 20.
To my limited understanding of how patents work and how the software market works I would think a patent term in the range of 1-5 years would be a lot more reasonable. It would allow for the patent holder to gain a competitively advantageous foothold in the market (the point of having a patent) and it would destroy the incentive of inventors to sell their patents rather than creating business from them.
I'd be interested to hear from people with more knowledge of these subjects than me as to why this isn't the way software patents are maintained.
http://www.uspto.gov/inventors/patents.jsp#heading-5
For applications filed on or after June 8, 1995, utility and plant patents are granted for a term which begins with the date of the grant and usually ends 20 years from the date you first applied for the patent subject to the payment of appropriate maintenance fees. Design patents last 14 years from the date you are granted the patent. No maintenance fees are required for design patents.
Note: Patents in force on June 8, 1995 and patents issued thereafter on applications filed prior to June 8, 1995 automatically have a term that is the greater of the twenty year term discussed above or seventeen years from the patent grant.
EDIT: What the patent owner can't do after expiration is get an injunction against further infringement.