LINUX.ORG.RU
ФорумTalks

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


0

0

О, лор!


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

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

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

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

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

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

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

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


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


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

То есть, например, твоей проге нужна Ява - она ее скачает, и установит для себя лично, потом еще одной проге понадобится Ява - будет вторая копия. И ты это считаешь правильным? %)

ну, вообше так и есть.Все таскают с собой JRE.

помнишь, я недавно заводил топик в General, спрашивая, на каких условиях можно вставлять в свою прогу бинарники жавы? :)

Мля, исскусственный интеллект в действии.

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

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

Кто тебя знает, может из любви к искусству (O.o)

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

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

Вот, кстати, слабое место MSI'я - данная задача (проверка требуемых пакетов в системе) решается через костыль. Почему - не знаю.

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

>А зря.

Это новое слово в программировании! не то что в линуксе :DDD

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

>> Мля, исскусственный интеллект в действии.

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

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

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

> слабое место MSI'я - данная задача (проверка требуемых пакетов в системе) решается через костыль.

O_O у него что, нет списка установленных пакетов?

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

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

так ведь в каждой программе своя уникальная логика лицензирования? у кого-то апдейты платные всегда, у кого-то по подуписке, у кого-то апдейстов нет вообще (но есть релизы), у кого-то по договоренности... у кого-то апдейты вообще краденые (апдейты конфигураций для 1С =).

stevejobs ★★★★☆
()

Прежде чем писать подобные посты с «гениальными» идеями, неплохо бы остановиться и подумать. А ещё лучше - провести мысленный эксперимент, с применением бумажки и ручки/карандаша. Обычно после этого этапа 95% идей отправляются на свалку.

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

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

ptah_alexs ★★★★★
()

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

Ты упоротый.

В линухе


К логопеду, упоротое быдло!

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


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

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


Да. Множество ошибок в ДНК топикстартера.

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

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

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

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

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

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

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

stevejobs> ты не понял. Гуй для создания деб-пакетов =)

Графическая морда к checkinstall давно уже есть. Но нафига? Ни одна морда не предусмотрит все действия из консоли. А ежели ты мейнтейнер - ты просто обязан уметь работать с консолью и консольными утилитами.

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

stevejobs> ну, вообше так и есть.Все таскают с собой JRE.

ШТООООООО?????
Скачал жабопрограмму для рентгеноструктурных расчётов. Нету там никакой JRE - на сайте предлагалось скачать JRE, и поставить. Что я сделал не так?

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

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

На каждый пакет своя система управления пакетами? Бред!

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

Про статическую линковку: гарантия запуска есть _только_ на конкретной архитектуре.

Конечно, собирать в один бинарник код для 10 архетектур кажется ещё никто не «додумался» :)

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

Да, но в треде речь (должна) идёт о избирательной статической линковке.

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

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

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

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

единственную нормальную и юзабельную систему.

устунавленную аж на 1% (адын процент) десктопов!111. За 20 лет нормальности и юзабельности!

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

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

Я был о тебе лучшего мнения.

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

> Сижу, никого не трогаю, примус починяю. И тут мне понадобилось запустить FAR. Нажимаю я на иконочку, а ТАМ КРОВЬ ГОВНО КИШКИ НОВОЕ ОБНОВЛЕНИЕ ПРИШЛО АВТОМАТИЧЕСКИ ВСЕ ПРОАПДЕЙТИЛОСЬ. После этого я откапываю диск от 1999 года с фаром и ставлю оттуда, запрещая в фаерволе все обновления (ситуация смоделирована, но я бы поступил именно так)

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

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

Не надоело?

А тебе? заливать про юзабельность, цивилизованность, нормальность...

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

> я ее постоянно ставлю (уже, кстате, вышла десятка), и еще ни разу не удалял.

Не понял. У тебя установлена куча копий студии или ты её удалял переустановкой системы?

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

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

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

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

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

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

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

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

А зачем что-то делать? Ведь всё и со старой версией работает, обновления не нужны!

pevzi ★★★★★
()

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

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

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

> Такое ощущение, что ты вообще не в курсе как в цивилизованных ОС происходит управление пакетами и считаешь что в венде оно самое лучшее.

Самое лучшее управление пакетами - ручное. Работает - не трогай.

simple_best_world_web_master
()

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

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

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

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

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

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

С разморозкой! Любой линкер это делает

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

>Благо можно слить статический бинарник и положить большой орган...

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

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

>ну, вообше так и есть.Все таскают с собой JRE.

только если в вашей венде. К счастью, версии JRE ну очень хорошо совместимы между собой

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

>А Hell - потому, что управлять библиотеками в этом случае невозможно.

LD_LIBRARY_PATH и/или -Wl,-rpath спасут отца русской демократии

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

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

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

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

>Про статическую линковку: гарантия запуска есть _только_ на конкретной архитектуре.

с динамической тоже, ага. Статическая будет даже на glibc 2.2 работать, где формат ликовки другой (проверял лично)

annulen ★★★★★
()

Что вы тут обсуждаете бред местного юродивого? Это же тот, который запускает фар под вайном.

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

> Избирательная статическая линковка.

Т.е. сабж.


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

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

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

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

В 99% случаев они не поставятся - потребуются зависимости, перехерачится половина системы. Если дебы от Ubuntu 9.10 не подходят к Ubuntu 9.04, о какой установке домохозяйкой можно говорить?

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

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

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

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

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

> Прежде чем писать подобные посты с «гениальными» идеями, неплохо бы остановиться и подумать. А ещё лучше - провести мысленный эксперимент, с применением бумажки и ручки/карандаша. Обычно после этого этапа 95% идей отправляются на свалку.

Так в чем ошибочность ТС идеи? Подробно и по пунктам.

xintrea
() автор топика

>длина кода,

и хеш кода

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

С такими идеями предлагаю последовать тебе за идеологом РОД-линакс и серьезно заняться похапе.

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

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

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

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

Если ты не понял, объясняю - речь шла об одной и той же версии Явы.

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

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

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

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

ЗЫ Я сразу понял, что Вам хочется сделать из линуха макос.

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