I think the uncertainties inherent in writing software that depends on many other complex libraries/frameworks will tend to discourage strong liability for bugs. The average Win32 program or Java web app has a dizzying list of dependencies and it would be impossible for the programmer sitting on top of that software stack to make any guarantees about the stuff underneath.
In certain highly restricted domains (typically embedded systems), liability for bugs becomes somewhat more realistic.