Терри Каррез (Thierry Carrez), возглавляющий разработку серверной сборки Ubuntu, подытожил (http://fnords.wordpress.com/2010/09/24/the-real-problem-with.../) в своем блоге проблемы, возникающие при поставке программ на языке Java в составе Linux-дистрибутивов и приводящие к тому, что множество Java-программ не доступны в пакетах для Linux-дистрибутивов или поставляются через сторонние репозитории.
Главная проблема возникает из-за наличия в Java собственный унифицированных инструментов сборки и распространения пакетов, что приводит к тому, что фактически разработчики открытых проектов на Java не выпускают готовый для пересборки релиз в исходных текстах, а занимаются поставкой уже готовых бинарных пакетов, включающих откомпилированный набор классов и связанных внешних Java-библиотек. Преобразовать такой Java-пакет в другой формат пакетов для включения в репозиторий Linux-дистрибутива не так просто, так как каждая Java-программа может требовать для своей работы разн...URL: http://lwn.net/Articles/406884/rss
Новость: http://www.opennet.me/opennews/art.shtml?num=28082
Невольно вспомнился анекдот. Смотрит доктор пациента.
- Хорошо.... Хорошо.... Очень хорошо!
- А что хорошо, доктор?
- Хорошо то что это - не у меня.
На деле-то все проще:
Разработчики дают бинарь с исходниками, обвязанными ТАКИ-И-ИМИ XML для сборки, что без ПОЛНОГО проникновения в тему собрать на Фре, скажем, просто нереально :)И ОТТАТПТЫВАЮТ СЕБЕ, таким образом, "кормовую площадку" :)
Поза такая: GPL, бинарь под пару магистральных Линей, исходники, "вот XML, мы сами, мамой клянусь, этим XML ночные сборки делаем!!!"
А дальше - "можно купить поддержку" :)
Или сам давай сырцы читай, жадина :)
Дохтур, и это тоже у тебя, только ты об этом не знаешь. Ты же на Ubuntu живёшь, а значит проблемы кучи пакетиков .deb для обеспечения нормальной работы Java тебя не миновали. К примеру, на Debian-based для русификации Java всё ещё требуется доустанавливать sun-java6-fonts.deb. В то время, как на взрослых системах поддержка i18n/l10n идёт в одном пакете c JDK или с JRE и доустанавливать ничего не надо.
>Ты же на Ubuntu живёшь, а значит проблемы кучи пакетиков .deb
>для обеспечения нормальной работы Java тебя не миновали.У меня нет ни 1 программы на яве. И ни 1 сервака с ней. Поэтому да, у *меня* никаких проблемой с явой и ее нормальной работой - *нет*. Вот глядя на все это мне и вспомнился анекдот :)))
> К примеру, на Debian-based для русификации Java всё ещё требуется доустанавливать
Вам требуется? Вы и доустанавливайте, имхо.
Теперь понятно, почему в любом дистрибутиве Azureus, он же Vuze, работает сразу. А в Убунте пакетнй менеджер тянет много других пакетов. Если верить юзеру. Потому-то он явой и не пользуется, что в Убунте это затруднено.
Азуреус-азуреус...
Мастера делать простое сложным, мастера жрать проц и память, чертов комбайн вместо торрента... Слава богу, что есть нормальные аналоги. Тот же transmission - выглядит чуть ли не модальным окном, а функций - столько же. И работает на порядок приятнее.
>Дистрибутивы стремятся к поставке единой версии библиотеки для всех программ, в то время как Java-приложения проповедуют принцип поставки нужного набора библиотек в составе каждого пакета.при чём тут проповедуют, если просто вынуждены так делать.
Это почему же? В репозиториях иногда встречаются рахные версии одних и тех же библиотек.
> просто вынуждены так делать.Вильям наш Гейц Третий с Усамой Беновичем Ладданом стояли над ними и... о! принуждали. Бе-е-е-едненькие!
есть спецификации на jvm
есть jdk, кот. спокойно уживаются, в разных версиях, на компе (alternative для jre)
ИМХО - достаточно "притянутые" проблемы
а для ОСС особенно
Это Вы, видимо, не сталкивались с программами, требующими конкретную версию JDK.
> Это Вы, видимо, не сталкивались с программами, требующими конкретную версию JDK.Я сталкивался с программами, требующими конкретную версию JDK для определённой архитектуры команд CPU. Ничего — уживаются два разных JDK для [i386] и [amd64] на одной машине в одной операционной системе. ;)
очень энтерпрайзно так - каждой тулзе по своей версии libc :))) (саpказмъ)
Тут не .so имеются в виду, а .jar
Подотрите сопли, истерика ни к чему.
В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.
Сосущесвуют? Да.
Без проблем? Нет, не без проблем.Где тут джава? В воспаленном воображении спорщиков.
Пакетные менеджеры не так хороши, как хотелось бы, вот и все.
> как минимум 3 версии одной и той же jpeg либы.когда будет 300 версий комбинаций из десятков библиотек весом в xx мегабайт,
для 300 программ, когда ты будешь оплачивать доп расходы на поддержку такой кучи,
тогда и порассуждаешь о сопельках.
ты мне не тыкай, и не передергивай. В реальном мире версии зависимостей единицами считают, а не сотнями.
вводная аргументация "Подотрите сопли, истерика ни к чему." располагает.> В реальном мире версии зависимостей единицами считают, а не сотнями.
по ссылке другое мнение.
Package all versions of libraries
The next obvious solution is to make separate packages for every version of library that the software uses. The problem is that there is no real convergence on “commonly-used” versions of libraries. There is no ABI protection, nor general guidelines on versioning. You end up having to package each and every minor version of a library that the software happens to want. That doesn’t scale well: it creates an explosion in the number of packages, code duplication, security update nightmares, etc. Furthermore, sometimes the Java project patches the libraries they ship with to include a specific feature they need, so it doesn’t even match with a real library version anymore.
1.
> В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.
> Сосущесвуют? Да.
> Без проблем? Нет, не без проблем.Различные приложения(!не джава!) требуют различные версии либы(!не джава!). Проблема версионирования вообще не из джавы, ею все страдают. Взять хоть эпопею с двумя питонами, ведь ужас какой-то.
2. У джавистов тоже автоматическая сборка (кто бы мог подумать??? ай-яй-яй), поэтому поставляют они все, и исходный код и бинари, и в исходниках версии зависимостей прописаны прекрасно.
3. Существует полная аналогия между размещением *.so в файловой системе и размещением там же *.jar
Какую либу приложению в PATH подсунешь, на той он и поедет. В этом смысле приложения на джаве ничем не отличается от приложений на си, питоне и т.д.4. Защитой на уровне ABI никто не страдает, ни *.jar, ни *.so
Вывод: проблемы существуют на уровне пакетных менеджеров дистрибутивов
Нет, проблемы существуют на уровне совести разработчиков, НЕ предоставляющих исходники в пригодном для мультиплатформенной сборки виде.
Немножко жилят, вымогая денежек с тех, кому надо перебрать пакет, а сил вникать нету.
Соответственно, разводится такой зверинец, от которого страдают и дистры.
>Нет, проблемы существуют на уровне совести разработчиков, НЕ предоставляющих исходники в пригодном
>для мультиплатформенной сборки виде.
>Немножко жилят, вымогая денежек с тех, кому надо перебрать пакет, а сил
>вникать нету.
>Соответственно, разводится такой зверинец, от которого страдают и дистры.Оpenoffice уж на что монстр, а собирается в gentoo из исходников. Выходит проблема не в джаве, а в конкретных разработчиках.
Оpenoffice написан на сях, не на яве
> Нет, проблемы существуют на уровне совести разработчиков, НЕ предоставляющих исходники
> в пригодном для мультиплатформенной сборки виде.
> Немножко жилят, вымогая денежек с тех, кому надо перебрать пакет, а сил
> вникать нету.
> Соответственно, разводится такой зверинец, от которого страдают и дистры.Java сама по себе мультиплатформенна - СЮРПРИЗ =))) Исходники кстати сразу идут в мультиплатформенном виде, maven вообще сам подтянет из центрального репо требуемые либы.
Дело в том, что C/C++ приложения точатся под отдельный дистр и для них делаются скрипты привинчивающие к определенной системе. Java для платформо и дистро независимости не привинчивается к системе, потому и вынуждена таскать набор либок.
> Java сама по себе мультиплатформенна...Читаете ли вы то, что комментируете??? :)
И насколько вы способны собрать Java проект БЕЗ "билд-тулза", НАМЕРЕННО искоцанный разработчиками от референс-дизайна?
> Различные приложения(!не джава!) требуют различные версии либы(!не джава!). Проблема
> версионирования вообще не из джавы, ею все страдают. Взять хоть эпопею
> с двумя питонами, ведь ужас какой-то.У меня в дебиане одновременно сразу 4 питона (Пусть эта змеюка подавится!).
> В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.зачем? у меня например одна 8b.
>> В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.
>
>зачем? у меня например одна 8b.А зачем на торрентах лежат N сезонов симпсонов? Оставили бы последний, чего на остальные место тратить?
Разным людям нравятся разные сезоны, а разным приложениям нравятся разные версии либы.
>>> В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.
>>
>>зачем? у меня например одна 8b.
>
>А зачем на торрентах лежат N сезонов симпсонов? Оставили бы последний, чего
>на остальные место тратить?
>Разным людям нравятся разные сезоны, а разным приложениям нравятся разные версии либы.
>Это у вас симлинки "сосуществуют" :)
А библиотека - одна :)
>[оверквотинг удален]
>>>
>>>зачем? у меня например одна 8b.
>>
>>А зачем на торрентах лежат N сезонов симпсонов? Оставили бы последний, чего
>>на остальные место тратить?
>>Разным людям нравятся разные сезоны, а разным приложениям нравятся разные версии либы.
>>
>
>Это у вас симлинки "сосуществуют" :)
>А библиотека - одна :)Я Вас покусаю :) В гентушном менеджере есть "слоты", позволяющие иметь в системе несколько версий одной либы, это факт. Ведь не городили бы огород, не будь версий библиотеки более одной.
> Я Вас покусаю :) В гентушном менеджере есть "слоты", позволяющие иметь в
> системе несколько версий одной либы, это факт. Ведь не городили бы
> огород, не будь версий библиотеки более одной.К теме!
Libjpeg - сколько?
"Три" или, все же единственный экземпляр 8.х?
не всегда. например, тот же nxclient хочет openssl-0.9.8, хотя все остальное прекрасно пересобралось с openssl-1.0.0. или тот же вайн@этерсофт, не смотря на то, что libpng разделили на два слота - >=1.4.3 и <1.4.3, не собирается, пока в системе присутствует >=1.4.3 (не смотря на присутствие так же <1.4.3). Но потом прекрасно (насколько это возможно ;) ) работает, когда вернешь >=1.4.3.
>>> В моей gentoo сосуществуют как минимум 3 версии одной и той же jpeg либы.
>>
>>зачем? у меня например одна 8b.
> А зачем на торрентах лежат N сезонов симпсонов? Оставили бы последний, чего
> на остальные место тратить?
> Разным людям нравятся разные сезоны, а разным приложениям нравятся разные версии либы.Сколько нынче дядек дают за одну бузину на центральном рынке Киева?
все проблемы (лучше даже саазать вот так: "все эти вендовенькие проблемы") -- решаются прописыванием ИНДИВИДУАЛЬНЫХ переменных окружения для каждого из Java-приложений(да и вообще слово Java -- тут непричём. для Java это CLASSPATH, для Python это PYTHONPATH, для обычного C/C++ это LD_LIBRARY_PATH, ... так-что суть не меняется)
манипулированием путей для переменных окружения -- пусть занимаются пакетные манеджеры (эти пакетные менеджеру уже сегодня способны копировать библиотеки не просто в [помойку] /usr/lib/ , а аккуратненько: в /usr/lib/my_super_lib_v1/ или /usr/lib/my_super_lib_v2/ )
для прописывания же индивидуальных переменных окружения внутри запускаемой программы (ведущщим к путям где библиотеки) -- пусть используются sh-скрипты`Wrapper`ы
....в чом проблемато?
не придётся же для каждой программы которая использует /usr/lib/my_super_lib_v2/ делать индивидуально каждый раз копию директории /usr/lib/my_super_lib_v2/ ... так-что в какомто смысле принцип "единой библиотеки для всех" остаётся
********************************************************************************
мало того! если расширить проблему ещё глубже, то я вообще щитаю, что _всё_ что установленно как _зависимости_программ_ (а не как _требуется_для_человека_ ) -- не должно класться _напрямую_ в /usr/bin/ и /usr/lib/ .... всё это должнобыть _строго_ в /usr/bin/my_program_version_X.Y.Z/ и /usr/lib/my_library_version_X.Y.Z/
...а вот если _именно_человек_ хочет для себя (а не для решения зависимости) установить какойнить программный пакет, то в этом случае пусть пакетный-менеджер распокует для человека sh-скрипт-Wrapper , внутрь директории /usr/bin/ , (который внутри своего sh-кода будет ссылаться на /usr/bin/my_program_version_X.Y.Z/ и /usr/lib/my_library_version_X.Y.Z/ )
ато захломили весь GNU/Linux всяким гавном внутри ${PATH} и ${LD_LIBRARY_PATH} , аж тошнит!!.
я хочу какуюнить прогу поставить, а мне всемте с этой программой ещё кучу утилит внутри ${PATH} появляется :-/ ... ЗАЧЕМ ОНИ МНЕ? они НЕ МНЕ нужны а той программе которую я устанавливаю!! а мне ненужны! а если будут нужны то я установлю их!
...например если я хочу установить себе Gajim, а Gajim требует для себя Python и SQLite.... ... ... то ПУСТЬ пакетный менеджер установит Python (какой-нить там Python-2.6) внутри отдельной подериктории!, которая не будет поумолчанию в _человеческом_ ${PATH} .
...а человек же для себя может постановить индивидуальный Python (ту версию которую он хочет), и ВОТ ТОГДА-ТО внутри ${PATH} должна появиться команда "python" ! но не раньше!
У меня 13 программ в $PATH хотят питон, 10 из них весят 2-100 кб. На каждый из них ставить свой питон со всеми питонолибами? :0)
это концепция, выпускай дистрибутив
>это концепция, выпускай дистрибутивТакой дистр уже есть. В нем каждая прога ставиься в свою структуру каталогов вместе со всеми зависимостями - все свое ношу с собой :) Название дистра не помню и он непопулярен.
>Такой дистр уже есть. В нем каждая прога ставиься в свою структуру каталогов вместе со всеми зависимостями - все свое ношу с собой :) Название дистра не помню и он непопулярен.Windows? :)
GoboLinux.
>>это концепция, выпускай дистрибутив
> Такой дистр уже есть. В нем каждая прога ставиься в свою структуру
> каталогов вместе со всеми зависимостями - все свое ношу с собой
> :) Название дистра не помню и он непопулярен.Это примерно как решать проблемы пробок созданием сотни изолированных друг от друга дорог - "Базар-Вокзал" "Базар-Баня" "Вокзал-Баня" и т.п., вместо проектирования грамотной развязки.
>>>это концепция, выпускай дистрибутив
>> Такой дистр уже есть. В нем каждая прога ставиься в свою структуру
>> каталогов вместе со всеми зависимостями - все свое ношу с собой
>> :) Название дистра не помню и он непопулярен.
> Это примерно как решать проблемы пробок созданием сотни изолированных друг от друга
> дорог - "Базар-Вокзал" "Базар-Баня" "Вокзал-Баня" и т.п., вместо проектирования грамотной
> развязки.в реальной жизни это абсурд, а в информационном - вполне себе решение
>>>>это концепция, выпускай дистрибутив
>>> Такой дистр уже есть. В нем каждая прога ставиься в свою структуру
>>> каталогов вместе со всеми зависимостями - все свое ношу с собой
>>> :) Название дистра не помню и он непопулярен.
>> Это примерно как решать проблемы пробок созданием сотни изолированных друг от друга
>> дорог - "Базар-Вокзал" "Базар-Баня" "Вокзал-Баня" и т.п., вместо проектирования грамотной
>> развязки.
> в реальной жизни это абсурд, а в информационном - вполне себе решениепоправка: в реальном мире это абсурд, а в информационном - вполне себе решение
так лучше звучит
Хоть одно адекватное мнение =)))
Осильте уже Apache Maven и перестаньте ныть!
>Осильте уже Apache Maven и перестаньте ныть!Э-э-э...
Вы уверены, что в Каноникал про Maven ничего не слышали?
А вы им - письмо! :)
Пусть прозреют! :)
Ссылку кинуть не забудьте!!! :)
>>Осильте уже Apache Maven и перестаньте ныть!
> Э-э-э...
> Вы уверены, что в Каноникал про Maven ничего не слышали?
> А вы им - письмо! :)
> Пусть прозреют! :)
> Ссылку кинуть не забудьте!!! :)Какой там Maven — они JDK не могут собрать в один пакет, чтобы "как у всех всё работало". Пользователям приходится по кусочкам целостную платформу собирать, ища пакетики по ключевым словам траблов из серии "русский язык в Java не работает в Ubuntu" в Гугле. Вот до чего доводит концепция "рекомендуемых, но необязательных пакетиков".
Это 3.14дец =)))так в Ubuntu получается не JavaDK? ибо Java должна уметь по дефолту кучку языков и т.п. Если не могет - не java, а подобие типа gcj...
По мне проблемы две.
1. не доведенная до ума модульность в java. Проект jugsaw, пара JSR на эту тему. Обещают в JDK 8 асилить.
2. пакетные менеджеры дистрибутивов не умеют работать с java-менеджером зависимостей maven. А java разработчики конечно же не будут запиливаться на один дистр, если можно остаться кроссплатформенными.Выход научиться из apt-get использовать maven и его зависимости + при запуске приложения грамотно собирать CLASSPATH.
> По мне проблемы две.
> 1. не доведенная до ума модульность в java. Проект jugsaw, пара JSR
> на эту тему. Обещают в JDK 8 асилить.Чем .class файлы не модули? Помниться, до изобретения JAR, апплеты загружались в браузеры только class-файлами и начинали работать сразу, как только скачается первый из них. По мере задействования нового байткода подгружались недостающие class-файлы. То есть программа на Java уже работала даже тогда, когда ещё не все её части подгрузились на клиентский компьютер.
> 2. пакетные менеджеры дистрибутивов не умеют работать с java-менеджером зависимостей maven.
Пакетные менеджеры умеют запускать предварительно сконфигурированные скрипты для обеспечения корректной инсталляции бинарного пакета. mvn — это скрипт с параметрами для сопровождения всего жизненного цикла программных сущностей (приложений и библиотек) различных версий, всех фаз сборки/тестирования/инсталляции/запуска.
> Чем .class файлы не модули? Помниться, до изобретения JAR, апплеты загружались в браузеры только class-файлами и начинали работать сразу, как только скачается первый из них. По мере задействования нового байткода подгружались недостающие class-файлы. То есть программа на Java уже работала даже тогда, когда ещё не все её части подгрузились на клиентский компьютер.java либы очень маленькие и узкоспециализированные, потому их просто немеренно даже для малого проекта. Либо приходится поднимать JavaEE compatible сервер и пользоваться еще бОльшим набором либ/систем в комплекте. Косяк именно в большом кол-ве различных либ.
Если jar B зависит от A версии 1 и jar C зависит от A версии 2, при этом версии 1 и 2 несовместимы, то нет возможности написать java приложение зависящее от B и C одновременно. Будут феерические баги из-за двух несовместимых либ в класс-пасе или попытки подоткнуть не ту jar-ку.
java modules это фикс для подобной ситуации. Все остальное в java могут сделать maven & OSGi
> Пакетные менеджеры умеют запускать предварительно сконфигурированные скрипты для обеспечения корректной инсталляции бинарного пакета. mvn — это скрипт с параметрами для сопровождения всего жизненного цикла программных сущностей (приложений и библиотек) различных версий, всех фаз сборки/тестирования/инсталляции/запуска.
1. по сути нужно вытащить зависимости из mvn и уложить на пакетную базу целевого дистрибутива.
2. Дальше перегнать mvn repo в репо для целевой системы.
3. В результирующих WAR / EAR / иных сборках заменить jar из lib на ссылки на установленные пакеты из п.2По сути куча механической работа + оттестировать. Только кто заплатит за развлечение?
> java либы очень маленькие и узкоспециализированные, потому их просто немеренно даже для малого проекта.Вообще, .class-файлов немеряно, да. Гранулированность Java-приложений, несмотря на повсеместное запаковывание class-файлов в JAR/WAR/EAR довольно большая. Другими словами, архивирование байткода является способом уменьшить гранулированность на файловом уровне, но не на уровне библиотек. На уровне библиотек и приложений гранулированность никуда не девается.
> Либо приходится поднимать JavaEE compatible сервер и пользоваться еще бОльшим набором либ/систем в комплекте. Косяк именно в большом кол-ве различных либ.
Я думаю, косяк в перепаковке и потере целостности. Дебианщики упускают целостное восприятие Java-кода в погоне за его перепаковкой в DEB.
> Если jar B зависит от A версии 1 и jar C зависит
> от A версии 2, при этом версии 1 и 2 несовместимы,
> то нет возможности написать java приложение зависящее от B и C
> одновременно. Будут феерические баги из-за двух несовместимых либ в класс-пасе или
> попытки подоткнуть не ту jar-ку.
> java modules это фикс для подобной ситуации. Все остальное в java могут
> сделать maven & OSGiДа, в Maven это разруливается легко на основе информации о версии в имени файлов jar.
>> Пакетные менеджеры умеют запускать предварительно сконфигурированные скрипты для обеспечения корректной инсталляции бинарного пакета. mvn — это скрипт с параметрами для сопровождения всего жизненного цикла программных сущностей (приложений и библиотек) различных версий, всех фаз сборки/тестирования/инсталляции/запуска.
> 1. по сути нужно вытащить зависимости из mvn и уложить на пакетную
> базу целевого дистрибутива.Но зачем? Перепаковка портабельного кода ничего не даёт кроме головной боли мантейнерам. (что и наблюдаем)
Гораздо лучше работать с локальным репозиторием Maven из пакетного менеджера, рулить mvn, чтобы тот производил все необходимые действия по сопровождению кода Java.> 2. Дальше перегнать mvn repo в репо для целевой системы.
Перепаковка не нужна.
> 3. В результирующих WAR / EAR / иных сборках заменить jar из
> lib на ссылки на установленные пакеты из п.2Жизненный цикл (загрузка, выгрузка, обновление) WAR/EAR — вотчина сервера пиложений Java EE, а не пакетного менеджера.
> По сути куча механической работа + оттестировать. Только кто заплатит за развлечение?
Достаточно в пакетном менеджере имплементировать интерфейс взаимодействия с Maven и Java EE-сервером, переложив ответственность за сопровождение Java программ на них.
> Я думаю, косяк в перепаковке и потере целостности. Дебианщики упускают целостное восприятие Java-кода в погоне за его перепаковкой в DEB.Это есть.
> Да, в Maven это разруливается легко на основе информации о версии в
> имени файлов jar.
> Но зачем? Перепаковка портабельного кода ничего не даёт кроме головной боли мантейнерам.
> (что и наблюдаем)
> Гораздо лучше работать с локальным репозиторием Maven из пакетного менеджера, рулить mvn,
> чтобы тот производил все необходимые действия по сопровождению кода Java.
> Жизненный цикл (загрузка, выгрузка, обновление) WAR/EAR — вотчина сервера пиложений
> Java EE, а не пакетного менеджера.Вы читали задачи которые должна решать система java modules?
Там не только сборка приложения и подтыкание правильных jar для сборки (это делает mvn), но и создание системного репо и каждое приложение вместо того, чтобы тянуть с собой кучу либ - просто запрашивает требуемые либы (по версиям) у java, сама java уже ищет/качает с центрального сайта и т.п.
В этом одна из задач jugsaw.
>не доведенная до ума модульность в java.Это просто у многих дистростроителей бзик с этой модульностью. Упаковывают Жабу в 5 разных пакетов, а потом "У меня русский язык в Жабе не работает". Особенно хорошо когда есть "Полная версия", "Почти полная версия" и "Совсем маленькая версия". А особенно хорошо, когда часть программ в дистре зависит от, скажем, OpenJDK а часть от GCJ, причем оба их поставить одновременно нельзя.
Жаба привыкла скачиваться и ставиться одним пакетом. На всех. Вообще. И чтобы на всех платформах ПО на Java работало одинаково. Но нет ведь, и тут надо взять и сделать чертов зоопарк.
С переменными окружения надо быть аккуратнее.
Если, к примеру задаем LD_LIBRARY_PATH, и запускаем файловый менеджер, то все программы запущенные этим файловыйм менеджером, могут получить неправильное окружение, и вследствии чего подгрузить не те библиотеки.
То же самое касается CLASSPATH.
Лучше использовать rpath или манифесты.
> С переменными окружения надо быть аккуратнее.
> Если, к примеру задаем LD_LIBRARY_PATH, и запускаем файловый менеджер, то все программы
> запущенные этим файловыйм менеджером, могут получить неправильное окружение, и вследствии
> чего подгрузить не те библиотеки.
> То же самое касается CLASSPATH.
> Лучше использовать rpath или манифесты.Не совсем. CLASSPATH формируется независимо для каждого запускаемого приложения.
По другому дела идут в контейнерах и АппСерверах - там клиентские надстройки (WAR/EAR) запускаются в рамках контейнера и контейнер модифицирует класс-лоадинг для выполнения своих задач. К примеру для DI или поддержки штатных функций, потому часть либ-ок шарится между АппСервером и приложениями им запускаемыми.