LINUX.ORG.RU
ФорумTalks

[LKML] FatELF - аргументы за и против

 


0

0

Как обычно, в LKML началась дискуссия по поводу добавления FatELF в ядро. Райан Гордон показал основные преимущества, которые должна дать поддержка FatELF:

  • Distributions no longer need to have separate downloads for various platforms. Given enough disc space, there's no reason you couldn't have one DVD .iso that installs an x86-64, x86, PowerPC, SPARC, and MIPS system, doing the right thing at boot time. You can remove all the confusing text from your website about «which installer is right for me?»
  • You no longer need to have separate /lib, /lib32, and /lib64 trees.
  • Third party packagers no longer have to publish multiple .deb/.rpm/etc for different architectures. Installers like MojoSetup benefit, too.
  • A download that is largely data and not executable code, such as a large video game, doesn't need to use disproportionate amounts of disk space and bandwidth to supply builds for multiple architectures. Just supply one, with a slightly larger binary with the otherwise unchanged hundreds of megabytes of data.
  • You no longer need to use shell scripts and flakey logic to pick the right binary and libraries to load. Just run it, the system chooses the best one to run.
  • The ELF OSABI for your system changes someday? You can still support your legacy users.
  • Ship a single shared library that provides bindings for a scripting language and not have to worry about whether the scripting language itself is built for the same architecture as your bindings.
  • Ship web browser plugins that work out of the box with multiple platforms.
  • Ship kernel drivers for multiple processors in one file.
  • Transition to a new architecture in incremental steps.
  • Support 64-bit and 32-bit compatibility binaries in one file.
  • No more ia32 compatibility libraries! Even if your distro doesn't make a complete set of FatELF binaries available, they can still provide it for the handful of packages you need for 99% of 32-bit apps you want to run on a 64-bit system.
  • Have a CPU that can handle different byte orders? Ship one binary that satisfies all configurations!
  • Ship one file that works across Linux and FreeBSD (without a platform compatibility layer on either of them).
  • One hard drive partition can be booted on different machines with different CPU architectures, for development and experimentation. Same root file system, different kernel and CPU architecture.
  • Prepare your app on a USB stick for sneakernet, know it'll work on whatever Linux box you are likely to plug it into.
  • Prepare your app on a network share, know it will work with all the workstations on your LAN.

Алан Кокс не согласился с доводами Райана Гордона и разобрал всё по пунктам:

От: 	Alan Cox <alan@lxorguk.ukuu.org.uk>
Кому: 	Ryan C. Gordon <icculus@icculus.org>
Копия: 	Måns Rullgård <mans@mansr.com>, linux-kernel@vger.kernel.org
Тема: 	Re: FatELF patches...
Дата: 	Mon, 2 Nov 2009 00:01:47 +0000 (05:01 YEKT)


Lets go down the list of "benefits"

- Separate downloads
        - Doesn't work. The network usage would increase dramatically
          pulling all sorts of unneeded crap.
        - Already solved by having a packaging system (in fact FatELF is
          basically obsoleted by packaging tools)

- Separate lib, lib32, lib64
        - So you have one file with 3 files in it rather than three files
          with one file in them. Directories were invented for a reason
        - Makes updates bigger
        - Stops users only having 32bit libs for some packages

- Third party packagers no longer have to publish multiple rpm/deb etc
        - By vastly increasing download size
        - By making updates vastly bigger
        - Assumes data files are not dependant on binary (often not true)
        - And is irrelevant really because 90% or more of the cost is
          testing

- You no longer need to use shell scripts and flakey logic to pick the
  right binary ...
        - Since the 1990s we've used package managers to do that instead.
          I just type "yum install bzflag", the rest is done for me.

- The ELF OSABI for your system changes someday?
        - We already handle that

- Ship a single shared library that provides bindings for a scripting
  language and not have to worry about whether the scripting language
  itself is built for the same architecture as your bindings. 
        - Except if they don't overlap it won't run

- Ship web browser plugins that work out of the box with multiple
  platforms.
        - yum install just works, and there is a search path in firefox
          etc

- Ship kernel drivers for multiple processors in one file.
        - Not useful see separate downloads

- Transition to a new architecture in incremental steps. 
        - IFF the CPU supports both old and new
        - and we can already do that

- Support 64-bit and 32-bit compatibility binaries in one file. 
        - Not useful as we've already seen

- No more ia32 compatibility libraries! Even if your distro
  doesn't make a complete set of FatELF binaries available, they can
  still provide it for the handful of packages you need for 99% of 32-bit
  apps you want to run on a 64-bit system. 

        - Argument against FatELF - why waste the disk space if its rare ?

- Have a CPU that can handle different byte orders? Ship one binary that
  satisfies all configurations!

        - Variant of the distribution "advantage" - same problem - its
          better to have two files, its all about testing anyway

- Ship one file that works across Linux and FreeBSD (without a platform
  compatibility layer on either of them). 

        - Ditto

- One hard drive partition can be booted on different machines with
  different CPU architectures, for development and experimentation. Same
  root file system, different kernel and CPU architecture. 

        - Now we are getting desperate.

- Prepare your app on a USB stick for sneakernet, know it'll work on
  whatever Linux box you are likely to plug it into.

        - No I don't because of the dependancies, architecture ordering
          of data files, lack of testing on each platform and the fact
          architecture isn't sufficient to define a platform

- Prepare your app on a network share, know it will work with all
  the workstations on your LAN. 

        - Variant of the distribution idea, again better to have multiple
          files for updating and management, need to deal with
          dependancies etc. Waste of storage space.
        - We have search paths, multiple mount points etc.

So why exactly do we want FatELF. It was obsoleted in the early 1990s
when architecture handling was introduced into package managers.

Stay tuned!

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

>затем, что на сегодняшний момент у подоляющего большинства процессоров персональных компьютеров, находящихся на руках у пользователей, эта архитектура?

Это она у тебя, застрявшего в 2002 году. Современные игры для ПК подразумевают 64-битный процессор. И даже не из-за каких-то там оптимизаций, а потому что 32-битных такой мощности уже не делают.

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

> И да, на винде вроде же ничего подобного нет, почему это не отпугивает игрописателей? Не в ту сторону ты смотришь.

Плюсую. В Windows как и Linux принята схема установки программ, в первом инсталляторами, во втором - пакетными менеджерами. В Apple толстый бинарь нужен только для уродливого перетягивания мышью iApplication.app себе на диск.

Dendy ★★★★★
()
Ответ на: Решение несуществующей проблемы. от Camel

>Игроделы не осиливают упаковку своих поделий в deb и создание репозитариев -- в топку таких игроделов

Миллион пакетов и скриптов готовить никому не интересно. Следить за всеми этими форматами, изменениями в API пакетного менеджера и т.п. Нет ни одного производителя проприетарного ПО, который стал бы этим заниматься.

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

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

Сейчас скорее наоборот. Да и профита от консолей больше - отвалил кучу бабла микрософту или сони, зато не надо сношаться с тьмой виндовых проблем

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

>В Линуксе чуть меньше чем 100% софта ставится из репозиториев

В другом треде уже объяснили, что менеджер пакетов - вещь не всемогущая.

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

в теории - да. а на практике только ppc + x86 видел

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

Миллион пакетов и скриптов готовить никому не интересно. Следить за всеми этими форматами, изменениями в API пакетного менеджера и т.п. Нет ни одного производителя проприетарного ПО, который стал бы этим заниматься.

А это и не нужно. Достаточно просто выложить универсальный тарболл, в котором лежат бинарники (x86 и опционально amd64), а так же добавить в лицензию пунктик, позволяющий перепаковывать эти бинарники как угодно. Это позволит мейнтейнерам разных дистрибутивов завернуть бинарники в формат любимого менеджера пакетов и засунуть в репозиторий «non-free».

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

>Это позволит мейнтейнерам разных дистрибутивов завернуть бинарники в формат любимого менеджера пакетов и засунуть в репозиторий "non-free".

Осталось ещё регулярно платить мейнтейнерам за то, чтобы они вовремя всё это делали

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

Осталось ещё регулярно платить мейнтейнерам за то, чтобы они вовремя всё это делали

Во время/не во время - это уже не техническая проблема =). Ведь бинарные драйвера же успевают опакетить почти сразу после релиза.

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

> Осталось ещё регулярно платить мейнтейнерам за то, чтобы они вовремя всё это делали

Если заинтересованы в платформе, можно и самим осились сборку, например для Ubuntu и openSUSE Build Service. Для остальных оставить мейнтейнерам конкретных дистрибутивов.

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

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

>Во время/не во время - это уже не техническая проблема =). Ведь бинарные драйвера же успевают опакетить почти сразу после релиза.

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

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

>И не забывайте про такую сильную вещь пакетных менеджеров как защищённость от вредоносного кода

Lolwut? Вы считаете, что если программа находится в основном репозитории, она никогда не навредит системе?

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

Возглавить.

>Миллион пакетов и скриптов готовить никому не интересно. Следить за всеми этими форматами, изменениями в API пакетного менеджера и т.п. Нет ни одного производителя проприетарного ПО, который стал бы этим заниматься.

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

Camel ★★★★★
()
Ответ на: Возглавить. от Camel

>Придётся всем вместе собраться и порешить как должен вести себя стандартный пакетный менеджер

Я вижу, что давно уже порешили - разные rpm-пакеты под разные дистрибутивы и даже разные версии дистрибутивов.

>Почему вы считаете, что пользователь должен прогибаться под криворуких игроделов,а не игроделы договариваться друг с другом и дистростроителями?

Так пользователь то здесь причём? Игроделы договорятся с дистростроителями о поддержке FatELF, пользователь ничего и не заметит

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

> Современные игры для ПК подразумевают 64-битный процессор.

Назовешь хоть пяток исключительно 64-битных игр?

tailgunner ★★★★★
()
Ответ на: Возглавить. от Camel

> Придётся всем вместе собраться и порешить как должен вести себя стандартный пакетный менеджер.

Давно уже.

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

> Вы считаете, что если программа находится в основном репозитории, она никогда не навредит системе?

Естественно, если сам репозиторий защищён от саботажа.

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

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

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

Если бы существовала вирусная угроза, внедрение FatELF ничего не изменило бы. Только масштабность вирусной атаки, с половины процента персональных компьютеров до одного.

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

> Сама наивность. Никто не проверяет программы на наличие вредоносного кода при помещении их в репозиторий.

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

> Тем более закрытые.

Они делают собственные репозитории.

> Если бы существовала вирусная угроза, внедрение FatELF ничего не изменило бы.

И снова - не обобщайте. Вы я полагаю один из привежеников традиционного расспространения Виндовз-программ через самопальные инсталлеры и опрометчиво думаете что отсутствие вирусов в Линукс обусловлено его относительно небольшой расспространённостью.

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

>Ложат в виде исходного кода

В репозитории 99% дистрибутивов "ложат" скомпилированную в билдсервисе программу. Через билдсервис проходит колоссальное число строчек кода и их никто не читает.

>При этом всегда известно кто виноват в конкретном браке

И кто же? Автор программы, билдсервис или мейнтейнер репозитория? Кто мешает использовать цифровые подписи и чексуммы для FatELF (в принципе, это сейчас используется в репозиториях)?

>Но даже если ты случайно заразился из репозитория - дальше тебя зараза не пойдёт, достаточно перекрыть вентиль на репозитории.

Вы давно с виндовса? Часто уже "заражались из репозитория"?

>Они делают собственные репозитории.

Нет, почти никто не делает. Или есть примеры?

>через самопальные инсталлеры

Самопальные инсталлеры позволяют вести поддержку ПО с такой оперативностью, которую не может предложить менеджер пакетов там где это нужно.

>опрометчиво думаете что отсутствие вирусов в Линукс обусловлено его относительно небольшой расспространённостью

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

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

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

Но если к тому времени вендоры проприетарного ПО навяжут идеологию толстых бинарей и самопальных инсталлеров мейнтейнерам дистрибутивов - пиши пропало. Требование к поддержке FatELF станет уже не опциональным, а обязательным для установки конкретного ПО. На сайтах станут выкладывать бинари, которые перекочуют в торренты и так далее. И Линукс рискует стать таким же рассадником вредоносного ПО, который сейчас мы наблюдаем в Windows.

> Кто мешает использовать цифровые подписи и чексуммы для FatELF (в принципе, это сейчас используется в репозиториях)?

Вендоры проприетарного ПО. Если подпись будет опциональна, а так оно и будет - это будет слабое звено. Юзев скачав неподписаный бинарь просто запустит его и проклацав возможные предупреждения системы запустит троян.

> Вы давно с виндовса? Часто уже "заражались из репозитория"?

Не понял о чём это вы.

> Нет, почти никто не делает. Или есть примеры?

Да, БилдСервис в Сусе, хотя интерфейс пользователя жуткий, как в принципе и большинство в Сусе. Надеюсь когда-нибудь это выльется в нормальную реализацию. Те же репозитории Nvidia. Сторонние репозитории в Убунту, которые подключаются довольно нетривиально, но это лишь фронтенд, который при необходимости Каноникал подправит.

> Отсутствие вирусов обусловлено архитектурой линукса и системой прав.

Ерунда. Разговор про типичного пользователя, у которого не стоит noexec на домашней директории, он даже не знает что это. Запустив вирус от пользователя - он продолжит прекрастно жить в юзерспейсе.

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

> Толсто :) Ты пост мой прочитай целиком

Тонко. Разъяснишь эту фразу:

> Современные игры для ПК подразумевают 64-битный процессор.

в контексте спора о _многоархитектурном_ формате исполняемых файлов?

tailgunner ★★★★★
()

ЗАКОПАТЬ!!1 как можно скорее и глубже.

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

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

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

iley
()

Готов лично сплясать на могиле FatELF.

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

>>Это позволит мейнтейнерам разных дистрибутивов завернуть бинарники в формат любимого менеджера пакетов и засунуть в репозиторий "non-free".

>Осталось ещё регулярно платить мейнтейнерам за то, чтобы они вовремя всё это делали


Алан Кокс чОтко написал: самое большое "платить" будет тестерам за тестирование на каждой из поддерживаемых архитектур. Переупаковкать бинарники в deb/rpm - это капля в море.

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

> А для многопользовательских игр это может быть критично - протупили мантейнеры пару дней

Такие игры обновляют сами себя в хомяк к юзеру. При каждом запуске/подключении к игровому серверу. И FatELF тут ничего не упрощает.

Manhunt ★★★★★
()

Fat ELF....

если эльфы толстеют, то они или зеленеют и становятся орками... или у них вырастают клыки и они становятся троллями...

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

> Под какую бы платформу программа не компилировалась, AST будет одно и то же.

Неа. Под разными архитектурами в системных хидерах сработают разные дефайны.

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

Или, как вариант, для разных архитектур - разные хидеры. По-любому AST разъедется.

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

>>Они делают собственные репозитории.

>Нет, почти никто не делает. Или есть примеры?


Opera Software. NVidia. Только у тупняков из adobe до сих пор кривожопые блобные инсталлеры.

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

>Я ставил рпм многолетней давности. Всё работало. ЧЯДНТ?

Повезло.

linux4ever
()

А никто не задумывался, что во много раз увеличенные бинарники надо еще прочитать и без того тормознутым ЖД?

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

> А никто не задумывался, что во много раз увеличенные бинарники надо еще прочитать и без того тормознутым ЖД?

Разве их читают превентивно? Отмапить бинарник на память, и пусть по page fault подгружает нужные участки кода. Хотя эффективность read-ahead дискового кэша может страдать.

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

>в контексте спора о _многоархитектурном_ формате исполняемых файлов?

Ты читал на что этот пост был ответом?

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

>Да, БилдСервис в Сусе, хотя интерфейс пользователя жуткий, как в принципе и большинство в Сусе

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

>Запустив вирус от пользователя - он продолжит прекрастно жить в юзерспейсе

То-то разгул вирусни в лялихе идёт

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

>> Запустив вирус от пользователя - он продолжит прекрастно жить в юзерспейсе

> То-то разгул вирусни в лялихе идёт


Т.е. по сути возразить нечего?

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

>А никто не задумывался, что во много раз увеличенные бинарники надо еще прочитать и без того тормознутым ЖД?

У "сферической игры в вакууме" бинарик занимает доли процента от объёма всех данных.

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

У них кроме deb.opera.com больше ничего и нет

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

>Такие игры обновляют сами себя в хомяк к юзеру. При каждом запуске/подключении к игровому серверу. И FatELF тут ничего не упрощает.

И апдейтер, и клеинт с библиотеками можно заменить на один FatELF и поддерживать сразу большое число архитектур без скриптов выборки нужной.

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

Этим ничего не упрощается. Ни тестирование, ни разработка. Разложить для апдейтера файлы по архитектурным папочкам - это вообще не проблема. Проблема - это чтобы твоя closed-source поделка хоть как-то могла работать с разными версиями шейдеров, с разными версиями so-шек, разной glibc. Получается огромный зоопарк поддерживаемых конфигураций. При слове "поддерживаемых", в голове напротив каждой из конфигураций должен возникать значек "$$$$$". Экономия, которую теоретичкески мог бы дать FatELF - это все равно, что экономия на целофановых пакетиках на фоне стоимости квартиры :) Вместо сколько-нибудь существенной экономии FatELF привнесет только ненужную энтропию в уже существующую кросс-архитектурную систему. FatELF - вреден для FOSS.

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

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

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

>Не проще ли в рамках FatELF делать один дистрибутив для всего?
Не проще. Тот факт, что ты можешь в один бинарник запихнуть несколько платформ никак не влияет на возможность запуска программ написаных под линукс на солярках. Тебе все-равно нужен слой совместимости.

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

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

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