First, I won't work for a company whose office isn't up to my standards. And I don't have high standards, but an open office bullpen is a flat-out no from me. I'd only ever work in those conditions if it was the only way for me to get an income and I really needed it. I'm sure there are lots of other programmers like me, which means these companies are just losing out on talent. I won't even apply to Facebook because of their floorplans.
Second, if your office is up to snuff but you're on the other side of the country, now I've got to leave my girlfriend behind to go work for you. We'll either have to do a long-distance relationship or she'll have to move with me. Well, if I don't really want to work for you, I'm just going to say no yet again. I really don't think I'm the only programmer who's not single. I've heard that some even have "kids" and a "family" of their own, which makes moving cross-country an even bigger deal.
Third, if you're located in a hyper-expensive urban area and my cost of living is going to double, you're going to have to double my salary before I accept. I'm not going to cut my modest lifestyle in half just to work for you, on top of the above issues.
The end result is that I'm extremely picky about where I work. If more companies just allowed remote developers, all those hurdles are resolved immediately.
Hint to recruiters: first thing to do if you have a talent "shortage" - consider that maybe you aren't doing enough to attract talent, and communicate it up the chain to let management know why your recruitment and retention rates suck.
"You must come into the office today. If you wish to work from home you must use a vacation day."
We've got a long way to go.