LINUX.ORG.RU

Поддержка FatELF в ядре

 , ,


1

0

Райан Гордон в рассылке LKML представил патч, осуществляющий поддержку нового формата исполняемых файлов.

FatELF — это формат компоновки, позволяющий хранить в себе набор ELF бинарников под разные архитектуры, аналог технологии Universal Binary в MacOS X. Этот формат позволяет объединять в себе бинарные файлы, отличающиеся разными OS ABI, порядком байт, размером машинного слова и архитектурой процессора. Этот формат поддерживается преимущественно в среде GNU/Linux, но может быть использован и на других unix-like системах, например на BSD, Solaris и т.д.

Основные достоинства данного формата:

  • Дистрибутивы ОС могут иметь один единственный инсталлятор под все доступные платформы при наличии достаточного дискового пространства.
  • Нет необходимости иметь отдельные каталоги /lib, /lib32, /lib64.
  • Сторонние разработчики могут облегчить себе жизнь, публикуя только один deb/rpm пакет под все архитектуры.
  • Можно будет создавать плагины для браузеров и модули ядра, работающие на всех платформах.
  • Возможность создания приложений, бинарные файлы которых могут работать на Linux и FreeBSD без лишнего слоя совместимости.

Оригинальное письмо в рассылке

>>> Сайт FatELF



Проверено: Aceler ()

Ответ на: комментарий от atrus

>1 DVD. Когда берёте конкректные примеры - не забывайте проверять факты. Fedora 11 не занимает весь DVD. Это не говоря уже про то, что далее в rpm внедрено сжатие lzma.

Не весь. Но бОльшую часть. При кратном увеличении объема, требуемого пакетам...

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

>Спокойно, когда толпа лоровцев начинает безапелляционно негодовать - это верный признак того, что идея стоящая и будет внедрена. :)

Это как с попыткой внедрить двоичный реестр вместо /etc?

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

>И обновлять только то, что необходимо.

В многопользовательских играх обязательно обновлять всё для равноправности клиентов

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

>Рябята, в дистрибутивах оно не нужно!!! Там прекрасно собирают и будут собирать под разные архитектуры. Это нужно разработчикам игр

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

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

А сейчас вирусопесателям как-будто очень сложно собрать статический бинарник?

shutty а AppArmor, Selinux... да даже те скудные антивирусы какие есть в данный момент под линукс не создадут ну никаких препятствий твоему статическому бинарнику?

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

>Игры лучше обновлять скачивая бинарник с несколькими архитектурами. Это верно.

Это неверно. Лучше скачивать бинарник под свою архитектуру. И трафик меньше, и места на диске меньше расходуется.

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

А сейчас вирусопесателям как-будто очень сложно собрать статический бинарник?

Да а в случае с FatELF ПО гарантированно заработает... Или пункты «Можно будет создавать плагины для браузеров и модули ядра, работающие на всех платформах.» и «Возможность создания приложений, бинарные файлы которых могут работать на Linux и FreeBSD без лишнего слоя совместимости.» тебя ничем не напрягают?

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

> >И обновлять только то, что необходимо.
> В многопользовательских играх обязательно обновлять всё для равноправности клиентов


Так чего же вы противоречите сами себе? Раз нужно обновлять, то обновляйте.

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

>Так чего же вы противоречите сами себе? Раз нужно обновлять, то обновляйте.

Я себе не противоречу :) Просто использование внутреннего механизма обновлений позволяет избежать более длительного и сложного обновления через менеджер пакетов

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

> При кратном увеличении объема, требуемого пакетам...

Кратного не будет. Очевидно же.

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

>> То же самое и с приложениями -- если это universal binary, то оно будет работать на любом Маке, выпущенном в текущем веке.

> Не надо, PPC уже не поддерживается.

Во-первых, Leopard, а с ним и PPC, будет поддерживаться до следующего мажорного релиза OS X. Во-вторых, есть еще как минимум две архитектуры -- i386 и x86_64.

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

> Это как с попыткой внедрить двоичный реестр вместо /etc?

/me зевает.
Историю надобно знать. Не двоичный, а xml. И рабочие столы в конце концов таки внедрили. А вопрос об их унификации в рамках freedesktop ещё не закрыт.

atrus ★★★★★
()

А чего вы все распыхтелись? Раян Гордон занимается портирование игр в первую очередь и предлагает этот формат в ядро, делая ставку на игры под linux, но никак не на обычные пакеты.

У дистрибутива сферической игры 90-99% места занято ресурсами: текстурами, звуками и прочей шелухой. Внедрение fatELF снимет головную боль многим игростроителям ценой увеличения размера дистрибутива на несколько %.

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

А вчера в серверной мне приснился чудесный сон, как будто я скачал fatelf и в нём были все программы со всеми зависимостями, рыбы, водоросли, медузы, в нём было всё, даже небо, даже Аллах.

gns-respawned
()
Ответ на: комментарий от kraw

Мне что, обязательно ставить тег <sarcasm> чтобы было понятно что это сарказм?

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

> По моим наблюдениям (экспериментировал на жене и сестре), переход на линукс - это всего лишь изменение окошек, с возможностью использовать, прикольные программы для фоток (например digikam) и торрентов (например qbittorrent). А вся эта виндовая шняжка - им не нужна. Для всего остального есть муж и брат.

Это в тех случаях, когда муж сам линуксоид или сочувствующий. Я вот тоже дома один линукс оставил, опенофис поставил, жена согласилась, что не больно-то много чего и поменялось. Но мужья не все такие...

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

По-моему он этот формат предлагает от нефиг делать, потому что вместо этого можно было бы разработать нормальный опенсорсный менеджер пакетов, который отвечал бы всем требованиям, которые у него есть. Но так сделать чуть сложнее, поэтому Райан хочет поместить в ядро хак под названием "толстый эльф".

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

>ну нето чтобы недостатки... он просто ненужен ;)

Уже, кажется, весь топик исписан, где и почему он нужен, но никто так и не предложил достойной альтернативы - одни костыли.

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

как раз fatelf и есть fat костыль.

<troll_mode=off>

А решение простое. Всё равно для fat бинарника нужны сначала бинарники простые под каждую входящую в fat архитектуру. Так можно просто эти бинарники и брать. А инсталлер в виде sh-скрипта думаю будет очень даже неплохо работать на большинстве архитектур и дистрибутивов, и выберет нужный бинарник, если он есть. Если его не оказалось, то каким чудом он появится в толстом бинарнике?

это уже кстати писали в ветке.

<troll_mode=on>

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

>Ведь механизмы обновления остальных програм в ОС для игр не подходят.

Гнилые проприетарные игры. Да и то, если оно работает "с ключиком" (бесплатная закачка плюс плата за доступ, примерно как вов) - то пакеты вполне годятся.

Anarchid
()

даёшь развитие ПМов, а не эти анабиозные идеи!

PayableOnDeath
()

Какое-то нахрен ненужное извращение.

WatchCat ★★★★★
()

Оно, конечно, здорово... Но нафига? Нельзя ли просто разложить бинарники по диреткориям, и статически слинковать, а запуск сделать скриптом на Shell? Можно же. Так нафига эта фигня?

Quasar ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

I-Love-Microsoft> Не будьте такими пессимистами! Как минимум это позволит создать универсальные инсталляторы софта, в том числе и свободного. Не уверен что в таком формате можно делать софт, а инсталлер в самый раз: вставил диск, а там отработал авторан и под любой ОС поднялся ^_^

autorun.sh на что? Запуск под нужной архитектурой нужного инсталлятора - легко. В конце концов FatELF - это та же куча бинарников, только объединённая в один файл.

I-Love-Microsoft> Когда-нибудь вы это оцените...

Ну уж нет. Не надо нам под линуксами вирусню с флэшек.

Quasar ★★★★★
()

Чего то троллей на теме много.

Автору за подачу новости двойка.

принцип то простой, запихиваем к примеру 32 и 64 битные libGL.so в один файл, и ядро уже само решает что из них грузить для конкретной программы.

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

Так, кстати, оно и работает. Но если заменить всё это одним fatelf, хуже не станет. Не говоря уже об установщиках.

Gary ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

I-Love-Microsoft> Умница. А теперь скажи - какая домохозяйка или школьник полезут делать chmod +x? Представь, что инсталлятор ты скачал с официального сайта, а у скачанных с инета файлов как известно флаг x снят.

В свойствах выставит исполнение.

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

shahid> У дистрибутива сферической игры 90-99% места занято ресурсами: текстурами, звуками и прочей шелухой. Внедрение fatELF снимет головную боль многим игростроителям ценой увеличения размера дистрибутива на несколько %.

Скрипт, запускающий бинарник нужной архитектуры, написать проще.

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

>А сырцами распостранять намного проще. И пофиг на архитектуру.

Плохая шутка :)

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

>На самом деле этот формат таки сложнее.

Вы уже портировали пару десятков игр и сделали для себя вывод - скрипт действительно удобнее?

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

Gary> Вы уже портировали пару десятков игр и сделали для себя вывод - скрипт действительно удобнее?

Игры не портировал, но поиграл в те, где такой механизм используется, и при этом в них покопался. Неудобств не вижу.

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

> Нетбуки на процессорах ARM+X86_64. То же самое — прототипы мы уже видели. Маленький слабенький ARM отображает вам интерфейс, почту и браузер, а хотите киношку — запускайте свой i7

Почему бы этот профит не реализовать в самих камнях сразу? А не выпускать нечто "VHS+DVD"? ^_^

critical_error
()

Специально для лоровских критиков, которые по ссылкам не ходят и задают вопросы, которые есть в FAQ.


>Вопрос: Постойте, это же потребует сотни диска?

Ответ: Не факт. Конечно, при соединении двух бинарников ELF размер бинарника на выходе удвоится. На нашем демонстрационном образе виртуальной машины мы сделали это с каждой программой в почти умолчальной установке Убунту. Но на самом деле в
большинстве случаев нет причин делать это вообще со всей системой. Кроме того, на большинстве машин ELF'ы занимают лишь небольшую часть HDD.

>В: А можно будет вытащить из FatELF'а только нужные куски? Если у меня платформа x86, я бы не хотел держать бинарники для PowerPC или еще чего-нибудь.

О: Да. Запустите fatelf-extract новое_имя_файла имя_файла_fatelf i386

>В: Нужно ли будет на запуск FatELF больше памяти, чем на обычный ELF?

О: Нет! Мы решаем, какой кусок нам нужен для имеющейся системы, а остальное выгружаем. В большинстве случаев нам вообще не надо читать части, которые нам не нужны.

>В: Придется ли читать весь FatELF, чтобы его запустить?

О: Нет! Только несколько байт в начале и нужный нам бинарник. Остальные бинарники игнорируются, так что оверхед передачи данных от HDD почти отсутствует.

>В: А можно использовать dlopen(), чтобы открыть разделяемую библиотеку в

FatELF?
О: Да. Если в бинарнике есть версия для нужной платформы, он будет работать, как любая другая разделяемая библиотека.

>В: А binfmt_* эту проблему не решают?

О: Нет. Ядро Linux (и его модули binfmt_*) загружают только бинарники.
Разделяемые библиотеки обрабатываются ld.so. Так что binftm_misc помог бы только если бы мы не подумали о разделяемых библиотеках, а мы о них позаботились.

>В: А разве sh-скрипт, который выбирает бинарник для запуска, не решит эту проблему?

О: Не совсем. Во-первых, не особенно эффективно запускать интерпретатор скриптового языка, чтобы выполнить однострочник, который выбирает нужный бинарник. Во-вторых, это увеличивает вероятность человеческой ошибки. В-третьих,
он не решает проблему несовместимых ABI. В-четвертых, это не сработает, если появятся новые процессоры, способные запускать старые программы. Если скрипт ожидает "i386", а "uname -m" выдаст "i686", скрипт не сработает. Если автор скрипта в 1998-м году не предусмотрел запуск своей 32-битной программы на "x86_64", скрипт тоже не сработает, хотя бинарник полностью работоспособен. Решать эту проблему стабильным, централизованно поддерживаемым кодом проще.

>В: А троянам и вирусам это не поможет?

О: Нет. Запускать нужно только те приложения, в которых вы уверены, вне зависимости от платформ и форматов. FatELF не изменяет этой ситуации ни к лучшему, ни к худшему.

Остальное тут: http://icculus.org/fatelf/

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

Aceler> Нетбуки на процессорах ARM+X86_64. То же самое — прототипы мы уже видели. Маленький слабенький ARM отображает вам интерфейс, почту и браузер, а хотите киношку — запускайте свой i7.

Хотите киношку - покупайте аппарат на ARM Cortex с DSP.

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

icculus> Не совсем. Во-первых, не особенно эффективно запускать интерпретатор скриптового языка, чтобы выполнить однострочник, который выбирает нужный бинарник. Во-вторых, это увеличивает вероятность человеческой ошибки. В-третьих, он не решает проблему несовместимых ABI. В-четвертых, это не сработает, если появятся новые процессоры, способные запускать старые программы. Если скрипт ожидает "i386", а "uname -m" выдаст "i686", скрипт не сработает. Если автор скрипта в 1998-м году не предусмотрел запуск своей 32-битной программы на "x86_64", скрипт тоже не сработает, хотя бинарник полностью работоспособен. Решать эту проблему стабильным, централизованно поддерживаемым кодом проще.

Теперь понятно. Тогда поддерживаю идею.

Quasar ★★★★★
()

А разве питона, c#, java и прочих кроссплатформенных языков - этого мало?

yantux
()

почему не реализовать bind как в Plan9 и биндить исполняемые файлы в нужное место ?

Почему всё барахло нужно тащить в ядро ??? Оно итак уже несоразмерно велико.

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

>Для справок - некоторые игры обновляются раз в несколько дней (в основном, многопользовательские). Логиниться под рутом и синхронизировать репозитории каждые два-три дня из-за одной программы это дело идиотское.

Нет, это нормальная практика. Кроме того, рутом логиниться не обязательно, есть sudo. Также есть пакетный менеджер, который проверяет обновления. Илиотское дело - это сидеть под рутом - это точно.

Deleted
()

Теперь каждый ПО-чих будет продаваться на жестком диске, ибо больше никуда не влезает. За то хардов сколько ... )))) понятно как e-sata пользовать.

Теперь юзеры разгребают гавнище с зависимостями при установке чего угодно, поскольку все смешалось в самолете (двигатели курс считают, гироскопы тягу дают, а пилоты .. сосут), да и самолет уже упал.

Ну включат это в ядро, юзеры посмотрят, обосрут и выкорчуют из ядра.

Чего орать то? Мало что ли подобных идиотизмов было? И где они теперь?

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