Portál AbcLinuxu, 1. května 2025 03:27
Vyskúšaj si niekedy skompilovať nejaký program kompletne staticky a potom prídeš na to, že……že spousta z nich vůbec nejde zkompilovat. Protože třebas ty knihovny "vespod" závisejí na proprietárních knihovnách či aplikacích. Zářným příkladem budiž Javí knihovny, které dost často závisí na WebSpherách, WebLogicích a tak podobně.
Vážený pane, opravy programů, pokud se tomu někdo věnuje přicházejí zhruba tak často, spíše častěji, než opravy knihoven.Můj update-manager sice říká něco jiné, ale budiž. Nemám přesné statistiky v ruce, takže jsem (zatím) potichu.
/lib{,64}
? Všechny, které jsou v distribučních balíčcích?
Takže když je knihovna "součást systému", tak je správné linkovat ji dynamicky, zatímco když "není součástí systému", tak je všechno jinak a má se linkovat staticky?Proč? Radši no comment a nechám toho, nebo se budeme bavit celý den o kravinách, na kterých se stejně nic nezmění.
Právě že je v případě linuxu je těžké říct, co je součástí systému, každý si to pak interpretuje po svém a pak např. 5 programů závisí pokaždné na jiné knihovně dělající to samé a máme přeplácaný systém. V případě Windows vývojář ví, co je součástí systému a může to použít. Pokud to nedělá a používá jiné knihovny, vytváří akorát bordel a je buď neznalý, nebo prostě to musí mít za každou cenu jinak (aneb proč by měl používat port GTK xml knihovnu microsoftu, když si může přivést vlastní, proč by měl používat windowsí funkce na kreslení fontů, když si můžou přitáhnout freetype a fontconfig ...).Jasně. Což je asi také důvod, proč je každý s Windows na Embedded systémech tak spokojený.
V případě Windows vývojář ví, co je součástí systému a může to použít.A co je součástí systému Windows? API Windows 95? Nebo Windows XP? Nebo Windows 7? A co takové .NET nebo MSI, to je také součástí systému?
Jenže těžko máte 50 webových prohlížečůJe jich jen o pár víc než ve standardních Widlích. No bóže. Já to mám rád, protože mám na výběr (každý je dobrý na něco jiného) v každé situaci a většina už má nějakou tu improvizaci v defaultu nainstalovanou.
30 "univerzálních" komprimačních programůKaždý používá jiný algoritmus, která má své plusy a mínusy. Každý si může udělat analýzu, který se hodí při jaké situaci a pak si podle situace vybrat a zefektivnit tak kompresi. Znovu vítám. Kdybych měl jenom jeden, autoritou přikázaný zip, tak ano, asi bych to otevřel vždy když mi někdo něco pošle, ale také bych za to asi vraždil.
20 mailových klientů, 50 přehrávačů videa a 30 přehrávačů hudbyA nepleteš si programy s knihovnama?
normální člověk má od každého typu programu jedenNechci do toho kecat, ale já i mám i ve Widlích od různých typů dva i více programů abych si efektivně mohl vybrat podle nastalé situace. Když jsou holt normální člověci lamy, tak co s tím? Mám se kvůli nim snad omezovat?
A nepleteš si programy s knihovnama?Ne.
Nechci do toho kecat, ale já i mám i ve Widlích od různých typů dva i více programů abych si efektivně mohl vybrat podle nastalé situace. Když jsou holt normální člověci lamy, tak co s tím? Mám se kvůli nim snad omezovat?Dělej si, co chceš, já mám např. Windows Media Player na filmy i hudbu a nepotřebuji kvůli tomu instalovat VLC nebo cokoli jiného, protože to všechno WMP umí (filmy enkódovat nepotřebuju). Na web mám Chromium a nepotřebuji ještě firefox či IE, ke kreslení mi stačí Paint.NET a nepotřebuji ještě GIMP, malování, kritu a jánevímco. Fakt nevím, k jaké činnosti bych měl 2 aplikace.
já umím vytvářet 7z, rar, zip, tar, gz, bz2, xz, ...A? Na tom je něco blbě? To je jako vztekat se, že existuje aplay, madplay, mpg321, flac321, ogg321,… když tu máme mplayer. Vždyť tě nikdo nenutí používat ani instalovat referenční implementace a rozhodně to není, že by jsme měli 30 přehrávačů hudby a 50 komprimačních programů.
Na web mám Chromium a nepotřebuji ještě firefox či IESám používám WebKit v podobě Epiphany a vím, že rozhodně to neumí vše a občas ten Firefox prostě potřeba je. Někdo holt používá víc aplikací k tomu stejnému a někdo se rozčiluje, že ten jeho neumí úplně všechno.
Na Linuxu to jde též, ale není to jeho přirozené chování a obecně se agituje, že je to špatný nápad.A také je. Všiml jsem si u Windowsích aplikací je to většinou jen pár knihoven a to je docela v pohodě, ale v případě svobodného softwaru jsou to někdy desítky až stovky knihoven což může být někdy docela šílené všechno pomixované s binárkama v jednom adresáři.
V zásadě už jsem viděl mnoho nápadů a Windows to řeší asi nejlépe.Doporučuju nainstalovat MSYS nebo Cygwin. A nebo jakoukoliv standardní aplikaci z GNU. Windowsí řešení je nejlepší…pro Windows. Ale v případě portování svobodných aplikací začíná teprve to pravé šílenství.
Linux se snaží předstírat, že programy neexistují, že každá aplikace má být jedna binárka a vše v jednom adresáři.
A o čem je to vlastně vůbec řeč?Novel Netware (nebo jak se to jmenovalo) zase přidal API každé sdílené knihovny do globálního prostoru názvů.
Když spravuji Windows, je to přehlednější, a řekl bych mnohem snadněji udržovatelnější, pokud si sázíte programy do vlastních adresářů.
V Linuxu je to jako v programu s miliardou globálních proměnných kdy nevíte co jí používá a kde jsou jaké vazby. Někde něco globálně změníte a vlastně si vůbec nemůžete být jist jaké všechny dopady to bude mít na zbytek systému, pokud je závislostí hodně.
Linuxový přístup je príma v případě, že držíte maličký systém – třeba v routeru, NASu, dedikovaném serveru. Tam je systém tak maličký, že všechny závislosti udržíte v hlavě a máte přehled.
Ostatně unix vnikl jako maličký, jeho kernel měl pár desítek tisíc řádků. Nikdo netušil do jak velkých rozměrů se to rozroste.
Mám pocit, že i Macu není přístup Linuxu ála globální těžko řiditelný systém baziliónu globálních vazeb všechno souvisí se vším a nikdo už pořádně nad tím nemá přehled použit. Ale Mac moc neznám, jen co se ke mně doslechlo.
Výborně, dokonalý argument. Řešení Linuxu je prostě nejlepší … o čem je to vlastně řeč?Co? To zas tvrdím kde? Bych si měl asi koupit brýle. A nebo bych to měl být opravdu já? Já jen tvrdím, že kombinovat knihovny a binárky v jednom adresáři je výhodné. Ale jen v případě, že je jich pár a že program nestojí na desítkách knihoven jako je tomu ve valné většině svobodných případů. Stejnětak není moc výhodné, když si třeba každá aplikace sebou táhne (a nebo má možnost si táhnout) svoji libgtk (Se pak moc dobře skinuje).
Jardík's ultimate answer? Sem se nebavil o tom jestli je to nebo není to šmejd, ale že se to tím
Unix styleprostě řeší jinak, což hned nemusí znamenat, že je to šmejd.
Když spravuji Windows, je to přehlednější, a řekl bych mnohem snadněji udržovatelnější, pokud si sázíte programy do vlastních adresářů.
Na MacOS je problém s aktualizací i v případě jednoho uživatele, pokud "neinstaluje" do /Applications, aktualizátor tu aplikaci pak nevidí. Na MacOS je ale problém i se spouštěním aplikací, např. takový photoshop se ani nespustí, pokud máte case-sensitive filesystém......coz samozrejme neni problem Apple, ale lemplovskeho Adobe. Jejich aplikace jsou uz dlouho peknou ukazkou nedotazenosti, pokud jde o jejich OS X verze. Vsak proc by se snazili, kdyz maji v oblasti profi grafiky de fakto monopol?
ale lemplovskeho AdobeNa tom se shodneme
Linuxový přístup je príma v případě, že držíte maličký systém – třeba v routeru, NASu, dedikovaném serveru. Tam je systém tak maličký, že všechny závislosti udržíte v hlavě a máte přehled.
Když spravuji Windows, je to přehlednější, a řekl bych mnohem snadněji udržovatelnější, pokud si sázíte programy do vlastních adresářů.Dobře. A jak zní ten jeden příkaz, kterým se všechny aplikace v systému zaktualizují? Respektive jak byste takto udržoval aktuálních 50 stanic s 600 uživateli? Na Windows je to sázení do vlastních adresářů stejně jenom takové polovičaté, protože spousta aplikací používá centrální registry a System32\.
Linux se snaží předstírat, že programy neexistují, že každá aplikace má být jedna binárka a vše v jednom adresáři.A víte, že je mi to celkem jedno? Nepamatuji si, kdy jsem naposledy potřeboval ručně sáhnout do
/usr/bin
či /usr/lib
. A to ani na Ubuntu, ani na Archu, ani na Debianu. Pár vlastních věcí mám v /opt
a tam je to skutečně jeden program - jeden adresář.
Respektive jak byste takto udržoval aktuálních 50 stanic s 600 uživateli?
Na to se používá například Microsoft System Center Configuration Manager.
Na Windows je to sázení do vlastních adresářů stejně jenom takové polovičaté, protože spousta aplikací používá centrální registry a System32\.Keci. Viz. někde výše. Registry ... každý slušně napsaný program si používá svůj klíč a nedělá bordel. Prasácké programy si slušný člověk neinstaluje.
A moc nevěřím, že to bude v jiných firmách lepší, když to takhle vypadá v jedné "malé" nadnárodní firmičce..Ale je. To že tam máte bordel neznamená že ho mají všichni.
A už jste ještě neslyšel o NSS, PolarSSL a spoustě dalších, které dělají „to samé“ :)
Nicméně mezi OpenSSL a GnutTLS jsou rozdíly. Pro někoho to může být licence, pro někoho (ne)podpora PGP v TLS, pro někoho výkon, pro někoho kompatibilita, pro někoho certifikace FIPS…
Ono pro nektery byl problem to pouzivat ikdyz meli widle a 602xml, protoze nedokazali na klavesnici napsat trebas # (jednomu zemedelci sem ji zakladal, asi 2 mesice po tom co to uz mel povinne pouzivat, mel tam uz nejaky zpravy ktery byly "precteny" ikdyz se tam jeste nikdo nikdy neprihlasil a sam by to asi nikdy nezvlad) a heslo si museli psat na listecek a ten strcit do supliku a pri kazdym prihlaseni ho vytahovat. Proti tomu se mozna bourili vic nez kvuli tomu ze musi mit windows, ktery uz stejne vetsinou meli, ale to ze si musi pamatovat heslo slozitejsi nez pepik1 to je zvedalo ze zidle ...
Proste takovej bordel a saskarna se jen tak nevidiJá hlasuji pro Windowsí řešení.taky bych rád hlasoval PRO.
Vždyť si to můžete nalinkovat jak chcete. Krom toho nechápu, proč by někdo studoval co všechno je někde v /usr/bin, pokud teda náhodou není doplňovač z bashe (což by teda měl dost nízké ambice, ale tak Ponkrác). Říct si rpm -q balicek -f je úplně to samý jako mít to všechno rozházený po všech čertech. Pokud po tom tak toužíte, napište si nad fuse udělátor, co vám tohle promítne do fs. Nebo i jenom blbej skript kde bude pár mkdir a ln. Velká věc. (K ničemu.)O tom by mi zajímalo více podrobností.
V Linuxu je to jako v programu s miliardou globálních proměnných kdy nevíte co jí používá a kde jsou jaké vazby. Někde něco globálně změníte a vlastně si vůbec nemůžete být jist jaké všechny dopady to bude mít na zbytek systému, pokud je závislostí hodně.Tohle je spíš případ Windows. Změňte něco v adresáři system32 a řekněte mi, jaké to bude mít všechny dopady? V linuxu se můžete aspoň podívat, které programy daný soubor používají. Ale ne, chcete snad říct že "do systému se nesmí hrabat"?
Tam je systém tak maličký, že všechny závislosti udržíte v hlavě a máte přehled.Nemusíte nic držet v hlavě, na to máte ten stroj. V hlavě si pak můžete udělat místo na něco, co ten stroj zatím neumí.
Linuxu ála globální těžko řiditelný systém baziliónu globálních vazeb všechno souvisí se vším a nikdo už pořádně nad tím nemá přehledOmílání omylu. Tohle není pravda. Díky explicitnímu sledování závislostí máte naopak naprosto přesný přehled nad vším. A dokonce se tam nesmí stát, aby v závislostech vznikl cyklus, takže nemůže "všechno souviset se vším".
Všiml jsem si u Windowsích aplikací je to většinou jen pár knihoven a to je docela v pohodě, ale v případě svobodného softwaru jsou to někdy desítky až stovky knihovenProtože ve Windows či OS X je součástí systému přesně to, na co je v Linuxu dva tisíce knihoven. Problém je v míchání programů a systému. GNU/Linux prostě jen vytahuje systémové věci na světlo boží. Takže i normální uživatel má šanci si všimnout grafických knihoven, Pythonů, Perlů… Není na tom nic špatného. Akorát, když se běžní uživatelé začnou ptát, nikdo jim nedokáže uspokojivě odpovědět (ano, odpovědi typu svoboda výběru ponechme stranou).
Protože ve Windows či OS X je součástí systému přesně to, na co je v Linuxu dva tisíce knihoven.Ono je to totiž rozdílným způsobem vývoje. Nač vyvíjet něco co už je vyvinuté? Nač to krást, staticky linkovat, obfuskovat a schovávat? Většina programů je jen slepencem funkcí, které nabízejí různé knihovny + něco málo jako přídavek. Pak si holt sebou program táhne různé knihovny jako závislosti. Já na tom též nevidím nic špatného. Spíš naopak.
Akorát, když se běžní uživatelé začnou ptát, nikdo jim nedokáže uspokojivě odpovědětNa co se začnou ptát?
Na co se začnou ptát?
http://disk.jabbim.cz/grunt@jabber.cz/lama.png
Změnil jsem vložený obrázek na odkaz. Filip Jirsák
Ono je to totiž rozdílným způsobem vývoje.A rozdílným způsobem distribuce.
Nač to krástSamoobsluhy Tvůrčích Monopolů™ sem prosím netahej.
Nač to krást, staticky linkovat, obfuskovat a schovávat?Citation Needed.
Na co se začnou ptát?Například: "Proč mám po instalaci holého systému pět tisíc balíčků? Já si nainstaloval jen systém!?" Uživatel může být prostě zmatený.
Na čo sú pod kapotou všetky tie kolieska? Ja som si kúpil len jedno auto.
Mno, veď to nemusí byť ani v tom OS. Až keď sa niečo poserie, tak sa musíš pozrieť pod kapotu Ale máš pravdu, ja analógie tiež nemám rád, obvykle viac zavádzajú, než ozrejmujú.
jen jezdili(a když se to posere, nech se starají jiní – k tomu já nejsem určen, já jsem určen k ježdění) fakt nesnáším. Dřív platili zlaté české ručičky a když se kamioňákovi rozbilo vozidlo někde v cizině, tak si ho sám dovedl s kladívkem opravit. Ach jo, kde jsou ty časy?
A rozdílným způsobem distribuce.Který se jen přizpůsobuje jinému způsobu vývoje.
Samoobsluhy Tvůrčích Monopolů™ sem prosím netahej.Čeho?
Citation Needed.Jako k čemu? Že se krade, staticky linkuje aby se schovalo, schovává a obfuskuje? Já už to beru spíš jako axiom.
Například: "Proč mám po instalaci holého systému pět tisíc balíčků? Já si nainstaloval jen systém!?"Protože normálně je to také tak, jen je to všechno pěkně úhledně poschovávané ve svých binárkách.
ke stahoveni baliku - staci si vypsat vsechny zavislosti a stahnou si vse najednouSynaptic dokonce umí vyrobit seznam URL těch balíků, který pak stačí předhodit nějakému download manageru.
Vážení pánové, každá knihovna a x86 kód potřebuje relokaci, tedy přepočítat při přesunu na jinou adresu. Tedy nahrajete-li stejnou dynamickou knihovnu do pěti programů, bude pravděpodobně v paměti ta knihovna 5×, tudíž k ušetření paměti nedochází. Protože v každém programu bude na jiné adrese, tudíž se kód knihovny nedá sdílet a bude muset být v paměti 5×.IMHO:
Na toto sa samozrejme myslelo. Kniznica je vo fyzickej pamati nahrana iba raz. Vo virtualnom adresovom priestore kazdeho procesu ma vzdy inu adresu. Kniznica potrebuje realokaciu, ale to este neznamena, ze sa upravi jej cely binarny obraz pre kazdy proces, cim by sa znemoznilo zdielanie.
Ak ide o intrukcie skoku v ramci kniznice (instrukcia skoku v kode kniznice, ktora odkazuje na ine miesto v kniznici) s tymto nic robit netreba, lebo vsetky skoky su adresovo relativne, ako parameter je ulozeny iba offset o ktory sa skace.
Inac sa riesi, ked kod kniznice musi volat kod z inej kniznice. Uvediem to na priklade: kniznice libSDL pouziva knizincu libc, z nej chce volat funkciu malloc. Namiesto toho aby priamo volala funckiu malloc, ktora moze byt vzdy na intej adrese. zavola funkciu malloc@plt ktoru ma vo svojej sekcii .plt a stade sa vykonavanie programu preniesie na funkciu malloc v kniznici libc. Pri realokacii sa musi zmnenit iba plt tabulka
Vážení pánové, každá knihovna a x86 kód potřebuje relokaci, tedy přepočítat při přesunu na jinou adresu. Tedy nahrajete-li stejnou dynamickou knihovnu do pěti programů, bude pravděpodobně v paměti ta knihovna 5×, tudíž k ušetření paměti nedochází. Protože v každém programu bude na jiné adrese, tudíž se kód knihovny nedá sdílet a bude muset být v paměti 5×.Lžete, vizte http://cs.wikipedia.org/wiki/Position_Independent_Code
Protože v každém programu bude na jiné adrese, tudíž se kód knihovny nedá sdílet a bude muset být v paměti 5×.Tohle je kravina, sdílí se paměť všech spustitelných objektů (statických i dynamických), takže jsou fyzicky v paměti maximálně* jednou a veškeré přemapování adres zajišťuje stránkovací jednotka. * Jelikož jsou původně v souboru na disku, při spuštění se pouze stránka RAM namapuje na prostor na disku a do RAM se načte až když je opravdu potřeba.
Nicméně Linux brání strategii, že jakékoli standardy, či domluva je omezování svobody a fuj, takže s emůžete spolehnout, že dynamické knihovny v Linuxu opravdu ani náhodou paměť nešetří.Doporučuju si přečíst aspoň něco okolo VMM v Linuxu. Linuxové jádro je opravdu hodně líné a nealokuje žádnou RAM dřív než je opravdu potřeba. Například když si při alokaci objednáte 20 megabajtů nul, tak dostanete hromadu referencí na tentýž 4kb segment v paměti. Dokud ty nuly nezačnete přepisovat tak žádnou další paměť nevlastníte.
Třeba ten první bod je pravda, jen pokud se nezmění ABI.
Nevýhoda dynamického linkování je nemožnost globální optimalizace a také to, že se načítá celá knihovna, i když je potřeba jen její určitá část.
Čím náhodněji na různé adresy budete knihovny nahrávát, tím spíše bude muset být knihovna v paměti několikrát, protože díky relokaci se nedá sdílet.A jéje, pan kolega se opět rozhodl předvést, že o tom, jak věci doopravdy fungují, toho ví pomálu. Sdílené knihovny na Linuxu už nějaký ten pátek jsou position-independent, takže se relokace týkají jen mizivé části adres (povětšinou ukazatelů umístěných v datech). Jednotlivé instance dynamické knihovny sdílejí naprostou většinu prostoru, instance statické knihovny nesdílejí naprosto nic.
Jinak: Viděl jsem program Renoise (ten sice nepoužívám), a ten nemá žádné závislosti, ani není určené, pro jakou distribuci a verzi Linuxu se hodí.
renoise
Pro instalaci programu stačí jenom nakopírovat soubor do vhodného adresáře a program je připravený k použití. Proto nevím, proč by to tak jednoduše nemohlo jít pro kterýkoliv program.
Zajímalo by mě, jak při tvorbě balíků, například RPM, ovlivním, jestli budou linkované staticky nebo dynamicky.Len veľmi málo rpm balíkov ma .spec súbor vytvorený tak, aby sa dala vytvoriť aj staticky skompilovaná verzia, takže ak niečo také chceš, budeš si musieť upraviť kompletne celý systém (pretože by staticky musel byť skompilovaný kompletný systém a od klasickej distribúcie sa také niečo asi čakať nedá). Síce môžeš použiť nejaké parametre pre kompilovanie a linkovanie, ktoré sa pokúsia vytvoriť statickú verziu, ale je veľmi pravdepodobné, že to fungovať nebude (a ako som už písal, musíš mať všetky potrebné knižnice skompilované kompletne staticky), takže bez úpravy .spec súbora to asi nepôjde (a niektoré knižnice/programy sa kompletne staticky ani vytvoriť nemusia dať).
prostě soubor přetáhnu a spustímNo, u některých otevřených programů by to
přetáhnu a spustímnemuselo být zas tak úplně košer, protože některé krom /bin, /include a /lib složek mají i nějaké /share knihovny kde si nesou soubory nezbytné ke svým programům a ty se většinou nastavují pomocí parametru --prefix při kompilaci. Nehledě na to, že pokud jde o dynamicky slinkovanou verzi, tak neznám žádnou takovou, která by měla cestu ../lib/*.
No jinak ale nechápu o čem se to bavíme. GNU není čistě binární operační systém a u něj by něco takového stejně nemělo začínat stáhnu/přetáhnu a spustím
, ale stáhnu/přetáhnu, zkompiluju a spustím
, leč jsou téměř ke všemu dostupné zdrojáky.
Pro vývojáře je mnohem snazší slinkovat výsledný program staticky než tvořit přinejmenším desítky balíků pro různá distra.. btw imho je to důvod proč je o tolik víc volně šiřitelných programů v binárkách pro windows..Jo, jenže následná údržba něčeho takového je také potom docela prdel. Což je také možná důvod, proč něco takového na Windowech téměř neexistuje.
No, u některých otevřených programů by to "přetáhnu a spustím" nemuselo být zas tak úplně košer..
Jo, jenže následná údržba něčeho takového je také potom docela prdel. Což je také možná důvod, proč něco takového na Windowech téměř neexistuje.
Je to svým způsobem elegantní, především z hlediska výrobce softwaru.No rozhodně mi to nepřijde moc elegantní z pohledu systému.
To je pravda, zase na woknech (a i na Macu ostatně..) je spousta komerčního softwaru. To je ten kámen úrazu.A
komerčnía
otevřený, to se nějak vylučuje?
Faktem je že na jednu stranu komerční software na GNU/Linuxu chce málokdo, na druhou stranu by to přineslo do vývoje nemalé peníze...Ale také všechny nevýhody s tím související.
Jinak: Viděl jsem program Renoise (ten sice nepoužívám), a ten nemá žádné závislosti, ani není určené, pro jakou distribuci a verzi Linuxu se hodí. renoise Pro instalaci programu stačí jenom nakopírovat soubor do vhodného adresáře a program je připravený k použití.Jasně. A možná by bylo také fajn zmínit, že ten Renoise Tracker je pěkně suprově svobodný kus softu, že? To bude možná také ten důvod. A jinak ani renoise tracker není komplet staticky slinkovaný, ale má také nějaké své závislosti. Jinak doporučuju s ním zkoušet nějaké plugin nebo syntetizéry a pak člověk pochopí, že to statické slinkování(ale částečně v tom hraje roli i to, že to není OSS) rozhodně není tak růžové.
Proto nevím, proč by to tak jednoduše nemohlo jít pro kterýkoliv program.Já nevím. Já zas včera stáhl Firefox 4. Ten komplet dynamicky slinkovaný a má spoustu závislostí a ani tak jsem s tím neměl nejmenší problém.
./configure --enable-static
, nicméně vzhledem k tomu, že se ptáš na něco takového, bude možná nejlepší si o tom všem nejprve něco zjistit.
Kolik lidí v roce 2010 nemá internet? A kolik z nich používá Linux?Například já jsem dříve neměl, ani nepotřeboval internet. Když jsem přešel na Linux, pořídil jsem si internet jenom kvůli tomu, abych mohl stahovat balíky, kvůli ničemu jinému. Kvůli takzvanému peklu závislosti by se totíž balíky na cizím internetu blbě stahovali, protože bych nemohl použít nástroj pro automatické vybírání závislostí. Kdyby balíky na sobě nezávisely, nepotřeboval bych na svém počítači internet ani teď, protože pokaždé, když bych se rozhodl stáhnout si nový program, stačilo by mi jít občas do města na internet, tam si stáhnout balík obsahující ten program, donest domů a nainstalovat.
Pokud ve svém uvažování vyměníte „balík se závislostmi“ za „seznam balíků“, začne vám to fungovat. Na počítači, kde chcete instalovat, si připravíte seznam balíků i se závislostmi, a na počítači s internetem si pak ty balíky stáhnete.Ale když závislé balíky mají ještě další závislosti, tak se celý seznam najednou neudělá, aby v něm nechyběly ani ty závislosti pro hlavní balík, ani závislosti pro závislosti a tak dále. Takže by se postup musel opakovat tak dlouho, dokud nebudou všechny závislosti vyřešené.
Ale když závislé balíky mají ještě další závislosti, tak se celý seznam najednou neudělá, aby v něm nechyběly ani ty závislosti pro hlavní balík, ani závislosti pro závislosti a tak dále.Kde to žiješ? Vytvoření stromu závislostí je triviální operace, kterou zvládá snad každý balíčkovací systém, co znám.
Takže by se postup musel opakovat tak dlouho, dokud nebudou všechny závislosti vyřešené.Používáš spojení "všechny závislosti" ve dvou významech, takže je to co říkáš nejen naprosto nesrozumitelné, ale není to ani pravda.
No větší zmatenost jsem už dlouho nečetl...
Já se vsadím, že mnohem bezpečnější při vypsání pro a proti by se ukázaly statické knihovny.Tak sem s nějakým pro
Výhoda dynamicky linkovaných balíků je ta, že se šetří místo na disku: Když několik programů bude potřebovat stejné knihovny, stačí, když ty knihovny budou v systému jenom jednou a nemusí být obsažené v každém programu zvlášť a nemusí se takto knihovny opakovat. Další výhoda je, že se šetří paměť: Když budeme mít spuštěné současně několik programů a každý bude potřebovat stejné knihovny, stačí, když se do paměti načtou jenom jednou a nemusí se načíst pro každý program zvlášť.Není to jen o tom. Je to o tom, že většina programů je poslepovaná ze spousty součástí. A jednotlivé součásti se neustále vylepšují (zrychluje se jejich běh, uzavírají se bezpečnostní díry) a není bez problému jakoukoliv z nich za běhu pod nohama vyměnit za aktuálnější. Třeba dřív se různé transformace cpaly do kodeků přímo jako zdrojáky, ale dnes se s velkou slávou přechází právě na knihovny. Stejnětak kompresní algoritmy. Některé programy jdou dokonce tak daleko, že i svoje součásti nabízejí jako knihovny i když nemusí (, ale to už je fakt hnus). Prostě seznam výhod sdílených knihoven by byl aspoň tak na jednu stránku.
Přes všechny výhody dynamicky linkovaných balíků bych dal přednost staticky linkovaným balíkům, protože ty mají proti dynamickým zase jiné výhody a ty se mi zdají být o hodně větší.Už se to zkoušelo u různých GNU distribucí (dokonce i BSD – viz PC-BSD), ale nakonec se to zase vrátilo, protože je to pěkně na høvnø.
Přesto většina balíků je ale dynamických, zřejmě si většina lidi myslí, že jsou lepší.Většina lidí si to nemyslí, ale většina lidí to ví. A vychází při tom z více než pětadvacetileté zkušenosti.
U statických balíků neexistuje tak zvané peklo závislostí.Tam zas existuje jiné peklo. Stačí si vzít jako příklad operační systém Windows. Doporučuju někdy si tam pohrát s GNU balíkama. To je peklo jak pro vývojáře, tak pro uživatele. Windowsáci mají GNU (společně s balíkovacíma systémama) opravdu co závidět.
Ti nemůžou využít automatické řešení závislosti. Nezbývá jim nic jiného, než postupovat takto: Vyberou si nějaký program. Půjdou někde, kde je internet. Tam si stáhnou a vypálí potřebný balík. Donesou ho domů a pokusí se ho nainstalovat. Dostanou odpověď, že balík nejde nainstalovat, protože chybí závislé balíky. Závislé balíky si zapíšou a půjdou znovu na internet. Zase si je stáhnou a vypálí a donesou domů. Zase dostanou odpověď, že ty nové balíky nejde nainstalovat, protože k těm novým balíkům chybí další závislosti. A tak se to může opakovat třeba i víckrát za sebou, než bude možné jeden program nainstalovat.A nebo stačí dát balíčkovacímu systému přepínač aby postahoval vše i se závislostma a na cílovém počítači je jen stačí všechny označit a dvakrát kliknout.
U statického balíku se to stát nemůže.Jasně, ten zas může jenom sletět na nekompatibilní verzi libc knihovny.
Další výhoda statických balíků: Statický balík je kompatibilní s různými distribucemi a verzemi Linuxu, je víceméně univerzální.
Narozdíl od dynamických. Dynamické balíky pasují jenom do te svoje dystribuce a verze Linuxu a do dalších už ne. Proto u dynamických balíků je nevýhoda.Není úplně tak pravda. Viz o něco výše. A v případě, že už binárka je kompatibilní s verzí libc knihovny, tak je egal jestli je statická nebo dynamická. Stejnětak závislosti ostatních knihoven, protože většinou si sebou táhnou programy min. požadované verze knihoven.
Pokud to byl pro nás důležitý program, jsme v pytli.Proč by jsme byly v pytli, když jsou ke všemu zdrojáky? A snad nejsi lama, ne?
Vyměníme operační systém a balíky, které máme vypálené, si znovu nainstalujeme do nového Linuxu. Balíky budou pěkně přenositelné z jednoho Linuxu do druhého.Ty by sis asi měl vyjasnit co je to distribuce GNU systému. Když si nainstaluješ jinou distribuci, přeinstaluješ ji balíkama z původní verze, tak v čem se asi bude lišit?
Někdo by mohl říct, že budeme mít zastaralé programy. To vadí?Ano vadí.
Ta jistota, že budeme mít stále všechny programy, na které jsme zvyklí, za to stojíNe, nestojí.
Další příklad: Budeme si chtít stáhnout a nainstalovat novější verzi některého programu nebo nějaký nový program, který předtím neexistoval a vznikl nedávno. Pokud jsou balíky dynamické, není to tak jednoduché. Jsme omezení jenom tím, co najdeme v repozitářích pro náš Linux. Když v nich požadovanou verzi programu nebo požadovaný program nenajdeme, musíme buď kompilovat, nebo přejít na novější verzi Linuxu, která už má v repozitářích to, co potřebujeme. Zase musíme kvůli jednomu programu vyměnit celý operační systém a spolu s ním i další programy. Prostě všechno musíme zahodit a začít zase od nuly. U statických balíků se to stát nemůže. Tam, když si chceme pořídit jiný program, nebo jinou verzi programu, můžeme, aniž bychom museli vyměňovat celý operační systém a všechny ostatní programy.Různé distribuce mají různé způsoby. Ubuntu má PPAčka, Fedora/Debian má unstable, Gentoo má odmaskování experimentálních balíků. A stejně když budeš stahovat nějakou experimentální verzi čehokoliv, tak s největší pravděpodobností k nim budeš muset stáhnout i experimentální verze závislostí (ke git verzi programu, třeba git verzi některých knihoven). Takže v čem si jako pomůžeš?
U statických balíků můžeme nezávisle na sobě vyměňovat programy, verze jednotlivých programů, verzi a distribuci Linuxu. Prostě všechno, nebo skoro všechno je kompatibilní, dá se různě kombinovat.Jakože u dynamických nic takového dělat nemůžeš? To zas odkdy?
Nakonec bychom nemuseli být omezení jenom na repozitáře pro naši přesnou verzi a distribuci Linuxu, mohli bychom použít skoro jakékoliv repozitáře, což by se hodilo především v případě, kdyby repozitáře pro naši verzi Linuxu z internetu náhodou zmizely.Používání oficiálních repositářů má také svůj důvod.
Kdyby byly všechny balíky statické, měli by ušetřenou práci taky výrobci balíčků. Nemuseli by vyrábět balíky pro každou distribuci a verzi Linuxu zvlášť, protože by balíky byly víceméně univerzální. Stačilo by vyrábět jenom balíky zvlášť pro RPM, DEB a podobně, pro 32 bitů, pro 64 bitů, a už by nemuseli dělat zvlášť pro různé distribuce a verze Linuxu. Nebylo by potřeba s každou novou verzi Linuxu dělat tisíce balíků do nových repozitářů, stačilo by je jenom okopírovat. Jenom v případě, že by vznikl nový program nebo nová verze programu, musel by se udělat nový balík, aby i na to existoval hotový balík.?
Tady by si měl někdo opravdu ujasnit proč se to všechno dělá.
Není to vynikající?
Nebylo by to vynikající?
Není to pěkné?Ne, není. Je/bylo by to pěkně na p**u.
Tam zas existuje jiné peklo. Stačí si vzít jako příklad operační systém Windows. Doporučuju někdy si tam pohrát s GNU balíkama. To je peklo jak pro vývojáře, tak pro uživatele. Windowsáci mají GNU (společně s balíkovacíma systémama) opravdu co závidět.Teda ať nemluvím za jiné. Sám jsem si to zkoušel. Jak PC-BSD, tak dělání binárek svobodného softu pod majoritním operačním systémem. Ano, ze začátku je to možná super, ale po jisté době to začne pěkně srát.
BWT: Ten Linux
, to je zas co? Nějaký operační systém?
Uvědom si že autor postu se na to dívá z hlediska naprostého BFU, kterého zajímá jen dostupnost co největšího množství software, a to stylem "stáhnout a spustit" jako na Windows,Tak se na to dívá ze špatného pohledu a měl by si uvědomit, že GNU není systém určený lamám.
Nějaká konzistence v rámci systému, či vylepšování knihovních algoritmů ho vůbec nezajímá. On jen chce používat to na co si zvykl a co mu vyhovuje... podobně jako typický uživatel Macku či Wokýnek.Jasně. Jenže bohužel to někdo řešit musí. A většinou jsou to vývojáři těch programů. A doporučuj poslechnout si někdy ty, jak u toho nadávají jak špačci.
ps. ten překotný vývoj knihoven může být občas kontraproduktivní. Spoustu věcí člověk nemůže zkompilovat proti novějším knihovnám, protože se změnilo API...Když se změní API nějakého backendu, tak se tomu většina frontendů přizpůsobí a pak jsou verze programů, které jsou funkční s určitými rozsahy verzí backendů. Uznávám, že to není úplně nejideálnější, ale většina programů si to aspoň teď hlídá. V minulosti to bývalo mnohem horší.
Proč by jsme byly v pytli, když jsou ke všemu zdrojáky? A snad nejsi lama, ne?Jsou, ale co když se některý program přestane vyvíjet a už nepůjde sehnat ani balík, ani zdroják? A to nejen novější verze programu, ale ani staré. A zrovna jak naschvál se může jednat o program, který je pro někoho důležitý. To už by byl opravdu v pytli. Nebo to nehrozí?
Jsou, ale co když se některý program přestane vyvíjet a už nepůjde sehnat ani balík, ani zdroják?Proč by neměl jít sehnat zdroják? Např. u GPL je to podmínka, že pokud k něčemu seženeš binárku, měl si k ní sehnat i zdroják.
velmi zastaralýmaprogramama máte.
ldd /usr/bin/evolution | wc -l 135A ted se pokousite autorovi aplikace reportovat chybu, ktera nastava jen u vas, prestoze mate stejne zdkojaky jako on. Chyba bude nejspis v jedne z tech 135ti knihoven. U staticky slinkovanych aplikaci muzete snaze poslat core autorovi k prozkoumani. U dynamicky linkovanych programu se taky muze stat, ze se stejna chyba bude projevovat ruzne.
Wokenni debuger umi stahovat z webu debug symboly ke knihovnam na zaklade checksum-u. Bylo by pekny kdyby slo otevrit v gdb core a debuger by si stahnul z webu redhatu vsechny debug symboly a rek by vam s jakyma knihovnama to spadlo.Tak to řekne i bez symbolů a jinak přesně toto gdb ve Fedoře dělá. Když nejsou symboly, tak se zeptá a pak je pomocí rpmka stáhne. A nebo to ještě dělá abrtd, když se klikne na Report.
Statickou kompilaci nechci až na velmi výjimečné případy (servisní jednoúčelová binárka apod). Z důvodů: 1) Nutnost překompilovat skupinu balíčků při změně knihovny. 2) Nutnost překopmilovat prakticky celý OS při změně nějaké zásadní knihovny.Proč by se kvůlo změně knihovny předělávat několik balíků, kvůli tomu, že by ta knihovna byla obsažená ve více balíkách? Nestačilo by předělat jenom ten balík, u kterého tu novější knihovnu chceme mít? Jenom ten program, u kterého je důvod vyměnit knihovnu za novější. Nemusí přece všechny balíky, ve kterých je určitá knihovna, mít stejnou verzi te knihovny.
V knihovně byla bezpečnostní díra, umožňující útočníkovi získat vládu nad běžící aplikací.To by nám musel někdo po internetu vlést do počítače. To je tak lehké?
/bin/cat
.vimrc
jen proto, že si programy s sebou přitáhly několik různých verzí Vimu?)
Globální systém pro správu balíčků, který se stará o závislosti, mi zatím opravdu přijde jako jediné funkční řešení.
Globální systém pro správu balíčků, který se stará o závislosti, mi zatím opravdu přijde jako jediné funkční řešení.Nejsem si jistý jestli to ještě někdo nezkoušel ale daleko funkčnější by mi přišlo kdyby kromě správy balíčků se také zabýval správou konfigurace systému, popř. i správou revizí. Tedy nějak to propojit s ostatními "správci".
nebo škoda, že si ho neumím ze zdrojových kódů vyrobit sám. Je to těžké? Jak bych se to mohl naučit?Internalie .run neznam ale principielne to bude neco zhruba nasledujiciho: 1) zkopilujes s --prefix nekam do /tmp/foobar (plus opravis dalsi cesty pokud jsou potreba) 2) binarky projedes lddckem a vsechny knihovny co uvidis pridas k baliku, rekneme do lib/ 3) opakujes bod 2 s knihovnami knihven, dokud nedojdes k zaveru ze mas dost - nejpozdeji az narazis na libc
Pokud se nepletu, má to taky výhodu, že takový soubor netrpí závislostmi, a taky není určeno, do které verze a distribuce Linuxu se hodí, je kompatibilní se všemi.Takhle to nefunguje. Přibalené knihovny nejsou všechno, narazíš na spoustu problémů při komunikaci se zbytkem systému. Dobrým příkladem je zvuk.
Zdá se mi, že dost velký problém linuxu pro desktopové použití je, že věci jako zvuk nebo ovladače HW a podobné nemají nějaké standardní a hlavně zpětně kompatibilní rozhraní. U open source aplikací z repozitářů to tak nějak nevadí, i když to přináší stálou práci navíc.Blýská se na lepší časy. A vůbec se v posledních letech hodně zlepšilo. Ale v tomhle máš podle mě pravdu.
Srovnávám se světem Windows, kde jsou mnohé věci řešeny podstatně hůře než na Linuxu, ale fakt je, že většina aplikací i z dob Windows 95 bez potíží běží na nejnovější verzi systému.Na windows je to trochu jinak, poskytují určité vrstvy kompatibility se staršími verzemi. Na Linuxu to není tolik potřeba, i když třeba ALSA poskytuje kompatibilitu s OSS a najdeš mnoho dalších příkladů. Samozřejmě lze v Linuxové distribuci implementovat zpětnou kompatibilitu nebo standardizovat rozhraní. A myslím, že spousta rozhraní je standardizovaných na Linuxových distribucích lépe.
Ale uzavřené aplikace tu prostě jsou a obrovské množství lidí je z nějakého důvodu používá. Běžne potřebuje provozovat aplikace, které výrobce už nepodporuje, resp. výrobce vůbec neexistuje.Právě z tohoto důvodu jsem pro částečnou eliminaci uzavřeného software, protože má kratší životnost. Tam, kde se uzavřenému software nelze vyhnout, je asi nejlepší udržovat nějakou vrstvu kompatibility (příkladem může být třeba i wine), která je ale potřeba vyvýjet i s ohledem na konkrétní aplikace.
Linux k nim není zrovna přívětivýÚstupky uzavřeným ovladačům považuju za nepřístupné (až na výjimky). Jejich vliv na budoucí použitelnost hardware je příliš zlý.
Nemůžete po nich ale chtít, ale je udělali open source, což by asi bylo řešení těch problémů.Ano přesně to od ovladačů hardware očekávám. Ať už jsou od výrobce nebo ne, chci je opensource a tím pádem dlouhodobě udržitelné bez ohledu na vůli výrobce. Uzavřené ovladače slouží hlavně k držení uživatelů jako rukojmích a vynucování upgradu hardware.
To je skutečně alespoň trochu stabilní API pro ovladače v linuxu takový problém?Stejně jako na windows, je to o těch vrstvách kompatibility. Navíc toto je oblast, kde probíhá dost živý vývoj (a to nejen na Linuxu). To je skutečně uvolnění specifikací za účelem umožnění vývoje opensource driverů (ani neni potřeba aby je firma sama vyvíjela), takový problém? Pokud ano, tak to rozhodně není problém můj. Za sebe s tímto vůbec nemám problém a používám prakticky výhradně opensource drivery. A použitelnost grafických karet posuzuju právě ve spojení s OSS drivery, pro svoje účely. Takže pokud OSS drivery neumí 3D, posuzuju (opět pro sebe) kartu jako kartu bez 3D. Ale chápu, že jiní to vidí jinak.
Potíž je v tom, že zrovna u těch grafik je dost podstatná část know-how a nákladů vložena právě do těch ovladačů (Nvidia to alespoň tvrdí). Samotný hardware toho moc neumí, je programovatelný. Čili výrobce z velké části vydělává na těch ovladačích. Dají se považovat za komerční uzavřený software, poskytují výrobci konkurenční výhodu.Ať si tvrdí, co chtějí. Spousta lidí dává přednost OSS driverům (ať už znalých nebo neznalých, v druhém případě třeba i nevědomky) a tudíž budou tu grafickou kartu považovat za velmi slabou, protože s OSS drivery taková opravdu bude.
Může být situace, že by otevření ovladačů znamenalo pro výrobce sebevraždu ve smyslu toho, že se objeví X dalších firem, které nabídnou nižší cenu, protože neměly náklady s jejich vývojem. To je ta situace, kdy podle mě po výrobci nelze požadovat plně otevřené ovladače. U jiného HW může být situace zcela jiná.Otevření ovladačů je něco, co nikdo po nikom nechce. Pokud někdo otevře ovladače, tak se mu tleská, ale požadovat to nelze. Linuxová komunita včetně té firemní požaduje pouze zpřístupnění specifikací.
Velká většina počítačů si víc než vystačí s grafikou na úrovni posledních integrovaných Intel, kde jsou linuxové ovladače takové, jaké by měly být - tj. otevřené, Intel je sám vyvíjí, spolupracuje.Ano, to jsou jedny z mých nejoblíbenějších :). Na pracovní stanici stokrát lepší než cokoli s closedsource drivery.
Takže je tu skupina lidí, kteří potřebují využít výkon těch 3D grafik naplno.Takhle, do 3D se nechci míchat, je to úplně mimo moji oblast zájmu. Co mě zajímá, jestli výrobce umožnil tvorbu plnohodnotných OSS driverů s 2D akcelerací, nebo se na jejich vývoji dokonce aktivně podílel. Takové produkty mi vyhovují, i kdyby to znamenalo, že je potřeba pro 3D instalovat nějaký closed source doplněk (který osobně nepotřebuju). Ať to funguje skvěle na opensource na 2D a budu relativně spokojený.
narazíš na spoustu problémů při komunikaci se zbytkem systému. Dobrým příkladem je zvuk.Tak zrovna u zvuku jsem zvyklý na toto: dříve bylo OSS, nyní je alsa. Alsa je s OSS plně zpětně kompatibilní (v některých případech je alsa emulace lepší než původní OSS). Jestli nějaké postmoderní pulse-sračky tato pravidla porušují tak je to jen o důvod víc je hodit do koše.
No... tys tomu dal. Taková snůška blábolů, to jsem dlouho nežral... naposledy na jiném tvém příspěvku.
Dynamické linkování má jednu zásadní výhodu - šetří paměť RAM. Mít staticky linkované např. KDE, tak se nevejdeš do 2G RAM. Je vidět, že víš fakt kulové o tom, jak funguje počítač,linux a podobně.Fakt,raději nic nepis.A nebo pis,aspon se tu lidi pobavi...
A bohuzel je to tak,ze linux je spojen s internetem uz od sveho vzniku, takze argument 'pokud nekdo nema net' je v dnesni dobe "netu za dve kila" je alibisticky - dnes si jej muze dovolit opravdu kazdy,kdo jen trochu chce!
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.