haskell und debian - bioinformatics · pdf filehaskell und debian joachim breitner karlsruher...

4

Click here to load reader

Upload: vantruc

Post on 06-Feb-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Haskell und Debian - Bioinformatics · PDF fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

Haskell und Debian

Joachim Breitner ∗

Karlsruher Institut für [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-Anwendernbekannt 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 Dutzen-den verschiedenen Webseiten hunderte verschiedene Pake-te herunterladen, die Anleitung lesen, die Abhängigkeitenzwischen den Paketen auflösen, den Code kompilieren undinstallieren. 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 die

∗ Unterstützt durch die Deutsche Telekom Stiftung1 http://www.debian.org

HaL8, 21. Juni 2013, Leipzig.c© 2013 Joachim Breitner

gleiche 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 installie-rendes Paket ein anderes benötigt, wird dieses automatischmit installiert und auch im weiteren Betrieb werden dieseAbhängigkeiten stets geprüft. Kryptographie schützt den An-wender dabei vor bösartig veränderten Paketen.

Darüber hinaus prüfen die Debian-Entwickler dass dieProgramme auch wirklich 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 stabileDebian-Version, gerade Frisch Debian 6, genannt „Wheezy“.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 „Jessie“,werden soll. Nach Debian unstable, auch „sid“ genannt, wer-den laufend neue Paketversionen hochgeladen. Das ist alsodie richtige Version für technisch etwas versiertere Benutzer,die stets auf dem neusten Stand sein möchten. Es ist übrigensnicht so instabil wie der Name es glauben lässt: Ich benutze esseit über zehn Jahren ohne nennenswerte Probleme auf mei-nem Arbeitsrechner. Außer kurz vor einem Release wandernPakete aus unstable nach 10 Tagen automatisch nach testing,falls kein schwerwiegender Fehler entdeckt wurde.

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

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 in

Page 2: Haskell und Debian - Bioinformatics · PDF fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

seiner 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 Dutzend 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 Infrastruktur 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 auch eine Setup.hs oderSetup.lhs-Datei. Diese ist bei fast allen Haskell-Paketenidentisch 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 scheitertder Konfigurationsschritt. Der Installationsschritt kopiertnicht nur die gebauten Dateien an den richtigen Ort, sondernregistriert auch das Paket in der GHC-eigenen Paketdaten-bank, damit der Compiler die Module dann auch findet. Mitdem zusätzlichen Schritt ./Setup haddock kann man dieDokumentation der Bibliothek erstellen.

Es ist erfreulich dass alle Haskell-Pakete sich so installie-ren lassen. Aber es ist immer noch recht mühsam, und einkomplexeres Paket wie der Haskell-Webserver yesod hat über50 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 CTANfür TeX und enhält zur Zeit 5093 Pakete in insgesamt 30040verschiedenen Versionen von 1161 Entwicklern3. Jeder kann,

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

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

nach einer kurzen Registrierung per Mail, seine Entwicklun-gen dort hochladen, eine Auswahl oder Qualitätskontrollefindet nicht 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-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-

Page 3: Haskell und Debian - Bioinformatics · PDF fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

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 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. Neben dem Paketieren, Bauen undHochladen von neuen Paketen geht es dabei auch darum,die Fehlerberichte zu bearbeiten und gegebenenfalls Bugs zufixen. Außerdem können unsere eigenen Tools, etwa das, waserkennt, welche Pakete neu gebaut werden müssen, intensi-vere Pflege gebrauchen. Interesant ist auch die systemweiseIntegration von Tools wie hoogle: Damit kann man auch ohneInternetverbindung in allen installierten Paketen nach Funk-tionsnamen und -signaturen suchen. Wer Lust hat zu helfenmelde sich bitte auf unserer Mailingliste8.

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

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 compiliert. Yesod per cabal-installzu installieren braucht, auf meinem Laptop, 9,5 Minuten.Die Installation via apt-get ist in unter einer Minuteabgeschlossen. Außerdem kann der Paketbau mit cabal-install auch fehlschlagen, etwa weil eine neue Versioneiner verwendeten Bibliothek die API geändert hat. BeiDebian wird so etwas bereits von den Debian-Entwicklernfestgestellt 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 deinstallie-ren.

• 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 eines neu-en Pakets keine Paketauswahl, in der alle Abhängigkeitenerfü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,durch 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.

• 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 Paket in-stallieren. Das ist gut, weil vielleicht ein Paket eine eine

Page 4: Haskell und Debian - Bioinformatics · PDF fileHaskell und Debian Joachim Breitner Karlsruher Institut für Technology breitner@kit.edu Abstract Da die Programmiersprache Haskell immer

ä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 dem 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 geä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 sein.

Wer alles per cabal-install selbst kompiliert kann dann jaeinfach alles, was kaputt gegangen ist, neu kompilieren. Werdagegen Haskell-Bibliotheken über Debian installiert, kann jaschlecht neue Debian-Pakete bauen. Also müssen die Debian-Entwickler das machen. Außerdem muss sichergestellt wer-den, dass die Anwender unter keinen Umständen kaputtePakete installieren können – lieber soll ihnen eine Installationoder ein Update verwehrt werden, bevor inkompatible Pake-te auf 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 derVersionsnummer 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-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 nach

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

Debian 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 auch gutgeht. Für Endwandender heißt das dass es keinen Unterschiedmacht, ob die Software, die er installieren will, in Haskellgeschrieben ist: Das Programm kann für Debian paketiertwerden, und wenn es das ist, ist es gginstallierbar wie jedesandere 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