Wiki, Bugtracker und ein Webfrontend zum Repository bilden das Fundament moderner Verwaltungstools für Software-Entwickler. Sourceforge, Trac, Launchpad und ihre Alternativen stellen sich dem Vergleich.
Mitglieder erfolgreicher Teams haben sich meist mehr zu sagen, als die knappen Kommentare in den Commit Messages in der Versionsverwaltung transportieren. Die wichtigsten Säulen sind die zunehmend speziell zugeschnittenen Projektmanagement-Anwendungen, die die Zukunftsplanung, Dokumentation, Koordination und Präsentation der Produkte übernehmen.
Der Veteran Sourceforge hat vorgemacht, wie sich Software heute entwickeln lässt, und spielt noch immer in der ersten Liga. Doch der Newcomer Trac ist ein geborener Tabellenaufsteiger, auch das 2009 frei gewordene Launchpad wartet mit frischen Spielideen auf.
Trac
Mit seiner cleveren Kombination aus Wiki, Bugtracker und Quellcode-Browser für SVN, Git [1] und Mercurial [2] hat das in Python geschriebene freie Trac [3] seit 2005 die freie Softwarewelt erobert. Sein Erfolgsrezept ist die allen Komponenten gemeinsame Wiki-Auszeichnungssprache, die es den Entwicklern ermöglicht, Objekte aus dem integrierten Wiki, aus Bugtracker und Repository miteinander zu verlinken.
Trac als typisches Python-Programm besteht aus einem minimalistischen Kern und einer Plugin-Schnittstelle, die es erlaubt, die Software leichter zu erweitern, als manche anderen Projektmanagement-Anwendungen dies zulassen.
Voll verlinktes Wiki
Open-Source-affine Unternehmen setzen bei der Team-internen Dokumentation schon lange auf Wikis. Mit ihnen entstehen direkt im Browser formatierte und miteinander verlinkte HTML-Seiten. Für Team-Mitglieder, die Textverarbeitungsprogramme gewohnt sind, gibt es in Trac ein Wysiwyg-Plugin [4], dessen Symbolleiste an Open Office oder Word erinnert (siehe Abbildung 1).

Abbildung 1: Das Herz von Trac ist der Wiki-Parser, der nicht nur in der Wiki-Komponente, sondern in allen Volltextfeldern, zum Beispiel im Bugtracker, Formatierungen und Wiki-Links ermöglicht. Das Wysiwyg-Plugin in der Abbildung erweist sich besonders bei Tabellen als nützlich.
Trac kennt die gewohnten Auszeichnungen, besonders ragt jedoch seine Fähigkeit aus dem Üblichen heraus, Wiki, Bugtracker und Quellcode-Browser durch Links miteinander zu verknüpfen. »#Ticket-Nummer« etwa verweist auf einen Eintrag im Bugtracker. Auch Reports, also SQL-basierte Vorauswahlen mehrerer Tickets, lassen sich verlinken.
Mit »source:/« beginnende Links öffnen Quellcode-Dateien im Dateibrowser, der Syntax Highlighting für knapp 40 Sprachen bietet: »source://lib/display.php@123:31, 35-40#L20« etwa zeigt »/lib/display.php« ab Zeile 20 in Revision 123 und hebt die Zeilen 35 bis 40 und 31 farbig hervor (Abbildung 2).

Abbildung 2: Mächtiges Dokumentationswerkzeug: Das Trac-Wiki verlinkt auf Wunsch direkt auf einzelne Codezeilen von Snapshots im Repository.
Trac-Links sind nicht nur im Wiki erlaubt, sie unterstützen auch Volltextfelder der anderen Trac-Komponenten. Sogar die Commit Messages der Versionsverwaltung verarbeitet Trac als Wiki-Text. Sie dürfen Wiki-Formatierungen und Links zum Trac-Wiki, dem Bugtracker oder anderen Trac-Komponenten enthalten.
Offen für Erweiterungen
Für Tracs Makro-Schnittstelle, die bereits in der Standardeinstellung Bilder, Inhaltsverzeichnisse oder per SQL ausgewählte Tickets aus dem Bugtracker in die Seite einbindet, gibt es viele Erweiterungen. Besonders interessant für Software-Entwickler sind das Graphviz- und das Mindmap-Plugin.
Ersteres bindet die Graphviz-Dot-Syntax [5] direkt in die Wiki-Seite ein, sodass auch komplexe Diagramme ohne externe Grafiksoftware im Browser entstehen (Abbildung 3). Der Anwender gibt lediglich Relationen in der Form A -> B an, um die Positionierung der Elemente kümmert sich Graphviz.

Abbildung 3: Erweiterungen wie das Graphviz-Plugin machen das Trac-Wiki und den Bugtracker zum leistungsfähigen Dokumentationswerkzeug. Grafiken lassen sich so direkt im Browser erstellen und bearbeiten.
Dank des Python-Buildsystems dauert das Installieren eines Trac-Plugins in der Regel nicht mehr als fünf Minuten. Nach dem Entpacken des Quellcode-Archivs genügt es, als Administrator »python setup.py install« aufzurufen. Manche Plugins lassen sich auch mit »easy_install« , der Python-Entsprechung zu Perls CPAN, mit einem einzigen Befehlsaufruf aus dem Online-Repository installieren.
Single-Plattform
Eine Trac-Instanz ist bis Version 0.11 stets an ein einziges Versions-Repository gebunden und verwaltet daher in der Regel nur ein Softwareprojekt. Um sie einzurichten, genügt ein Aufruf des mitgelieferten Kommandozeilenwerkzeugs »trac-admin« . Der mitgelieferte minimale Webserver »tracd« dient vorwiegend zum Testen. Für den Dauerbetrieb lohnt sich die Apache-Einbindung unter »mod_python« oder über die Fast-CGI- oder WSGI-Schnittstellen.
Die seit etwa fünf Monaten stabile Version 0.12 verwaltet mehrere Repositories in einer einzigen Instanz. Anders als Version 0.11 synchronisiert das Verwaltungstool seinen Quellcode-Browser nicht mehr bei jedem Aufruf mit dem Repository, sondern verlässt sich darauf, dass die Versionsverwaltung beim Check-in den Befehl »trac-admin changeset added Repository-Name Revision Message« aufruft, um Trac über aktuelle Änderungen zu informieren.
Alle modernen Versionsverwaltungen stellen Hooks bereit, die bei Commits einen benutzerdefinierten Befehl ausführen. Die bis zur Trac-Version 0.11 hohen Anforderungen an die Server-Ressourcen gehen damit stark zurück. Der alte Mechanismus, der ohne Hook-Skripte in der Versionsverwaltung auskommt, steht weiter zur Verfügung.
Anschlusstickets und Bugreports
Das Trac-Ticketsystem erreicht nicht den Funktionsumfang mancher Standalone-Bugtracker wie Bugzilla. Doch für kleinere oder mittelgroße Entwicklerteams ist es gerade richtig dimensioniert und erspart unnötigen Einarbeitungsaufwand. Zum mächtigen Dokumentationswerkzeug wird es durch die bereits angesprochenen Wiki-Links und die Wiki-Formatierungen inklusive installierter Trac-Erweiterungen (Abbildung 4).

Abbildung 4: Auch der Trac-Bugtracker unterstützt Wiki-Formatierungen und sogar installierte Wiki-Plugins. Selbst der Repository-Browser rendert Wiki-Tags in den Commit Messages.
Im Auslieferungszustand gibt Trac die Felder eines Bugreports fest vor. Die Einträge in Listenfeldern wie die Software-Komponente oder -Version lassen sich grafisch editieren. Leere Listenfelder blendet das GUI vollständig aus. Das Custom-Fields-Plugin [6] fügt außerdem benutzerdefinierte Felder hinzu.
Hinter dem Ticket-Status verbergen sich ab Version 0.11 Workflows, mit denen der Administrator definiert, in welchen Status eine Aktion wie etwa das Zuweisen eines Eigentümers das Ticket versetzt. Über Ticketänderungen informiert Trac auf Wunsch per Mail oder RSS-Feed.
Sourceforge und die vielen Forks
Webanwendungen für das Managen einzelner Projekte wie Trac sind eine noch relativ junge Erfindung. Die Idee, eine Versionsverwaltung, Bugtracker sowie Foren und Mailinglisten unter einer gemeinsamen Weboberfläche zu bündeln, entstand dagegen bereits im November 1999, als Sourceforge.net seine Tore öffnete. Auch heute noch ist die Webseite eine der beliebtesten Hosting-Plattformen für freie Software. Zwar verkaufte der Betreiber von Sourceforge seine ehemals frei erhältliche Software an Colabnet, doch Gforge [7], Savane [8] und Xerox [9] griffen die letzte freie Version auf. Savane läuft auf der Software-Hosting-Plattform Savannah der Free Software Foundation.
Als sich das Gforge-Team Ende 2008 mehr und mehr auf seine (nun wieder einmal) nicht mehr quelloffene Neuentwicklung Gforge Advanced Server konzentrierte, gründeten die beiden Kernentwickler Roland Mas und Christian Bayle Anfang 2009 das GPL-lizenzierte Fusionforge-Projekt [10]. Auch der Xerox-Fork ist unter dem Namen Codendi noch immer unter der GPL 2 erhältlich [11].
Eigenheim
Fusionforge ist als Debian- und Ubuntu-Paket erhältlich. Unter der Voraussetzung eines bereits funktionierenden MTA, den Fusionforge für die Aktivierung von Benutzeraccounts benötigt, gelingt die Installation damit problemlos. Wer seine Projekte nicht öffentlich auf Sourceforge hosten möchte, richtet mit wenig Aufwand seinen eigenen Hosting-Server ein (Abbildung 5).

Abbildung 5: Alioth-Debian.org setzt auf den von Fusionforge weiterhin gepflegten Code der letzten freien Version der Sourceforge-Software.
Das Versions-Repository darf bei der aktuellen Version 5 von Fusionforge im CVS-, Subversion-, Git-, Bazaar- oder Darcs-Format vorliegen. Für die Teamkoordination gibt es konfigurierbare Foren, auf Mailman [12] basierende Mailinglisten, To-do-Listen inklusive eines Gantt-Chart, einer News-Seite und Umfragen, die sich mit einer grafischen Oberfläche zügig zusammenklicken lassen (Abbildung 6).

Abbildung 6: Umfragen sind ein nützliches Werkzeug bei der Open-Source-Entwicklung. Fusionforge, das mit den aus Sourceforge bekannten schlichten, aber funktionalen Tools aufwartet, hat hier sein Alleinstellungsmerkmal.
Docs, Foren, Tracker
Hinzu kommen eine Dokumentenverwaltung für Anleitungen im HTML- oder Textformat, eine Dateiverwaltung für Releases und eine nach Programmiersprachen geordnete Quellcodeschnipsel-Verwaltung. Wie bei Trac und Launchpad gibt es eine Übersicht, die Foren- und Tracker-Aktivitäten auflistet.
Nebenbei wertet Fusionforge die Projektaktivitäten und die Anmeldung neuer Nutzer und Projekte mit Linien- und Tortendiagrammen aus. Ein eigenes Plugin bindet auch ein Mediawiki an. Alle Fusionforge-Features fallen in Optik und Funktionsumfang schlicht aus. Sie erfüllen ihren Zweck, doch Innovationen wie Links auf bestimmte Zeilen einer Quellcode-Datei bei Trac oder das Verknüpfen von Tracker-Einträgen mit Branches in der Versionsverwaltung sucht der Anwender vergeblich.
Altgedient
Immerhin unterstützt der Bugtracker in Version 5 Bug-Abhängigkeiten. Die meisten Details der Fusionforge-Software sind jedoch bereits aus der Zeit noch vor dem Relaunch von Sourceforge.net im Juli 2010 bekannt. Nach wie vor besticht allerdings die sinnvolle Kombination der einfachen Tools, die auch die Grundlage für den Erfolg von Sourceforge bildeten.
Etwas gründlicher hat Xerox die alte Sourceforge-Software aufgemöbelt. So gibt es in dieser Ausgabe einen Chatroom für die Echtzeit-Kommunkation räumlich getrennter Entwickler. Die wohl wichtigste Erweiterung ist die Einbindung des Continuous-Integration-Servers Hudson [13], der regelmäßig ablaufende Vorgänge wie Builds oder automatisierte Tests steuert. Pakete gibt es für Red Hat und Centos. Zusätzlich ist eine kostenpflichtige Pro-Edition einschließlich Support oder als SaaS-Abonnement im Angebot (bei Codendi).
Launchpad
Launchpad.net (Abbildung 7) ist das Sourceforge der Ubuntu-Entwickler. Wie das Vorbild stellt es ein Versionsrepository und einen Bugtracker zur Verfügung. Dazu kommen ein Wiki und die Wissensdatenbank Answers, in der Entwickler Fragen von Community-Mitgliedern beantworten. Ähnlich wie in einem Bugtracker durchlaufen die Fragen einen Workflow von »open« bis »solved« . Als Frage angelegte Objekte lassen sich in einen Bugtracker-Eintrag konvertieren und umgekehrt.

Abbildung 7: Nicht übersichtlich, aber dafür mehr Informationen als jede andere Portalsoftware bietet Launchpad mit dem Versionsbaum, dem News-Bereich, dem Bugtracker, freigegebenen Downloads, der Wissensdatenbank und einem Planungstool.
Ebenfalls an den Ticket-Workflow lehnt sich Blueprints an, die Planungsfunktion für neue Softwarefeatures. Sie verwaltet Texte im Wiki-Format. Einträgen lassen sich für die Projektplanung passende Zustände wie »New« , »Review« , »Pending Approval« , »Approved« und schließlich »Superseded« und »Obsolete« zuweisen. Zusätzlich zum Status der Spezifikation selbst führt Blueprints auch noch über deren Umsetzung mit Zuständen wie »Not started« über »Beta available« bis »Implemented« Buch.
Sprachbegabt
Wie sich an den unvollständigen Lokalisierungen vieler freier Softwareprojekte zeigt, kommen Kompetenzen als Übersetzer und Software-Entwickler wohl nicht wirklich häufig in Personalunion vor. Launchpad bietet daher eine grafische Schnittstelle, mit der sich einmal importierte ».po« -Dateien ohne Kenntnisse der zugrunde liegenden Technik erweitern lassen (Abbildung 8).

Abbildung 8: Auch das gibt es nur bei Launchpad: Mit der grafischen Schnittstelle zu GNU Gettext beteiligen sich sprachbegabte Besucher ohne Entwicklerhintergrund an der Übersetzung.
Last but not least gehört zu Launchpad auch ein Buildservice für Ubuntu-Pakete. Zwar ist der Buildservice von Open Suse flexibler, da er Pakete für zahlreiche Distributionen baut. Doch bei Launchpad ist die Paketschmiede Teil einer umfangreichen Entwicklungsplattform mit leistungsfähigen Werkzeugen für die Koordination der Teamarbeit. Sie verwaltet Einzelaccounts, Teamaccounts, zu denen eine Mailinglisten-Verwaltung mit Archivfunktion gehört, sowie Projektaccounts samt Release-Management. [14] listet die Launchpad-Funktionen detailliert auf. Den besten Eindruck erhält jedoch, wer ein aktives Softwareprojekt wie Inkscape auf Launchpad.net besucht.
Nicht ganz freiwillig
Ähnlich wie die Betreiber von Sourceforge betrachtete auch Canonical die Software hinter der Plattform zunächst als exklusives Eigentum. Freie Softwareprojekte dürfen Launchpad.net kostenlos nutzen, Anbieter proprietärer Software müssen für die Nutzung dagegen bezahlen. Durch die an diesem Modell geäußerte heftige Kritik ließ sich Mark Shuttleworth jedoch umstimmen. Canonical hat die Quellen der Launchpad-Software 2009 veröffentlicht.
Seitdem steht es jedem frei, seinen eigenen Launchpad-Server aufzusetzen. Allerdings behält sich Canonical weiterhin die Rechte an den eingebunden Grafiken vor. Für den internen Einsatz spielt dies keine Rolle, doch öffentliche Hostings auf Launchpad-Basis müssen die geschützte Optik verändern.
Praktikabel ist die Launchpad-Installation außerdem nur auf einem dedizierten Server mit Ubuntu-Betriebssystem. Der Setup-Prozess beschränkt sich zwar inzwischen auf wenige, aber gut dokumentierte Kommandozeilen-Aufrufe, doch er greift von der Apache-Konfiguration bis hin zu »/etc/hosts« tief in das System ein und löscht zudem alle PostgreSQL-Datenbanken, sodass der Einsatz einer eigenen (virtuellen) Maschine zu empfehlen ist.
Voraussetzung für die Installation ist die Versionsverwaltung Bazaar [15], mit der der Admin erst einmal das Setupskript Rocket-Fuel auscheckt. Es lädt nach dem Start alle benötigten Softwarepakete und Quellcode-Dateien herunter und richtet das System als Launchapd-Server ein. Das dauert je nach Tempo der Netzwerkverbindung mehrere Stunden. Während dieser Zeit fragt das Skript nach dem Root-Passwort, da der Sudo-Passwortcache zwischen den einzelnen Aktionen ausläuft. [16] beschreibt die Installation im Detail.
Nach der Installation ist noch die PostgreSQL-Datenbank zu initialisieren und Launchpad mit »make run« zu starten, dann ist der eigene Server unter »https://launchpad.dev/« erreichbar – allerdings nur lokal auf der Maschine, auf der der Server läuft. [17] erklärt, wie sich die Apache-Konfiguration auf dem Lauchpad-Server für dem Zugriff von externen Maschinen anpassen lässt.
Am sinnvollsten ist es, die dort angebotene Diff-Datei auf »/etc/apache2/sites-enabled/local-launchpad« anzuwenden, statt die Änderungen per Hand auszuführen. Damit die Links in der Webplattform funktionieren, ist auf allen Maschinen, die zugreifen möchten, eine Anpassung von »/etc/hosts« Pflicht. Nach wie vor bleibt Launchpad trotz offener Quellen eine auf den Eigenbedarf von Canonical zugeschnittene Software.
Die Leistung stimmt
Obwohl die Launchpad-Software beim Deployment wenig Rücksicht auf den Einsatz außerhalb der Canonical-Server nimmt, kann sich ein Arrangement mit den damit einhergehenden Schwierigkeiten lohnen: Launchpad geht ein gutes Stück über den Leistungsumfang von Fusionforge hinaus.
Unter den Features, die für den Erfolg als Plattform der Ubuntu-Entwickler verantwortlich sind, finden sich durchaus einige Besonderheiten. Dazu zählt die Fähigkeit des Bugtrackers, zu den Bugreports anderer Launchpad-Projekte oder sogar Trac- oder Bugzilla-Projekten zu verlinken (Abbildung 9).

Abbildung 9: Nicht nur Distributoren nützt es, dass der Launchpad-Bugtracker zu den Bugreports anderer Projekte verlinkt – sogar wenn diese andere Systeme wie Trac oder Bugzilla einsetzen.
Wie Bugzilla lässt er sich über ein Mail-Interface bedienen. Einzigartig ist auch, dass die Versionsverwaltung Bazaar mit der Option »–fixes lp:Bugnummer« Bugs schließt. Umgekehrt dürfen Einträge im Bugtracker auf Branches in der Versionsverwaltung verweisen.
Kforge
Neue Projekte lassen sich in den für öffentliches Hosting ausgelegten Sourceforge-Forks und in Launchpad einfach über die Weboberfläche registrieren. Bei Trac dagegen muss der Administrator hierfür jedes Mal das Konsolenwerkzeug »trac-admin« starten. Abhilfe schafft Kforge, das mehrere Trac-Instanzen unter einem GUI mit Single-Sign-on verknüpft und für ein automatisches Deployment von Trac-Umgebungen inklusive SVN-, Mercurial- oder Git-Repository sorgt.
Multiplikator-Effekt
So entsteht eine Multiprojekt-Umgebung aus unabhängigen Trac-Instanzen und Versions-Repositories – eine glückliche Kombination, denn für einzelne Projekte leistet Trac mehr als Fusionforge und Launchpad. Für das öffentliche Hosten à la Sourceforge eignet sich eine Kforge-Umgebung dennoch nicht, denn die Software startet bei jedem Einrichten eines neuen Projekts oder Dienstes den Webserver neu, was zu einer kurzen Erreichbarkeitslücke führt.
Dafür gleicht Kforge das größte Defizit von Trac im Vergleich zu Fusionforge und Launchpad aus, nämlich das Fehlen von Kommunikationswerkzeugen wie Mailinglisten oder News-Seiten: Außer Trac-Umgebungen verwaltet Kforge auch Mailman-Listen oder WordPress- und Joomla-Instanzen, Moin-Moin-Wikis und virtuelle Apache-Hosts.
Python-Baukasten
Kforge [18] selbst ist einfach zu installieren. Nach dem Einspielen einiger in allen gängigen Linux-Distributionen enthaltenen Pakete genügt es, das interaktive Installerskript auszuführen und die von ihm erzeugte Apache-Konfigurationsdatei in die laufende Webserver-Instanz per »include« einzubinden.
Kforge ist wie Trac in Python geschrieben und lädt die für eine aktuelle Trac-Installation nötigen Pakete selbst herunter, für andere Dienste wie die Mailman-Integration ist eine lokale Installation der entsprechenden Software Voraussetzung. Näheres erläutert die Installationsanleitung auf der Webseite.
In der Kforge-Oberfläche lassen sich Nutzeraccounts und Softwareprojekte registrieren. Anwender mit Administrator-Rechten müssen für das Einrichten einer Trac-, Joomla- oder WordPress-Umgebung sowie eines SVN-, Git- oder Mercurial-Repository nicht mehr tun, als den gewünschten Dienst-Typ auszuwählen und ihm einen Namen zu geben (Abbildung 10).

Abbildung 10: Eine neue Trac-Instanz mit ein paar Mausklicks: Kforge macht aus dem auf Einzelprojekte zugeschnittenen Trac eine Multiprojekt-Plattform.
Alles außer agil
Trac erweist sich in diesem Vergleich dank seiner Wiki, Bugtracker und Quellcode-Browser verknüpfenden Link-Funktion und der Plugin-Schnittstelle als das leistungsfähigste und flexibelste Werkzeug für die Dokumentation einzelner Projekte. Was noch fehlt, das sind Kommunikationswerkzeuge wie Mailinglisten oder Blogs und die Fähigkeit, neue Projekte über das Webinterface einzurichten. Diese Funktionen flanscht Kforge an.
Die Sourceforge-Forks wie Fusionforge und Launchpad sind von vornherein als öffentliche Multiprojekt-Server ausgelegt. Anders als bei Trac gibt es hier Werkzeuge für die Kommunikation im Team wie Mailinglisten und Blogs. Fusionforge besticht durch schlichte Werkzeuge, die trotzdem alle wichtigen Belange der Entwicklung im Team abdecken. Launchpads Fähigkeit, Projekt-übergreifende Zusammenhänge im Bugtracker abzubilden, hilft nicht nur Linux-Distributoren.
Keine der freien Entwicklungsplattformen zielt so direkt auf agile Entwicklungsmodelle wie das kommerzielle Atlassian Studio [19] mit seinen Peer-Reviews für Code-Commits. Aber Trac’s Links auf einzelne Zeilen einer bestimmten Code-Revision kommen dem doch schon sehr nahe. Freie Alternativen zu den vorgestellten Programmen bieten noch die Java-Anwendung Libre-Source [20] und die unter der Affero GPL veröffentlichte Software der Hostingplattform Gitorious.org [21]. (mfe)
Infos
- Trac, Git-Plugin: http://trac-hacks.org/wiki/GitPlugin
- Trac, Mercurial-Plugin: http://trac.edgewall.org/wiki/TracMercurial
- Trac: http://trac.edgewall.org
- Trac, Wysiwyg-Plugin: http://trac-hacks.org/wiki/TracWysiwygPlugin
- Graphviz: http://www.graphviz.org/
- Trac, Custom-Field-Plugin: http://trac-hacks.org/wiki/CustomFieldAdminPlugin
- Gforge: http://gforge.org
- Savane: http://gna.org/projects/savane
- Xerox: http://www.codendi.com
- Fusionforge: http://fusionforge.org
- Codendi: http://www.kforgeproject.com
- Mailman: http://www.gnu.org/software/mailman/index.html
- Carsten Zerbst, “Am Ball bleiben”: Linux-Magazin 07/10, S. 106
- Launchpad, Feature-Liste: https://dev.launchpad.net/FeatureChecklist
- Bazaar: http://bazaar.canonical.com
- Launchpad-Installation: https://dev.launchpad.net/Getting
- Launchpad Remote: https://dev.launchpad.net/Running/RemoteAccess
- Kforge: http://www.kforgeproject.com
- Atlassian Studio: http://www.atlassian.com/hosted/studio/
- Libre Source: http://dev.libresource.org/home
- Gitorius-Software: http://gitorious.org/gitorious





