LINUX.ORG.RU
ФорумTalks

Идея новой подсистемы разделяемых библиотек. Критикуем.


0

0

О, лор!


В линухе всю подсистему разделяемых библиотек давно пора менять.

Одних напрягает то, что программа собранная статически держит свою копию кода в памяти. Других напрягают глюки, которые неизбежны при отличии версии библиотеки на 0.001 от версии, применяемой раработчиком. Это две крайности. А в линухе считается православным вариант с глюками.

При этом никто не думает о том, что возможен более другой вариант.

Например, каждая функция в памяти имеет:

- имя библиотеки, в состав которой она входит,
- версию билиотеки, в состав которой она входит,
- длина кода,
- и хеш кода

Запускаемая программа должна содержать все библиотеки, которые ей нужны. Однако, при загрузке программы грузится в память не весь код, а только реализации функций, которых нет в памяти. Быстро сориентироваться загрузчик может по информации об имени, версии, длине, и хешу. Может быть, даже одного хеша будет достаточно. При совпадении хешей можно вразнорядку проверять каждый 2/4/8/16/32... чтобы снизить вероятность коллизий до 0.000000000001%. А можно и все байты проверять - загрузить код и выкинуть, если каждый байт совпадает.

Таким образом, в память будет грузится только то, чего в памяти нет. 90% кода в разных подверсиях библиотек обычно остается неизменным. Значит, подгружаться будет, к примеру, 10% от размера статического бинарника. При этом дается гарантия, что код программы байт в байт соответсвует тому, который был у разработчика. Ну разве это не прекрасно?

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


Вопрос: есть ли какая-то принципиальная ошибка в описанной системе? Я пока не вижу.


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

> В библиотеке XX обнаружена уязвимость. В каждом втором бинарнике используется эта библиотека. Ваши действия по устранению уязвимости?

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

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

> Эппл это уже доказала, повернув юникс лицом к пользователю.
И задницей к админу. Вы ошиблись сайтом.

svu ★★★★★
()
Ответ на: комментарий от no-dashi

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

Угу. После этого ты пускаешь старый Chromium с дырявым вебкитом, и все Epiphany, Midori и прочие конкуероры у тебя начинают использовать дырявый webkit. Мальчик, если ты не понимаешь что такое API, что такое интерфейс, и зачем придумали разделяемые бибилотеки, не лезь в программирование.


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

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

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

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

> Кстати, если ты не в курсе, в гнутом окружении (приплетать сюда все слово линакс не совсем корректно) уже есть способ контроля версий: -Wl,-soname. Если ты о нем не знаешь ССЗБ.

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

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

> Если бы ты был немного грамотнее, ты бы развил идею дальше: каждая прога тащит с собой ОС и запускается в отдельной VM, а копии памяти схлопываются чем-то вроде KSM.

Ну ос собой таскать - это излишество. А вот запускать прогу в отдельной VM - так и делают в сингулярити. Как бы на передовой прогресса, в отличие от линуха.

xintrea
() автор топика
Ответ на: комментарий от svu

>> Старый Chromium будет использовать дырявый вебкит.

Это убивает всю идею нафиг. Ваша идея жестко и неизлечимо сосет по критериям секурити и менеджеабилити.


Зато уделывает в хлам пакетные менеджеры по критериям простоты установки нужных программ и юзабилити.

До тех пор, пока серверную секьюрность в линуховом виде будут огнем и мечем пихать на десктоп, он так и будет повернут к пользователю задом. Гарантирую: если система зависимостей в лялихе сохранится в том виде, в котором она есть сейчас, через 10 лет мы будем наблюдать все тот же 1% на десктопах.

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

>Что вы так узко мыслите, трындец.

Широколобый ты наш, а теперь поясни мне, что мешает держать в системе libmylib.so.1 и libmylib.so.2, если первая кому-то нужна, а вторая ломает бинарную совместимость?

И почему при всей своей широте взгляда ты никак не ответил на вопрос: «что делать, если в рамках исправления ошибок длина и код функции изменились при неизменном интерфейсе»?

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

> А вот запускать прогу в отдельной VM - так и делают в сингулярити.

Какой ты всё-таки дремучий.


А цивилизованный tailgunner не знает, что VM бывают разные, а не только те, которые тупо создают изолированное окружение.

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

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

/me представил типичный bash-скрипт, наполненные grep'ом, sed'ом и awk'ом как минимум на четверть и ужаснулся от того, как такое будет работать, если «каждый процесс запускать в отдельной виртуальной машине».

Мальчег, худей срочно!

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

> А цивилизованный tailgunner не знает

Вежливый tailgunner за ненадобностью забыл больше, чем ты знаешь.

что VM бывают разные

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

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

> а теперь поясни мне, что мешает держать в системе libmylib.so.1 и libmylib.so.2, если первая кому-то нужна, а вторая ломает бинарную совместимость?

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


И почему при всей своей широте взгляда ты никак не ответил на вопрос: «что делать, если в рамках исправления ошибок длина и код функции изменились при неизменном интерфейсе»?


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

xintrea
() автор топика
Ответ на: комментарий от linuxfan

> представил типичный bash-скрипт, наполненные grep'ом, sed'ом и awk'ом как минимум на четверть и ужаснулся от того, как такое будет работать, если «каждый процесс запускать в отдельной виртуальной машине».

Это ты tailgunner расскажи. Он предложил вместо избирательной загрузки использовать виртуалку.

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

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

Выполнение управляемого кода в C#-среде является запуском программы в С# виртуальной машине. Можешь считать это программной VM.

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

>Пакетный менеджер мешает.

Как?

И сложность разгребания такой ситуации тоже мешает.

В чем сложность?

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

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

Естественно, иметь две копии функции в памяти, и пусть у них одинаковый интерфейс, кого это волнует.

Тебе вообще мама даст денег на 64 GB RAM для «учебного ПеКа», который будет в состоянии держать в памяти 20 версий glibc, с десяток версий иксовых библиотек, сотни мультимедийных библиотек ну и где-то по полтора десятка экземпляров всеми любимых gtk+ и Qt?

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

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

> Зато уделывает в хлам пакетные менеджеры по критериям простоты установки нужных программ и юзабилити.
Ни разу. К пакетным менеджерам делаются вполне юзабельные интерфейсы. Более того, эта система куда удобнее макосовой - в каком-то смысле можете считать ее предтечей АппСтора. У Вас к нему претензии по юзабилити есть?

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

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

Выполнение управляемого кода в C#-среде является запуском программы в С# виртуальной машине.

Меня не интересуют твои личные аналогии. Давай цитату и ссылку.

Можешь считать это программной VM.

Я считаю это единой VM для всех приложений.

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

> ты никак не ответил на вопрос: «что делать, если в рамках исправления ошибок длина и код функции изменились при неизменном интерфейсе»?
Он ответил. Ему пофиг на исправления. Убедительный ответ!

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

>Выполнение управляемого кода в C#-среде является запуском программы в С# виртуальной машине. Можешь считать это программной VM.

Меня завораживает твоя волшебная толстота. Ну просто не могу не заметить, что надо быть упертым кликомышкоюзером, чтобы не понимать разницы между интерпретатором (ок, .NET — компилятор байткода) байткода, который ты имел в виду, и виртуальной машиной, эмулирующей железо, о которой подумали остальные.

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

> Аналогично и в венде - скачал софт - оно гарантированно работает.

Кто дает такие гарантии? Оно может работать, а может и нет.

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

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

мсье не знает всех прелестей статической компоновки)

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

> А пользователи винды и мака просто запускают setup...

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

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

>Вот именно, что способ контроля, а не способ доставки кода нужной версии.

способов доставки и так полно

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

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

LD_LIBRARY_PATH и -Wl,-rpath уже не в моде?

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

>мсье не знает всех прелестей статической компоновки)

А ты представь себе, как я, бедный гентушнег, буду собирать топикстартеровскую glibc (сказал бы kdelibs, но я кедофоб к счастью): по сборке на каждую версию, а потом объединение в громадный бинарник с добавлением всяких хешей и размеров. Ахтунг же!

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

> Кстати, несмотря на это Inno всё равно справляется с заявленными фичами. При этом проги, установленные Inno ставятся через setup.exe и удаляются через панель управления, так что всё ОК.

Зависит от скриптописателя. Запросто может не удалить конфиг, лог и прочий мусор. А может и вовсе куски своего же говна оставить.

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

> Microsoft Installer умеет делать в тыщу раз больше

А он умеет удалять программы без гигабайтного кэша в /Windows/Installer? Что в свете обсуждаемой борьбы за место на диске - очень даже забавно.

рпмам и дебам == нестандартизированного хлама


Это в сравнении с зоопарком инсталляторов под винду? Когда иногда проще грохнуть папку в /Program Files вручную? Очень тонко.

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


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

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

в том-то и фишка, что собирать ничего не надо. Разработчики программы могут собрать универсальный пакет со всеми либами, которые будет 1)гаратнтированно работать 2)работать одинаково на любом дистрибутиве. Если ебилда еще не дождались или возникают проблемы, ты просто ставишь этот пакет - профит! а тс идет нафик со своими бреднями

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

>Разработчики программы могут собрать универсальный пакет со всеми либами

Дословный перевод такой: разработчики программы могут предоставить статически собранный бинарник. Чем это хуже каких-то мифических «универсальных библиотек»? btw точно так же можно поставлять все shared-libraries приложения вместе с ним и делать враппер для его запуска с LD_PRELOAD.

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

>разработчики программы могут предоставить статически собранный бинарник

это применимо только в одном случае: когда продукт представляет собой один бинарник. Иначе зависимости будут статически линковаться во все входящие в состав продукта либы и исполняемые файлы

btw точно так же можно поставлять все shared-libraries приложения вместе с ним и делать враппер для его запуска с LD_PRELOAD.

прелоуд - это хак. Вполне достаочно LD_LIBRARY_PATH. Пример: http://doc.qt.nokia.com/4.6/deployment-x11.html

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

> :DDD классно. Ему не сказали что есть mc?

mc по его мнению убог и неудобен. А еще он говорил, что в фаре крутой текстовый редактор, да такой что vim, emacs и прочие рядом не валялись.

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

>Это как если к тебе придет вендоюзер и скажет: а как скачать одним файлом одновление убунты 10.4 до убунты 10.10

Ты главное про гемморой с обновлением программ под вендой не вспоминай. Next-Next-Next просто задолбаешся щелкать.

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

> «Дуют». Макос - это ночной кошмар админа. Там нет централизованной системы обновления софта. И каждая тулза сама отвечает за свои апдейты. В результате, если некая несистемная, но популярная либка должна быть обновлена - нужно отдельно обновлять все приложения, использующие ее. Пэстня.

Аналогичная фигня что и в венде.

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

Я не совсем об этом. Просто если ты хочешь, чтобы твой установочный пакет требовал наличие в системе, например, дотнета2сп1, то это делается уже не средствами MSI. Логика, проверяющая и требующая зависимости, выносится в exeшник, который удовлетворяет зависимости и потом запускает msiйник.

Возможно, на это есть какие-то причины, я не интересовался.

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

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

The.Brutal.Facepalm.1080p.BDRip.mkv

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

> Старый Chromium будет использовать дырявый вебкит. Остальные проги - свой недырявый вебкит, ибо у дырявого и недырявого вебкита версии и хеши разные. Будет две _разных_ реализации в памяти. Осиль уже эту мысль.

Да пердец отличная мысль. Давайте все пользоваться дырявым софтом, это же так классно!

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

В винде не совсем там. Там традиционно гадят в windows\system32, в этом случае есть шанс получить обновление для всех программ. В макосе такой традиции вроде как нет.

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

Мы уже вспомнили этот «геморрой».

Next-Next-Next

Эт зависит от сложности пакета и прихоти его создателя. Поставь на люникс Zimbra, например, или VMWare Server. Поставь на венду гуглохром. Сравни сложность процесса.

Далее, у msiexec.exe ВНЕЗАПНО тоже есть опции командной строки, чувак.

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

>> Одной проге нужна одна версия явы, другой - другая.

что же у вас за ява такая?


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

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

> надо быть упертым кликомышкоюзером, чтобы не понимать разницы между интерпретатором (ок, .NET — компилятор байткода) байткода, который ты имел в виду, и виртуальной машиной, эмулирующей железо, о которой подумали остальные.

Машинный код является байткодом. Скомпилированный ява-код тоже байткод. Скомпилированный .NET-код тоже байткод. Все эти байткоды выполнятся на исполнительном устройстве. Машинный - на микропроцессоре, Ява и Нет - внутри своей среды, в которой тоже есть свой «микропроцессор» - регистровая или стековая машина.

Напомню, что есть даже устойчивое словосочетание - «виртуальная машина Java». Оно появилось не на пустом месте.

xintrea
() автор топика
Ответ на: комментарий от thesis

>Далее, у msiexec.exe ВНЕЗАПНО тоже есть опции командной строки, чувак.

Хорошо... как в венде АВТОМАТИЧЕСКИ обновить нужные мне программы средствами венды? Шоб оно автоматически вывело список всех доступных обновлений, я мог выбрать нужное... и ушел пить чай, а после бы получил полностью раочую систему без Next-Agreed-Next-Next-Finish.

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