В Linux 7.3 binfmt_misc научится выбирать интерпретатор через BPF
Подсистема ядра Linux binfmt_misc отвечает за запуск «неродных» и нестандартных файлов: именно она передаёт Windows-исполняемые файлы в Wine, а JAR-архивы — в среду исполнения Java. К открытию окна слияния Linux 7.3 этот механизм ждёт заметное расширение возможностей.
Основной набор изменений VFS уже отправил Кристиан Браунер, заранее — до старта цикла разработки 7.3, который должен открыться сразу после запланированного на 17 августа выхода релиза 7.2 (при условии, что тот выйдет вовремя). Помимо исправления давних ошибок и переработки блокировок, патчи меняют саму логику реестра форматов.
Интерпретатор вычисляется на лету
Раньше при регистрации формата интерпретатор задавался фиксированной строкой. Теперь тип бинарного файла можно сопоставлять программно, а сам интерпретатор — вычислять при каждом запуске. Ключевое нововведение: к записям binfmt_misc разрешено подключать BPF-программы, которые динамически выбирают среду исполнения — загрузчик или интерпретатор — индивидуально для каждого файла.
По словам Браунера, это открывает дорогу к перемещаемым (relocatable) исполняемым файлам, где динамический загрузчик определяется, например, относительно расположения самого бинарника. Такая гибкость особенно интересна для NixOS и других систем с нестандартной структурой путей; механизм универсален и допускает и другие политики.
Два режима диспетчеризации
Вместе с переработкой добавлены два режима запуска. До сих пор выбранный интерпретатор фактически перехватывал всю «личность» процесса: argv[0], /proc/pid/cmdline и /proc/self/exe указывали на него, а не на исходный файл. Из-за этого, в частности, спотыкался gdb — значения AT_ENTRY и AT_PHDR не совпадали с реальным исполняемым файлом, и символы PIE оставались нерелоцированными.
Первый режим — прозрачная диспетчеризация: интерпретатор загружает бинарник через AT_EXECFD, вектор аргументов остаётся ровно таким, каким его сформировал вызывающий, а mm->exe_file и comm помечаются именем самого файла. При этом выставляется бит AT_FLAGS_TRANSPARENT_INTERP, а контроль над отображением бинарника остаётся у интерпретатора. Второй режим — подстановка загрузчика: файл выполняется нативно, а меняется лишь интерпретатор.
Если Линус Торвальдс не выскажет возражений во время окна слияния, обновлённый binfmt_misc войдёт в 7.3. Как именно дистрибутивы и среды исполнения воспользуются новыми возможностями — покажет время.
Источник: Phoronix
Комментарии
Войдите, чтобы комментировать.