Proč jsou mezi balíky závislosti?

anonym

Proč jsou mezi balíky závislosti?
« kdy: 19. 01. 2017, 12:53:46 »
V Linuxové konzoli se pracuje na základě jednoůčelných utilit, jako je find, grep, cat, atd. Aplikace pro Linux, narozdíl od Windows, v sobě mají ćasto spletitý strom závislostí. Aplikace v Linuxu závisí nejen na globálních dynamických knihovnách, které mohou být na disku bezbproblému ve více verzích, ale také na aplikacích a tím i na verzích těch aplikací. Tím aplikace v userspace jsou navzájem propojeny a není proto jednoduché u libovolné jen tak přejít na vyšší verzi, protože by se tím tato struktura narušila a ostatní aplikace by nemusely fungovat správně. Proto vychází tak často nové verze Linuxových distribucí, např. v případě Ubuntu, které mimo jiné obsahují aktualizovanou vrstvu/strukturu balíčkového systému.

Proč ve windows takováto věc k vidění není, totiž že aplikace může  záviset na globálních knihovnách (standardních pro C/C++), ale zcela minimálně je nějaká aplikace závislá přímo na jiné aplikaci (vybavuje se mi třeba Wireshark, který k chodu potřebuje jště cosi, co si instaluje spolu s hlavní aplikací).

Je to proto, že aplikace v prgramovém kódu nepoužívají jen knihovny (klidně i vytvořených v jiném projektu), ale programátoři si místo toho usnadňují práci a používají proto i přímé volání aplikací, jakoby se tak dělo v konzoli?
« Poslední změna: 19. 01. 2017, 15:17:24 od Petr Krčmář »


balki

Re:Proc jsou mezi balíky závislosti?
« Odpověď #1 kdy: 19. 01. 2017, 13:08:56 »
V Linuxové konzoli se pracuje na základě jednoůčelných utilit, jako je find, grep, cat, atd. Aplikace pro Linux, narozdíl od Windows, v sobě mají ćasto spletitý strom závislostí. Aplikace v Linuxu závisí nejen na globálních dynamických knihovnách, které mohou být na disku bezbproblému ve více verzích, ale také na aplikacích a tím i na verzích těch aplikací. Tím aplikace v userspace jsou navzájem propojeny a není proto jednoduché u libovolné jen tak přejít na vyšší verzi, protože by se tím tato struktura narušila a ostatní aplikace by nemusely fungovat správně. Proto vychází tak často nové verze Linuxových distribucí, např. v případě Ubuntu, které mimo jiné obsahují aktualizovanou vrstvu/strukturu balíčkového systému.

Proč ve windows takováto věc k vidění není, totiž že aplikace může  záviset na globálních knihovnách (standardních pro C/C++), ale zcela minimálně je nějaká aplikace závislá přímo na jiné aplikaci (vybavuje se mi třeba Wireshark, který k chodu potřebuje jště cosi, co si instaluje spolu s hlavní aplikací).

Je to proto, že aplikace v prgramovém kódu nepoužívají jen knihovny (klidně i vytvořených v jiném projektu), ale programátoři si místo toho usnadňují práci a používají proto i přímé volání aplikací, jakoby se tak dělo v konzoli?

To je unixova filozofia pouzivat hotove tooly, ktore robia jednu vec poriadne a volat ich cez pipe. Ak je dodrzana specifikacia (Single unix specification) a nepouzivaju sa nestandardne prepinace, nie je nutne menit zakazdym tooly.

Windows sa na tooly a pipe nehra, tam sa pouzivaju staticky zlinkovane bloby, ktore obshauju aj pradedove pneumatiky zo zigulaku a klavir.

anonym

Re:Proc jsou mezi balíky závislosti?
« Odpověď #2 kdy: 19. 01. 2017, 13:23:25 »
Tak pradedovy pneumatiky z zigula a klavir jsou i v linuxu ne, co třeba ifconfig?

Martin Dráb

Re:Proc jsou mezi balíky závislosti?
« Odpověď #3 kdy: 19. 01. 2017, 13:31:42 »
Citace
Proč ve windows takováto věc k vidění není, totiž že aplikace může  záviset na globálních knihovnách (standardních pro C/C++), ale zcela minimálně je nějaká aplikace závislá přímo na jiné aplikaci (vybavuje se mi třeba Wireshark, který k chodu potřebuje jště cosi, co si instaluje spolu s hlavní aplikací).

Závislost na aplikaci se příliš často nevyskytuje, ale závislosti na knihovnách třetích stran potkáte také, a to nejen u aplikací portovaných na Windows z jiných OS (popř. multiplatformních). Rozumné aplikace si ale všechny potřebné věci přinesou s sebou.

Wireshark využívá knihovnu WinPcap.

Takže statické linkování není jediná možnost, ač je asi nejpohodlnější (tím dostanete závislosti cca jen na Windows API, která je všude +- stejné).

balki

Re:Proc jsou mezi balíky závislosti?
« Odpověď #4 kdy: 19. 01. 2017, 13:43:48 »
Tak pradedovy pneumatiky z zigula a klavir jsou i v linuxu ne, co třeba ifconfig?

Pokial viem, na to je extra balik. Pouziva sa utilita "ip".


anonym

Re:Proc jsou mezi balíky závislosti?
« Odpověď #5 kdy: 19. 01. 2017, 13:47:06 »
Já třeba nemám problém s tím, když má nějaká aplikaci statické linky na Qt - beru, že je to prostě C++ knihovna a je normalní, mít ji na disku a to klidně i v několika verzích. Spíše by mi vadilo, kdyby nějaká aplikace byla závislá třeba na přehrávačí VLC verze x.y.z nebo na ffmpeg x.y.z, protože si to tam vnitřně potřebuje nějak spouštět, místo aby pracovala jen s konkrétníma knihovnama, které vyžaduje. Je to ok?

balki

Re:Proc jsou mezi balíky závislosti?
« Odpověď #6 kdy: 19. 01. 2017, 13:56:44 »
Já třeba nemám problém s tím, když má nějaká aplikaci statické linky na Qt - beru, že je to prostě C++ knihovna a je normalní, mít ji na disku a to klidně i v několika verzích. Spíše by mi vadilo, kdyby nějaká aplikace byla závislá třeba na přehrávačí VLC verze x.y.z nebo na ffmpeg x.y.z, protože si to tam vnitřně potřebuje nějak spouštět, místo aby pracovala jen s konkrétníma knihovnama, které vyžaduje. Je to ok?

Je to ok, uplne bezne sa pouziva postup fork-exec a posielanie dat cez pipe. Ak to takto staci, pouzije sa hotovy tool. Ak treba optimalizovat, potom sa to prepise. Toto je unixova filozofia, ktora funguje uz takmer 50 rokov. Nehovori sa tomu lenivost, ale rychle prototypovanie.

Re:Proc jsou mezi balíky závislosti?
« Odpověď #7 kdy: 19. 01. 2017, 14:03:35 »
Já třeba nemám problém s tím, když má nějaká aplikaci statické linky na Qt - beru, že je to prostě C++ knihovna a je normalní, mít ji na disku a to klidně i v několika verzích. Spíše by mi vadilo, kdyby nějaká aplikace byla závislá třeba na přehrávačí VLC verze x.y.z nebo na ffmpeg x.y.z, protože si to tam vnitřně potřebuje nějak spouštět, místo aby pracovala jen s konkrétníma knihovnama, které vyžaduje. Je to ok?

Problem s tim statickym linkovanim je, ze zmeny v knihovne zpusobi nutnost updatu vsech balicku, co ji staticky linkuji.

Coz nezni tak spatne az do okamziku, kdy je ta zmena bezpecnostni oprava a pulka balicku ji oignoruje.

Je to neco za neco, ale je potreba pocitat, ze staticke linkovani je priklad poruseni DRI.

anonym

Re:Proc jsou mezi balíky závislosti?
« Odpověď #8 kdy: 19. 01. 2017, 14:27:11 »
Já třeba nemám problém s tím, když má nějaká aplikaci statické linky na Qt - beru, že je to prostě C++ knihovna a je normalní, mít ji na disku a to klidně i v několika verzích. Spíše by mi vadilo, kdyby nějaká aplikace byla závislá třeba na přehrávačí VLC verze x.y.z nebo na ffmpeg x.y.z, protože si to tam vnitřně potřebuje nějak spouštět, místo aby pracovala jen s konkrétníma knihovnama, které vyžaduje. Je to ok?

Problem s tim statickym linkovanim je, ze zmeny v knihovne zpusobi nutnost updatu vsech balicku, co ji staticky linkuji.

Coz nezni tak spatne az do okamziku, kdy je ta zmena bezpecnostni oprava a pulka balicku ji oignoruje.

Je to neco za neco, ale je potreba pocitat, ze staticke linkovani je priklad poruseni DRI.

Ale jakto, zkompilovane .so knihovny pro C/C++ mají přímo v názvu uvedenou i verzi, nemůsie přece updatovat všechny balíčky, protože novější .so knihovna se na disk uloží v novější verzi, stará verze zůstává. Přinejmenším OpenCV to takto má. Updatovat všechny balíčky musíte, pokud třeba updatujete aplikaci ffmpeg nebo něco podobného na novější verzi, protože těžko byste měl 2 a více ffmpeg nainstalovány, navíc by se k tomu musely udělat nějaké registry.

Re:Proc jsou mezi balíky závislosti?
« Odpověď #9 kdy: 19. 01. 2017, 14:51:16 »
Ale jakto, zkompilovane .so knihovny pro C/C++ mají přímo v názvu uvedenou i verzi, nemůsie přece updatovat všechny balíčky, protože novější .so knihovna se na disk uloží v novější verzi, stará verze zůstává. Přinejmenším OpenCV to takto má. Updatovat všechny balíčky musíte, pokud třeba updatujete aplikaci ffmpeg nebo něco podobného na novější verzi, protože těžko byste měl 2 a více ffmpeg nainstalovány, navíc by se k tomu musely udělat nějaké registry.

Ale ty .so jsou dynamicke.

Re:Proc jsou mezi balíky závislosti?
« Odpověď #10 kdy: 19. 01. 2017, 14:56:14 »
Updatovat všechny balíčky musíte, pokud třeba updatujete aplikaci ffmpeg nebo něco podobného na novější verzi, protože těžko byste měl 2 a více ffmpeg nainstalovány, navíc by se k tomu musely udělat nějaké registry.

U CLI se vetsinou API (zejmena prepinace a jejich chovani) celkem drzi, navic vazba je dost pozdni.

Obcas ale koncis s tim, ze stejne mas vic versi. V pripade pythonu trebas jsou binarky python2 a python3, u roznych versi javy se to casto resi pomoci environmentu a JAVA HOME... a jsou i jine moznosti.

anonym

Re:Proc jsou mezi balíky závislosti?
« Odpověď #11 kdy: 19. 01. 2017, 14:57:01 »
No dobre, tak dynamicke, ale obojí jsou snad knihovny a můžou obsahovat i verzi, ne?

Re:Proc jsou mezi balíky závislosti?
« Odpověď #12 kdy: 19. 01. 2017, 14:59:55 »
No dobre, tak dynamicke, ale obojí jsou snad knihovny a můžou obsahovat i verzi, ne?

Hodinky, holinky.

Ty staticke knihovny jsou prilinkovane uz k binarce, pokud nejsi vyvojar, tak je vubec ani samostatne nemas.

Martin Dráb

Re:Proc jsou mezi balíky závislosti?
« Odpověď #13 kdy: 19. 01. 2017, 15:08:08 »
Citace
No dobre, tak dynamicke, ale obojí jsou snad knihovny a můžou obsahovat i verzi, ne?

Statické linkování znamená, že se knihovna do výsledné binárky "přidá" již za překladu (přitom by se teoreticky mohla do té binárky přidat jen ta část knihovny, která je skutečně používaná). Updatovat takto umístěnou knihovnu bude dosti netriviální.

anonym

Re:Proc jsou mezi balíky závislosti?
« Odpověď #14 kdy: 19. 01. 2017, 15:10:37 »
Citace
No dobre, tak dynamicke, ale obojí jsou snad knihovny a můžou obsahovat i verzi, ne?

Statické linkování znamená, že se knihovna do výsledné binárky "přidá" již za překladu (přitom by se teoreticky mohla do té binárky přidat jen ta část knihovny, která je skutečně používaná). Updatovat takto umístěnou knihovnu bude dosti netriviální.

Jo, já to četl z wikipedie a oni to tam mají blbě:

https://cs.wikipedia.org/wiki/Knihovna_(programování)#Srovn.C3.A1n.C3.AD_statick.C3.A9_a_dynamick.C3.A9_knihovny
Citace
Statická knihovna se spojuje se spustitelným souborem v době linkování programu, zatímco dynamická knihovna se spojuje se spustitelným souborem v době spuštění programu nebo až za jeho běhu.