LINUX.ORG.RU

Google выпустил Native Client SDK

 , ,


0

0

Native Client - это кроссплатформенная технология с открытым исходным кодом от Google, позволяющая запуск нативного кода C/C++ в браузере. SDK основан на GNU Compiler Collection и доступен для Linux, Windows и Mac OS X. Поддерживаемые платформы x86, x86_64 и ARM. Разработчики заявляют, что технология Native Client безопаснее Flash и JavaScript, а так же значительно превосходит их по скорости выполнения. На текущий момент доступны клиент-плагины для браузеров Chrome, Safari, Firefox, и Opera.

>>> Подробности



Проверено: Aceler ()
Ответ на: FAQ, часть 2 от anonymous

У вас в ФАКе несколько принципиальных неточностей. Первое, все инструкции выравниваются до определённого размера (недостаток забивается NOOP'ами) и, соответственно, все переходы. Второе, верификация идёт только один раз, она не рантаймовая, т.е. в сам код не встраивается. Так что будет в случае переполнения стека ещё не ясно

anonymous
()
Ответ на: комментарий от Reset

> запуск каждой вкладки в отдельном процессе в IE сто лет как появилась

А в нормальных браузерах вкладки не падают, поэтому необходимости в этом нет (:

pevzi ★★★★★
()
Ответ на: комментарий от pevzi

конечно, в «нормальных» браузерах падает или встает колом сразу весь браузер, а не отдельная вкладка.

Reset ★★★★★
()
Ответ на: комментарий от pevzi

>А в нормальных браузерах вкладки не падают, поэтому необходимости в этом нет (:

не надо падать - достаточно зависнуть, и приходится убивать и все Х экземпляров «браузера» с Y вкладками в каждом, и почтовик в придачу

yyk ★★★★★
()
Ответ на: комментарий от Reset

> конечно, в «нормальных» браузерах падает или встает колом сразу весь браузер, а не отдельная вкладка.

Ты, извиняюсь, глупый? Я же говорю, в нормальных браузерах вкладки в принципе не зависают и не падают, поэтому необходимости в разделении на процессы нет.

pevzi ★★★★★
()
Ответ на: комментарий от Reset

Ну значит я как-то неправильно пользуюсь браузерами. Мой ff, сколько его юзаю, ни разу еще не зависал и не падал.

pevzi ★★★★★
()
Ответ на: комментарий от anonymous

> Второе, верификация идёт только один раз, она не рантаймовая

сказано ровно это же

т.е. в сам код не встраивается.

туда верификация не встраивается, потому как проверки уже встроены компилятором. верификатор лишь проверяет, есть ли они там.

Так что будет в случае переполнения стека ещё не ясно

падение процесса.

boo32
()
Ответ на: комментарий от Reset

> не верю

Можешь дальше не верить, а можешь выкинуть свой любимый глюкобраузер и попробовать действительно нормальный.

pevzi ★★★★★
()
Ответ на: комментарий от pevzi

самое простое - не глядя «тыц» в ссылку, а там кривой pdf, про попытке отобразить который кривой адобовский плагин вешается в усмерть 8-Е... ну или я устаю ждать :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

а зачем использовать адобовский плагин?

Deleted
()
Ответ на: комментарий от yyk

> а там кривой pdf, про попытке отобразить который кривой адобовский плагин вешается в усмерть

кривой адобовский плагин


Ну ты понял. ССЗБ (:

pevzi ★★★★★
()
Ответ на: комментарий от Reset

> это фф чтоль нормальный? не смеши мои тапочки

Да, именно он. Который не виснет и не падает в отличие от твоего браузера. А что по-твоему нормальное, опера? (:

pevzi ★★★★★
()
Ответ на: комментарий от boo32

> туда верификация не встраивается, потому как проверки уже встроены компилятором. верификатор лишь проверяет, есть ли они там.

Провекри и компилятор никуда не встраивает. Может вы подразумеваете нечто иное под проверками, но во всяком случае это слово в данном контексте звучит многозначно

anonymous
()
Ответ на: комментарий от yyk

+ к FAQ

+ к FAQ:

Общение с внешним миром для NaCl приложения происходит через простейший механизм сообщений, поверх которого уже прикручен SRPC и NPAPI.

Да, коллбэки сделать можно, с потоками работать можно, да и вообще весь IPC там есть. Два NaCl приложения могут общаться сообщениями и даже обещают разделяемую память (но я пока не понял как они этот механизм реализовали на своей сегментации, такое ощущение что это только эмуляция, их песочница, по идее, такого позволять не может). Хардверных исключений и внешних прерываний там нет, но механизм обычных программных исключений использовать можно.

Предельный размер кода NaCl приложения - 256 Мб.

Скорость верификатора - более 30Мб/сек, то есть бесконечно большая =)

Отличная штука.

anonymous
()
Ответ на: + к FAQ от anonymous

[ванга моде]

Кстати, предвижу жуткий баттхерт и негодование от Столлмена по поводу гнусных проприетарщиков, SaaS и NaCl.

Кроме того, предвижу появление извращенцев, которые запихнут User Mode Linux в NaCl =)

[/ванга моде]

anonymous
()
Ответ на: комментарий от Reset

> и виснет и падает и тормозит

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

и еще без туевой хучи плагинов ничего не умеет

А тебе чего надо от браузера? AdBlock, FlashBlock — вот и весь набор. Ты кстати, не сказал, какой браузер ты считаешь нормальным. IE не предлагать.

pevzi ★★★★★
()
Ответ на: комментарий от pevzi

> Ох какой толстенький. Почему интересно у меня все нормально работает?

наверно потому что ты не занимался веб-разработкой

А тебе чего надо от браузера?

Как минимум должна быть нормальная работа с вкладками и возможность смены UserAgent'а чтобы смотреть левые сайты. ФФ это не умеет.

Reset ★★★★★
()
Ответ на: комментарий от pevzi

> Не понял, при чем тут веб-разработка?

при том, что если ты только и делаешь, что смотришь лор, то, естественно, никакие глюки у тебя не всплывут

Reset ★★★★★
()

> x86, x86_64 и ARM
А MIPS?
Если код нативный, то сайт будет работать только в чем-то одном, если разработчики поленятся скомпилить, скажем, модуль для ARM?

Может тогда уж лучше LLVM, он вроде кроссплатформенная

Xenius ★★★★★
()
Ответ на: комментарий от Reset

> при том, что если ты только и делаешь, что смотришь лор, то, естественно, никакие глюки у тебя не всплывут

Ты хочешь сказать, у тебя вкладки падают когда ты тестируешь коряво написанную страницу? (:

pevzi ★★★★★
()
Ответ на: комментарий от pevzi

Ты хочешь сказать, что это нормально?

Reset ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>мне казалось на x86 всегда в одну

А еще си и паскаль в разных порядках в стек кладут аргументы функции, причем с++ может оба способа и свой третий, гибридный

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Xenius

>Если код нативный, то сайт будет работать только в чем-то одном, если разработчики поленятся скомпилить, скажем, модуль для ARM?

Скомпилить мало, надо еще и протестировать. У кого из веб-дизайнеров дома есть dec alpha?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

> А ты включи флеш и увидишь как вкладки падают

Флеш если падает, то отдельно от браузера (: сейчас кстати перестал уже падать.

pevzi ★★★★★
()
Ответ на: комментарий от anonymous

>Второе, верификация идёт только один раз, она не рантаймовая, т.е. в сам код не встраивается. Так что будет в случае переполнения стека ещё не ясно

Она идёт один раз для jmp/call по фиксированным адресам, а для любого перехода по вычисленному адресу должен быть обязательный код проверки. Его наличие проверяется единожды при запуске, ну а сам он гоняется при каждом таком переходе, понятное дело.

В типичной маленькой клиентской программе на C/C++ такие переходы - это коллбеки, например. Их процентное содержание в GNU коде до смешного мало.

Про деталь с выравниванием совсем забыл упомянуть, благодарю.

anonymous
()
Ответ на: комментарий от boo32

>можно предположить ось, в котором все приложения обязаны бы были компилироваться таким компилятором с проверками. и к каждой программе бы цеплялся некий профиль безопасности, который мог бы настраиваться юзером: этому приложению можно в сеть и в каталог /home/user/.app, а вот этому приложению - только картинки рендерить.

Вы не поверите =) Эта ось называется Chrome OS.

Билл Гейтс ругал её за то, что это по сути тупо ядро Линукса + браузер Chrome. А на самом деле... так оно и есть =)

Вся идея Chrome OS в том, что 100% юзер-кода компилируются с этими самыми проверками и работают в браузере с NC. Вот хотите погонять SuperTux, например, в Chrome OS - запускаете специально собранный бинарник в браузере, и вуаля. Не нужно ждать, пока новая версия попадёт в проверенный репозиторий - можете качать любой левый Unstable, или любой проприетарный код (игрушки, фотошопы), он всё равно будет работать в своей песочнице, и ничего вашей системе не способен сделать впринципе.

По умолчанию ни в какие каталоги срать тоже нельзя (доступа к файловой системе нет). Но вы можете замутить плагин для браузера, который будет позволять отдельно доверенным приложениям что-то там делать. Сниффить порты, например =) Но только по вашему разрешению.

anonymous
()
Ответ на: комментарий от anonymous

если это так, то это действительно концептуальная ось. примерно так я представлял себе базовые принципы Идеальной Операционной Системы.

boo32
()
Ответ на: комментарий от Reset

>например, запуск каждой вкладки в отдельном процессе в IE сто лет как появилась

Евгений Ваганыч, вы забыли, когда в ИЕ вообще вкладки появились.

возможность смены UserAgent'а чтобы смотреть левые сайты. ФФ это не умеет.

То же самое. general.useragent.override изкаропке, есть более удобные плагины, и «для смотреть» оно не нужно.

anonymous
()
Ответ на: комментарий от DNA_Seq

> А еще си и паскаль в разных порядках в стек кладут аргументы функции, причем с++ может оба способа и свой третий, гибридный

все это абсолютно пофиг — главное, с чем приходится бороться и терять 3% времени — это проверка адресов возврата; ждем процессоров, в которых это будет аппаратно (тем более что это пол раза плюнуть)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Legioner

> Во что будет компилиться конструкция char *p; ...; ++p; ?

не знаю, но подозреваю что в p = (char*) (++(int)p);

а к чему вопрос?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Legioner

>Во что будет компилиться конструкция char *p; ...; ++p; ?

В то же, во что и раньше (+ nop'ы на выравнивание, ок). Никто не проверяет, затёрли вы своими char'ами кусок стека или нет. Всем пофиг, как там внутри работает программа, за какие пределы она вылазит, и чем это ей грозит. Можете хоть весь стек себе запороть - ваше дело.

Что проверяется, так это код, который потом где-то в другом месте делает переход (при выходе из вашей функции, например). Запороли стек - сами себе злые буратины. Ваша программа будет работать некорректно. Но гарантируется, что это останется её личным делом - никаких случайных или намеренных вызовов системных функций не случится, никакая память чужого процесса не будет испорчена, никакие файлы на вашем компьютере не будут изменены.

Пример:

void foo() { int *m[10]; for (int i = 0; i < 100; i++) { m[i] = (int *)MY_EVIL_ADDRESS_TO_CALL_SYSTEM_FUNCTION; } }

Вы запороли стек, ок. Ваши проблемы. На выходе из функции произойдёт переход по запоротому адресу возврата, который будет обгрызен специальными инструкциями, чтобы переход произошел не в системную функцию, а куда-то внутрь вашей программы. Верификатор проверяет именно наличие этой обгрызалки. Если обгрызалки есть везде, остальное - не его проблемы.

Результат выполнения кода выше - fail, но с системой ничего не случилось. В худшем для пользователя случае ваша вкладка в браузере повиснет. Он закроет её, и забудет.

anonymous
()
Ответ на: комментарий от anonymous

>void foo() { int *m[10]; for (int i = 0; i < 100; i++) { m[i] = (int *)MY_EVIL_ADDRESS_TO_CALL_SYSTEM_FUNCTION; } }

Пользуясь случаем передаю луч поноса парсеру этого форума.

anonymous
()
Ответ на: FAQ, часть 2 от anonymous

> дрова разве что должны быть не кривыми, привет ATI
Чем вам не нравятся дрова ATI?
Кстати, насчет выравнивания — почему именно 16 байт? Не 8, не 32, не 24 или 12?

Xenius ★★★★★
()
Ответ на: комментарий от boo32

> можно предположить ось, в котором все приложения обязаны бы были компилироваться таким компилятором с проверками. и к каждой программе бы цеплялся некий профиль безопасности, который мог бы настраиваться юзером: этому приложению можно в сеть и в каталог /home/user/.app, а вот этому приложению - только картинки рендерить.
ОС с проверками не нова — например, хоть мне и неприятно это произносить, M$ Singularity... Идею же ограничений отдельных программ я высказывал в теме какой-то.

Если объединить такие идеи, пожалуй будет что-то интересное.

Xenius ★★★★★
()
Ответ на: комментарий от yyk

>скачиваемые бинари как-то могут вызывать друг-друга? Т.е. можно ли организовывать код в библиотеки/пакеты/хрен его знает что? Возможность «калбэков» внутри бинаря есть?

Динамически подключаемые библиотеки кагбе есть. Специфические, но вся нужная функциональность присутствует. Плюс, разумеется, код библиотек тоже верифицируется. Подключить что-то не-NC можно только посредством плагина для браузера. Собственно так подключается нативная поддержка OpenGL.

И на сколько «богата» стандартная библиотека? Для чего пригодна - только для числодробилки, или ещё для чего?

Стандартные функции кастрированы до упора. Для простоты можете считать, что нативному коду можно всё то же, что можно обычному JS-коду в браузере.

Рисовать на страничку (в том числе и через нативный OpenGL почти без дополнительных тормозных прослоек, если поставлен плагин) - да. Играть звук/музыку - да. Иметь доступ к микрофонам/вебкамерам - согласно настройкам вашего браузера. Не хотите - не будет. Разрешили - будет. Отсылать данные на какой-нибудь сервер - да. Иметь доступ к каким-либо файлам - нет, никогда и ни при каких обстоятельствах. Если очень надо, то через специальный плагин в браузер, отдельно ручками разрешайте. Chrome OS, к примеру, вообще stateless и не мучается - файлы не то, что не модифицируются - сама идея модификации локальных файлов считается концептуально неправильной для кода, к которому нет доверия. Уж если песочница, то песочница.

Идея, как в любых современных Web-приложениях - код работает только с тем, что вы сами ему скормили, по собственному желанию и через интерфейс браузера.

Такая кастрированность имеет свои причины - если допустить хотя бы один архитектурный просчёт, получится новый ActiveX - рассадник вирусов и траянов, вор личных данных и любимец Майкрософта. Повторения этого ужаса, понятное дело, никто не хочет. Даже в ущерб удобству.

anonymous
()
Ответ на: комментарий от anonymous

> запускаете специально собранный бинарник в браузере, и вуаля
А если интернеты по GPRS?

любой проприетарный код

А это уже плохо, проприетарного кода вообще быть не должно

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

> А если интернеты по GPRS?

Кэшировать единожды загруженные файлы придумали ещё в прошлом веке, так что не каждый запуск надо фотошоп перекачивать. Но если у кого-то совсем всё плохо, технология просто не для них. В Таджикистане, говорят, и с электричеством не везде хорошо, но не писать же это в баглист Линукса («ну а чё, не работает же ваш линупс»).

А это уже плохо, проприетарного кода вообще быть не должно

Юношеский максимализм detected. Не нравится - не используй. Или ты хочешь и другим запретить? Обзвони тогда все крупные софтверные фирмы и объясни им, что они должны работать забесплатно, потому что у тебя нету денег. Отпишись о результатах.

anonymous
()
Ответ на: комментарий от Xenius

про singularity знал и раньше, но это ближе к джаве/моно, ежели к NaCl, имхо.

boo32
()
Ответ на: комментарий от anonymous

>Юношеский максимализм detected.

Тем не менее, иметь возможность фильтрации загружаемого кода по лицензии было бы неплохо. Как раньше предлагал Столлман для javascript, afair.

anonymous
()
Ответ на: комментарий от anonymous

>Тем не менее, иметь возможность фильтрации загружаемого кода по лицензии было бы неплохо.

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

Игрушки те же. У вас выдались свободные полчаса, курить уже не хочется, почитать нечего. Захотелось убить пару монстров в красивенькой стрелялке. Открыли браузер, постреляли по OpenGL'ным моделькам, закрыли. Какая разница, под какой там лицензией что вышло? Зачем какому-то левому фильтру запрещать вам побегать в эту игрушку?

anonymous
()
Ответ на: комментарий от Xenius

Детали про выравнивание

>Чем вам не нравятся дрова ATI?

Кстати, насчет выравнивания — почему именно 16 байт? Не 8, не 32, не 24 или 12?

Меня тут поправили — 32 байта, а не 16. Почему? Ну, а почему бы и нет =)

Почему не 12 или 24 — потому что это не степени двойки. Гораздо проще проверить/занулить n младших битов, чем проварять делимость числа на 12.

Почему теперь аж 32 — потому что попробовали разное, и убедились, что так код раздувается меньше всего, и влезают все возможные инструкции. Это не «оптимальное число для любого кода на планете». Это — оптимум для того кода, на котором тестировали Native Client (всякий разный open source).

Вкратце, в чём суть всей этой возни (это не столько вам, сколько для других, не обижайтесь) — хочется иметь возможность проверить весь код. Для этого его нужно дизассемблировать. Беда x86 в том, что инструкции имеют переменную длину, и поэтому результат дизассемблирования зависит оттого, с какого места начать его читать (эта проблема, например, начисто отсутствует в ARM, jazelle не в счёт).

Дизассемблировать просто от начала до конца нельзя — известно множество трюков, когда можно прыгнуть в середину длинной инструкции, и что-то нехорошее получить. Множество бинарных обфускаторов кода активно используют подобные приёмы.

В чём идея — сделать так, чтобы какое-то подмножество адресов гарантированно указывало на начало какой-то инструкции, а не на её середину. Выбрали 32 байта. Т.е. любой адрес этой кратности никак не может указывать на середину инструкции, это всегда гарантированно её начало, с которого можно начать дизассемблинг, и верифицировать весь 32-байтный блок.

Это не значит, что код «mov AX, BX» теперь занимает 32 байта. Код по-прежнему плотно упакован, а nop’ы добиваются только в том случае, если какая-та инструкция приходится на стык блоков.

Что получаем — мы всегда можем дизассемблировать любой код, на который впринципе возможен переход.

Что теряем — <nobr>1-2</nobr> байта в среднем на каждом блоке в 32 байта, если не свезло.

Если сделать блоки меньше, получим бОльшие накладные расходы на nop’ы (ну и понятно, что сделать 4 байта, например, на x86 нельзя впринципе — инструкции могут быть гораздо длиннее). Если сделать блоки больше, например, это будет означать, что не одна вызываемая функция не может занимать менее 64 байт (их нельзя упаковать, потому что вызвать можно только начало блока кода), а мелкие функции всё же встречаются довольно часто, да и типичные ветвления кода довольно компактны.

anonymous
()
Ответ на: комментарий от anonymous

>Зачем какому-то левому фильтру запрещать вам побегать в эту игрушку?

Фильтр не левый, он установлен юзером же.

А можно объяснить необходимость чем-нибудь, кроме как религиозными соображениями? Фильтруют обычно нежелательный, отвлекающий контент (баннеры, там)

Опенсорц — не совсем религиозные соображения, правда? Тем более что в теории обычно всегда всё красиво, а как с этим будет на практике еще посмотреть надо:

играет оно в песочнице, развлекает вас, и ни к каким вашим данным доступа не имеет и иметь не может?

anonymous
()
Ответ на: комментарий от Xenius

>Чем вам не нравятся дрова ATI?

Пардон, про дрова для ATI забыл.

Они - мерзость. Вызовы чудовищно-медленны. То, что под виндой летает, под линуксом с этими чудесными дровами на той же машине даёт дай бог чтоб треть FPS. При этом возможны всевозможные визуальные артефакты, которые никто фиксить не собирается, похоже. Играть невозможно. Работать с 3D невозможно (blender под линуксом с ATI лучше даже не ставить, если собираетесь делать что-то сложнее сцены «кубик на фоне шарика»). На машине, с которой я набираю этот пост, даже compiz дёргается, хотя сын когда-то прошел тут Half Life 2 под виндой на 60 fps (железо с тех пор не апгрейдилось). Хотел World of Goo купить, пока была акция, хорошо одумался вовремя. Тут корявый SuperTux задыхается в лагах, куда уж там нормальным играм. Я смотрю на тесты nVidia под линуксом, где производительность от венды не отличается вообще никак, и плачу от зависти.

А вы ещё спрашиваете, чем мне не нравятся дрова для ATI... Говорят, под новые карточки производитель выплёвывает более-менее нормальные проприетарные версии, но мне вот уже рисковать не хочется. Может пройдёт год, и они опять напишут «мы тут подумали, и решили прекратить поддержку вашей Radeon Over9000 HD, идите купите новую железку за $300».

anonymous
()
Ответ на: комментарий от anonymous

>Тем более что в теории обычно всегда всё красиво, а как с этим будет на практике еще посмотреть надо:

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

Вы сейчас настрочили свой пост в браузере, код которого не просто не читали целиком (там много мегабайт), а даже вероятно и не открывали никогда. Вы думаете, его там вылизывают миллионы Столлманов? Да щаз. Гугл ради лулзов засунул в опенсорсный Хромиум счётчик телепортирования коз (погуглите, это забавно), так его чёрт знает через какое-то время кто-то обнаружил. Не в коде, кстати, а на экране. И только потом, значительно позже - в коде.

То, что опенсорс = панацея безопасности - бред. Любой проект больше 100кб размером может содержать баги, которые никто и никогда не вычитает, и которые будут там годами. Многие религиозные гентушники не знают про about:robots в firefox, хотя уверяют, как важно знать, что запускаешь. Пафос, пустой пафос фанатиков.

Вам же взамен предлагают вычитать крошечный опенсорсный верификатор. Возможно, первая программа такого уровня, в коде которой может разобраться кто угодно. Вот это - куда большая гарантия безопасности, чем вера в опенсорс.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.