LINUX.ORG.RU
ФорумTalks

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


0

0

О, лор!


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

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

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

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

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

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

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

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


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


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

и даже не думай заносить путь к бинарнику в PATH

есть два простых способа. Во-первых, внезапно, отредактировать PATH - это делается из гуев, в свойствах «моего компьютера». Но можно поступить проще, и кинуть ярлык программы в какую-нибудь папку, которая уже в PATH, например %WINDIR%\System32.

stevejobs ★★★★☆
()

Реквестирую дух но-дачи и срыв покровов с юзер-агентов.

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

>просто запускают setup...

и превращают систему в натуральную помойку, когда таких сетапов не 3-5, а 50-100. о автообновлении или установке по списку, естественно, можно смело забить.

ты же понимаешь что говно твоя идея, а ты дебил? и как программы между собой связывать, когда каждая норовит хрен знает куда себя засунуть, да ещё в специально указанный пользователем каталог? хотя я забыл, что мы имеем дело с любителями перегруженных комбайнов «всё_своё_ношу_с_собой». А как из консоли обращаться к нужной программе, когда каждая в своём каталоге сидит? полсистемы симлинками заполнить как те недоумки из gobolinux?

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

У Qt Creator тоже, кстати, не густо:

$ ldd qtcreator | grep /usr
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6e3a000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb6ca2000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb6be4000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6b6f000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb6b33000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xb6b2b000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xb6b13000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6b0a000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6adf000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb6aca000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb6abc000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb69cd000)
        libpcre.so.3 => /usr/lib/libpcre.so.3 (0xb69a3000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb697d000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb697a000)
        libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb6978000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb695f000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb695a000)

В отличие от CodeBlocks:

$ ldd codeblocks | grep /usr
        libcodeblocks.so.0 => /usr/lib/libcodeblocks.so.0 (0xb7af2000)
        libwx_gtk2u_richtext-2.8.so.0 => /usr/local/lib/libwx_gtk2u_richtext-2.8.so.0 (0xb7a0a000)
        libwx_gtk2u_aui-2.8.so.0 => /usr/local/lib/libwx_gtk2u_aui-2.8.so.0 (0xb799a000)
        libwx_gtk2u_xrc-2.8.so.0 => /usr/local/lib/libwx_gtk2u_xrc-2.8.so.0 (0xb790c000)
        libwx_gtk2u_qa-2.8.so.0 => /usr/local/lib/libwx_gtk2u_qa-2.8.so.0 (0xb78ee000)
        libwx_gtk2u_html-2.8.so.0 => /usr/local/lib/libwx_gtk2u_html-2.8.so.0 (0xb7854000)
        libwx_gtk2u_adv-2.8.so.0 => /usr/local/lib/libwx_gtk2u_adv-2.8.so.0 (0xb7796000)
        libwx_gtk2u_core-2.8.so.0 => /usr/local/lib/libwx_gtk2u_core-2.8.so.0 (0xb7457000)
        libwx_baseu_xml-2.8.so.0 => /usr/local/lib/libwx_baseu_xml-2.8.so.0 (0xb744d000)
        libwx_baseu_net-2.8.so.0 => /usr/local/lib/libwx_baseu_net-2.8.so.0 (0xb7420000)
        libwx_baseu-2.8.so.0 => /usr/local/lib/libwx_baseu-2.8.so.0 (0xb72ca000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb71be000)
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb6ca4000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb6c1e000)
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb6c03000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb6beb000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb6bab000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb6b6e000)
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb6b6a000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb6b65000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb6aa7000)
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb6aa4000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xb6a9b000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb6a77000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb6a62000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb6a43000)
        libtiff.so.4 => /usr/lib/libtiff.so.4 (0xb69ee000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb69c7000)
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb69bd000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb68ce000)
        libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0xb68cb000)
        libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0xb68c7000)
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb68c2000)
        libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb6856000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb682b000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb681d000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6813000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0xb680b000)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb6805000)
        libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb67fc000)
        libpcre.so.3 => /usr/lib/libpcre.so.3 (0xb67d3000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xb67bb000)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb6794000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb671f000)
        libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb671d000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb6705000)
        libdirectfb-1.0.so.0 => /usr/lib/libdirectfb-1.0.so.0 (0xb669d000)
        libfusion-1.0.so.0 => /usr/lib/libfusion-1.0.so.0 (0xb6695000)
        libdirect-1.0.so.0 => /usr/lib/libdirect-1.0.so.0 (0xb6681000)
        libxcb-render-util.so.0 => /usr/lib/libxcb-render-util.so.0 (0xb667d000)
        libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0xb6676000)
        libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0xb664c000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb6649000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6644000)

Кстати, задиффил сортированный вывод ldd для Opera и QtCreator. И что мы видим? Такие разные программы используют один и тот же набор из 15 (!) библиотек. Остальной зоопарк им в пень не уперся.

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

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

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

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

поступить проще, и кинуть ярлык программы

может мне ещё за программу и кофе сварить?

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

>кинуть ярлык программы в какую-нибудь папку, которая уже в PATH, например %WINDIR%\System32

давай сразу там коллекцию порнуи хранить

thunar ★★★★★
()

Nix package manager

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

http://nixos.org/

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

Заодно вспомним, что в Opera есть Mail и Torrent клиенты, а в 10.60 еще и виджеты...

так-то оно, конечно, так. Да вот только

$ ls -lh /usr/lib/opera/opera 

-rwxr-xr-x 1 root root 18M Sep 7 01:49 /usr/lib/opera/opera


$ ls -lh /usr/bin/konqueror 

-rwxr-xr-x 1 root root 19K Jul 21 01:41 /usr/bin/konqueror 

Сейчас мой /usr/bin/ весит 385Мб. Сколько он станет весить с вашим подходом?

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

ОП тут твердил о крутости установки через setup.exe.

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

значит она и останется @GLIBC_2.11
в version.map добавляются только новые и измененные функции, старые там же и остаются.

Sylvia ★★★★★
()

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

не, ну толсто же

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

> давай сразу там коллекцию порнуи хранить

таки если тебе в PATH необходимо иметь автоматически генерирующуюся коллекцию порнухи - даже не знаю, чем тебе помочь. Спроси добролор?

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

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

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

> и превращают систему в натуральную помойку, когда таких сетапов не 3-5, а 50-100. о автообновлении или установке по списку, естественно, можно смело забить.

И легким движением ./configure; make; make install любой дистр превращается слакварь (ц)

У меня именно так, если што. Автообновление не нужно.

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

Да так же как и сейчас, только будет не 20 пустых вызовов stat, а 200. Позапускай приложения под стрейсом и посмотри на количество «not found». Уже сейчас можно встретить, когда и за 200 вызовов количество переползет.

перегруженных комбайнов «всё_своё_ношу_с_собой»

Приложений «точно будет работать, а не трахать мозг»

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

все в единый бинарник, как в busybox

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

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

> там лет через 5 и нормальный эмулятор терминала появится.

зачем эмулятор терминала, когда можно подключиться к графическому интерфейсу по RDP, и это искаропки?

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


которые, к сожалению, сейчас нифига не удобны. По крайней мере rpm-based это лютая лисичка.
Microsoft Installer умеет делать в тыщу раз больше, чем тупо копировать файлы из архива в место предназначения.
Конечно, к рпмам и дебам можно наваять преинсталлы и постинсталлы, которые в конце концов превратятся в скопище нестандартизированного хлама.
А в венде есть проги, которые позволяют накодить довольно сложный инсталлятор вообще без всяких дополнительных знаний, и преимущественно мышкой.

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

Замечу, что все это потом еще можно будет анализировать и управлять этим, а не думать «что же этот пост-инсталл от васи там натворил»

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

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

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

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

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

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

с этого момента мы начинаем знатный срач на тему «а зачем нужны консольные программы».

ну вот тебе они зачем нужны? печатать список файлов в директории на принтере? :)))

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

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

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

> Хайв. А директории на принтере надо печатать скриншотами, так велит сама техподдержка (боян 2х летней давности)

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

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

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

Ага, и когда нужно нормально настроить систему, то от мышки дым идет. А в линухе, открыл файлик, сконфигурил, сохранил. Все!

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

> А зачем в венде консольные приложения?

Чтобы FAR и MultiEdit работал. FAR для удобства, а MultiEdit для редактирования txt-файлов размером 10-12Gb.

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

лучше, когда удобнее)) отредактировать 1, максимум 2 файла или пол часа по окошкам лазить?!

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

> а MultiEdit для редактирования txt-файлов размером 10-12Gb.

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

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

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

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

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

Наконец-то кто-то это сказал. А то я регулярно ржу с фразочек навроде «у нас в люниксах ого-го, а в винде до сих пор пакетный менеджер не могут сделать».

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

> Что вы конкретно имеете в виду

Много чего.

Читать начиная отсюда: http://www.flexerasoftware.com/products/installshield/features.htm

продолжая здесь: http://ru.wikipedia.org/wiki/Inno_Setup

и здесь: http://ru.wikipedia.org/wiki/WiX

а потом заполировать MSDN.

такие дела.

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

ну на вскидку, если вы уже все это изучили) может ли «пакетный менеджер» от мс обновить все пакеты? все либы свои? а то помнится даже мегаобновление (sp3) шло с ослом 6

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

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

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

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

> может ли «пакетный менеджер» от мс обновить все пакеты? все либы свои?

свои - может. Windows Update постоянно качает какие-то обновления.

А вот чужие пакеты обновлять не будет, и это правильно. Фотошоп, например, обновлять не будет. Ибо новую версию фотошопа надо покупать заново.

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

Install Shield.

насчет Inno ошибся, там всё своё.

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

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

> т.е. если я скачал far*.msi, то Windows Update мне его обновит с зеркала far'а?

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

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

>Программа обновляет себя сама (если умеет это делать).

Вот, а вы говорите что «пакетный менеджер» от мс, что-то может. Если программисту приходится заботится о написании «самообновления», то зачем тогда такой «пакетный менеджер»?

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

> насчет Inno ошибся, там всё своё.

«А как дысал, как дысал» (с) В MSDN посылал...

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

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

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

Я привел ссылки на список фич «надстроек над MSI», потому что именно этими надстройками и создаются инсталляторы. Список фич - это ответ на вопрос.

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