В среде «настоящих программистов» бытует мнение, что одна известная операционная система ввиду особенностей своей архитектуры склонна к багам и глюкам, а вот другая — ого-го! Надёжная, как танк, хоть и не особо распространённая среди рядовых пользователей. Ну, в общем, что-то в этом есть; во всяком случае, сам я пользуюсь исключительно второй, мне так удобнее. Но история эта будет о том, как непродуманность в деталях может испортить даже надёжную систему.
Сижу, пишу код, отлаживаю. В очередной раз баг: система уходит в бесконечную рекурсию, бодренько выжирая оперативную память и своп. Как должна себя повести программа в таком случае? Выжрав всю память, она должна упасть в «корку» и больше не подняться. Ну, так обычно кривые программы ведут себя на серверах.
Но так будет скучно, неинтересно и без всякой интриги. Ведь в нашей ОС, слегка заточенной для удобства юзера, есть замечательная система, предназначенная для перехвата подобных событий и информирования разработчиков о проблеме!
Программа выкушала всю память, собралась тихо умереть — и вот тут-то на помощь спешит наша система помощи разработчикам. Поскольку написана она на модном нынче змеевидном интерпретируемом языке, просто так запуститься она не может: поднимается интерпретатор, начинают обрабатываться скрипты с кучей библиотек. Но что-то идёт не так: памяти-то нет.
Бида-бида! Мало того, что упала какая-то там программа — теперь падает и наша система помощи. Ей срочно нужно помочь!
Запускается вторая копия: поднимается интерпретатор, начинают обрабатываться скрипты… Удивительно, но памяти опять не хватает.
Несчастная глючная программа уже давно убита, но бой за память продолжается: один за другим стартуют экземпляры системы и погибают в неравной борьбе за ресурсы.
Прекратить это безобразие удалось лишь путём прицельного убийства всех подозрительных процессов. Отправить отчёт об ошибке разработчикам они так и не смогли, но зато хоть работоспособность компьютера восстановилась.
А всё потому, что чрезмерная инициативность железяки — зло!