This should have been easy. General mouths off publicly about the Commander-in-Chief, he goes. Only in Washington could this become a soap opera over the course of a couple of days.
Without getting too far into the weeds, McChrystal was wrong. The Uniform Code of Military Justice specifically forbids comments such as his. One of the first lessons recruits are taught is that they have given up some of their Constitutional rights by enlisting, key among which is freedom of speech. The debate about whether this is a good idea can be held another time. (I happen to think it is, on several levels.) Given the facts as they exist, McChrystal was out of line; the only relevant question is what to do with him?
He can't stay where he is. No Commander-in-Chief can have a subordinate commander in the field treat him with such open disrespect; I'm sure McChrystal wouldn't stand for it from one of his men. You can't transfer him, for the same reason.
So, McChrystal has to go. How to do it? There should be no need for Obama to fire him; McChrystal's service to the country has earned him the right to resign, which he should have done the minute the story broke, thus allowing the offended party (Obama) the opportunity to either accept it (as he has done), or to make a magnanimous (but misguided) gesture and allow him to stay. Letting it linger for a few days did nothing to enhance McChrystal's reputation.
As for Republicans who argue he can't be replaced at this juncture: grow up. The military is based on the idea that anyone might have to be replaced on a moment's notice. If McChrystal had died in the middle of giving an order, his second-in-command would be expected to step up and finish it. It's true everywhere, but nowhere more so than in the military: no one is indispensable.
It's a shame, though. No one gets to be a four star just because he's a master schmoozer; McChrystal had to be good, especially to make that rank with some of the blemishes he has on his record. So we lost a good warrior today, but we can't say we lost a good soldier, or he wouldn't have been in that situation to begin with.