Risk is not free.
When you are newly out of college
and have no credit history and want
to buy a car, the bank is taking a
risk on your ability to pay. That
risk is not free, so you pay a
higher interest rate.
When you buy that (used) car, and
you want to make sure that you
aren't out your 8 grand when you
accidentally slam it into a fire
hydrant and total it, you are taking
a risk on yourself. So you find a
company who is willing to exchange
that risk with you for a monthly
price. This risk is not free, so
you buy insurance.
When you embark upon a fixed price contract for software development, and your client gives you a spec, you are taking a risk that the client's spec is complete. That risk should not be free either, and your client will have to pay for it by a certain markup in the price of your contract. What that risk is worth is up to you, but it must be baked into the price. The more general the spec, the higher the risk to you. Price that accordingly.
Whatever you do, don't get caught into the naive idea that an estimate for a fixed price contract should be the number of hours you expect times the rate, because you would be the only person I know who is willing to take on risk for nothing.
Actually, if you are willing to price your risk at $0.00, I could really use a 2 grand loan for some christmas shopping. I promise to pay you back... ;-)