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

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

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

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

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

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

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

И слава хосспади что решения связаные с ядром принимают такие люди как Алан Кокс, который зрит в корень. А не вчерашний пользователь Windows, ведущийся на рекламную мишуру.

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

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

Только что взял с полки не сферическую, а вполне конкретную случайную игру - Бетмен. Бинарники под одну единствунную x86 занимают 58.7 Мб. Боюсь представить - если подобные игры под начнут расспространять толстыми эльфами под все платформы, то сколько будут весить патчи?

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

>Так потому и не идёт, что текущая политика популярных дистрибутивов - запрещать исполнять скачаный неизвестно откуда код

Во-первых - это 4.2. Я откуда угодно качаю и исполняю любой код. Во-вторых, это модель анального отгорожения по типу Windows (на 64-битную висту, емнип, невозможно было поставить не подписанные дрова).

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

60 мегабайт это очень мало. Десять лет назад были игры и с данными по 1.5 Гб, а какой-нибудь февральский Project Origin занимает на хдд уже 13 Гб. Учитывая обязательные патчи/DLC размером с гигабайт, лишние 50 метров погоды не сделают.

Gary ★★★★★
()

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

Фигасе! А это какой CPU такое может?

gods-little-toy ★★★
()

Да чё уж там заморачиваться. Даешь один унифицированный бинарь для Linux (все архитектуры * все версии libc), OSX и windows!

gods-little-toy ★★★
()

Мнение разработчика - отстой. Первая проблема - сидящие на 64-битной платформе начнут поставлять бинари, где 32-битную часть никто даже не пытался запустить. Вообще непонятно, что, теперь компилятор будет всегда делать две версии - 32 и 64?

gods-little-toy ★★★
()
Ответ на: комментарий от namezys

> Посмотрите на mac os x, где это работает хорошо и прямо

.. на двух намертво зафиксированных платформах. дебиан 11 вроде поддерживал, не получится ли too-fat-elf?

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

> Во-первых - это 4.2

Пожалуйста, читайте сообщения полностью.

> Учитывая обязательные патчи/DLC размером с гигабайт...

Это очень высокие требования, далеко не у всех есть подобные каналы в интернет. В любом случае ваш пример полностью сливает, потому что непонятно какое преимущество даёт в этом случае FatELF, если программа сама может выбрать нужный патч в интернете, весящий меньше и обновиться.

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

>далеко не у всех есть подобные каналы в интернет

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

>потому что непонятно какое преимущество даёт в этом случае FatELF

Поставка одного единственного, общего для всех обновления. Поставка одного единственного, общего для всех установщика. Слив всех бинарей ни упростит, ни усложнит поддержку, но избавит от лишнего набора скриптов, выбора нужной архитектуры и т.п.

>весящий меньше

Отбросьте этот аргумент уже. Большинство закрытых игр обновляют бинари и библиотеки для всех архитектур. Мало ли что пользователю вздумается запустить. Случайно запустит 32-битный бинарь на 64-битной системе, а он - старый, с критической уязвимостью :)

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

> Поставка одного единственного, общего для всех обновления. Поставка одного единственного, общего для всех установщика.

Почему это должно поддерживаться ядром? Может, еще в ядро качалку с поддержкой докачки встроить?

gods-little-toy ★★★
()

не читал, но осуждаю. ЖирныйЭльф не нужен!

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

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

Не вижу в этом ничего связанного с ЖирнымЭльфом.

> Поставка одного единственного, общего для всех обновления. Поставка одного единственного, общего для всех установщика.

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

> Слив всех бинарей ни упростит, ни усложнит поддержку, но избавит от лишнего набора скриптов, выбора нужной архитектуры и т.п.

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

ЖирныйЭльф не упростит ни разработку, ни распространение. Это все миф. В случае его использования увеличиваются только объемы. Не с проста же от такой модели отказались даже яблочники. Чтобы не быть голословным, обращу ваше внимание на простой пример WorldOfGoo (если вы не успели купить - можете пока еще слить с TPB). Там в архиве 2 бинарника (х86, х64) и скрипт, который надо запускать и который определяет архитектуру и запускает нужный бинарь. В случае с вашим FatELF изменилось бы только то, что эти 3 файла объединили бы в один. всЁ! Ничего хорошего в этом не вижу.

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

>От скрипта на проверку архитектуры это не избавит

Избавит. Выборкой занимается ядро/whatever перед запуском просто читает из файла нужную область

>В случае с вашим FatELF изменилось бы только то, что эти 3 файла объединили бы в один

во-первых, выкинули бы скрипт. Во-вторых, добавление других архитектур стало бы более безболезненным.

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

От скрипта не избавились бы. Его бы просто перенсли в другое место. Лично мне скрипт на 10 строчек не мешает.

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

Вот незадача - скрипты-то пишешь не ты :)

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