The bug was not in Ethereum, it was in the contracts. And before this incident, the philosophy of Ethereum was that "the code is the contract". The hacker did not breach the contract. They noticed a bug, or as one could say, a loophole, and used it to their benefit.
I don't know what the mechanism of enforcement was. Whether it was a fork or something else, the net effect was that a) the history was rewritten, the contract terms changed retroactively, and the monies were returned to their source; and b) the concept of code is contract was effectively showed to be an empty gesture and the philosophy was effectively abandoned.
It was a fork. Ethereum Classic, the original chain, is still in operation, and in that fork, the DAO fix never happened. But since the DAO affected the core Ethereum developers and early proponents and backers of the system, all the talent stayed with the chain that corrected the issue. To me, that's a fair outcome. Forkability is a necessary feature, not a bug, of immutable blockchains. Just like it is for open source.
I don't know what the mechanism of enforcement was. Whether it was a fork or something else, the net effect was that a) the history was rewritten, the contract terms changed retroactively, and the monies were returned to their source; and b) the concept of code is contract was effectively showed to be an empty gesture and the philosophy was effectively abandoned.