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: обзоры и обновления
• Steam Deck получил режим загрузки при выключенном экране
• Релиз KDE Plasma 6.5.2: исправления ошибок в KWin, Discover и Plasma Addons
• NVIDIA Graphics Driver 580.105.08 для Linux: устранены сбои в Rage 2, Metro Exodus EE и проблемы с HDMI и DisplayPort
• Valve выпустила Proton Hotfix для улучшения работы NINJA GAIDEN 4 на Linux ПК
• Ubuntu 26.04 LTS Resolute Raccoon: дата выхода, этапы релиза и поддержка до 2036 года
• GE-Proton 10-25 для Linux и Steam Deck: исправления для Nioh 2, World of Warcraft, Rockstar Launcher и других игр