?

Log in

No account? Create an account

Previous Entry | Next Entry



Служил Гаврила программистом,
Гаврила баги поправлял...


Современная индустрия программного обеспечения превратилась в постоянный бег за своим хвостом, причем сопровождающийся еще и тем, что бегущий постоянно косится на таких же кружащихся вокруг. Любая мало-мальски сложная программно-аппаратная система в качестве побочного эффекта содержит изрядное количество ошибок и уязвимостей. И большАя, если не бОльшая часть работы современного программиста - это их поиск и исправление. Правда, в процессе улучшения он зачастую плодит новые.

Из свежих примеров - "кровоточащее сердце/сердце кровью обливается".

Краткое отступление - версии программ с открытым кодом обычно обозначают тремя цифрами X.Y.Z.
Первая X - это веха в жизненном пути приложения, "большой релиз", выпускается с фанфарами и бросанием чепчиков.
Вторая Y - это событие поскромнее, когда добавлено несколько новых, но полезных функций, также может обозначать некоторую несовместимость с предыдущими версиями (что как раз и обусловлено появившимся функционалом).
Третья Z - это обычно так называемый патч-релиз, исправляющий ошибки, но иногда тоже содержщий какие-то мелкие добавления.
У OpenSSL еще была последняя буква, это как раз для исправлений/улучшений существующего кода, без новшеств.
Так вот.

  • OpenSSL 1.0.1g не содержит уязвимости;

  • OpenSSL 1.0.1 до 1.0.1f уязвимы;

  • ветка OpenSSL 1.0.0 не содержит уязвимости;

  • ветка OpenSSL 0.9.8 не содержит уязвимости.

С помощью краткого курса версиологии мы легко можем видеть, что "большой релиз" ошибки не содержал. А вот первое крошечное обновление, в основном предназначенное для исправления, добавив небольшую новую возможность, эту уязвимость создало, причем, насколько я могу судить, ошибка была классическая, которой сто лет в обед - отсутствие проверки границ.

Резюме: на данный момент мир не располагает одновременнно надежным и развивающимся программным обеспечением, оно практически всё в большей или меньшей степени поломано и/или уязвимо, просто его сложность и маловероятность ситуаций, приводящих к поломкам, не дает возможности разглядеть все ошибки.

Ах да, о неиспользуемой переменной и бабочках.
Как-то раз в процессе очередного "причесывания кода", чтобы было поменьше предупреждений, я всего-навсего удалил неиспользуемую переменную (да, да, точно неиспользуемую), что привело к уникальной ошибке, своего рода вирусу, только такому вирусу, который был по своей сути искажением данных и распространялся в онлайновой системе, даже после исправления ошибочной программы.
Насколько я помню, чтобы от него избавиться, пришлось одновременно выключить все компьютеры системы - чистая фантастика с победой искусственного разума.

Об этом - в другой сказке.

(c) realsupport.ru

Comments

( 2 comments — Leave a comment )
my-blog.songfox.ru
Jun. 8th, 2014 05:15 pm (UTC)
Полностью солидарен с автором статьи!
realsupport
Jun. 8th, 2014 05:23 pm (UTC)
— Он был бы ещё замечательнее, если бы болтался на рее! (c) капитан Смоллетт

А Вы были бы еще замечательнее, если бы ознакомились с еще одним моим постом про "+1".
( 2 comments — Leave a comment )