21-летняя программист Камила Шевечик обнаружила и исправила ошибку в коде оконного менеджера Enlightenment E16. Ошибка, существовавшая примерно с 2006 года, могла привести к зависанию всего рабочего стола из-за слишком длинного заголовка окна (title bar). В своём блоге она рассказала о том, как обнаружила и исправила баг.
E16 Enlightenment. Источник: iczelia.netEnlightenment — один из старейших оконных менеджеров для Unix и Linux, который до сих пор находится в разработке. Проект стартовал в 1997 году, а его часть E16 (DR16) появилась в 1999 году — и она существует до сих пор, хотя большинство давно перешли на более новые версии Enlightenment или совершенно другие среды.
E16 теперь пользуется статусом «культового»: он лёгкий (Камила Шевечик сообщает о пиковом потреблении RSS-ленты около 24 МБ), легко настраиваемый, удобный для активно использующих клавиатуру людей и по-прежнему имеет приятный визуальный ретро-стиль.
В этом, казалось бы, «завершённом» проекте уже два десятилетия скрывается ошибка, которая может привести к зависанию всего рабочего стола. Это происходит, например, при открытии PDF-файлов с длинными заголовками. Приходится перезагружать сессию X11 через TTY.
Механизм в E16 работает следующим образом: если заголовок слишком длинный, менеджер пытается «обрезать» его посередине и вставить многоточие в заголовок окна интерфейса: «начало заголовка ... конец заголовка».
Проблема в том, что реализация этого сопоставления использует вариант метода Ньютона — и делает это без ограничения на количество итераций. Проще говоря, функция пытается оценить, сколько символов нужно «обрезать» посередине, чтобы уместиться в заданную ширину. Поэтому в течение 20 лет в E16 и была ошибка с длинными заголовками окон.
Камила Шевечик разработала патч для версии E16 1.0.30 (выпущенной в августе 2024 года). Девушка описала технические подробности решения в своем блоге.
Шевечик заявляет, что ей нравится E16 именно потому, что программное обеспечение, в некотором смысле, «завершено». Оно имеет достаточный набор функций, и последующие релизы в основном представляют собой исправления ошибок и незначительные улучшения, а не бесконечный поток новых решений. Камила предлагает очень прагматичный подход: если в этом нет необходимости, не стоит обращаться к каждой новой версии ПО.

