LINUX.ORG.RU
ФорумTalks

Про монструозность

 , ,


0

2

Привет, ЛОР.

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

Но и меня настигло возмездие! Вот только что набрал в уютненьком pacman -S pandoc и получил:

Пакеты (203) ghc-libs-9.0.2-1  haskell-aeson-2.1.0.0-4  haskell-aeson-pretty-0.8.9-99  haskell-ansi-terminal-0.11.3-35  haskell-ansi-wl-pprint-0.6.9-352  haskell-appar-0.1.8-13  haskell-asn1-encoding-0.9.6-195
             haskell-asn1-parse-0.9.5-195  haskell-asn1-types-0.3.4-174  haskell-assoc-1.0.2-167  haskell-async-2.2.4-126  haskell-attoparsec-0.14.4-41  haskell-attoparsec-iso8601-1.1.0.0-17
             haskell-auto-update-0.1.6-282  haskell-base-compat-0.12.2-1  haskell-base-compat-batteries-0.12.2-20  haskell-base-orphans-0.8.7-27  haskell-base16-bytestring-1.0.2.0-47  haskell-base64-0.4.2.4-33
             haskell-base64-bytestring-1.2.1.0-69  haskell-basement-0.0.15-1  haskell-bifunctors-5.5.13-9  haskell-bitvec-1.1.3.0-18  haskell-blaze-builder-0.4.2.2-2  haskell-blaze-html-0.9.1.2-191
             haskell-blaze-markup-0.8.2.8-97  haskell-boring-0.2-4  haskell-bsb-http-chunked-0.0.0.4-326  haskell-byteable-0.1.1-25  haskell-byteorder-1.0.4-24  haskell-call-stack-0.4.0-119
             haskell-case-insensitive-1.2.1.0-170  haskell-cereal-0.5.8.3-1  haskell-citeproc-0.8.0.2-7  haskell-cmdargs-0.10.21-4  haskell-colour-2.3.6-144  haskell-commonmark-0.2.2-23
             haskell-commonmark-extensions-0.2.3.3-6  haskell-commonmark-pandoc-0.2.1.2-92  haskell-comonad-5.0.8-169  haskell-conduit-1.3.4.3-8  haskell-conduit-extra-1.3.6-40  haskell-connection-0.3.1-223
             haskell-constraints-0.13.4-16  haskell-contravariant-1.5.5-3  haskell-cookie-0.4.5-12  haskell-cryptonite-0.30-38  haskell-data-default-0.7.1.1-257  haskell-data-default-class-0.1.2.0-24
             haskell-data-default-instances-containers-0.0.1-36  haskell-data-default-instances-dlist-0.0.1-270  haskell-data-default-instances-old-locale-0.0.1-36  haskell-data-fix-0.3.2-69  haskell-dec-0.0.5-1
             haskell-digest-0.0.1.3-2  haskell-distributive-0.6.2.1-172  haskell-dlist-1.0-192  haskell-doclayout-0.4-18  haskell-doctemplates-0.10.0.2-28  haskell-easy-file-0.2.2-19  haskell-emojis-0.1.2-41
             haskell-erf-2.0.0.0-24  haskell-fast-logger-3.1.1-60  haskell-file-embed-0.0.15.0-1  haskell-generically-0.1-1  haskell-ghc-bignum-orphans-0.1.1-1  haskell-glob-0.10.2-57  haskell-gridtables-0.1.0.0-5
             haskell-haddock-library-1.10.0-180  haskell-hashable-1.4.1.0-32  haskell-hourglass-0.2.12-213  haskell-hslua-2.2.1-14  haskell-hslua-aeson-2.2.1-15  haskell-hslua-classes-2.2.0-32
             haskell-hslua-core-2.2.1-26  haskell-hslua-marshalling-2.2.1-20  haskell-hslua-module-doclayout-1.0.4-64  haskell-hslua-module-path-1.0.3-23  haskell-hslua-module-system-1.0.2-20
             haskell-hslua-module-text-1.0.2-22  haskell-hslua-module-version-1.0.3-20  haskell-hslua-objectorientation-2.2.1-16  haskell-hslua-packaging-2.2.1-12  haskell-hsyaml-0.2.1.1-25
             haskell-http-api-data-0.5-6  haskell-http-client-0.7.13.1-21  haskell-http-client-tls-0.3.6.1-65  haskell-http-date-0.0.11-103  haskell-http-media-0.8.0.0-172  haskell-http-types-0.12.3-274
             haskell-http2-3.0.3-8  haskell-hunit-1.6.2.0-161  haskell-indexed-traversable-0.1.2-2  haskell-indexed-traversable-instances-0.1.1.1-20  haskell-integer-logarithms-1.0.3.1-6  haskell-iproute-1.7.12-45
             haskell-ipynb-0.2-60  haskell-jira-wiki-markup-1.4.0-80  haskell-juicypixels-3.3.7-37  haskell-lexer-1.1-11  haskell-libyaml-0.1.2-262  haskell-lpeg-1.0.3-16  haskell-lua-2.2.1-17
             haskell-memory-0.17.0-34  haskell-mime-types-0.1.1.0-1  haskell-mmorph-1.2.0-5  haskell-monad-control-1.0.3.1-69  haskell-mono-traversable-1.0.15.3-93  haskell-network-3.1.2.7-45
             haskell-network-byte-order-0.1.6-145  haskell-network-uri-2.6.4.1-103  haskell-old-locale-1.0.0.7-30  haskell-old-time-1.1.0.3-30  haskell-onetuple-0.3.1-42  haskell-optparse-applicative-0.17.0.0-17
             haskell-pandoc-lua-marshal-0.1.7-21  haskell-pandoc-types-1.22.2.1-19  haskell-pem-0.2.4-251  haskell-pretty-show-1.10-13  haskell-primitive-0.7.4.0-45  haskell-psqueues-0.2.7.3-49
             haskell-quickcheck-2.14.2-373  haskell-random-1.2.1.1-71  haskell-recv-0.0.0-6  haskell-resourcet-1.2.6-17  haskell-safe-0.3.19-8  haskell-safe-exceptions-0.1.7.3-25  haskell-scientific-0.3.7.0-80
             haskell-semialign-1.2.0.1-87  haskell-semigroupoids-5.3.7-71  haskell-servant-0.19.1-2  haskell-servant-server-0.19.2-3  haskell-sha-1.6.4.4-19  haskell-simple-sendfile-0.2.30-323
             haskell-singleton-bool-0.1.6-7  haskell-skylighting-0.13.1.1-3  haskell-skylighting-core-0.13.1.1-3  haskell-skylighting-format-ansi-0.1-17  haskell-skylighting-format-blaze-html-0.1.1-13
             haskell-skylighting-format-latex-0.1-17  haskell-socks-0.6.1-199  haskell-some-1.0.4.1-1  haskell-sop-core-0.5.0.2-1  haskell-split-0.2.3.5-13  haskell-splitmix-0.1.0.4-110  haskell-statevar-1.2.2-2
             haskell-streaming-commons-0.2.2.5-3  haskell-strict-0.4.0.1-141  haskell-string-conversions-0.4.0.1-138  haskell-syb-0.7.2.2-11  haskell-tagged-0.8.6.1-5  haskell-tagsoup-0.14.8-193
             haskell-temporary-1.3-482  haskell-texmath-0.12.5.4-6  haskell-text-conversions-0.3.1.1-28  haskell-text-icu-0.8.0.2-16  haskell-text-short-0.1.5-46  haskell-th-abstraction-0.4.5.0-1
             haskell-th-compat-0.1.4-10  haskell-th-lift-0.8.2-13  haskell-th-lift-instances-0.1.20-12  haskell-these-1.1.1.1-168  haskell-time-compat-1.9.6.1-64  haskell-time-manager-0.0.0-279  haskell-tls-1.6.0-21
             haskell-transformers-base-0.4.6-69  haskell-transformers-compat-0.7.2-1  haskell-type-equality-1-12  haskell-typed-process-0.2.10.1-21  haskell-unicode-collation-0.1.3.3-6  haskell-unicode-data-0.4.0-4
             haskell-unicode-transforms-0.4.0.1-36  haskell-uniplate-1.6.13-160  haskell-unix-compat-0.6-37  haskell-unix-time-0.4.8-9  haskell-unliftio-0.2.23.0-2  haskell-unliftio-core-0.2.0.1-9
             haskell-unordered-containers-0.2.19.1-44  haskell-utf8-string-1.0.2-117  haskell-uuid-types-1.0.5-84  haskell-vault-0.3.1.5-123  haskell-vector-0.13.0.0-12  haskell-vector-algorithms-0.9.0.1-18
             haskell-vector-stream-0.1.0.0-1  haskell-wai-3.2.3-160  haskell-wai-app-static-3.1.7.4-93  haskell-wai-extra-3.1.13.0-4  haskell-wai-logger-2.4.0-155  haskell-warp-3.3.23-12  haskell-witherable-0.4.2-28
             haskell-word8-0.1.3-22  haskell-x509-1.7.7-24  haskell-x509-store-1.6.9-49  haskell-x509-system-1.6.7-52  haskell-x509-validation-1.6.12-54  haskell-xml-1.3.14-30  haskell-xml-conduit-1.9.1.1-154
             haskell-xml-types-0.3.8-8  haskell-yaml-0.11.8.0-70  haskell-zip-archive-0.4.2.2-7  haskell-zlib-0.6.3.0-27  lua-lpeg-1.0.2-4  pandoc-2.19.2-29

Размер, правда, небольшой, поставилось довольно быстро. :)

★★★★★

Как мейнтейнеры поддерживают, так и живёт. В Arch выбрали этот путь.

Roy-Batty
()
--\ Depends (9)                                                                                                                                             
    --- libc6 (>= 2.34)
    --- libcmark-gfm-extensions0.29.0.gfm.3 (>= 0.29.0.gfm.3) (UNSATISFIED)
    --- libcmark-gfm0.29.0.gfm.3 (>= 0.29.0.gfm.3) (UNSATISFIED)
    --- libffi8 (>= 3.4)
    --- libgmp10 (>= 2:6.2.1+dfsg)
    --- libpcre3
    --- pandoc-data (< 2.9.2.1-3ubuntu2.~) (UNSATISFIED)
    --- pandoc-data (>= 2.9.2.1-3ubuntu2) (UNSATISFIED)
    --- zlib1g (>= 1:1.1.4)
utf8nowhere ★★★
()

Тут зачастую люди отвергают какую-нибудь программу из-за монструозных зависимостей — тащит не только центнер Qt, но и тонну кедолиб.

Я тоже раньше так мыслил. А теперь не против и 100500 гигабайт говна на питоне, лишь бы можно было по-быстрому слепить прототип.

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

Очевидно, в арче собрали динамически, и распихали каждый хачкелевский пакет в свой пакет с пакетами, а в дебиане/абанте собрали статически.

utf8nowhere ★★★
()

монструозных зависимостей

Кое-кто подумал в этом же направлении. Пакет pandoc-bin 2.19.2-1 из AUR, в описании которого, «Pandoc - только исполняемый файл, без 750MB Haskell depend/makedepends».

Кстати, может кто еще не знает, если подключены репы archlinuxcn/chaotic-aur, то большинство пакетов AUR уже в опакеченном виде.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Некоторые проги любят тянуть сотни перловых либ. Каждая по килобайту.

utanho ★★★★★
()

В теме arch mpv alsa пытались отвязать pipewire от mpv 0.35, но его либы уже наглухо вшиты.

Что удивительно, в прежних версиях можно было ставить без pulseaudio, вроде.

p.s. Сам то я использую pipewire, для меня это не проблема.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Haskell официально не поддерживает динамическое связывание. Эта фича помечена как «EXPERIMENTAL» (капсом!) и не рекомендуется к использованию.

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

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

Ссылку на страдания дашь? Или это только твоё озабоченное воображение?

question4 ★★★★★
()

Тут зачастую люди отвергают какую-нибудь программу из-за монструозных зависимостей — тащит не только центнер Qt, но и тонну кедолиб

Кстати было недавно приключение с фрибсд 13.1

Gedit там по зависимостям потянул Qt. Это прям эталон.

utanho ★★★★★
()

Да, замечал это тоже. Они зачем-то всю экосистему Haskell попытались зазеркалить на рельсы пакетного дистрибутива…

Спорное решение довольно, представляете какой ад для мейнтейнеров всё это поддерживать и актуализировать.

Возможно тут как раз тот случай, когда было бы проще как в Rust или Go – статика и просто жирные бинари запакетить.

А это выглядит так, как будто каталоги PIP, NPM и Maven-батареек внутрь дистра затягивают.

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

Haskell официально не поддерживает динамическое связывание.

А Arch поддерживает 🤡

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

Спорное решение довольно, представляете какой ад для мейнтейнеров всё это поддерживать и актуализировать.

Мейнтейнер писал на реддите, почему он так сделал. Насколько я понял, статические сборки адски долго собирались и заливались на его 50 Кб/с канале из Китая. В итоге он сдался и перешел на динамические сборки. Это все не от хорошей жизни, а от нехватки рабочих рук. Если бы нашелся желающий мейнтейнить хаскельные пакеты (а их в репозитории уже больше тысячи), то в арче вполне бы могли вернуться обратно на статику.

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

А это выглядит так, как будто каталоги PIP, NPM и Maven-батареек внутрь дистра затягивают.

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

archie
()

Я, кстати, не вполне понимаю вот эту боязнь монструозных зависимостей. Сколько народ под линукс выделяет на винте, без учёта свопа? 30 Гб? 60? Если какая-то прога тянет на пару сотен мегабайт зависимостей - ну не наплевать ли?

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

Насколько я понял, статические сборки адски долго собирались и заливались на его 50 Кб/с канале из Китая.

Ээээ… у арча сборочных серверов нет? Что?

Если бы нашелся желающий мейнтейнить хаскельные пакеты (а их в репозитории уже больше тысячи)

Их там больше тысячи как раз из-за кучи пакетов с библиотеками. Если их выкинуть и собирать статически, пакетов останется пара десятков.

Мейнтейнер — дебил, ему ничего не поможет уже.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от tiinn

Cколько народ под линукс выделяет на винте, без учёта свопа? 30 Гб? 60?

У меня 20, но /var/cache/pacman/pkg вынесен отдельно.

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

Ээээ… у арча сборочных серверов нет? Что?

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

Их там больше тысячи как раз из-за кучи пакетов с библиотеками. Если их выкинуть и собирать статически, пакетов останется пара десятков.

Это да, софт для конечных пользователей можно по пальцам пересчитать. Навскидку припомню только xmonad, pandoc, shellcheck, ghc, cabal, stack, hlint, hls… Все это можно было бы собрать статически. Но мейнтейнеры упорно продолжают следовать сишным традициям и распиливать софт для любых других языков на кучи динамически слинкованных микропакетов.

archie
()

Размер, правда, небольшой, поставилось довольно быстро. :)

Ага. Ставил на генту, там все хаскель пакеты по умолчанию замаскированы. По привычке вносил по одному в список разрешенных, когда portage жаловался на неудовлетворенную зависимость во время установки. Минут через тридцать понял, что таким способом я пандок никогда не поставлю :)

Не помню точно, в конце концов там было под пару сотен зависимостей.

altwazar ★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Ответ на: комментарий от CrX

Вот! Вряд ли вас остановит то, что для установки какой-либо проги надо будет скачать 300 Мб зависимостей.

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

Меня это напряжёт, особенно если задача, которую я хочу решить с помощью этой проги, в принципе решаема бинарником на килобайт-два. Но не остановит, нет. На дело в том, что таких прог много. Когда я разбивал диск (а это было около 12 лет назад), 10 ГБ под систему хватало за глаза, я отвёл аж 20, чтобы уж точно об этом никогда не вспоминать. А сейчас уже под 20 и занимает. Глядишь ещё лет через 5–10 придётся задумываться об очередных лишних 300 МБ.

А вообще с хацкелем в арче больше напрягает не занимаемое место, а то, что потом при обновлении эти портянки по 50 пакетов разом вечно все вместе обновляются. Ну и качать каждый раз 300 МБ это полминуты на 100 мбит/с, а кому-то и дольше.

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

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

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

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

Как и у всех. Хотя более-менее адекватные чуваки берут LTS срезы со stackage.

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

Если так, то это ещё более дебильно звучит.

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

Как я уже писал, мейнтейнеры рача – дебилы.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от CrX

Когда я разбивал диск (а это было около 12 лет назад), 10 ГБ под систему хватало за глаза, я отвёл аж 20, чтобы уж точно об этом никогда не вспоминать.

Как я вам завидую.

$ du -sh /nix/store
74G     /nix/store
hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Как я уже писал, мейнтейнеры рача – дебилы.

Давно уже заметил, что хаскелиты нежно «любят» мейнтейнеров рача, а те отвечают им взаимностью :) Мнение разраба ghcup:

Arch Linux devs are amongst the most incompetent people I’ve come across in 10 years of doing distro development and packaging. Their build recipes are often trash, containing sed hacks that silently break instead of proper patches.

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

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

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

Тут основная проблема в самом хаскеле, вернее GHC. У него нет стабильного ABI.

Почему у промышленного языка нет стабильного ABI?

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

промышленного языка

А кто сказал, что он промышленный? Нужного софта кот наплакал.

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

Это да, софт для конечных пользователей можно по пальцам пересчитать. Навскидку припомню только xmonad, pandoc, shellcheck, ghc, cabal, stack, hlint, hls…

hedgewars

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

Почему у промышленного языка нет стабильного ABI?

Там где хаскель реально используется (в основном бекенд и крипта) отсутствие стабильного ABI не имеет большого значения. Ну и да, промышленным его можно назвать с большой натяжкой. Долгое время его использовали исключительно для написания папиров и защиты дисеров. Только относительно недавно, где-то в десятых, ВНЕЗАПНО обнаружили, что на хаскеле вообще можно писать хоть какой-то промышленный софт, а не только факториалы считать.

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

Там ещё и паскаль присутствует :)

hobbit ★★★★★
() автор топика
7 марта 2024 г.
$ dnf.install pandoc
=======================================================================================================================
 Package                        Architecture            Version                          Repository                Size
========================================================================================================================
Installing:
 pandoc                         x86_64                  3.1.3-25.fc39                    updates                   26 M
Installing dependencies:
 pandoc-common                  noarch                  3.1.3-25.fc39                    updates                  527 k

Transaction Summary
========================================================================================================================
Install  2 Packages

Total download size: 26 M
Installed size: 192 M
Is this ok [y/N]: ^COperation aborted.

Если вы спросите меня, то я отвечу, что 192 метра для такой программы – это пи###ц, где там тому Электрону.

Кстати говоря, что там с миллионом зависимостей JS/Python/Go/Rust и left-pad’ами? Директор транспортного цеха уже высказался?

MoldAndLimeHoney
()
Последнее исправление: MoldAndLimeHoney (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)