Хм, вот опять Вы про связь ПО и реального мира, что, как мне кажется, не вполне корректно, ну да ладно. Ещё раз повторюсь, программа - не готовый предмет. Для её работы в современных реалиях необходима, как минимум, ОС и драйверы. Т.е. программа - только маленький винтик, надежность которого во многом зависит от правильности использования.
Будет ли вина производителя болтика для велосипеда если:
1)болт попытаются вкрутить не туда
2)болтик из велосипеда ночью выкрутит злоумышленник
3а)злоумышленник в темном переулке выкрутит и вкрутит его куда-нибудь растерявшемуся владельцу
3б)злоумышленник заменит винтик на пластмассовый и у велосипеда отвалятся колеса
4)если болт будет не прикрутить(из-за того, что китайцы приклеили все детали велосипеда суперклеем)
Ну да ладно, это всё был философский стеб на грани бреда))
---
В случае если кому-то продали некачественный велосипед - его отремонтируют или заменят по гарантии.
То же самое и с ПО: в случае массовых ошибок производитель или выпускает hotfix, или новую версию продукта, причем обновление с версий с критическими уязвимостями всегда бесплатное. При этом положительный имидж производителя страдает, следовательно никто заранее злонамеренно не пишет код, содержащий ошибки)
Для тех, у кого "программка не ставится" или "компьютер перезагружается" или какое-то совсем нестандартное оборудование, есть сильно платная техническая поддержка. Причём, платная даже для open source продуктов. Например, ОС гну/линукс Ubuntu. Потому что обучение и время людей нынче везде платные вещи
Видимо, вы никогда не писали серьезных программ, раз так нападаете на их создателей :)
У программного продукта есть одно замечательное свойство - он никогда не бывает полностью готов. :P
Т.е. всегда найдется что-нибудь, что можно улучшить, сделать быстрее, совместимее, расширить функциональность.. Но всем этим можно заниматься до бесконечности. Тогда финальная версия программы
никогда не появится!
Просто невзможно во всех ньюансах предусмотреть заранее, как на вобщем-то нестандартных машинах, коими являются ПК, будет работать конкретная сложная программа. И, даже если код корректен, при использовании в многозадачной операционной системе возможны конфликты между процессами... А ещё и взаимодействие с железом осуществляется через драйверы.. ))))
Так что тестировать ПО нужно на конкретном компьютере.
Есть некоторые стандарты, вроде POSIX, но они тоже не могут охватить всё..
Вот мы и пришли к заказному программному обеспечению, где заказчик сам устанавливает требования, одним из которых является работоспособность на конкретном оборудовании и выполнение всех разумных пожеланий. В массовом продукте просто невозможно этого требовать.
Вот как-то так мне кажется.
Возможно, я не прав, поскольку я во всем этом вопросе профессионально заинтересован)