Programmabibliotheek

Van Wikipedia, de gratis encyclopedie
Spring naar navigatie Spring naar zoeken

Een programmabibliotheek (korte bibliotheek; Engelse bibliotheek, korte lib) waarnaar in het programma wordt verwezen , is een verzameling van subprogramma's / routines die oplossingen bieden voor thematisch samenhangende problemen. In tegenstelling tot programma's zijn bibliotheken geen zelfstandig uitvoerbare eenheden, maar bevatten ze hulpmodules die door programma's worden aangevraagd.

In bredere zin zijn programmabibliotheken (soms ook "componentenbibliotheek" of "klassenbibliotheek" genoemd) alle soorten bibliotheken die programmacode (componenten) leveren/bevatten. Hierbij wordt onderscheid gemaakt tussen programmabibliotheken, onder meer naar het type programmacode, b.v. B. bronteksten, macro's, object- of bytecode, machinecode, enz. Dienovereenkomstig worden bibliotheken op verschillende tijdstippen gebruikt, sommige alleen in de context van softwareontwikkeling (van tools van de ontwikkelomgeving ), andere alleen voor de uitvoering van programma's, weer andere als een gemengde vorm van beide. Dergelijke bibliotheken bevatten vaak niet alleen subroutines, maar programmacodedelen van alle programmatypes .

Frameworks zijn een speciale vorm van programmabibliotheken.

toegang

Mogelijke toegang tot functies van een programmabibliotheek wordt bepaald door de programmeerinterface (API). Dit is het geheel van de openbaar beschikbare functies en klassen; in tegenstelling tot de privé-units van de bibliotheek die niet toegankelijk zijn.

Sommige propriëtaire programmabibliotheken worden niet gepubliceerd in de broncode omdat ze bedrijfsgeheimen vertegenwoordigen. Om te beschermen tegen decompilatie wordt dan vaak een obfuscator gebruikt en worden alle symbolen ( variabele- en sprongadresnamen ) verwijderd.

Opslagformulieren

Programmabibliotheken en hun inhoud kunnen in verschillende vormen en structuren worden opgeslagen, afhankelijk van het besturingssysteem en de ontwikkelomgeving, bijvoorbeeld:

  • De bibliotheek is een map met bestanden en de elementen/componenten zijn individuele bestanden . een
  • De bibliotheek is een bestand dat een identificeert de onderdelen daarin zijn van de programma's van de ontwikkelomgeving of een speciale bibliotheek management software en processen.
Voorbeelden: Een zogenaamde 'DLL' van Microsoft of een PO-bestand van IBM- mainframes als bibliotheek voor bronteksten, objectmodules of uitvoerbare laadmodules.
  • Verschillende soorten bibliotheken worden beheerd in een gemeenschappelijk bestand a , de ontwikkelomgeving kan dit onderscheiden/verwerken. Voorbeeld: Een 'MDB' in MS Access bevat bibliotheken met broncode, macro's, voorvertaalde pseudocode en andere codetypes.
  • Er is geen 'bibliotheek', de componenten worden opgeslagen en uitgevoerd als individuele bestanden, b.v. B. als "EXE-bestanden".
a beheerd door het normale bestandsbeheersysteem van het besturingssysteem

Statische bibliotheken

Een “statische bibliotheek” is een programmabibliotheek die modules / subprogramma's bevat die door een zogenaamde linker zijn gekoppeld aan de compilatie van een ander programma. De linker genereert een uitvoerbaar bestand, meestal voor een hoofdprogramma, of (afhankelijk van het besturingssysteem) een laadmodule in een laadbibliotheek waarin de door hem opgeroepen modules permanent (statisch) geïntegreerd / gekoppeld zijn.

Een optimaliserende linker zoekt alleen naar die componenten (subroutines of gegevens) van de toegewezen objectmodules (bibliotheekbestanden) die daadwerkelijk door het programma worden aangeroepen (waarnaar wordt verwezen) (en waarvoor geen overschrijfimplementatie in het programma is) en voegt ze vervolgens toe aan de programma. Het resulterende bestand is overeenkomstig groter. Simpele linkers voegen simpelweg de complete objectmodule of de complete bibliotheek toe en vergroten daarmee het programma nog meer.

Een statische bibliotheek is over het algemeen zelf het resultaat van broncode, verdeeld in verschillende modules, waarvan de compilaties ( objectmodules ) vervolgens door de linker worden samengevoegd om de bibliotheek te vormen.

Dynamische bibliotheken

Componenten van dynamische bibliotheken worden alleen geladen in de belangrijkste geheugen gedurende de looptijd van een programma via een zogenoemde loader . Dit gebeurt ofwel door een expliciete instructie van het programma of impliciet door een zogenaamde runtime loader , als het programma dynamisch is gekoppeld . Tegenwoordig gebeurt dit meestal met ondersteuning van het besturingssysteem, aangezien (zie hieronder) dynamische bibliotheken afzonderlijk worden behandeld met betrekking tot het wisselen en weergeven in de programma-adresruimte. De lader is daarom tegenwoordig vooral een onderdeel van het besturingssysteem.

Dynamisch gekoppelde programma's hoeven zich geen zorgen te maken over het zelf laden van de benodigde dynamische componenten. Bij dynamisch koppelen zijn de bibliotheek en de compilatie slechts losjes met elkaar verbonden. In plaats van het kopiëren van de benodigde symbolen ( variabele- en sprongadresnamen ), zoals het geval is bij statische koppelingen , wordt er alleen naar verwezen. Een zogenaamde runtime binder zorgt voor het laden van de dynamische bibliotheken en het zoeken naar symbolen. De symbolen waarnaar wordt verwezen, worden ofwel onmiddellijk opgelost (voordat het eigenlijke programma wordt gestart of bij het laden vanuit de bibliotheek) of lui ( lui) wanneer het symbool voor de eerste keer wordt gebruikt.

Een typisch gebruiksvoorbeeld voor het expliciet openen van bibliotheken (het adres van symbolen opzoeken bij hun naam om het symbool te gebruiken) is met plug-in- architecturen. Een ander scenario is een optionele bibliotheek die wordt gebruikt als deze aanwezig is, maar het ontbreken ervan is geen fout.

Een voordeel van dynamische bibliotheken is dat programma's die een dynamische bibliotheek gebruiken profiteren van bugfixes in de bibliotheek zonder dat ze opnieuw hoeven te worden gecompileerd. Als er bijvoorbeeld een fout wordt gevonden in de OpenSSL- bibliotheek en wordt gecorrigeerd (de bijbehorende bibliotheek is vervangen), volstaat het om de programma's die deze bibliotheek gebruiken opnieuw te starten om de fout ook in deze programma's te corrigeren.

Aangezien de bestanden waarin dynamische bibliotheken zijn opgeslagen, alleen tijdens gebruik worden gelezen en uitgevoerd, maar niet worden gewijzigd, hoeven besturingssystemen met virtueel geheugen dynamische bibliotheken slechts één keer te laden en kunnen ze deze vervolgens weergeven in de adresruimte van alle processen die ze gebruiken. Dit is voordelig in multitasking- systemen, bijvoorbeeld wanneer de bibliotheken in het algemeen erg groot zijn en door veel processen tegelijkertijd worden gebruikt. (Als de dynamische bibliotheek statussen of opgeslagen gegevens heeft, kan dit worden onderschept met copy-on-write .)

Veel moderne besturingssystemen laden de dynamische bibliotheken echter niet onmiddellijk, maar geven ze in plaats daarvan indien nodig rechtstreeks vanaf de harde schijf weer - ze worden behandeld als verwisselde pagina's . Evenzo worden pagina's die niet vereist zijn en die tot een dynamische bibliotheek behoren en niet zijn gewijzigd, gewoon weggegooid. Indien nodig kunnen ze opnieuw worden geladen vanaf de harde schijf.

Voorbeelden

Programmabibliotheken leveren componenten in bepaalde contexten waarin ze qua constructie en interfaces (moeten) passen. Dienovereenkomstig zijn er programmabibliotheken, bijvoorbeeld in de volgende contexten:

Bibliotheken in verschillende programmeertalen

Bibliotheken in programmeertalen bevatten services die niet in de compiler zijn geïmplementeerd, maar die in de taal zelf zijn geprogrammeerd en die ofwel samen met de compiler ofwel volledig afzonderlijk daarvan beschikbaar zijn voor de programmeur. In het eerste geval wordt de bibliotheek meestal gespecificeerd in de taalbeschrijving. In het tweede geval spreekt men van een externe bibliotheek.

Bibliotheken die in de taalbeschrijving worden gespecificeerd, verschillen soms sterk in reikwijdte.

taal Onderdelen / pakketten Kopteksten / klassen Functies / methoden / constructors
C (C89 + Wijzigingen) 1 18e 142
C (C99) 1 24 482
C ++ 1 32 + 18 (C89)
Java 2 (JDK 1.2) 62 1,287 ≈ 18.000
Java 6 202 3.850 21.881
.Netto 1.0 41 3,581 35.470
.Net 1.1 43 3.818 37,556
.Netto 2.0 51 7,419 74.607
.Net 3.0 80 10,639 102.613
.Net 3,5 98 11.417 109.657

Java

Java is een eigen platform en maakt gebruik van een bibliotheekconcept dat niet gebonden is aan het besturingssysteem. Er wordt in principe geen onderscheid gemaakt tussen programma en bibliotheek. Alle klassen worden gecompileerd in de vorm van .class- bestanden en worden indien nodig geladen. In de regel worden bibliotheken, als ze uit meerdere klassen bestaan, gecombineerd in een Java-archief . De Java API zelf is ook beschikbaar in de vorm van Java-archieven.

Aangezien de afzonderlijke klassen van een bibliotheek alleen tijdens runtime worden geladen, kunnen er vertragingen optreden wanneer de bibliotheek voor de eerste keer wordt gebruikt totdat de klasse is geladen en geïnitialiseerd. In Java voor real-time systemen , maar ook in Java SE , kan de class loader de juiste methode-aanroepen gebruiken om bepaalde of alle benodigde bibliotheken te laden bij het starten en ze ook niet langer te verwijderen, zodat er geen onverwachte vertraging in het gebruik is.

Bibliotheken in verschillende besturingssystemen

ramen

Het besturingssysteem Windows en OS / 2 is een bibliotheekbestand dat bindt dynamisch als DLL (voor erk dynamische L L ibrary inkt genoemd). Dienovereenkomstig hebben deze bestanden meestal de bestandsextensie .dll . Hun bestandsformaat is New Executable (16-bit), Linear Executable (32-bit OS / 2) of Portable Executable (32- of 64-bit Windows).

Windows maakt onderscheid tussen verschillende soorten DLL's:

DLL's op instapniveau bevatten functies, terwijl ActiveX-DLL's klassen bevatten.

DLL's tot Windows 98 en Windows NT 4.0 kunnen niet worden beheerd - elk programma kan ze uitwisselen en kan mogelijk het besturingssysteem beschadigen. Windows Me , Windows 2000 en de daaropvolgende versies hebben systeembeveiliging die ook de DLL's omvat.

voordelen

  • Naast code kunnen gegevens (bijvoorbeeld dialoogbronnen) ook door meerdere processen gezamenlijk worden gebruikt.
  • DLL's zijn vaak statisch gekoppeld, maar kunnen ook dynamisch worden gekoppeld . Dynamisch betekent hier dat de DLL tijdens runtime expliciet door het programma wordt geladen en de functies die in de DLL staan ​​"handmatig" aan het programma worden gekoppeld. Dit maakt het mogelijk om de functionaliteit van het programma tijdens runtime te wijzigen door de DLL uit te wisselen.
  • DLL's kunnen onafhankelijk van het hoofdprogramma worden onderhouden. Dit betekent dat functies in de DLL kunnen worden gewijzigd zonder medeweten van het programma. Vervolgens wordt de DLL eenvoudig uitgewisseld (het oude DLL-bestand wordt overschreven) zonder dat het hoofdprogramma hoeft te worden gewijzigd.
  • Aangezien de DLL als een zelfstandig bestand bij het hoofdprogramma moet worden gevoegd, kunnen code-aanbieders er beter voor zorgen dat programmeurs die de functies van hun DLL gebruiken er ook voor betalen. De functionaliteit van de DLL verdwijnt niet (zoals bij een bibliotheek) in de code van het programma. Voorstanders van vrije software zien dit voordeel als een nadeel.

nadeel

  • Wijzigingen in DLL's leiden vaak tot wijzigingen in het programma. Dit leidt gemakkelijk tot versieconflicten die vaak erg moeilijk op te sporen zijn. Een van de basisideeën van de DLL's was om programmacode tussen verschillende programma's te delen om geheugen te besparen. In de praktijk schrijven echter veel programma's tijdens de installatie DLL's in de Windows-systeemmap die geen enkel ander programma kan gebruiken, behalve dit specifieke programma. Daarnaast is de ontwikkeling, en met name de aansluiting, complexer dan bij de statische bibliotheek.
  • In de praktijk is dit echter niet meer relevant, aangezien in ieder geval Windows 2000 de meeste applicaties privébibliotheken [1] bij hun installatie hebben opgenomen, dus een versieconflict in de zin van een DLL-conflict is uitgesloten. Onder Windows hebben bibliotheken die zijn opgeslagen in de programmamap van de toepassing een hogere prioriteit dan de bibliotheken die voor het hele systeem beschikbaar zijn. [2]

Unix-achtige systemen

Op Unix-achtige besturingssystemen (zoals Linux ), gebruiken statische bibliotheken het bestandsachtervoegsel .a (uit "archief") en kunnen worden bekeken en bewerkt met de UNIX-programma's ar en nm . In systemen die pakketbeheer bieden, bevinden statische bibliotheken zich vaak in een apart ontwikkelpakket samen met de headerbestanden .

De term gedeelde bibliotheek is gebruikelijk voor dynamische bibliotheken. Het Executable and Linking Format (ELF) , het standaardformaat dat wordt gebruikt door Linux, FreeBSD en Solaris , is erg populair. .so deze bestanden is de extensie .so (from shared object ) ingeburgerd. In de regel wordt de naam van de bibliotheek gevolgd door het versienummer van de binaire interface (ABI-versie), zodat meerdere versies van een bibliotheek tegelijkertijd kunnen worden geïnstalleerd. Meta-informatie over een bestaande .so kan bijvoorbeeld worden opgevraagd met readelf .

Gedeelde bibliotheken op Linux (met uitzondering van enkele bibliotheken op laag niveau) beginnen meestal met het voorvoegsel " lib ". Het eigenlijke bibliotheekbestand bevat het volledige versienummer. Symbolische links toegang inschakelen via het so naam, evenals zonder enige versie specificatie. Voorbeeld:

  • libfoo.so -> libfoo.so.1
  • libfoo.so.1 -> libfoo.so.1.2.3
  • libfoo.so.1.2.3

De so naam in dit geval is " libfoo.so.1 ". Het nummer na “ .so. “Verandert alleen als de bibliotheekinterface verandert in een nieuwe versie.

De runtime-linker gebruikt versie-informatie in het uit te voeren programma of in de te laden bibliotheek om een ​​versie met een compatibele interface te selecteren. Aangezien programma's afhankelijk kunnen zijn van bibliotheken en bibliotheken van andere bibliotheken, kan software indirect afhankelijk zijn van veel bibliotheken. Omdat veel Unix-systemen de bibliotheken samen centraal beheren voor het besturingssysteem en de applicatie, zijn er pakketadministraties die afhankelijkheden kunnen berekenen en automatisch de benodigde bibliotheken kunnen installeren. Voorbeelden van dergelijke pakketbeheersystemen zijn APT en YUM .

Op sommige systemen kunt u erachter komen van welke bibliotheken een programma afhankelijk is met behulp van het UNIX-programma ldd .

In het geval van software die in de binaire versie moet worden verspreid, bijvoorbeeld commerciële closed-source software of draagbare / distributieonafhankelijke software, moet ervoor worden gezorgd dat alle vereiste bibliotheken beschikbaar zijn. Het gebruikerssysteem waarop deze software moet worden gebruikt, moet dan als compatibel binair platform kunnen fungeren. Dit kan als volgt:

  • Specificatie van een of meer compatibele distributies van besturingssystemen, bijvoorbeeld: "Wordt uitgevoerd onder Debian 5.0 (Lenny)".
  • Gebruik van een distributiespecifiek pakket zodat vereiste bibliotheken opnieuw worden geladen door de pakketbeheerder. Het nadeel is de enorme inspanning die nodig is om een ​​pakket te leveren voor de vele bestaande distributies. [3] [4]
  • Levering van alle dynamische bibliotheken. Deze worden samen met het programma, de documentatie, enz. naar een aparte directory gekopieerd om niet in botsing te komen met versies die door het pakketbeheer systeembreed zijn geïnstalleerd. Latere aanpassing van het bibliotheekzoekpad voor het programma met LD_LIBRARY_PATH via een script of handmatig. [5]
  • Afzien van dynamische bibliotheken en statische koppelingen , wat technisch moeilijk is [6] [7] of kan worden voorkomen door licentieconflicten. U verliest ook op distributie gebaseerde update-ondersteuning. [8e]
  • Via privébibliotheken [1] die zijn geïntegreerd via een relatief bibliotheekpad. Om dit te doen, moet de applicatie worden gegenereerd met de linkeroptie $ORIGIN . [5]

Object- en componentgeoriënteerde benaderingen kunnen hier worden geïmplementeerd door het corresponderende object of component in een functie te instantiëren en terug te geven.

voordelen

  • Bronnen delen
  • Vermijden van overbodige privébibliotheken
  • Er is een enorm aantal gratis en meegeleverde bibliotheken beschikbaar
  • Bibliotheken kunnen onafhankelijk van het hoofdprogramma [8] worden gerepareerd en programma-updates worden kleiner
  • Optimalisaties op één plek kunnen het hele systeem versnellen
  • Kan snel veranderende systeemoproepen verbergen
  • Problemen op laag niveau abstraheren

nadeel

  • Problemen in essentiële bibliotheken maken systemen onbruikbaar. Bij moderne distributies zorgen geschikte pakketbeheerscripts er echter meestal voor dat dit niet kan gebeuren.
  • In het geval van incompatibele wijzigingen aan de binaire interface , moeten alle afhankelijke programma's opnieuw worden gecompileerd. Versienummers en het parallelle gebruik van pakketten verminderen het probleem van binaire compatibiliteit, maar het lost het niet op. [9]
  • Bij onverenigbare wijzigingen aan de programmeerinterface moeten alle afhankelijke programma's dienovereenkomstig worden aangepast.
  • Het maken van draagbare of cross-distributieprogramma's wordt moeilijker. [10] [11]

Bibliotheken op z / OS

Zowel in z / OS als in de voorgaande systemen System / 360 en System / 390 worden programmabibliotheken (zoals alle soorten bibliotheken) beheerd in de vorm van Partitioned Data Sets (PDS). In de regel worden voor elk programmacodetype afzonderlijke bibliotheken gebruikt (zie hieronder) en worden hun elementen als leden aangeduid, ongeacht het type. De leden worden daar door verschillende systeemprogramma's in de ontwikkelomgeving ingesteld en van daaruit gebruikt.

Voor elk type programmacode wordt - afhankelijk van de vereisten - één (1) bibliotheek gebruikt voor een heel bedrijf, voor elk bedrijfsonderdeel of voor specifieke toepassingsgebieden. De vermeldingen worden onderscheiden door de naam van het lid. De volgende typen programmabibliotheken worden bijvoorbeeld gebruikt:

Code / bibliotheektypes b.v. Bijvoorbeeld met z / OS (met 3GL-taal)
  • Brontekstbibliotheken: Deze bevatten de broncode van programma's of subroutines, dwz declaraties , functies en, afhankelijk van de programmeertaal, andere codedelen. Speciale versies van bronteksten worden vaak in aparte bibliotheken beheerd; Voorbeelden zijn:
    • Copybook- bibliotheken; ze bevatten fragmenten van broncode, bijvoorbeeld gegevensdeclaraties voor bepaalde soorten gegevenssets of functionele codeonderdelen voor gebruik in veel programma's.
    • Bijvoorbeeld, macrobibliotheken bevatten de instructies voor de montage taal, die de macro oproep in assembler code tijdens de montage te zetten en plaats deze in de broncode.
De items in brontekstbibliotheken worden meestal gemaakt en gewijzigd met behulp van teksteditors en gebruikt door compilers / assemblers als invoer om gecompileerde programmacode te genereren.
  • De vertalers stellen objectmodules in objectcodebibliotheken in , meestal één module per compilatie. Deze modules zijn de input voor de vervolgens benodigde koppeling of binding; deze bibliotheek wordt bekend gemaakt aan het systeemprogramma, ook bekend als de Linkage Editor , als SYSLIB.
  • Bij het koppelen worden zogenaamde laadmodules aangemaakt , die in een laadbibliotheek worden geplaatst , ook wel de “Core Image Library” genoemd. Laad bibliotheken kan
    • bedrijfsbreed in slechts één gemeenschappelijke bibliotheek alle programmatypes bevatten of
    • optioneel (en meestal) de hoofdprogramma's die moeten worden aangeroepen (via JCL ) of de subprogramma's die afzonderlijk moeten worden herladen via het laadcommando in afzonderlijke bibliotheken.
Voor uitvoering kunnen verschillende bibliotheken worden toegewezen via de STEPLIB-, JOBLIB- of LINKLIST-specificatie en de afzonderlijke modules worden daaruit geladen door het besturingssysteem .

Bibliotheken onder Amiga OS

Met AmigaOS worden alle bibliotheken gebruikt als gedeelde bibliotheken. Ze worden door het programma tijdens runtime opgevraagd bij het systeem, dat vervolgens het basisadres van de bibliotheek in het geheugen (tot OS3.9) of de bijbehorende interface (van OS4.0) levert. Het programma gebruikt dan relatieve adressen om bij de eigenlijke functies (na het basisadres) te komen via een sprongtabel voor het basisadres. Deze functies zijn reentrant (reentrant).

Zelfs als de bibliotheek wordt gewijzigd, zijn de bestaande items in de sprongtabellen altijd hetzelfde. Nieuwe items kunnen alleen aan het einde van de tabellen worden toegevoegd. Er wordt dus neerwaartse compatibiliteit gegeven.

Als bijzonderheid van AmigaOS kan bij het openen van een bibliotheek een minimaal versienummer worden opgegeven, zodat de gewenste functionaliteit ook daadwerkelijk beschikbaar is. Als deze versie niet wordt gevonden, kan het aanroepende programma veilig terugschakelen naar een eenvoudigere functionaliteit zoals voorzien in de oudere bibliotheekversie.

Bibliotheekbestanden hebben de extensie .library en bevinden zich meestal in de LIBS- directory : de systeempartitie. Bij het zoeken naar een bibliotheek controleert het besturingssysteem ook de programmadirectory van het aanvragende programma.

web links

WikiWoordenboek: programmabibliotheek - uitleg van betekenissen, woordoorsprong, synoniemen, vertalingen

Individueel bewijs

  1. a b Rick Anderson: Het einde van de DLL-hel . microsoft.com. 11 januari 2000. Gearchiveerd van het origineel op 5 juni 2001. Ontvangen op 15 januari 2012: “ Privé-DLL's zijn DLL's die met een specifieke toepassing worden geïnstalleerd en alleen door die toepassing worden gebruikt. "
  2. Arnaud Desitter: gebruik van statische en gedeelde bibliotheken op verschillende platforms; Rij 9: Bibliotheekpad ( Engels ) ArnaudRecepten. 20 juli 2011. Gearchiveerd van het origineel op 20 juli 2011. Ontvangen op 26 januari 2012: " win32 runtime-bibliotheekpad:. en dan PAD "
  3. Eric Brown: LSB 4.0-certificeringen zijn bedoeld om Linux-fragmentatie te genezen ( Engels ) linuxfordevices.com. 8 december 2010. Gearchiveerd van het origineel op 24 december 2013. Info: De archieflink is automatisch ingevoegd en is nog niet gecontroleerd. Controleer de originele en archieflink volgens de instructies en verwijder deze melding. @ 1 @ 2 Sjabloon: Webachiv / IABot / archive.linuxgizmos.com Ontvangen op 16 november 2011: " […] LSB helpt fragmentatie te verminderen, het elimineert het niet. "Het probleem van verpakkingen en bredere afhankelijkheden is nog steeds een grote (voor mij) tenminste", schrijft Kerner. "Dezelfde RPM die ik krijg voor Fedora zal niet werken op Ubuntu, en Ubuntu DEB-pakketten zullen niet werken op SUSE enz enz." [...] "
  4. Eskild Hustvedt: Goed spelen met distributies ( Engels ) Linux Game Publishing . 24 november 2009. Gearchiveerd van het origineel op 21 september 2011. Ontvangen op 15 januari 2012.
  5. a b Eskild Hustvedt: Onze nieuwe manier om de LGPL te ontmoeten ( Engels ) 8 februari 2009. Gearchiveerd van het origineel op 13 april 2014. Opgehaald op 9 maart 2011: " U kunt een speciaal trefwoord $ ORIGIN gebruiken om te zeggen ' ten opzichte van de werkelijke locatie van het uitvoerbare bestand '. Plots ontdekten we dat we -rpath $ ORIGIN / lib konden gebruiken en het werkte. De game laadde de juiste bibliotheken en was dus stabiel en draagbaar, maar was nu ook volledig in de geest van de LGPL en de letter! "
  6. ^ Evan Jones: Portable Linux Binaries ( English ) 13 februari 2008. Ontvangen op 10 januari 2012: “ Linux staat niet bekend om zijn binaire draagbaarheid. Bibliotheken verschillen van systeem tot systeem en de kernelinterfaces hebben de neiging om te veranderen. [...] Onlangs moest ik een binair bestand op het ene systeem bouwen en het op een ander systeem uitvoeren. Het gebruikte alleen standaard C-bibliotheekfuncties, dus ik verwachtte dat het gemakkelijk zou zijn. Het was niet. [...] "
  7. Christoph Baus: Nog een Unix-nachtmerrie: libstdc ++ statisch koppelen ( Engels ) 31 mei 2005. Gearchiveerd van het origineel op 10 februari 2010. Opgehaald op 15 januari 2012.
  8. a b Ulrich Drepper : Statische koppeling wordt als schadelijk beschouwd ( Engels ) redhat.com . Gearchiveerd van het origineel op 27 mei 2010. Ontvangen op 13 januari 2012: “ Er zijn nog steeds te veel mensen die denken (of er zelfs op staan) dat statische koppeling voordelen heeft. Dit is nooit het geval geweest en zal ook nooit het geval zijn. [...] "
  9. Mike Hearn: Willekeurige verzameling van huidige Linux-problemen Binaire overdraagbaarheid ( Engels ) Autopackage .org. 2006. Gearchiveerd van het origineel op 18 mei 2009. Opgehaald op 23 januari 2012: “ Deze pagina is voorbereid voor de OSDL-bijeenkomst in december 2005. Het beschrijft veel van de problemen die inherent zijn aan Linux die we zijn tegengekomen bij het distribueren van complexe software in binaire vorm aan eindgebruikers. Het biedt ook enkele suggesties voor verbeteringen. "
  10. Troy Hepfner: Linux Game Development Part 2 - Distributable Binaries ( Engels ) gamedev.net. 1 oktober 2007. Gearchiveerd van het origineel op 13 oktober 2007. Ontvangen op 19 december 2011: “ Het is een uitdaging om een ​​uitvoerbaar bestand te maken dat op bijna alle Linux-distributies werkt. Er zijn een aantal factoren die bijdragen aan het probleem [...] "
  11. Simon Peter: AppImageKit-documentatie 1.0 ( Engels , PDF; 38 kB) PortableLinuxApps.org. blz. 2-3. 2010. Gearchiveerd van het origineel op 29 november 2010. Info: De archieflink is automatisch ingevoegd en is nog niet gecontroleerd. Controleer de originele en archieflink volgens de instructies en verwijder deze melding. @ 1 @ 2 Sjabloon: Webachiv / IABot / portablelinuxapps.org Ontvangen op 29 juli 2011: " Niet gemakkelijk om een ​​app van de ene machine naar de andere te verplaatsen "