Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 10:33
Оценка:
Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде. Если же оно само решает, какие нужно изолировать, а какие нет, то по каким критериям, и насколько это надежно?

Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).

Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Osaka  
Дата: 08.03.23 15:30
Оценка:
ЕМ>Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).
ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Если можно чуть что прибивать/перезапускать процессы, то пользователи не заметят, как много разрабы насиньёрили утечек памяти.
Отредактировано 08.03.2023 15:31 Osaka . Предыдущая версия .
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 16:42
Оценка:
ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.

Полагаю, так действительно проще контролировать, сколько ресурсов (память, CPU) потребляет та или иная вкладка.
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 16:53
Оценка:
Здравствуйте, m2user, Вы писали:

M>Полагаю, так действительно проще контролировать, сколько ресурсов (память, CPU) потребляет та или иная вкладка.


Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации. Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 16:55
Оценка: 5 (1) +2
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде.


Именно для изоляции и нужно. У меня в лисе количество процессов Isolated Web Co(ntent), примерно, равно количеству активных вкладок. Количество может не биться т.к. браузеры, в целях экономии ресурсов, могут останавливать некоторые (долго неиспользуемые, например) вкладки (процесс, соответственно, убивается, хотя вкладка есть).
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 17:10
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>процесс, соответственно, убивается, хотя вкладка есть


Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.

То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 17:55
Оценка:
ЕМ>Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации.

Судя по about:performance — что-то контролируется.

EM> Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?


я подразумевал 1 процесс на одну вкладку.
Хотя вариант 1 процесс на 1 сайт (домен) тоже имеет смысл.
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:00
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.


ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?


Беб победил десктоп
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 18:02
Оценка:
Здравствуйте, m2user, Вы писали:

M>я подразумевал 1 процесс на одну вкладку.


Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".

Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 18:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".

Да.

ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:25
Оценка:
Здравствуйте, cserg, Вы писали:

ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.

Дык это просто решается. Надо потроха переписать на JS, и всё всем сразу станет хорошо
Заодно и производительность увеличится
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 18:29
Оценка:
ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:31
Оценка:
Здравствуйте, m2user, Вы писали:

ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???


M>А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.


А его тоже на JS надо переписать
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 19:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС?


А как ее иначе гарантированно обеспечить в условиях нативного кода? Были, конечно, попытки... Вспомним, хотя бы, сингулярити ос и браузер газель от МС, но это уже не про натив.

ЕМ>Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?


Виртуальные машины используют аппаратные возможности для изоляции. Если браузеры начнут так делать... Это будет уже браузер-ОС. Хотя, не исключено, что все движется именно в этом направлении. Нужно же как-то появившиеся ресурсы утилизировать.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 19:34
Оценка:
Здравствуйте, cserg, Вы писали:

C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.


Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет, поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 19:43
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>А как ее иначе гарантированно обеспечить в условиях нативного кода?


Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?

R>Виртуальные машины используют аппаратные возможности для изоляции.


Какие аппаратные возможности они используют для изоляции ядерного кода? Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально. А разработчики браузеров, такое впечатление, стремятся снять с себя вообще всякую ответственность.

R>Это будет уже браузер-ОС.


Не нужно браузер-ОС. Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 20:06
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет,

Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.

ЕМ>поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".

И этого недостаточно. Всегда найдется кто-нибудь с флешкой.
Re[8]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 20:12
Оценка:
Здравствуйте, cserg, Вы писали:

C>Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.


Не такая же. В отношении макросов на VB никогда не возникало даже мысли о том, что в разных окнах офиса будут работать макросы из доверенных и недоверенных источников. Там подход примитивный: не доверяешь — не запускай, и все тут. Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности. Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".
Re[9]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 20:27
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>... Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности.

Вот разработчики и позаботились посредством разделения по разным процессам. Другие варианты либо менее надежные, либо более сложные и затратные.

ЕМ>Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".

И пусть лучше грохнется одна вкладка в браузере чем весь браузер.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 20:32
Оценка: 5 (1) +3
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?


Браузер на чем написан? Кто может дать гарантию, что в этом коде нет ошибок приводящих к приколам, типа переполнения буфера и т.п.? Управляемая среда может такую гарантию дать (за исключением ошибок в самой управляемой среде ), но оно пыталось и не взлетело.

R>>Виртуальные машины используют аппаратные возможности для изоляции.


ЕМ>Какие аппаратные возможности они используют для изоляции ядерного кода?


Не заметил, что речь о ядерном коде.

ЕМ>Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально.


Они не бывали, они происходят до сих пор. В 19 и 20 годах были продемонстрированы атаки на VirtualBox и VMware приводящие к побегу из ВМ.

R>>Это будет уже браузер-ОС.


ЕМ>Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.


1. Браузер не состоит из одной лишь ВМ для джиэс.
2. Кто может дать гарантию, что во всем коде браузер нет ошибок? Очевидно — никто.