haskell und debian - bioinf.uni-leipzig.de filehaskell und debian joachim breitner karlsruher...

4
Haskell und Debian Joachim Breitner Karlsruher Institut für Technology [email protected] Abstract Da die Programmiersprache Haskell immer beliebter wird und in immer weiteren Kreisen eingesetzt wird, müssen sich nun immer mehr Programmierer auch um die Besonderheiten der Installation von Haskell-Compilern und -Bibliotheken kümmern. Dies zu vereinfachen und vereinheitlichen ist die originäre Aufgabe von Distributionen wie Debian. Dieser Vortrag gibt einen Einblick in die Funktionsweise von Debian, insbesondere in Bezug auf Haskell-Pakete, erklärt was man als Anwender von Debian erwarten kann und was sich Debian von den Haskell-Bibliotheken wünscht. Categories and Subject Descriptors K.6.3 [Management of Computing and Information Systems]: Software Management— Software process Keywords linux distribution, package management, Debian 1. Was ist Debian? Der Titel des Vortrages ist „Haskell und Debian“. Was Haskell ist muss ich hier wohl nicht erklären; Debian 1 wird dagegen dem ein oder anderen nicht geläufig sein. Debian bezeichnet eigentlich zwei Sachen: Zum einen die Linux-Distribution Debian, zum anderen das Debian-Projekt, das diese erstellt. 1.1 Eine Linux-Distribution Das Konzept einer Distribution sollte allen Linux-Anwendern geläufig sein, Anwendern anderer Systeme aber vielleicht nicht, daher will ich es kurz erklären: Um seinen Rechner vernünftig benutzen zu können braucht man eine Vielzahl von Programmen: Linux, also den eigentlichen Betriebssystemkern, Systemprogramme, Programmierumgebungen, Anwendungen und, nicht zu ver- gessen, Spiele. Diese werden alle von verschiedenen Leuten und Gruppen hergestellt und meist nur als Quellcode-Pakete vertrieben. Würde man diese direkt verwenden wollen müs- ste man, um sein System in Betrieb zu nehmen, von Duzen- den verschiedenen Webseiten hunderte verschiedene Pake- te herunterladen, die Anleitung lesen, die Abhängigkeiten zwischen den Paketen auflösen, den Code kompilieren und 1 http://www.debian.org Entwurf für HaL8, 21.Juni 2013, Leipzip. c 2013 Joachim Breitner installieren. Selbiges erneut bei Aktualisierungen, und das Deinstallieren von Programmen wäre auch nicht möglich. An dieser Stelle setzen Distribution wie Debian an: Die Ent- wickler der Distribution laden die Quellen bei den Autoren herunter, kompilieren sie und packen das Ergebnis in Pakete das sind die Dateien mit Endung .deb. Diese werden zusam- men in einem Repository angeboten und können alle auf die gleiche Weise direkt installiert werden: Ein einfaches apt-get install ghc genügt, und der Haskell-Compiler ist installiert. Aktualisierungen laufen problemlos mit apt-get upgrade und nicht benötigte Pakete können mit apt-get remove sau- ber und vollständig entfernt werden. Wenn ein zu installieren- des Paket ein anderes benötigt, wird dieses automatisch mit installiert und auch im weiteren Betrieb werden diese Abhän- gigkeiten stets geprüft. Kryptographie schützt den Anwender dabei vor bösartig veränderten Paketen. Darüber hinaus prüfen die Debian-Entwickler dass die Pro- gramme auch wirklich alle Freie Software sind, man kann sich also darauf verlassen, dass man zu jedem Paket in Debian die Quellen bekommt, diese verändern darf und die Veränderun- gen auch weitergeben darf. Auch das geht mit einheitlichen Befehlen (apt-get source und dpkg-buildpackage). Ich erinnere mich noch vage an die Zeit als ich unter Windows Software noch auf irgendwelchen Webseiten direkt heruntergeladen habe und mich durch immer verschiedene Installer geklickt hatte. Inzwischen erreicht diese zentrale Art der Softwareverteilung, wie es sie unter Linux schon 15 Jahre gibt, als „Appstore“ getauft auch Nicht-Linux-Anwender. Debian bietet drei Versionen der Distribution an: unstable, testing und stable. Letzteres ist die zuletzt veröffentliche stabi- le Debian-Version, momentan Debian 6, genannt „Squeeze“. Diese ändert sich nach der Veröffentlichung bis auf Sicher- heitsupdates nicht mehr und empfiehlt sich daher insbesonde- re für den Server-Betrieb oder auch für Arbeitsplätze, die mit minimalem Administrationsaufwand laufen sollen. In Debian testing ist das, was das nächste stable, Codename „Whee- zy“, werden soll. Wheezy is momentan eingefroren, das heißt es kommen keine neue Versionen rein und es werden nun alle wichtigen Fehler behoben, um es möglichst bald zum nächsten Stable erklären zu können. Nach Debian unstable, auch „sid“ genannt, werden laufend neuen Paketversionen hochgeladen. Das ist also die richtige Version für technisch etwas versiertere Benutzer, die stets auf dem neusten Stand sein möchten. Es ist übrigens nicht so instabil wie der Na- me es glauben lässt: Ich benutze seit über zehn Jahren ohne nennenswerte Probleme unstable auf meinem Arbeitsrechner. Solange Debian testing nicht eingefroren ist, wandern Pakete aus unstable nach 10 Tagen automatisch nach testing, falls kein schwerwiegender Fehler entdeckt wurde. Die Menge an Software in Debian ist gewaltig: Debian Squeeze enhält etwa 30.000 Pakete und füllt 8 DVDs – zum Glück installiert man so ein System heutzutage per Internet.

Upload: nguyenthien

Post on 20-Jun-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Haskell und Debian - bioinf.uni-leipzig.de fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

Haskell und Debian

Joachim BreitnerKarlsruher Institut für Technology

[email protected]

AbstractDa die Programmiersprache Haskell immer beliebter wirdund in immer weiteren Kreisen eingesetzt wird, müssen sichnun immer mehr Programmierer auch um die Besonderheitender Installation von Haskell-Compilern und -Bibliothekenkümmern. Dies zu vereinfachen und vereinheitlichen ist dieoriginäre Aufgabe von Distributionen wie Debian. DieserVortrag gibt einen Einblick in die Funktionsweise von Debian,insbesondere in Bezug auf Haskell-Pakete, erklärt was manals Anwender von Debian erwarten kann und was sichDebian von den Haskell-Bibliotheken wünscht.

Categories and Subject Descriptors K.6.3 [Management ofComputing and Information Systems]: Software Management—Software process

Keywords linux distribution, package management, Debian

1. Was ist Debian?Der Titel des Vortrages ist „Haskell und Debian“. Was Haskellist muss ich hier wohl nicht erklären; Debian1 wird dagegendem ein oder anderen nicht geläufig sein. Debian bezeichneteigentlich zwei Sachen: Zum einen die Linux-DistributionDebian, zum anderen das Debian-Projekt, das diese erstellt.

1.1 Eine Linux-Distribution

Das Konzept einer Distribution sollte allen Linux-Anwenderngeläufig sein, Anwendern anderer Systeme aber vielleichtnicht, daher will ich es kurz erklären:

Um seinen Rechner vernünftig benutzen zu könnenbraucht man eine Vielzahl von Programmen: Linux, alsoden eigentlichen Betriebssystemkern, Systemprogramme,Programmierumgebungen, Anwendungen und, nicht zu ver-gessen, Spiele. Diese werden alle von verschiedenen Leutenund Gruppen hergestellt und meist nur als Quellcode-Paketevertrieben. Würde man diese direkt verwenden wollen müs-ste man, um sein System in Betrieb zu nehmen, von Duzen-den verschiedenen Webseiten hunderte verschiedene Pake-te herunterladen, die Anleitung lesen, die Abhängigkeitenzwischen den Paketen auflösen, den Code kompilieren und

1 http://www.debian.org

Entwurf für HaL8, 21.Juni 2013, Leipzip.c© 2013 Joachim Breitner

installieren. Selbiges erneut bei Aktualisierungen, und dasDeinstallieren von Programmen wäre auch nicht möglich.

An dieser Stelle setzen Distribution wie Debian an: Die Ent-wickler der Distribution laden die Quellen bei den Autorenherunter, kompilieren sie und packen das Ergebnis in Pakete –das sind die Dateien mit Endung .deb. Diese werden zusam-men in einem Repository angeboten und können alle auf diegleiche Weise direkt installiert werden: Ein einfaches apt-getinstall ghc genügt, und der Haskell-Compiler ist installiert.Aktualisierungen laufen problemlos mit apt-get upgradeund nicht benötigte Pakete können mit apt-get remove sau-ber und vollständig entfernt werden. Wenn ein zu installieren-des Paket ein anderes benötigt, wird dieses automatisch mitinstalliert und auch im weiteren Betrieb werden diese Abhän-gigkeiten stets geprüft. Kryptographie schützt den Anwenderdabei vor bösartig veränderten Paketen.

Darüber hinaus prüfen die Debian-Entwickler dass die Pro-gramme auch wirklich alle Freie Software sind, man kann sichalso darauf verlassen, dass man zu jedem Paket in Debian dieQuellen bekommt, diese verändern darf und die Veränderun-gen auch weitergeben darf. Auch das geht mit einheitlichenBefehlen (apt-get source und dpkg-buildpackage).

Ich erinnere mich noch vage an die Zeit als ich unterWindows Software noch auf irgendwelchen Webseiten direktheruntergeladen habe und mich durch immer verschiedeneInstaller geklickt hatte. Inzwischen erreicht diese zentrale Artder Softwareverteilung, wie es sie unter Linux schon 15 Jahregibt, als „Appstore“ getauft auch Nicht-Linux-Anwender.

Debian bietet drei Versionen der Distribution an: unstable,testing und stable. Letzteres ist die zuletzt veröffentliche stabi-le Debian-Version, momentan Debian 6, genannt „Squeeze“.Diese ändert sich nach der Veröffentlichung bis auf Sicher-heitsupdates nicht mehr und empfiehlt sich daher insbesonde-re für den Server-Betrieb oder auch für Arbeitsplätze, die mitminimalem Administrationsaufwand laufen sollen. In Debiantesting ist das, was das nächste stable, Codename „Whee-zy“, werden soll. Wheezy is momentan eingefroren, das heißtes kommen keine neue Versionen rein und es werden nunalle wichtigen Fehler behoben, um es möglichst bald zumnächsten Stable erklären zu können. Nach Debian unstable,auch „sid“ genannt, werden laufend neuen Paketversionenhochgeladen. Das ist also die richtige Version für technischetwas versiertere Benutzer, die stets auf dem neusten Standsein möchten. Es ist übrigens nicht so instabil wie der Na-me es glauben lässt: Ich benutze seit über zehn Jahren ohnenennenswerte Probleme unstable auf meinem Arbeitsrechner.Solange Debian testing nicht eingefroren ist, wandern Paketeaus unstable nach 10 Tagen automatisch nach testing, fallskein schwerwiegender Fehler entdeckt wurde.

Die Menge an Software in Debian ist gewaltig: DebianSqueeze enhält etwa 30.000 Pakete und füllt 8 DVDs – zumGlück installiert man so ein System heutzutage per Internet.

Page 2: Haskell und Debian - bioinf.uni-leipzig.de fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

1.2 Ein großes Projekt

Wie erwähnt ist Debian aber auch ein großes Projekt: Über1000 freiwillige und ehrenamtliche Entwickler arbeiten daran,dass Debian (die Distribution) ein vielseitiges, umfangreichesund technisch hervorragendes System ist. Die meisten enga-gieren sich als Paket-Maintainer, also jene, die die Quellpaketeder Softwareautoren nehmen, prüfen, testen, ggf. patchen, inDebian einpflegen und dann die Bugreports der User entge-gen nehmen. Dabei herrscht weitgehend konstruktive Anar-chie: Jeder Entwickler ist, im Rahmen der Policy, sehr frei inseiner Arbeit. So wird zum Beispiel nicht zentral gesteuertoder geprüft, welche Software überhaupt in Debian aufge-nommen wird, sondern die Entwickler entscheiden das selbstnach eigenem Bedarf und Interesse.

Software, die benötigt wird, um andere Software zu bau-en, muss dabei auf jeden Fall auch in Debian aufgenommenwerden. Zum einen ist das wichtig, da es eines der Verspre-chen von Debian ist, dass der Anwender seinen Recht auf dasÄndern der Software auch praktisch ausüben kann. Zum an-deren ist Debian auf einem Duzend Architekturen verfügbar.Damit das möglich ist müssen alle Debian-Pakete automatischgebaut werden können.

Neben den Debian-Entwicklern gibt es auch Mitarbeiter,die sich um die Infrastuktur kümmern, die Übersetzungenund Dokumentationen erstellen, die Pressearbeit machen undvieles mehr.

Es gibt etliche Distributionen, die auf Debian aufbauen,allen voran Ubuntu, für die das im Folgenden gesagte ebensogilt. Andere Distributionen wie Fedora, OpenSUSE, Arch oderNixOS handhaben Haskell gegebenenfalls etwas anders.

2. Haskell-Pakete: Cabal, Hackage undcabal-install

Auch ohne eine Linux-Distribution hat man es als Haskell-Programmierer schon ganz gut. So werden (fast) alle Haskell-Bibliotheken als Cabal-Paket vertrieben. Cabal ist sowohl einStandard, wie die Quell-Pakete aufgebaut sein sollen, alsauch eine Bibliothek, mit der solche Pakete sich kompilie-ren. Das wichtigste Element dabei ist die foo.cabal-Datei,die es im obersten Verzeichnis eines Cabal-Paketes gebenmuss. Ein Beispiel ist in Abbildung 1 zu sehen. Diese Dateibeschreibt eine Bibliothek (library), es können aber auchHaskell-Programme so beschrieben werden. Darin wird unteranderem festgelegt, welche Module das Paket enthalten soll(exposed-modules) und welche anderen Pakete in welchenVersionen vorhanden sein müssen (build-depends).

In dem Quellpaket existiert meist auch eine Setup.hs oderSetup.lhs-Datei. Diese ist bei fast allen Haskell-Paketen iden-tisch und verwendet die Bibliothek Cabal. Um das Paketzu installieren, kompiliert man nun das Setup-Programmund führt den Dreischritt ./Setup configure --user &&./Setup build && ./Setup install aus. Dank der Option--user wird die kompilierte Bibliothek ins Benutzerverzeich-nis installiert, statt systemweit. Die genannten Abhängigkei-ten muss man dabei schon installiert haben, sonst scheitert derKonfigurationsschritt. Der Installationsschritt kopiert nichtnur die gebauten Dateien an den richtigen Ort, sondern regi-striert auch das Paket in der GHC-eigenen Paketdatenbank,damit der Compiler die Module dann auch findet. Mit demzusätzlichen Schritt ./Setup haddock kann man die Doku-mentation der Bibliothek erstellen.

Es ist erfreulich dass alle Haskell-Pakete sich so installie-ren lassen. Aber es ist immernoch recht mühsam, und einkomplexeres Paket wie der Haskell-Webserver yesod hat über

name: voidcategory: Data Structuresversion: 0.5.12license: BSD3cabal-version: >= 1.6license-file: LICENSEauthor: Edward A. Kmettmaintainer: Edward A. Kmett <[email protected]>stability: portablehomepage: http://github.com/ekmett/voidbug-reports: http://github.com/ekmett/void/issuescopyright: Copyright (C) 2008-2012 Edward A. Kmettsynopsis: A Haskell 98 logically uninhabited data ↵

typedescription: A Haskell 98 logically uninhabited data ↵

type, used to indicate that a given term should not ↵

exist.build-type: Simple

extra-source-files: .travis.yml CHANGELOG.markdown ↵

README.markdown

source-repository headtype: gitlocation: git://github.com/ekmett/void.git

flag safemanual: Truedefault: False

libraryexposed-modules:Data.VoidData.Void.Unsafe

build-depends:base >= 3 && < 10,semigroups >= 0.8.2

ghc-options: -Wall

if flag(safe)cpp-options: -DSAFE

if impl(ghc)extensions: DeriveDataTypeablecpp-options: -DLANGUAGE_DeriveDataTypeable

Abbildung 1. Die Dabei void.cabal

50 Abhängigkeiten, die man alle finden, herunterladen undin der richtigen Reihenfolge installieren muss.

Das Finden ist dabei noch das Einfachste: Dafür gibt esHackage2, ein zentrales Sammelsurium (fast) aller Haskell-Pakete. Es ist vergleichbar mit CPAN für Perl und CTAN fürTeX und enhält zur Zeit 4934 Pakete in insgesamt 29122 ver-schiedenen Versionen von 1140 Benutztern3. Jeder kann, nacheiner kurzen Registrierung per Mail, seine Entwicklungendort hochladen, eine Auswahl oder Qualitätskontrolle findetnicht statt.

Aber auch die anderen Schritte lassen sich automatisie-ren: Mit cabal-install, welches einen Befehl namens cabal be-reitstellt, kann man ein Paket wie yesod samt allen Haskell-Abhängigkeiten mittels cabal install yesod installieren.Dabei werden, sofern möglich, bereits installierte Pakete wei-

2 http://hackage.haskell.org3 http://hackage.haskell.org/cgi-bin/hackage-scripts/stats

Page 3: Haskell und Debian - bioinf.uni-leipzig.de fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

ter verwendet, aber falls nötig auch aktualisiert. Es ist dabeiproblemlos möglich, mehrere verschiedene Version des selbenPakets installiert zu haben.

3. Haskell als Debian-PaketeDamit allerdings Debian-Anwender das nicht zu wissen brau-chen werden auch Haskell-Bibliotheken – wie andere Soft-ware auch – zu Debian-Paketen verschnürt. Debian enthältdie etwa 600 wichtigsten Haskell-Pakete, die jeweils auf dreiDebian-Pakete aufgeteilt sind: Die Pakete für die Haskell-Bibliothek void heißen libghc-void-dev für die kompilier-te Bibliothek, libghc-void-prof für die für das Profilingnötigen zusätzlichen Daten und libghc-void-doc für dieDokumentation. Hier sind, wie bei allen Debian-Paketen,die Abhängigkeiten explizit angegeben, so dass ein apt-getinstall yesod automatisch 159 Pakete installiert, inklusiveGHC und gcc, und dafür 600 MB braucht.

Die Auswahl der zur Zeit 600 Pakete folgt, wie auch sonstin Debian, keinen strengem Muster. Wir paketieren alles vondem wir glauben, dass es viele Anwender haben wollen:Alles was in der Haskell Platform4 enthalten ist, Bibliotheken,die wir selbst mal gebraucht haben, aktuelle Trends wiedie Webframeworks happstack, yesod und snap. Außerdemkümmern wir uns um eine Reihe von Anwendungen, diein Haskell implementiert sind: Das VersionskontrollsystemDarcs, den Haskell-Stil-Prüfer HLint, den Fenstermanagerxmonad, das Wiki gitit, die Dateiverwaltung git-annex, dieZeiterfassung arbtt, die Buchhaltungssoftware hledger undandere. Auch hier gilt: Alle Abhängigkeiten dieser Paketemüssen auch in Debian enthalten sein.

Generell wollen wir die Software, Bibliotheken wie Anwen-dungen, dem Anwender unverändert zur Verfügung stellen.Sollte es aber im Interesse unserer Anwender sein, scheuenwir uns aber auch nicht, den Code zu patchen. Häufig müssenwir etwa die in den Cabal-Dateien spezifizierten Abhängig-keiten ändern, damit alle in Debian enthaltenen Versionenzueinander kompatibel sind. Manchmal ändern wir auch denCode, um ihn etwa mit der neusten Compilerversion bau-en zu können. Und insbesondere in Debian stable, wo keineVersionssprünge mehr erlaubt sind, versuchen wir sicherheits-kritische Fehler auch in den alten Versionen zu beheben, sozuletzt bei tls-extra5.

Auch versuchen wir, die Haskell Platform exakt nachzu-bauen, also von den darin enthaltenen Bibliotheken und Toolsauch genau die in der Platform angegebenen Version in De-bian zu haben. Nicht immer gelingt uns das, etwa wenn einanderes Paket, das wir haben wollen, eine neuere Versioneines Pakets aus der Platform benötigt – dann weichen wirauch mal leicht davon ab. Das Debian-Paket mit dem Namenhaskell-platform installiert also immer die Pakete aus derHaskell Platform, aber jeweils in der Version, die Debian aus-gewählt hat. Sobald Stackage6, eine Art stabile und getesteteAuslese von Paketversionen von Hackage, einigermaßen inGang gekommen ist werden wir uns wohl auch stark daranorientieren, was uns vor allem Arbeit ersparen wird.

Die Debian-Haskell-Group7 kann immer Unterstützungbei ihrer Arbeit brauchen. Nebem dem Paketieren, Bauen undHochladen von neuen Paketen geht es dabei auch darum,die Fehlerberichte zu bearbeiten und gegebenenfalls Bugs

4 http://www.haskell.org/platform/5 http://bugs.debian.org/6985456 https://github.com/fpco/stackage7 http://wiki.debian.org/Haskell

zu fixen. Außerdem können unsere eigenen Tools, etwa das,was erkennt, welche Pakete neu gebaut werden müssen,intensivere Pflege gebrauchen. Wer Lust hat zu helfen meldesich bitte auf unserer Mailingliste8.

3.1 Vor- und Nachteile

Auf den ersten Blick bietet Haskell in Debian auch nicht mehrals die Installation mit cabal-install, warum sollte man alsonun die Debian-Pakete verwenden? Es gibt eine Reihe vonVorteilen:

• Die Pakete sind schon compliert. Yesod per cabal-installzu installieren braucht, auf meinem Laptop, 9,5 Minuten.Die Installation via apt-get ist in unter einer Minute abge-schlossen. Außerdem kann der Paketbau mit cabal-installauch fehlschlagen, etwa weil eine neue Version einer ver-wendeten Bibliothek die API geändert hat. Bei Debianwird so etwas bereits von den Debian-Entwicklern festge-stellt und behoben.

• Abhängigkeiten jenseits der Haskell-Welt werden inDebian-Paketen abgebildet und automatisch mitinstal-liert. Würde man auf einer Linux-Minimalinstallationdagegen versuchen, yesod mit cabal-install zu installieren,würde das scheitern: Es fehlen die Entwicklerdateien zurC-Bibliothek zlib.

• Die Pakete lassen sich wieder deinstallieren. Das kanncabal-install noch nicht – man kann lediglich alle installier-ten Pakete mittels rm -rf /̃.cabal /̃.ghc deinstallieren.

• Mit cabal-install kann es passieren, dass zur Installationeines Paketes ein bereits installiertes neu kompiliert wer-den muss. Hängt ein weiteres bereits installiertes Paketdavon ab, wird jenes danach unter Umständen nicht mehrfunktionieren und muss erneut installiert werden. DiesesProblem ist auch als Cabal Dependency Hell bekannt. DaDebian-Pakete vorkompiliert sind kann das nicht passie-ren.

• Manchmal findet cabal-install bei der Installation einesneuen Pakets keine Paketauswahl, in der alle Abhängigkei-ten erfüllt sind (auch eine Variante der Cabal DependencyHell). Auch solche Probleme werden in Debian schon vonden Entwicklern gelöst.

• Man kann auch noch nachträglich die Profiling-Daten oderdie Dokumentation installieren, während man mit cabal-install schon bei der Installation die entsprechenden Flagsan cabal install übergeben muss.

• Jedes Paket ist in Debian in der Regel in genau einerVersion vorhanden, mit der alle anderen Pakete können.

• Eine Man-in-the-Middle-Attacke könnte problemlos diePakete, wie sie cabal-install von Hackage herunterlädt,duch eigene ersetzen. Mit Debian geht das dank signierterPaketlisten nicht.

• Debian trifft eine Vorauswahl an Paketen; bei Paketen inDebian ist die Chance größer dass es ein benutzbares undeinigermaßen verbreitetes Paket ist.

Allerdings hat auch cabal-install seine Vorteile:

• Es kann alle knapp 5000 Pakete auf Hackage installieren,während in Debian nur die wichtigsten 600 Pakete enthal-ten sind.

8 http://lists.debian.org/debian-haskell/

Page 4: Haskell und Debian - bioinf.uni-leipzig.de fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

• Man braucht keine Root-Rechte, um damit Pakete zuinstallieren.

• Man kann die Compile-Flags setzten, mit denen manmanche Pakete genauer konfigurieren kann.

• Cabal-install kann mehrere Versionen desselben Paketinstallieren. Das ist gut, weil vielleicht ein Paket eine eineältere und ein anderes eine neuere Version einer Bibliothekbenötigt.

• Es gibt Erweiterungen zu cabal-install fürs Sandboxing,also um Pakete getrennt voneinander zu installieren undbeispielsweise mehrere GHC-Versionen gleichzeitig testenzu können.

3.2 Das Problem mit den ABIs

Generell sind Haskell-Pakete dankbare Ziele zum Paketieren,da sie sehr homogen sind. Das ermöglichst es den DebianHaskell Team, mit vergleichsweise wenig Manpower vieleHaskell-Pakete zu betreuen.9 Es gibt aber ein paar Eigenhei-ten von Haskell und dem Haskell-Compiler GHC, die dasPaketieren von Haskell für Debian knifflig oder aufwendigmachen.

Das größte Problem ist, dass kompilierter Haskell-Codekein stabiles ABI hat. Das Application Binary Interface einer Bi-bliothek beschreibt wie das Kompilat zu verwenden ist: Wiedie Funktionen heißen und wie sie aufgerufen werden. BeiC-Bibliotheken ist die ABI sehr stabil: Ich kann eine neue Ver-sion einer Bibliothek bauen und installieren, und solange sichdie vorhandenen Funktionssignaturen und Datenstrukturennicht gändert haben, bleibt das ABI gleich und Programme,die gegen meine Bibliothek linken, müssen nicht neu gebautwerden. Bei Haskell kann es passieren, dass schon kleinsteÄnderungen an der Implementierung einer Funktion oderandere Compiler-Flags dafür sorgen, dass sich das ABI ändertund aller installierter Code, der meine Bibliothek verwendet,neu kompiliert werden muss. Ein Hauptgrund dafür sindCross-Module-Optimierungen wie Inlining: Um eine Funkti-onsdefinition inlinen zu können muss der zugehörige CodeTeil des ABI seins.

Wer alles per cabal-install selbst kompiliert kann dannja einfach alles, was kaputt gegangen ist, neu kompilieren.Wer dagegen Haskell-Bibliotheken über Debian installiert,kann ja schlecht neue Debian-Pakete bauen. Also müssen dieDeban-Entwickler das machen. Außerdem muss sichergestelltwerden, dass die Anwender unter keinen Umständen kaputtePakete installieren können – lieber soll ihnen eine Installationoder ein Update verwehrt werden, bevor inkompatible Paketeauf dem Rechner landen. Dies wird über ein System vonvirtuellen Paketen ermöglicht:

GHC berechnet für jedes Paket einen Prüfsumme, diedas ABI beschreibt. Ändert sich das ABI, ändert sich auchdie Prüfsumme. Zusammen mit dem Paketnamen und derVersionnnummer ergibt sich so die Package-ID, die z.B.void-0.5.11-713ea60ae362e86803206553ab70774c lautenkann. In der GHC-Paketdatenbank ist dazu vermerkt, gegenwelches ABI von semigroups das Paket gebaut wurde, etwasemigroups-0.9-2947823d7c0a6064bf9c08818332909a. Soweiß der Compiler, dass void nicht mehr benutzbar ist, wennsemigroups nicht mehr mit exakt diesem ABI vorhanden ist.

Diese Informationen werden beim Bau des Debian-Paketenextrahiert und in dessen Metadaten übernommen: DasDebian-Paket libghc-semigroups-dev hat einen EintragProvides: libghc-semigroups-dev-0.9-29478, der die er-

9 http://lists.debian.org/1361126251.4322.18.camel@kirk

sten paar Ziffern der Prüfsumme enthält. Damit existiert nunein virtueller Paketname für genau dieses ABI, und das Paketlibghc-void-dev kann von diesem Paket abhängen. Die Pa-ketverwaltungssoftware dpkg und apt-get stellt damit sicher,dass man libghc-void-dev nur installieren kann, wenn einpassendes libghc-semigroups-dev Paket installiert ist. Wür-de nun eine neue Version von libghc-semigroups-dev nachDebian hochgeladen, würde ein Update dieses trotzdem nichtinstallieren, bis libghc-void-dev neu gebaut ist. Jemand, derkeines der Pakete installiert hat, kann die neue Version vonsemigroups installieren, nicht aber void.

Anhand dieser Metadaten können die Entwickler ablesen,welche Pakete noch neu gebaut werden müssen, damit wiederalles installierbar ist. Das Neu-Kompilieren selbst geht dabeiautomatisch über das Debian-eigene buildd-Netzwerk.

Wer diesen Ansatz nochmal in Formeln erklärt sehen will:Die Debian-OCaml-Maintainer, die ihn auch gewählt haben,haben darüber ein wissenschaftliches Paper10 geschrieben.

4. Wunschliste an Haskell-EntwicklerDa im Publikum sicherlich einige Haskell-Entwickler sitzen,und viele die es werden wollen, ist dies eine gute Gelegenheitein paar Wünsche loszuwerden, die es uns einfacher machen,ihre Pakete in Debian aufzunehmen, und auch sonst gutePraxis sind:

• Verwenden Sie Cabal und veröffentlichen Sie ihre Paketeauf Hackage. Je homogener die Pakete sind, desto einfa-cher ist es für uns, eine große Zahl von ihnen zu betreuuen.

• Geben Sie ihren Paketen treffende Beschreibungen. Cabalbietet dafür das Feld synopsis für eine einzeilige Beschrei-bung und description für einen mehrzeiligen Text. For-mulieren Sie die Beschreibung so, dass sie jeder Haskell-Programmierer versteht und einordnen kann, auch jeneohne Informatikstudium oder fachspezifisches Wissen.

• Kümmern Sie sich um die LICENSE-Datei. Debian legtgroßen Wert darauf, die Copyright-Situation der Softwarezu prüfen und korrekt wiederzugeben. Das heißt, wennSie Code aus anderen Paketen übernehmen, beachten siedessen Lizenz und geben Sie alle Autoren mit Copyrightan.

• Halten Sie sich an die Package Versioning Policy11. Da-durch erkennen wir frühzeitig, mit welchen Versionenanderer Pakete Ihr Code zusammenarbeitet und sparenuns unnötige Bauversuche.

• Schreiben Sie Tests und geben Sie diese also solche inder Cabal-Datei an. Dann können wir diese bei jedemPaketbau durchlaufen lassen und z.B. auch Fehler finden,die nur auf seltsamen Architekturen auftreten (s390 hat 31Bits. . . ).

5. FazitHaskell ist erfolgreich genug, dass eine Distribution wieDebian es aufnehmen muss, und reif genug, dass das auchgut geht. Insbesondere heißt es für den Endanwender keinenUnterschied macht, ob die Software, die er installieren will,in Haskell geschrieben ist: Das Programm kann für Debianpaketiert werden, und wenn es das ist, ist installierbar wiejedes andere Programm auch.

10 Mehdi Dogguy, Stephane Glondu, Sylvain Le Gall, Stefano Zacchi-roli: Enforcing Type-Safe Linking using Inter-Package Relationships,JFLA10, pp. 29-54, 201011 http://www.haskell.org/haskellwiki/Package versioning policy