Here's a rundown of relevant court decisions:
Supreme Court, Benson: That software is just an algorithm. You can't patent an algorithm. There may exist some kind of software that can be patented, but not ones that look like this.
Supreme Court, Flook: We see what you did there. This patent is just software to solve a mathematical problem. The post-solution activity isn't novel. There may exist software that could be patentable, but not software that looks like this.
Supreme Court, Diehr: This one's different from Flook in that they're claiming novelty in parts of the invention outside the software.
Federal Circuit, State Street: Actually I think patents that aren't distinguished in the least from the one in Flook are OK.
Supreme Court, Bilski: Pay attention to Benson, Flook, Diehr. Nothing's changed since these decisions. Ignore State Street.
In summary, the reason software is patentable today is that lots of people persist in ignoring the Supreme Court. There may in the future be some kind of software the Supreme Court might think patentable, but every software patent we talk about here on HN, especially related to patent trolls, is indistinguishable from Flook.
edit: fixed to replace duplicate quote with the quote I meant to paste in.