LINUX.ORG.RU
ФорумTalks

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


0

0

О, лор!


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

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

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

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

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

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

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

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


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


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

> Я привел ссылки на список фич «надстроек над MSI»

...потому что списка фич собственно MSI ты не знаешь (наверняка пользуешься^Wтыкаешь кнопки d IS или чем-то похожtм).

Список фич - это ответ на вопрос.

Тебя спрашивали о MSI, ты не ответил.

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

> То что могут эти «надстройки» давно может любой пакетный менеджер в линухе.

Кстати, нет. Диалоги при установке - этого практически никто не умеет (да, я знаю о debconf, но это ужоснах).

Другое дело, что IS - это просто pre-install скрипты на огромной дозе стероидов.

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

>То что могут эти «надстройки» давно может любой пакетный менеджер в линухе.

в ближайшем будущем нужно будет сделать пакет для Убунту. Процесс: скачивание с ppa бинарников, пара кусков исходников с гитахаба и переписывание разных системных настроек типа /etc/profile.

важна возможность «наката» и «отката» изменений в системе, плюс выборочная установка и доустановка частей пакета по требованию. Очень круто была бы форсированное обновление компьютеров в домене/локалке с помощью этого пакета.

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

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

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

> левый инсталлер, и теперь говоришь «ну через контрольную панель удаляются же!!11». Какой ламеризм.

Если этот левый инсталлер использует стандартное API для установки/удаления приложений, то чем он хуже того же apt? Главное все совместимо и система знает что и куда установилось.

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

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

За какие такие? За то, что положили новую версию в репу? или за что?

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

> наверняка пользуешься^Wтыкаешь кнопки d IS или чем-то похожtм).

это расово-верный способ делать инсталляторы

Тебя спрашивали о MSI, ты не ответил.


список фич самого MSI не имеет никакого значения в отрыве от тулзы, которой он будет делаться (читай «Install Shield» или «WiX»)

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

> Если этот левый инсталлер использует стандартное API для установки/удаления приложений

А он использует? Об этом оппонент промолчал. Ты берешься утверждать, что использует, или как?

Главное все совместимо

Да, а определение совместимости - «приложение можно удалить через контрольную панель».

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

>> наверняка пользуешься^Wтыкаешь кнопки d IS или чем-то похожtм).

это расово-верный способ делать инсталляторы

список фич самого MSI не имеет никакого значения в отрыве от тулзы, которой он будет делаться (читай «Install Shield» или «WiX»)

Какие эталонно жалкие отмазки.

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

> За то, что положили новую версию в репу? или за что?

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

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

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

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

http://ubuntuforums.org/showthread.php?t=51003

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

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

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

а определение совместимости - «приложение можно удалить через контрольную панель».

Что не так?

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

>ситуация смоделирована, но я бы поступил именно так

а я бы запретил системе обновлять far и все. А если я про это забыл и но сам обновился, то откатился бы назад и опять таки запертил. и не искал бы диск 99 гв. И сидюка то у меня уже года 2-3 нету.

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

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

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

Еще один ушел в отмазки.

а определение совместимости - «приложение можно удалить через контрольную панель».

Что не так?

Не так то, что ты так и не дал гарантии, что приложение, использующее «стандартный API» (если таковой вообще существует) сможет, например, обновить приложение, поставленное через InnoSetup.

Песец. И эти люди рассуждают о динамической линковке.

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

> А это howto, как сделать deb из сорцов.

это плохое howto, закросспосченное более 9000 раз на всевозможных форумах, я видел уже тысячу раз.

в моей проге нет исходников на Си. Там проприетарный блоб, исходники на жаве, и список мест в файлах конфигурации которые надо поменять в зависимости от текущего состояния самих этих файлов конфигурации (т.е. патчи не покатят). И уж тем более там нет никакого configure (хотя ради лулзов можно нафигачить пустой файл =)

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

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

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

>Что не так?

а то что вы как пользователь никогда не ставили на винду вижуал студию 2008, а потом не удаляли ее и все плюшки из установки\удаления. Хотя по нормальному, это должно выполнятся с помощю 1 команды, а не «нажал удалить, подождал, нажал удалить, подождал...». Еще и гуйки для удаления разные... в одной само, сходу удаляется, а в другой еще спрашивает чего-то... вобщем не стандартно ниразу!

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

Заодно вспомним, что в этих торрентах и мейл клиентах Оперы есть много общего кода. И?

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

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

Это как если к тебе придет вендоюзер и скажет: а как скачать одним файлом одновление убунты 10.4 до убунты 10.10, типа как сервиспак для венды. Нету такого? Фууу.

Идиотизм? Идиотизм.

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

> Да, а определение совместимости - «приложение можно удалить через контрольную панель».

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

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

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

вот интересно, а msi вы уже сделали?

за меня это сделал производитель программы. На чем, как - не знаю. Но оно работает. Он даже для Linux это сделал, но установка идет с помощью autopackage, и это надо изменить.

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

>Он даже для Linux это сделал, но установка идет с помощью autopackage, и это надо изменить.

пусть производитель и изменит

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

>> Да, а определение совместимости - «приложение можно удалить через контрольную панель».

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

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

А то, что полученный пакет можно нормально изменить и удалить через панель управления

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

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

Вы бы, кстати, написали бы что такого умеет MSI, чего нет в пакетных менеджерах без пост скриптов. Чего ещё надо бы, что бы было хорошо. Опубликовали где-то. Разработчикам бы намекнули, что так и так.

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

Ну этого нельзя решать в отрыве от самого подхода. Может быть, венда и придет когда-нибудь к системе репов, кто знает. Но пока что МС не решается даже втыкать поддержку обновления сторонних программ во WSUS.

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

> Если в венде вообще есть стандартные программы для работы с пакетами...

есть, целая одна. Называется «установка и удаление». Она же занимается изменением состава пакета. Двумя постами раньше я уже говорил, что она работает. Вам надо что-то еще?

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

Вот теперь понял идею. Damn right! На самом деле мне уже в десятый раз приходится обсуждать эту тему :)

По пунктам:

Динамическая линковка:

  • (+) Оптимально по общей минимизации размера бинарных файлов в системе.

  • (+) Всё таки - это модульность, а модульность это благо.

  • (+) На всех ОС - это основной стандарт линковки.

  • (-) Возможны конфликты версий и зависимостей (dll-hall и иже с ним, помните - mv жаловался (относительно си)).

  • (-) Сложность реализации :)

Статическая линковка:

  • (+) Гарантия что «запустится и будет работать как полагается». Нет проблем версий и зависимостей.

  • (-) Размер - оверхед размера.

  • (-) Минус модульность. Этот подход вполне могут использовать разработчики больших приложений - VirtualBox, например. Широко на уровне системы его применить нельзя, поэтому, кстати у image-based языков есть некоторые проблемы (пользователи не одобряют) в этой сфере.

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

Т.е. сабж. Из си-подобных языков так умеет Ada (как мне говорили - сам я с этим языком никогда не сталкивался). В динамических языках (!важно! - не функциональных) это называется tree shaking (java (тоже - как мне говорили), коммерческие CL).

  • (+) Тот же первый плюс что и у статической линковки.

  • (+/-) Вроде как не очень большой оверхед размера, но программа X может использовать printf и программа Y - его же, при этом в образах будут две версии. С одной стороны плохо, с другой стороны - если это разные printf (неудачный пример - лучше взять какую-нибудь менее стабильную функцию из велосипеда дяди Васи :), тогда то что нужно.

Выводы:

  • Динамическая линковка (shared libraries) - это основа современных систем, модульность потому что. Тут ничего не поделаешь. Например, ls и cp - две программы которые естественно линковать динамически.

  • Избирательная статическая линковка - тоже годная вещь. Но для приложений более больших (не из base system). При этом нужно чтобы будучи в целом «вытрясенными» они к тому же динамически линковались с самыми низкоуровневыми системными shared библиотеками (system и base).

  • ^ т.е. нужно, чтобы два этих способа можно было применить в рамках линковки одной программы.

  • Обычная статическая линковка, в свете вышесказанного, - не нужна.

Проблемы:

  • Сейчас нет инфраструктуры позволяющей в c-world делать shake. Для этого нужно менять весь ABI (!). Например - как вы собираетесь выцеплять бинарный код printf для встраивания в библиотеку при линковке? Я про CL скажу вот что - там image-based/tree-shaking приводят в к крайнем случае к тому, что код невозможно закрыть :) (но это можно легко обойти, конечно).

  • ^ т.е. подобный прогресс может быть осуществлён только всей индустрией. Movement нужен. Так что мы можем расслабится :))
quasimoto ★★★★
()
Ответ на: комментарий от Berluskoni

> тогда привыкай к консоли, раз деньги платят.

нафиг не нужно. Я лучше наваяю графическую утилиту а-ля Install Shield и буду продавать ее %) Учитывая что у нее нет конкурентов (а нет ли?) - покупать будут.

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

Ты прав, я никогда не удаляю установленный софт. Зачем? Правда когда у меня был винт на 400 метров, то я регулярно юзал F8 сначала в нортоне, потом в фаре. Быстро и просто. Универсально. Система не удалит какой-то msvccrt который посчитает своим, ничего не произойдет страшного.

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

Да это в МСДНе написано, бери читай.

Разработчикам бы намекнули, что так и так.

Разработчикам люниксов? А зачем? Им и так неплохо.

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

> а то что вы как пользователь никогда не ставили на винду вижуал студию 2008,

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

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

>Да это в МСДНе написано, бери читай.

Так дела не делаются, молодой человек. Предъявляя претензии неплохо бы конкретно описать, иначе получается «Ваш линупс не работает! Всё не работает, не знаю что, но просто всё не работает‼»

Разработчикам люниксов? А зачем? Им и так неплохо.


Ты негодуешь значит тебе нужно. Когда хочешь что бы что-то было сделано нужно немного пошевелиться, а не валяться пнём.

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

>нафиг не нужно. Я лучше наваяю графическую утилиту а-ля Install Shield и буду продавать ее %)

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

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

>> Если в венде вообще есть стандартные программы для работы с пакетами...

есть, целая одна. [...] Вам надо что-то еще?

Да. Мне хотя бы dpkg, а уж за rpm я бы в ножки поклонился. Ну, простые вещи - список файлов пакета. зависимости, верификация пакетов, обновление...

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

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

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

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

Предъявляя претензии

О каких именно претензиях речь, позвольте полюбопытствовать?

Ты негодуешь значит тебе нужно.

О каком негодовании речь, позвольте полюбопытствовать?

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

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

желаю удачи) может кому и понадобятся ваши наработки.

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

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

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

> список файлов пакета.

да, это вопрос. Но есть нюансы.

1) инсталлятор оперирует не «файлами», а «изменениями». Копирование файла - всего лишь один из видов изменений. Более корректно просить не «список файлов пакета», а ченджсет, который выполняет инсталлятор в ходе каждой из операций.

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

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

Но есть простая конвенция на расположение папок, файлов, ключей реестра, настроек, итп. Идете в program files - вот вам и файлы. Да не какой-то мистический список, а прямо папочка со всеми файлами программы.

зависимости,


всё своё ношу с собой. Или качаю сам, и потом уже ношу с собой. Нет никаких зависимостей, если есть - их нужно устранить.

верификация пакетов,


встроена.

обновление...


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

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

А что, хорошая идея :}

только продавать его не надо, это было так, для красного словца.

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

Гуй для создания деб-пакетов

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

Ты можешь изменить мир, чувак!

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

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

А где противоречие? Смех продлевает мне жызнь, неимоверная глюкавость люниксов меня бодрит.

Кактусоед или таки виндузятник?

Чувааак, ну что за узость мышления? Да, я вендузятник. И да, как и все здесь - я кактусоед.

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

П.Е.С.Е.Ц.

Особенно умилило:

Нет никаких зависимостей, если есть - их нужно устранить.

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

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

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

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