My point of view
First, a disclosure: I work for a consulting/contracting company. No, I will not name it. But I also worked in the Public Sector for almost 10 years, so I can speak from both sides of the issue.
And the major problem is: there are no penalties for f-ing up, but heaven help you if you are efficient.
For example: As a project manager, you estimate that your project will need 100,000 this year. By the end of the year, you've managed to bring the project in at 90,000. Your reward? When next year you ask for 115,000 for your project the bean-counters point out that you had a history of over-estimating and will only give you 104,000 for your budget. Which is why there's a push at the end of the financial year to "use up your budget".
Another example: Your project is behind schedule and over budget. You need more money. Guess what? The government simply gives you a slap on the wrist and finds more money for your project - because it'd be bad PR for the project to fail.
I have also seen too many contracts go past where there were no penalty clauses in case of vendor delays or failure to produce according to the requirements - and thus more money is spent on the project for no good reason.
The best projects I've worked on (on both sides) involved two separate contracts - an optional one to produce a set of requirements/specifications for the project and a second one to actually implement the reqs/specs *where said reqs/specs were part of the contract conditions*. (and delivery dates, penalty clauses, etc.
It protects the contracting company ("you want what? Nope, not in the specs you included in the contract") and the client ("page234 - why haven't you delivered this?").
YMMV, of course.