Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде. Если же оно само решает, какие нужно изолировать, а какие нет, то по каким критериям, и насколько это надежно?
Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).
Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
ЕМ>Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25). ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Если можно чуть что прибивать/перезапускать процессы, то пользователи не заметят, как много разрабы насиньёрили утечек памяти.
Здравствуйте, m2user, Вы писали:
M>Полагаю, так действительно проще контролировать, сколько ресурсов (память, CPU) потребляет та или иная вкладка.
Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации. Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде.
Именно для изоляции и нужно. У меня в лисе количество процессов Isolated Web Co(ntent), примерно, равно количеству активных вкладок. Количество может не биться т.к. браузеры, в целях экономии ресурсов, могут останавливать некоторые (долго неиспользуемые, например) вкладки (процесс, соответственно, убивается, хотя вкладка есть).
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, rudzuk, Вы писали:
R>процесс, соответственно, убивается, хотя вкладка есть
Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.
То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
ЕМ>Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации.
Судя по about:performance — что-то контролируется.
EM> Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?
я подразумевал 1 процесс на одну вкладку.
Хотя вариант 1 процесс на 1 сайт (домен) тоже имеет смысл.
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.
ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?
Здравствуйте, m2user, Вы писали:
M>я подразумевал 1 процесс на одну вкладку.
Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".
Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".
Да.
ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, cserg, Вы писали:
ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта??? C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.
Дык это просто решается. Надо потроха переписать на JS, и всё всем сразу станет хорошо
Заодно и производительность увеличится
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, m2user, Вы писали:
ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
M>А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.
А его тоже на JS надо переписать
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС?
А как ее иначе гарантированно обеспечить в условиях нативного кода? Были, конечно, попытки... Вспомним, хотя бы, сингулярити ос и браузер газель от МС, но это уже не про натив.
ЕМ>Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?
Виртуальные машины используют аппаратные возможности для изоляции. Если браузеры начнут так делать... Это будет уже браузер-ОС. Хотя, не исключено, что все движется именно в этом направлении. Нужно же как-то появившиеся ресурсы утилизировать.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, cserg, Вы писали:
C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.
Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет, поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, rudzuk, Вы писали:
R>А как ее иначе гарантированно обеспечить в условиях нативного кода?
Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?
R>Виртуальные машины используют аппаратные возможности для изоляции.
Какие аппаратные возможности они используют для изоляции ядерного кода? Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально. А разработчики браузеров, такое впечатление, стремятся снять с себя вообще всякую ответственность.
R>Это будет уже браузер-ОС.
Не нужно браузер-ОС. Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет,
Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.
ЕМ>поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".
И этого недостаточно. Всегда найдется кто-нибудь с флешкой.
Re[8]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, cserg, Вы писали:
C>Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.
Не такая же. В отношении макросов на VB никогда не возникало даже мысли о том, что в разных окнах офиса будут работать макросы из доверенных и недоверенных источников. Там подход примитивный: не доверяешь — не запускай, и все тут. Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности. Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".
Re[9]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>... Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности.
Вот разработчики и позаботились посредством разделения по разным процессам. Другие варианты либо менее надежные, либо более сложные и затратные.
ЕМ>Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".
И пусть лучше грохнется одна вкладка в браузере чем весь браузер.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?
Браузер на чем написан? Кто может дать гарантию, что в этом коде нет ошибок приводящих к приколам, типа переполнения буфера и т.п.? Управляемая среда может такую гарантию дать (за исключением ошибок в самой управляемой среде ), но оно пыталось и не взлетело.
R>>Виртуальные машины используют аппаратные возможности для изоляции.
ЕМ>Какие аппаратные возможности они используют для изоляции ядерного кода?
Не заметил, что речь о ядерном коде.
ЕМ>Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально.
Они не бывали, они происходят до сих пор. В 19 и 20 годах были продемонстрированы атаки на VirtualBox и VMware приводящие к побегу из ВМ.
R>>Это будет уже браузер-ОС.
ЕМ>Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.
1. Браузер не состоит из одной лишь ВМ для джиэс.
2. Кто может дать гарантию, что во всем коде браузер нет ошибок? Очевидно — никто.