CPAN-Module – In der Abhängigkeitshölle des CPAN

Zwiebel - Erkennungszeichen im Perl / CPAN
Linux / Debian

Perl-Anhänger haben sich als internes Erkennungszeichen die „Zwiebel“ ausgewählt. CPAN ist ein umfangreiches Perl-Archiv. Wenn auch einst gefeiert, treibt es aus Verzweiflung heutzutage manchem Entwickler Tränen in die Augen.

Der Beginn vom Comprehensive Perl Archive Network (CPAN)

Seinerzeit war das CPAN, auch als Comprehensive Perl Archive Network bekannt, eine Revolution bei der Programmierung von Perl. Deren Inspiration ist auch heute noch eine Quelle für Programme, weil es sich über das letzte Jahrzehnt aus dem Fundus des „Perlmeisters“ Mike Schilli bediente. Hier dreht es sich um die Implementierung eines Perl-Clients für das IRC Netzwerk, der in Perl geschrieben wurde. Ein reicher Schatz für Perl-Anhänger stellen die Software-Fragmente dar, die vorgefertigte Teillösungen zu Aufgaben liefern. Abhängigkeitsauflösung sind Neuerungen, die für die CPAN-Shell eine wirkliche Revolution darstellen.

CPAN als Erleichterung

Anfang der 1990er Jahre hatte die Tex-Community bereits in einer zentralen Systematik CTAN Code gebündelt. Der finnische Staatsbürger Jarkko Hietaniemi zog 1995 nach und publizierte das CPAN Modell in der Öffentlichkeit. Einheitliche Dokumentation und Test- und Installationsroutinen waren damals Neuland. Sie entsprechen einem festgelegten Schema.

Andreas König aus Deutschland erzeugte mittels des CPAN-Moduls ein Werkzeug, um der wachsenden Fülle des Programmcodes Herr zu werden, sodass es möglich war, Pakete herunterzuladen und direkt im Anschluss zu installieren. Heutzutage hat CPAN mehr als 16,000 Module und umfasst einen Programmcode von mehr als 20 Millionen Zeilen, sodass ein kohärentes Software-Archive knapp 4 GByte an Daten vorhält.

Große Verwirrung

König wurde damit geistiger Vater verschiedener anderer Software-Systemen, wie beispielsweise des PHP-Archivs PEAR oder Ruby Gems. Auch andere Linux Distributionen, wie Debian und andere RPM basierte Derivate, haben sich die Idee von CPAN abgeschaut und in ihren Software-Paketen seit Jahren integriert. So ist es einfach für Anwender dieser Linux-Distributionen, CPAN für Programmierungen in Perl auszuführen, selbst wenn es damals zu Problemen kam. Wie soll ein Anwender ein Paketsystem und seine Abhängigkeiten verwalten, um dieses in bei einer Linux-Distribution in deren Softwaremanager einzubinden? Da es beispielsweise für die Linux-Distribution Debian über 1000 Perl-Pakete gibt, die verschiedene CPAN-Module beinhalten, wie sind die sonstigen 15000 Module zu handhaben? Auch wenn es das Hilfsskript „dh-make-perl“ der Debian Perl Group gibt, geben viele Experten zu, dass viel zu viel Handarbeit angesagt ist, wenn das Modul aus den Standardpfaden herausfällt.

Kannibalistische Vielfalt – die Wahl zwischen Pest und Cholera

Dem System-Administrator bleibt somit die Wahl zwischen Pest und Cholera. Er kann entweder die Perl-Module verwalten, wie es vom CPAN vorgesehen ist. Oder die Datei-Integrität von Debian oder Co. Verletzen, um selbst aufwendig Distributionspakete aufzubauen, sie manuell zu verwalten und aktualisieren, was kompliziert und mühsam ist. Der Programmierer, der mithilfe eines Perl-Moduls Code geschrieben hat, will diesen ungern aktualisieren, wenn umfangreiche eigene Projekte diesen bereits erfolgreich zum Einsatz bringen.

Perl CPAN - Screenshot von Quellcode eines Programmierers

Erschwerend kommt hinzu, dass die Bibliothek bei ihrer Größe ähnlichen Code in einer unübersichtlichen Vielfalt vorhält. Darunter zig E-Mailer, unzählige Datums-Konvertierer und XML-Parser mit ihren zueinander nicht kompatiblen Semantiken. Der Programmierer, der mit Perl Anwendungen erstellen will, sieht sich bald mit Dutzende Abhängigkeiten konfrontiert, deren Instandhaltungen zum bald zum Verhängnis werden können. Um der Dendency Hell zu entkommen und sich Erleichterung zu verschaffen, um den Bogen zu bekommen, sollte der Perl-Entwickler auf andere Repositories schauen. Gute Beispiele dafür gibt es von Dominik Sander im Netz zu finden.

Was genau ist CPAN

CPAN steht für Comprehensive Perl Archive Network. Es ist eine große Ansammlung von Software-Modulen, die in Perl geschrieben wurden und ihre zugehörige Dokumentation. Sie ist im Internet auf der Website www.cpan.org und auf ihren mehr als 200 Mirrors zu bekommen, die auf der ganzen Welt verteilt sind. Derzeit gibt es mehr als 119.000 Module in mehr als 27.000 Paketen, die von mehr als 10.000 Autoren beigesteuert werden. Module sind für eine Vielzahl von Aufgaben verfügbar, einschließlich höherer Mathematik, Datenbank- und Netzwerkanwendungen. Grundsätzlich ist alles in CPAN frei verfügbar. Der größte Teil der Software ist unter der „Artistic License“, der GPL oder beidem lizenziert. Jeder Programmierer kann eigene Software über „PAUSE“, dem Perl Authors Upload Server, in die CPAN-Bibliotek hochladen.

Installation der Module vom CPAN-Pool

Module aus dem CPAN-Pool können von Hand heruntergeladen und installiert werden. Allerdings sind die meisten Module von anderen abhängig und die Abhängigkeiten von Hand aufzulösen, wird schnell mühsam. Sowohl das CPAN.pm-Modul, welches in der Perl-Distribution enthalten ist, als auch das erweiterte CPANPLUS-Modul, haben Installationsprogramme, die die Abhängigkeiten verstehen und selbst auflösen.

Sie können so konfiguriert werden, dass sie automatisch ein Modul herunterladen und installieren und rekursiv alle weiteren Module besorgen, von denen es abhängt.

CPAN für unterschiedliche Betriebssysteme

Benutzer, die keinen C-Compiler besitzen, sind auf die in reinem Perl geschriebenen Module beschränkt, nachdem sie von CPAN heruntergeladen wurden. „ActiveState“, ein Unternehmen, das Perl für Windows kommerziell unterstützt, bietet vorkompilierte Perl-Modulpakete (PPM) zur Verwendung mit ActivePerl an. Einige vorgefertigte Module sind als Teil der MacPerl-Distribution für den Macintosh verfügbar. Benutzer anderer Betriebssysteme sind häufig auf Binärpakete angewiesen, die von Betriebssystemanbietern oder Dritten angeboten werden. Aufgrund der Lizenz, der Verfügbarkeit von Drittanbieter-Bibliotheken, mangelnder Portabilität und anderen Problemen, sind nicht alle CPAN-Module als fertige Pakete verfügbar. Im Jahr 2006 wurde eine Perl-Distribution für Microsoft Windows zusammen mit einem Compiler erstellt, sodass Pakete in binärer Form überflüssig wurden.