Valve раскрыла детали работы по повышению стабильности Steam на Linux
Недавно была выпущена встроенная функция записи игр в Steam, став частью большого обновления стабильной версии клиента Steam, включающего исправления "различных распространённых сбоев" на Linux. Теперь мы узнали больше о том, что происходит за кулисами.
В блоге разработчика Тимоте Бессета, активно работающего в Valve, упоминается, что важное изменение, касающееся функций setenv и getenv, значительно повлияло на стабильность клиента Steam на Linux.
Немного контекста:
- setenv: изменение или добавление переменной окружения.
- getenv: получение значения переменной окружения.
По словам Бессета, один из его коллег назвал setenv "худшим API для Linux", хотя это распространённый API, доступный на всех платформах, — "сложно было поверить, что всё настолько плохо". Однако уже было известно, что на Linux "setenv и getenv небезопасны для использования в многопоточных средах".

Частью проблемы является разнообразие Linux-дистрибутивов, с различными оконными менеджерами, окружениями рабочего стола, версиями драйверов и пользовательскими настройками. В итоге отчёты о сбоях становятся "очень шумными". Ещё одна сложность заключается в том, что setenv может вызывать сбой в многопоточной программе, и помимо этого, "другие потоки обычно заканчиваются ошибкой SIGABRT вскоре после вызова getenv", а трассировки сбоев оказываются "хаотичными и не привязанными к одной причине".
Что же они сделали? Вот их подход:
- Убрали большинство вызовов
setenv. Они использовались в основном при запуске процессов, и рефакторинг с переходом наexecveдля передачи подготовленной среды улучшил ситуацию.- Сократили зависимость от
getenv, в основном за счёт кэширования вызовов. В системных библиотеках (x11, xcb, dbus и др.) использование остаётся высоким, но они продолжают работать над его уменьшением.- Для оставшихся случаев использования
setenv, которые сложно было рефакторить, они ввели "менеджер окружения", который выделяет достаточно большие буферы значений на старте для фиксированных переменных окружения, ещё до начала работы потоков.
Эту запись в блоге стоит прочитать, если вам интересны закулисные подробности, ведь разработка для Linux порой напоминает минное поле.
Согласно одному из комментариев к записи, эти проблемы рассматриваются и в glibc, так что, возможно, они не будут столь серьёзными в будущем для разработчиков на Linux.
Чем стабильнее станет клиент Steam, тем лучше будет опыт для новых пользователей Linux, а также для владельцев Steam Deck, так как SteamOS базируется на Linux. Приятно видеть, как разработчики Valve постоянно стремятся улучшать продукт.
Linux: обзоры и обновления
• Технические различия между терминами Linux и GNU/Linux и причины устоявшейся терминологии
• System76 выпустила COSMIC Desktop 1.0.5 и представила дорожную карту развития Epoch 2 и 3
• Valve задерживает выпуск Steam Machine и Steam Frame из-за дефицита комплектующих
• Ubuntu 24.04.4 LTS получила HWE-обновление с ядром Linux 6.17 и Mesa 25.2.7
• AMD подтвердила выход Steam Machine от Valve в начале 2026 года
• Почему архитектура неизменяемых дистрибутивов Linux избыточна для домашних ПК