Der Einstieg
Das Starten eines freien Softwareprojekts ist eine zweifältige Aufgabe. Die
Software muss Benutzer akquirieren und Entwickler akquirieren. Diese zwei
Bedürfnisse stehen nicht notwendigerweise in Konflikt, aber die Interaktion zwischen
diesen erhöht die Komplexität der ersten Präsentation eines Projekts. Ein paar
Informationen sind für beide Zielgruppen nützlich, manche nur für die Eine
oder die Andere. Beide Arten von Informationen sollten das Prinzip der
skalierten Darstellung berücksichtigen: Der präsentierte Detaillierungsgrad
jeder Stufe sollte der Zeit und dem Aufwand entsprechen, den der Leser zu diesem
Zeitpunkt einzubringen bereit ist. Mehr Aufwand sollte immer mehr Belohnung bewirken.
Wenn Anstrengung und Belohnung nicht zuverlässig korrelieren, werden die meisten Menschen
das Vertrauen verlieren und aufhören, Mühe zu investieren.
Daraus folgt: Das Erscheinungsbild ist
wichtig. Programmierern fällt es besonders schwer, das zu
glauben. Ihre Liebe des Inhalt über der zur Form gehört fast
schon zum Berufsethos. Es ist kein Zufall, dass so viele Programmierer
gegen Marketing und Public Relations eine Antipathie hegen oder dass
professionelle Grafiker über so manches Design erschrocken sind, auf dass
Programmierer von sich aus kommen.
Das ist schade, denn es gibt Situationen, in denen das Aussehen
auch wirklich dem Inhalt entspricht. Die
Präsentation eines Projekts ist genau solch ein Fall. Die erste
Information, die ein Besucher über ein Projekt erhält, ist die Gestaltung
von dessen Webseite. Diese Information wird erfasst, bevor irgendein
tatsächlicher Inhalt der Seite verstanden wird — bevor ein
Text gelesen wurde oder auf einen Link geklickt wurde. Egal wie
ungerecht es sein mag, Menschen können sich nicht anders helfen, als sich
sofort einen ersten Eindruck zu verschaffen. Im Erscheinungsbild der
Seite wird deutlich, ob man sich beim Aufbau der Präsentation des
Projekts Mühe gemacht hat. Menschen haben eine extrem sensible Antenne
dafür, wieviel Mühe in etwas investiert wurde. Die meisten können mit
einem Blick erkennen, ob eine Webseite eilig zusammengebastelt wurde oder
ob man sich ernsthafte Gedanken gemacht hat. Das ist die erste
Information, die Ihr Projekt nach außen gibt, und der hierdurch
vermittelte Eindruck überträgt sich auf das übrige Projekt.
Auch wenn sich dieses Kapitel thematisch um inhaltliche Fragen dreht,
sollten sie daran denken, dass das Erscheinungsbild eine Rolle spielt.
Da die Webseite für zwei Arten von Besuchern — Benutzer und
Entwickler — geeignet sein muss, muss besonders auf Klarheit und
Führung geachtet werden. Auch wenn hier nicht die richtige Stelle für
eine allgemeine Abhandlung über Web-Design ist, gibt es ein
erwähnenswertes Prinzip, insbesondere wenn die Seite mehrere
(überlappende) Zielgruppen ansprechen soll: Besucher sollten eine grobe
Vorstellung haben, wo ein Link hinführt, bevor sie darauf klicken. Das
Ziel eines Links zur Benutzer-Dokumentation sollte allein vom
Anblick her deutlich sein, und keine
Missverständnisse aufkommen lassen, ob es sich nicht etwa um die Dokumentation
für Entwickler handelt. Beim Betrieb eines Projekts geht es zu einem Teil
darum, Informationen bereitzustellen, aber auch darum, ein Gefühl der
Bequemlichkeit zu vermitteln. Allein schon die Verfügbarkeit bestimmter
grundsätzlicher Angebote an der richtigen Stelle gibt Benutzern und
Entwicklern eine Sicherheit bei ihrer Entscheidung, ob sie sich
beteiligen wollen oder nicht. Es sagt ihnen, dass dieses Projekt seine
Siebensachen beisammen hat, Fragen erahnt, die gestellt werden, und sich die
Mühe gemacht hat, diese so zu beantworten, dass Fragesteller möglichst wenig
Einsatz aufbringen müssen. Indem das Projekt eine Aura des Vorbereitetseins
ausstrahlt, sendet es die folgende Botschaft aus:
"Sie verschwenden ihre Zeit nicht, wenn Sie sich beteiligen".
Das ist genau die Botschaft, die Menschen hören wollen.
Was wir unter Nutzern und Entwicklern verstehen
Die Begriffe Nutzer und
Entwickler bezieht sich hier auf die Beziehung,
die jemand mit einem betreffenden Software Projekt hat, nicht auf ihre Identität
in der Welt in Gänze.
Wenn beispielsweise das Open-Source Projekt eine für die Benutzung
in der Webentwicklung vorgesehene Javascript Bibiliothek ist und jemand
benutzt die Bibleothek als Teil ihrer Arbeit zum Bau von Webseiten, dann ist
sie eine "Nutzerin" dieser Bibleothek (obwohl ihr professioneller Titel
"Software-Entwickler" sein mag). Aber wenn sie anfängt, Bugfixes und Verbesserungen
wieder stromaufwärts beizutragen - das heißt wieder
in das Projekt - dann, soweit sie in die Wartung des Projekts involviert ist,
ist sie auch "Entwicklerin" des Projekts.
Für Entwickler ist es üblich, in einem Open Source-Projekt auch Benutzer zu sein,
aber es ist nicht immer der Fall. Besonders bei großen Projekten, die von
Organisationen begonnen wurden, um unternehmensweite Softwareanforderungen
zu erfüllen, müssen die Entwickler nicht immer direkte Benutzer der Software sein,
obwohl sie normalerweise immer noch Teil des Teams sind, welches diese Software
innerhalb ihrer Organisation verwendet.
Bei Projekten, die in erster Linie für Programmierer gedacht sind, ist die Grenze
zwischen Benutzer und Entwickler sehr durchlässig: Jeder
Benutzer ist ein potenzieller Entwickler. Aber auch in Projekten, die für
Nicht-technische Personen gedacht sind, sind einige Prozent der Benutzer potenziell
Entwickler. Open Source-Projekte sollten so ausgeführt werden, dass
dieser Übergang für alle Interessierten einladent wird.
Wenn Sie ein "Hosting-Paket"Anm. d. Übersetzers: Wir verwenden
den Begriff "Hosting-Packet", weil der engl. Begriff "canned hosting" im deutschen
Sprachraum nicht geläufig ist. Ein anderer, auch im deutschen Sprachraum geläufiger
Begriff, ist "Shared Hosting". "Hosting-Paket" schien uns beim Übersetzen am
geeignetsten zu sein. verwenden (sieh in ), ist ein Vorteil dieser Variante,
dass deren Seiten ein Standardlayout haben, welches von Projekt zu Projekt ähnlich
und sehr gut geeignet ist, um ein Projekt der Welt zu präsentieren. Dieses
Layout kann auf bestimmte Weise angepasst werden, in gewissen Grenzen, aber das
Standarddesign fordert Sie auf, die Informationen einzupflegen, welche Besucher
am ehesten suchen.
Schauen Sie sich zuerst um
Bevor Sie ein Open-Source-Projekt anfangen, gibt es noch eine
wichtige Warnung:
Schauen Sie sich vorher um, ob nicht schon ein Projekt existiert,
das Ihre Anforderungen erfüllt. Die Wahrscheinlichkeit ist hoch, dass
unabhängig von dem Problem, das Sie lösen wollen, Ihnen jemand zuvorgekommen
ist. Wenn das der Fall ist und der entsprechende Code unter eine freie
Lizenz gestellt wurde, gibt es keinen Grund, das Rad neu zu erfinden. Es
gibt natürlich Ausnahmen: Falls Sie ein Projekt um der Lernerfahrung
willen beginnen wollen, wird Ihnen bereits existierender Code nicht
weiterhelfen. Vielleicht wissen Sie bereits von vornherein, dass Ihr
Problem so spezifisch ist, dass es mit Sicherheit noch von keinem
gelöst wurde. Im Allgemeinen gibt es aber keinen Grund, sich nicht
umzuschauen, und es kann sich beträchtlich lohnen. Sollten die üblichen
Suchmaschinen keine brauchbaren Ergebnisse liefern, sollte Sie es direkt bei
https://github.com/, https://freshcode.club/, https://openhub.net/ und beim Verzeichnis
freier Software der Free Software Foundation https://directory.fsf.org/ versuchen.
Selbst wenn Sie nicht genau das finden, wonach Sie suchen,
könnten Sie etwas derart ähnliches finden, dass es sinnvoller ist,
sich an diesem Projekt zu beteiligen und es um die fehlenden Funktionen
zu erweitern, als selbst komplett von Vorne anzufangen. Sieh
in zu einer Diskussion,
auf welche Weise ein existierendes Open-Source Projekt schnell zu evaluieren ist.
Mit dem Vorhandenen beginnen
Sie haben sich umgeschaut, herausgefunden, dass nichts Ihre
Anforderungen erfüllt, und sich entschlossen, ein neues Projekt zu
starten.
Was nun?
Das Schwierigste beim Start eines neuen freien Software-Projekts
ist die Verwandlung einer persönlichen Vision in eine öffentliche. Sie
oder Ihre Organisation mögen sehr wohl wissen, was Sie wollen. Dieses
Ziel so auszudrücken, dass die Welt es versteht, erfordert ein
beträchtliches Maß an Arbeit. Allerdings ist es von so grundsätzlicher
Bedeutung, dass Sie sich die Zeit dazu nehmen sollten. Sie und die anderen
Gründer müssen entscheiden, worum es in dem Projekt wirklich geht —
so müssen Sie über seine Grenzen entscheiden, was es abdecken wird und was
nicht — und ein Missionsziel
(engl. mission statement) verfassen. Dieser Teil ist für
gewöhnlich nicht allzu schwer, auch wenn es manchmal unerwähnt
gebliebene Annahmen, sogar Meinungsverschiedenheiten über die Natur des
Projekts aufdecken kann, was sogar gut ist:
es ist besser diese jetzt auszuräumen als später. Der
nächste Schritt ist das Projekt für die öffentliche Wahrnehmung
aufzubereiten, was im Grunde genommen eine Schinderei ist.
Diese Arbeit ist deshalb so mühselig, weil man hauptsächlich
Dinge organisiert und dokumentiert, die jeder bereits kennt —
d.h "jeder" der bislang am Projekt beteiligt ist. Für diejenigen, die
die Arbeit machen, gibt es deshalb keinen direkten Nutzen. Sie
brauchen weder die README-Datei für einen Überblick
über das Projekt, noch ein Entwurfsdokument.
Sie brauchen keine sorgsam aufbereitete Code-Struktur die mit den
zwar informellen aber verbreiteten Normen zur Veröffentlichung
von Quellen konform ist. Wie auch immer der Quellcode strukturiert ist,
es ist ihnen recht; sie sind ja bereits daran gewöhnt, und solange der
Code läuft, wissen sie wie man ihn benutzt. Es macht ihnen
nicht einmal etwas aus, wenn grundlegende Annahmen über die
Architektur des Projekts undokumentiert bleiben; auch mit ihnen sind
sie ja bereits vertraut.
Neulinge andererseits brauchen all diese Dinge.
Glücklicherweise jedoch nicht alle auf einmal. Sie müssen nicht jede
erdenklich Ressource gleich parat haben, bevor Sie mit einem Projekt an die
Öffentlichkeit gehen. In einer perfekten Welt wäre ein neues
Open-Source-Projekt von Beginn an ausgestattet mit einem ausführlichen
Entwurfsdokument, einem vollständigen Benutzerhandbuch (inklusive der
Hinweise auf Funktionen, die zwar geplant, aber noch nicht implementiert
sind), wunderschönem und portabel gegliedertem Code, der auf jeder
Plattform läuft, und so weiter. In Wirklichkeit wäre es unvertretbar zeitaufwendig,
auf all diese Dinge zu achten; und überhaupt sind dies Arbeiten, bei
denen man davon ausgehen kann, dass sich andere beteiligen,
sobald das Projekt läuft.
Wirklich notwendig ist jedoch, so viel in die
Präsentation zu investieren, dass Neulinge die ersten Hürden des
Unbekannten überwinden können. Stellen Sie sich das wie den ersten
Schritt beim Hochfahren vor, um dem Projekt zu einer Art minimaler
Aktivierungsenergie zu verhelfen. Dieser Grenzbereich wird mitunter
Hacktivierungs-Energie genannt: die
Energie, die Neulinge investieren müssen, bevor sie etwas zurückbekommen.
Je geringer die Hacktivierungs-Energie ist, desto besser. Ihre erste
Aufgabe ist es, die Hacktivierungs-Energie auf ein Niveau zu senken,
das Leute dazu ermutigt sich zu beteiligen.
Jeder der folgenden Unterabschnitte, beschreibt einen wichtigen
Aspekt beim Start eines neuen Projekts. Sie werden ungefähr in der
Reihenfolge präsentiert, in der neue Besucher sie wahrnehmen werden,
natürlich kann die tatsächliche Reihenfolge auch abweichen.
Betrachten Sie sie als Checkliste.
Wenn Sie ein Projekt starten, gehen Sie die Liste durch und stellen Sie
sicher, dass alle Punkte erledigt sind oder zumindest dass Sie mit den
möglichen Folgen zurechtkommen, wenn Sie einen Punkt auslassen.
Wählen Sie einen guten Namen
Versetzen Sie sich in die Lage von jemandem, der gerade von Ihrem
Projekt erfahren hat, vielleicht ganz zufällig, bei der Suche nach einer
Software, um ein Problem zu lösen. Das erste, womit er in
Berührung kommen wird, ist der Name Ihres Projekts.
Ein guter Name wird Ihr Projekt nicht automatisch erfolgreich
machen, und ein schlechter Name wird nicht seinen Untergang besiegeln —
nun ja, ein wirklich schlechter Name könnte das
vielleicht tatsächlich, aber wir gehen davon aus, dass niemand versuchen
wird, sein Projekt aktiv zu sabotieren. Allerdings kann ein schlechter
Name die Aufmerksamkeit für das Projekts schmälern, entweder weil die
Leute ihn nicht ernst nehmen oder schlicht deshalb, weil Sie ihn sich
nicht merken können.
Ein guter Name:
Gibt eine ungefähre Vorstellung davon, was das Projekt
tut oder steht zumindest in einer so offensichtlichen
Beziehung dazu, dass man weiß, was das Projekt tut, wenn man
den Namen kennt, und es deshalb später leicht hat, sich an
den Namen zu erinnern.
Ist einfach zu behalten. Man kommt hier nicht um die
Tatsache herum, dass Englisch zur Standardsprache im
Internet geworden ist: "einfach zu behalten" bedeutet normalerweise
"Einfach zu behalten für jemanden, der Englisch
lesen kann". Wortspiele, die auf der einheimischen Aussprache
beruhen, werden vielen Menschen, deren Muttersprache nicht
Englisch ist, unverständlich bleiben. Ist das Wortspiel
besonders verlockend und einprägsam, kann es das Wert
sein; denken Sie aber daran, dass viele, die den Namen sehen,
nicht dasselbe heraushören werden wie ein englischer
Muttersprachler.
Gleicht nicht dem eines anderen Projekts und verletzt
auch kein Markenrecht. Das ist einerseits höflich und
andererseits auch rechtlich sinnvoll, denn Sie wollen keine
Verwirrung über Identitäten anstiften. Es ist schwierig
genug, im Blick zu behalten, was das Netz zu bieten hat, auch
ohne unterschiedliche Dinge mit demselben Namen.
Die zuvor in erwähnten
Quellen können Ihnen dabei helfen herauszufinden, ob ein
anderes Projekt bereits den Namen trägt, den Sie im Sinn
haben. Die kostenlose Suche nach Markenzeichen ist über
und speziell für die USA über
verfügbar.
Ist idealerweise als Domain-Name verfügbar in den
Top-Level-Domains
.com,
.net und
.org.
Sie sollten eine von ihnen auswählen, vielleicht
.org, um sie als offizielle Seite
des Projekts zu bewerben; die anderen beiden sollten darauf
verweisen und einfach nur dazu dienen, andere zu hindern,
Verwirrung bezüglich Ihres Projektnamens zu stiften.
Selbst wenn Sie vorhaben, das Projekt auf einer anderen Seite
zu betreiben (siehe
), können Sie
immer noch die Projekt-spezifische URL registrieren und
diese auf die Seiten des Betreibers weiterleiten. Es hilft
dem Nutzer ungemein, nur eine einfache URL im Kopf behalten
zu müssen.Die Wichtigkeit von Top-Level Domainnamen
nimmt scheinbar ab. Zahlreiche Projekte haben gerade ihren Namen in der
.io TLD, beispielsweise, und scheren sich nicht
um .com,
.net oder
.org. Ich kann nicht vorhersagen, wie die Marken-Psychologie
von Domainnamen in Zukunft sein wird, daher nutzen Sie ihr Urteilsvermögen und wenn Sie
unter all den wichtigen TLDs den Namen bekommen können, tun Sie es.
Möglicherweise ist er als Nutzername auf https://twitter.com/ und anderen
Mikroblogseiten verfügbar. Siehe zu Details dazu
und dessen Beziehung zu Domainnamen.
Besitze den Namen in wichtigen Namensräumen
Für große Projekte ist es eine gute Idee, den Projektnamen in
sovielen relevanten Namensräume des Internet zu besitzen wie möglich.
Mit Namensräume meine ich nicht nur das Domain Name System, sondern auch online
Dienste, bei denen Kontonamen (Benutzernamen) die öffentlich sichtbaren Anlaufstellen sind,
durch welche Personen auf das Projekt verweisen. Wenn sie den gleichen Namen
überall dort haben, wo Menschen nach ihnen suchen würden, ist es für die Menschen leichter,
ein laues Interesse am Projekt zu wahren, bis sie zu mehr Engagement bereit sind.
Beispielsweise hat das freie Desktop-Projekt Gnome den https://gnome.org/ Domainnamen
Sie schafften es nicht, gnome.com oder gnome.net zu bekommen,
aber das ist okay — wenn sie nur einen haben und es der .org ist,
ist das ausgezeichnet. Das ist normalerweise der Erste, nach dem Leute suchen,
wenn sie nach einem Open-Source Projekt diesen Namens Ausschau halten. Wenn
Sie "gnome.org" selber nicht bekommen können, kann eine übliche Lösung darin
bestehen, stattdessen "gnomeproject.org" zu nehmen und viele Projekte lösen das
Problem auf diese Weise., die https://twitter.com/gnome Twitter Anlaufstelle, den https://identi.ca/gnome Nutzernamen bei
Identi.cahttps://identi.ca/ ist eine Open-Source Mikrobolog / Sozial Networking
Platform, die zahlreiche freie Software Entwickler nutzen.,
den https://github.com/gnome Nutzernamen
bei GitHub.comWährend die Hauptkopie des Gnome Sourcecodes bei https://git.gnome.org/ liegt, pflegen sie eine
gespiegelte Kopie bei GitHub, seit so viele Entwickler sich bereits mit GitHub
auskennen und beim Freenote IRC Netzwerk (siehe )
haben sie den Kanal #gnome
, obwohl sie auch ihren eigenen IRC Server
warten (wo sie den Kanal Namensraum sowieso kontrollieren).
All dies macht das Gnome Projekt blendent einfach auffindbar: Es ist im
Allgemeinen genau da, wo ein potentieller Unterstützer erwarten würde es
anzutreffen. Sicher, Gnome ist ein großes und komplexes Projekt mit tausenden
Unterstützern und vielen Unterteilungen; Der Nutzen für Gnome, einfach
Auffindbarkeit zu sein, ist größer als er bei einem neueren Projekt wäre, bis
jetzt gibt es so viele Wege, an Gnome teilzunehmen. Aber es wird sicher niemals
ihrem Projekt schaden, seinen Namen in soviel wie möglich
relevanten Namensräumen zu besitzen und das kann manchmal hilfreich sein.
Wenn sie also ein Projekt starten, denken sie darüber nach, was der Online
Anlaufpunkt sein sollte, und registrieren sie diesen bei den Online-Diensten
um die sie sich sorgen. Die weiter oben Erwähnten sind möglicherweise eine
gute Anfangsliste, aber sie mögen andere kennen, die für den konkreten Bereich
ihres Projektes relevant sind.
Formulieren Sie ein klares Missionsziel
Sobald Besucher ihre Projektseite gefunden haben, werden sie nach
einer kurzen Beschreibung oder dem Leitbild suchen, um (innerhalb
von 30 Sekunden) entscheiden zu können, ob sie interessiert daran sind,
mehr zu erfahren. Das Ziel sollte auf der Frontseite einen auffälligen
Platz einnehmen, vorzugsweise gleich unter dem Projektnamen.
Die Beschreibung sollte konkret, klar umrissen und vor allem kurz sein.
Hier ist ein gutes Beispiel von https://hadoop.apache.org/:
Das Apache™ Hadoop® Projekt entwickelt Open-Source Software für
zuverlässiges, skalierbares, verteiltes Rechnen.
Die Apache Hadoop Software Bibliothek ist ein Rahmenwerk,
dass es erlaubt, für verteilte Abarbeitung von großen Datensätzen über
Computer-Cluster hinweg, ein einfaches Programmiermodell zu nutzen. Es wurde
designed, um von einem einzelnen Server bis hin zu tausenden Maschienen zu
skalieren, von denen jede lokale Rechen- und Speicherkapazität anbietet.
Es verlässt sich weniger auf Hardware, um Höchverfügbarkeit zu liefern, sondern
die Bibleothek selbst wurde designed, um Fehler im Applikationslayer zu
ermitteln und zu behandeln, so dass Hochverfügbarkeit auf Ebene eines
Cluster aus Computern geliefert wird, von denen jeder fehleranfällig
sein kann.
In nur vier Sätzen haben sie alle Highlights getroffen, weitestgehend
durch das Vorwissen des Lesers. Das ist ein wichtiger Punkt: Es ist okay,
von einem in Mindestmaß informierten Leser auszugehen, der grundsätzlich
vorbereitet ist. Ein Leser, der nicht weiß, was "Cluster" und "Hochverfügbarkeit"
in diesem Zusammenhang bedeutet, kann vermutlich nicht viel Nutzen aus
Hadoop überhaupt ziehen, so dass es keine Veranlassung gibt, für einen Leser zu
schreiben, der weniger als dieses weiß. Die Phrase "designed, um Fehler im
Applikationslayer zu ermitteln und zu behandeln" hat Ingenieure im Auge,
die Übung mit großformatigen Rechenclustern haben — wenn diese
solche Worte sehen, werden sie wissen, dass die hinter Hadoop stehenden Leute
diese Welt verstehen und der erstmalige Besucher wird Hadoop gerne weiterhin in
Erwägung ziehen.
Wer die Missionziele gelesen hat und weiterhin interessiert ist, wird
nun weitere Einzelheiten erfahren wollen, vielleicht durch die
Benutzer- oder Entwicklerdokumentation, schließlich wird er
etwas herunterladen wollen. Doch vor alledem will er sicher sein,
dass es sich um Open Source handelt.
Sagen Sie, dass das Projekt frei ist
Die Hauptseite muss unmissverständlich klar machen,
dass das Projekt Open Source ist. Das mag offensichtlich
klingen, Sie wären aber überrascht darüber, wie viele Projekte es
vergessen. Ich habe schon Projekte gesehen, deren Hauptseite nicht nur
nicht sagte, unter welcher Lizenz ihre Software veröffentlicht
wurde, sondern nicht einmal erwähnte, dass es sich um freie Software
handelt. Manchmal erschien die entscheidende Information erst auf der
Download-Seite, der Entwickler-Seite oder irgend einer andere Stelle, die
einen Klick mehr erforderte. Im Extremfall wurde die Lizenz überhaupt
nicht auf der Site angegeben — die einzige Möglichkeit sie
herauszufinden war, die Software herunterzuladen und darin nach einer
Lizenzdatei zu schauen.
Bitte machen Sie diesen Fehler nicht. Durch solch ein Versäumnis können
Ihnen viele potentieller Entwickler und Nutzer verloren gehen. Sagen Sie
gleich vorweg, direkt unterhalb des Missionsziels, dass das Projekt
freie Software oder Open-Source-Software ist, und geben Sie die genaue
Lizenz an. Eine kurze Anleitung zur Wahl einer Lizenz bietet der Abschnitt
weiter unten in
diesem Kapitel; Lizenzfragen werden ausführlich im Kapitel
behandelt.
Bis hierhin hat sich unser hypothetischer Besucher entschieden
— wahrscheinlich innerhalb der ersten Minute oder schon vorher
— ob er interessiert ist, sagen wir, zumindest weitere fünf
Minuten in das Projekt zu investieren. Der nächste Abschnitt beschreibt,
was er innerhalb dieser fünf Minuten vorfinden sollte.
Funktionen und Anforderungen
Es sollte eine kurze Liste der Funktionen geben, die von der
Software unterstützt werden (Wenn etwas noch nicht fertig ist, können
Sie es trotzdem auflisten, schreiben Sie aber
"geplant" oder "in Arbeit"
daneben), und der Anforderungen, welche die Software an die Hardware stellt.
Stellen Sie sich die Liste der Funktionen/Anforderungen wie etwas vor,
das Sie jemandem geben würden, der eine kurze Zusammenfassung zu dieser
Software wünscht. Oft ist sie einfach nur eine logische Erweiterung der
Missionsziele. Das Missionsziel könnte zum Beispiel folgendes
beinhalten:
Erstellung einer Volltext-Indexierungs- und
-Suchmaschine mit einer umfangreichen Schnittstelle für
Programmierer, die Suchdienste über große Mengen von Text anbieten
wollen.
Die Liste der Funktionen und Anforderungen würde Details
bieten, um das Missionsziel zu verdeutlichen:
Funktionen:
Durchsucht Klartext, HTML, und
XML
Suche nach Wörtern oder
Ausdrücken
(geplant) Unscharfe Suche
(geplant) Inkrementelle Aktualisierung
der Indexe
(geplant) Indexierung von Ressourcen im
Netzwerk
Anforderungen:
Python 3.2 oder höher
Genug Festplattenspeicher für die Indexe
(ungefähr die doppelte Menge der
Originaldaten)
Durch diese Informationen gewinnen Leser schnell ein Gefühl dafür,
ob ihnen diese Software etwas nützen könnte, und sie können gleichzeitig
überlegen, ob sie sich als Entwickler beteiligen wollen.
Stand der Entwicklung
Besucher wollen normalerweise wissen, wie es einem Projekt geht. Bei neuen
Projekten wollen sie wissen, wie weit dessen Versprechen und dessen
derzeitiger Stand auseinanderliegen. Bei einem ausgereiften Projekt
wollen sie wissen, wie aktiv es gepflegt wird, wie oft neue Versionen
veröffentlicht werden, wie schnell es wahrscheinlich auf Bug-Meldungen
reagieren wird usw.
Es gibt eine Reiche verschiedener Wege, um Antworten auf diese Fragen
anzubieten. Einer ist, eine Seite zum Status der Entwicklung einzurichten,
auf der die kurzfristigen Ziele und Anfragen des Projekts aufgelistet werden
(es könnte z.B. auf der Suche nach Entwicklern mit bestimmten Fachkenntnissen
sein). Die Seite kann auch eine Übersicht vergangener Versionen haben, mit einer
Auflistung der jeweiligen Funktionen, damit Besucher sich ein Bild
machen können, was in diesem Projekt unter "Fortschritt" verstanden wird
und wie schnell es nach diesem Verständnis vorankommt. Manche Projekte
strukturieren ihre Entwicklungsstatus-Seite als Roadmap, welche die Zukunft
beinhaltet: Vergangene Ereignisse werden an Zeitenpunkten gezeigt, die gerade
erst vorbei sind, zukünftige an ungefähren Zeitpunkten, von denen das Projekt
hofft, dass sie an diesen dann passieren.
Der andere Weg — der sich mit dem Ersten nicht
gegenseitig ausschließt und tatsächlich am besten mit diesem in
Kombination gemacht wird — ist, verschiedene
automatisch-pflegende Zähler und Indikatoren in die Startseite und/oder
der Entwicklerseite des Projektes einzubetten, welche verschiedene
Informationshäppchen zeigen, die zusammenfassend gesehen, einen Eindruck
vom Entwicklungsstatus und Fortschritt des Projektes geben. Zum Beispiel
ein Ankündigungs- oder Nachrichtenfenster, aktuelle Nachrichten zeigend,
einen Twitter- oder ein anderer Microblog-Stream, der Benachrichtigungen
anzeigt, die mit den angegebenen Hashtags des Projekts übereinstimmen,
eine Zeitleiste von kürzlich veröffentlichten Versionen, ein Panel mit
den letzten Aktivitäten im Bug-Tracker (Bugs eingereicht, Bugs geantwortet),
eine andere Mailingliste oder Diskussionsforum-Aktivität usw. Jeder dieser
Indikatoren sollte ein Zugangspunkt für weitere Informationen sein. Wenn Sie
beispielsweise auf das Fenster "Letzte Fehler" klicken, sollten Sie den
vollständigen Bug-Tracker oder zumindest eine erweiterte Ansicht der
Bug-Tracker-Aktivität aufrufen.
Tatsächlich gibt es zwei leicht unterschiedliche Bedeutungen für
"Entwicklungsstatus", die hier miteinander verschmolzen werden. Eine
ist das formale Gefühl: Wo steht das Projekt in Relation zu seinen
erklärten Zielen und wie schnell kommt es voran? Die andere ist weniger
formell, aber genauso nützlich: Wie aktiv ist dieses Projekt? Läuft das
Zeug? Gibt es hier Leute, die Dinge erledigen? Oft ist diese letztere
Darstellung das, was ein Besucher am meisten interessiert. Ob ein Projekt
seinen letzten Meilenstein erreicht hat oder nicht, ist manchmal nicht so
interessant wie die grundlegendere Frage, ob es eine aktive Gemeinschaft
von Entwicklern gibt.
Die zwei Begriffe des Entwicklungsstandes sind natürlich miteinander
verbunden und ein gut dargestelltes Projekt zeigt beide Arten. Die Informationen
können zwischen der Titelseite des Projekts (dort hinreichend dargestellt, um
einen Überblick über beide Arten des Entwicklungsstatus zu geben) und einer
eher auf Entwickler ausgerichteten Seite aufgeteilt werden.
Beispiel: Launchpad Status Indikatoren
Launchpad.net ist eine Site, die ziemlich gute Ergebnisse bei der Anzeige
von entwicklerorientierten Statusindikatoren leistet. Launchpad.net ist
insofern etwas ungewöhnlich, als dass es für einige Projekte sowohl eine
primäre Hosting-Plattform, als auch für andere eine sekundäre, auf das
Packen ausgerichtete Website ist (bzw. für die Anderen ist es der primäre
Standort für das "Projekt", um das speziell zusamengestellte Programmpaket
für das Ubuntu GNU / Linux-Betriebssystem, für das Launchpad entsprechend
seiner Spezifikation entwickelt wurde, zu erhalten). In beiden Fällen werden
auf der Startseite eines Projekts in Launchpad verschiedene automatisch
gewartete Statusanzeigen angezeigt, die schnell Aufschluss über den Stand
des Projekts geben. Während das einfache Nachahmen einer Launchpad-Seite
wahrscheinlich keine gute Idee ist — Ihr eigenes Projekt sollte
sorgfältig darüber nachdenken, was die besten Entwicklungsstatusindikatoren sind —
bieten Launchpad-Projektseiten einige gute Beispiele für die Möglichkeiten.
Beginnen Sie bei den folgenden ganz oben auf einer Projektseite und scrollen
Sie nach unten: https://launchpad.net/drizzle
oder https://launchpad.net/inkscape, um nur zwei zufällig heraus zu picken.
Der Entwicklungsstatus sollte immer die Realität widerspiegeln
Fürchten Sie sich nicht davor, einen unfertigen Eindruck zu
vermitteln und widerstehen Sie der Versuchung, den Entwicklungsstand
besser darzustellen, als er wirklich ist. Jeder weiß, dass sich Software in
Schritten entwickelt; zu sagen "Es ist Alpha-Software und sie hat bekannte
Fehler. Sie läuft zwar und funktioniert zumindest teilweise, trotzdem
gilt: Nutzung auf eigene Gefahr" ist keine Schande. Diese
Ausdrucksweise wird nicht die Art von Entwicklern verschrecken, die Sie zu
dieser Zeit brauchen. Was die Nutzer angeht: Einer der schlimmsten Fehler,
die ein Projekt machen kann, ist, Nutzer anzulocken, für welche die
Software noch nicht bereit ist. Der Ruf, instabil oder fehlerträchtig zu
sein, ist schwer wieder loszuwerden, wenn er dem Projekt einmal anhaftet.
Auf lange Sicht zahlt es sich aus, konservativ zu sein; es ist besser,
wenn die Software stabiler läuft als erwartet
und angenehme Überraschungen sorgen für die beste Mundpropaganda.
Alpha und Beta
Der Begriff alpha bedeutet für gewöhnlich
eine erste Version, mit der Benutzer echte Arbeit erledigen können, die
alle geplanten Funktionen hat, aber auch bekannte Fehler. Der vorrangige
Sinn von Alpha-Software ist, Rückmeldungen zu erhalten, damit die
Entwickler wissen, woran sie arbeiten sollen. Alpha Releases können
sich generell nach freien Stücken bei APIs und Funktionalität ändern.
Die nächste Stufe, beta, bedeutet, dass die Software
APIs abgeschlossen sind und alle groben bekannten Fehler behoben wurden, aber
noch nicht genug getestet wurde, um als Produktions-Release zertifiziert
zu sein. Der Sinn von Beta-Software ist, entweder zur offiziellen Version
zu werden, angenommen, dass keine Fehler gefunden wurden, oder detaillierte
Rückmeldungen an die Entwickler, so dass diese zügig die offizielle Version
erreichen können. In einer Serie von Beta-Releases sollten sich APIs und
Funktionalität nicht ändern, außer es ist absolut notwendig.
Downloads
Man sollte die Software als Quelltext in den üblichen Formaten
herunterladen können. Wenn ein Projekt noch am Anfang ist, sind
binäre (ausführbare) Dateien nicht nötig, es sei denn der
Build-Vorgang ist derart kompliziert und voller Abhängigkeiten, dass
es für die meisten Leute einen Menge Arbeit wäre, die Software
überhaupt zum Laufen zu bringen. (Wenn das aber der Fall ist, wird
das Projekt sowieso Schwierigkeiten haben, Entwickler
anzuziehen.
Die veröffentlichten Dateien herunterzuladen, sollte so bequem,
standardkonform und mühelos sein wie möglich. Um eine Krankheit
auszurotten, würden Sie die Medizin nicht so verteilen, dass man zur
Anwendung eine unübliche Spritzengröße bräuchte. Ebenso sollte Software
die üblichen Build- und Installationsmethoden beachten, denn je mehr
sie von diesen Standards abweicht, desto mehr potenzielle Benutzer und
Entwickler werden aufgeben und sich verwirrt abwenden.
Das hört sich offensichtlich an, aber viele Projekte kümmert es nicht,
das sie ihre Installationsprozeduren erst sehr spät standardisieren, in
der Annahme, dass sie es jederzeit machen könnten: "Wir erledigen
den Kram, sobald der Code näher an der Fertigstellung ist.". Hierbei
übersehen diese jedoch, dass sie mit dem Hinausschieben der langweiligen Arbeiten
zur Fertigstellung der Build- und Installations-Vorgänge den Zeitraum, um den Code
startklar zu bekommen, tatsächlich verlängern — denn sie
entmutigen Entwickler, welche ansonsten etwas zum Code beigetragen hätten, wenn
nur sie selbst ihn bauen und testen können. Das Heimtückische daran ist,
dass das Projekt nicht einmal davon erfährt, dass
es all diese Entwickler verliert, denn der Vorgang ist eine
Ansammlung von Nicht-Ereignissen: Jemand geht auf die Webseite, lädt
die Software herunter, versucht einen Build zu machen, scheitert, gibt auf
und geht seiner Wege. Wer außer der Person selbst wird jemals davon
erfahren? Keiner im Projekt wird je bemerken, wie Interesse und
Wohlwollen von jemanden lautlos verprasst wurde.
Langweilige Arbeit mit einem hohen Nutzen sollte immer frühzeitig
erledigt werden und das Herabsetzen der Einstiegshürden für ein Projekt
durch sauberes Packetieren zahlt sich mit vervielfachtem Gewinn aus.
Wenn Sie ein herunterladbares Paket freigeben, vergeben Sie diesem eine
eindeutige Versionsnummer, damit die Leute zwei beliebige unterschiedliche
Pakete auch unterscheiden können und wissen, welches das Aktuellere ist. Auf
diesem Weg können von jenen Fehler in Bezug auf eine bestimmtes Paket
gemeldet werden (was Auskunftgebende zu ermitteln hilft, ob der Fehler
bereits behoben wurde oder nicht). Eine ausführliche Diskussion über
Versionsnummerierung finden Sie in und
Details zur Standardisierung von Build- und Installations-Vorgängen werden im
, beides in behandelt.
Zugriff auf Versionsverwaltung und Bugtracker
Die Quellcodepakete herunterzuladen mag für diejenigen ausreichend
sein, welche lediglich die Software installieren und benutzen wollen,
aber das genügt nicht denjenigen, welche Fehler bereinigen oder neue
Funktionen hinzufügen wollen. Nächtliche Quelltext-Schnappschüsse können
helfen, sind aber nicht ausreichend granular für eine lebendige
Entwicklergemeinschaft. Diese Leute brauchen Echtzeit-Zugriff auf den
neuesten Quellcode und einen Weg, Änderungen basierend auf diese Quellen
zu übermitteln.
Die Lösung ist die Nutzung eines Versionskontroll-Systems
— speziell ein online, öffentlich aufrufbares
versionskontrolliertes Repository, aus dem jeder das Projektmaterial
auschecken und nachfolgende Updates erhalten kann. Ein Versionskontroll-Repository
ist ein Zeichen — für beide, Anwender und Entwickler, —
das dieses Projekt sich darum bemüht, Leuten das für die Teilnahme notwendige
zu geben. Seit dem dies hier geschrieben steht nutzen viele Open-Source Projekte
https://github.com/, welches
ein unbegrenztes freies öffentliches Versionskontrollsystem für
Open-Source Projekte anbietet. Während GitHub nicht die einzige Wahl
ist, ist es für die meisten Projekte eine vernünftige Wahl
Obwohl GitHub auf Git basiert, einem weit verbreiteten
Open-Source-Versionskontrollsystem, ist der Code, mit dem die Webservices
von GitHub ausgeführt werden, nicht selbst Open Source. Ob dies für Ihr
Projekt wichtig ist, ist eine komplexe Frage und wird ausführlicher in
in behandelt..
Versionskontroll-Infrastruktur wird detailliert besprochen in in .
Gleiches gilt für den Bugtracker. Die Bedeutung des Bugtracker liegt
nicht allein in seinem täglichen Nutzen für die Entwickler, sondern er ist auch ein
Signal an Außenstehende. Für viele ist eine öffentliche Bug-Datenbank
eines der stärksten Anzeichen dafür, dass ein Projekt ernstgenommen werden
sollte — und ein Projekt ist um so besser,
je mehr Fehler darin protokolliert sind. Das mag sich widersprüchlich
anhört, aber bedenken sie, dass die Anzahl der erfassten Fehlerberichte von drei
Dingen abhängt:
Die absolute Anzahl Softwarefehler, die im Code enthalten sind, die Anzahl
seiner Benutzer und der Komfort mit dem diese Benutzer neue Fehler melden
können. Von diesen dreien sind die letzten beiden wesentlicher als der Erste. Jede
ausreichend große und komplexe Software enthält eine im Grunde genommen
beliebige Menge an Fehlern, die nur darauf warten, entdeckt zu werden.
Die eigentliche Frage ist, wie gut das Projekt diese Fehler erfassen
und priorisieren kann. Ein Projekt mit einer großen und gut gepflegten
Fehler-Datenbank (ein Zeichen dafür, dass schnell auf Bugs reagiert wird,
Duplikate markiert werden, usw.) macht deshalb einen besseren Eindruck,
als ein Projekt ohne oder mit einer fast leeren Fehler-Datenbank.
Am Anfang des Projekts wird die Fehler-Datenbank natürlich nur sehr
wenige Meldungen enthalten und es gibt nicht viel, das Sie dagegen
tun könnten. Wenn die Statusseite aber das geringe Alter hervorhebt
und wenn Leute, welche die Bug-Datenbank betrachten, sehen können, dass
die meisten Einträge vor kurzem gemacht wurden, können sie leicht
schlussfolgern, dass das Projekt immer noch eine gesunde
Rate an Einträgen hat und werden dementsprechend
über die niedrige absolute Anzahl an Bug-Meldungen nicht wirklich
beunruhigt sein.Hinsichlich eines vollständigeren
Arguments dafür, dass Fehlerberichte als "Good News" behandelt werden
sollten, siehe http://www.rants.org/2010/01/10/bugs-users-and-tech-debt/,
in dem es hauptsächlich darum geht, dass die Anhäufung von Fehlerberichten
eben nicht technische Schulden (engl. technical debt)
repräsentieren (im Sinn von
https://en.wikipedia.org/wiki/Technical_debt) sondern eher
Nutzerengagement.
Man sollte auch beachten, dass Bugtracker oft nicht nur zur
Verfolgung von Bugs, sondern auch für Verbesserungen an der Software,
Änderungen an der Dokumentation, ausstehende Aufgaben und mehr benutzt
werden. Weiteres zum Betrieb eines Bugtrackers, wird in
im Kapitel
behandelt, also
werde ich hier nicht näher darauf eingehen. Das Wichtige aus Sicht der
Präsentation ist, überhaupt einen Bugtracker zu
haben und sicherzustellen, dass dieser Umstand
bereits auf der Hauptseite deutlich wird.
Kommunikationskanäle
Besucher wollen oft wissen, wie sie am Projekt beteiligte
Menschen erreichen können. Veröffentlichen Sie deshalb Adressen von
Mailinglisten, Chat-Räumen, IRC-Kanälen (),
und anderen Foren, auf denen Beteiligte erreicht werden können. Stellen Sie klar,
dass Sie und die anderen Autoren des Projekts auf diesen Listen
eingetragen sind, um den Besuchern zu zeigen , dass sie Rückmeldungen
an die Entwickler richten können. Eine Anmeldung auf den
Mailinglisten beinhaltet für Sie nicht die Verpflichtung, alle Fragen
zu beantworten oder alle Wünsche nach neuen Funktionen zu verwirklichen.
Auf lange Sicht betrachtet wird voraussichtlich nur ein Teil der Nutzer
diese Foren sowieso nur nutzen, aber die anderen wird es ermutigen zu wissen,
dass sie es könnten, sollte es einmal nötig sein.
Am Anfang eines Projekts hat es keinen Sinn, die Foren für Benutzer
und Entwickler getrennt zu halten. Es ist viel besser, wenn alle
Projektbeteiligten miteinander reden: in einem "Raum". Unter den ersten
Interessenten eines Projekts ist die Unterscheidung zwischen Entwickler
und Nutzer oft verwaschen. Sofern sie überhaupt gemacht werden kann, gibt
es in den frühen Tagen wesentlich mehr Entwickler im Verhältnis zu
Nutzern als es später der Fall ist. Obwohl Sie nicht annehmen können,
dass jeder, der sich früh für das Projekt interessiert, ein Programmierer
ist, der am Quelltext der Software arbeiten will, können Sie annehmen,
dass sie zumindest daran interessiert sind, die Diskussionen um die
Entwicklung mitzuverfolgen und ein Gefühl für die Richtung des Projekts
zu entwickeln.
Da es in diesem Kapitel nur darum geht wie man ein Projekt startet,
belassen wir es dabei zu sagen, dass diese Foren existieren sollten.
Später, in im Kapitel
, werden wir untersuchen, wo
und wie man diese Foren aufbaut, inwiefern Sie möglicherweise
Moderation erfordern und wie man Foren für Nutzer und Foren für
Entwickler voneinander löst wenn es nötig wird, ohne eine
unüberwindliche Kluft aufzureißen.
Richtlinien für Entwickler
Wenn jemand sich überlegt, etwas zu einem Projekt beizutragen,
wird er sich nach Richtlinien für Entwickler umschauen. Diese sind
weniger technischer, als viel mehr sozialer Natur: Sie erklären, wie
Entwickler miteinander und mit Benutzern umgehen, also letzlich
wie die Dinge laufen sollten.
Dieses Thema wird ausführlich in
im
behandelt, aber die
wesentlichen Elemente der Richtlinien sind:
Hinweise auf Foren für die Zusammenarbeit mit
anderen Entwicklern
Anleitungen wie man Fehler meldet und Patches
einreicht
Einige Hinweise darauf wie
die Entwicklung für gewöhnlich abläuft und wie Entscheidungen
gefällt werden — ob das Projekt
eine gütige Diktatur, eine Demokratie oder etwas anderes
ist
Übrigens soll "Diktatur" in keiner Weise herabsetzend wirken. Es ist
völlig in Ordnung eine Tyrannei zu betreiben, bei dem ein bestimmter
Entwickler das letzte Wort über alle Änderungen haben kann. Viele
erfolgreiche Projekte arbeiten in dieser Weise. Das Wichtige dabei ist,
dass das Projekt dies von vornherein klarstellt. Eine Tyrannei, die
vorgibt eine Demokratie zu sein, wird sich Menschen abspenstig machen;
eine Tyrannei die klar sagt was sie ist, wird gut zurecht kommen, sofern
der Tyrann kompetent und vertrauenswürdig ist. (Siehe in
darüber, warum Diktatur in Open-Source Projekten nicht dieselben
Implikationen hat wie Diktatur in anderen Lebensbereichen.)
http://subversion.apache.org/docs/community-guide/
ist ein Beispiel für besonders gründliche Entwicklerrichtlinien; die
LibreOffice Richtlinien bei https://wiki.documentfoundation.org/Development sind ebenfall
ein gutes Beispiel.
If the project has a written Code of Conduct (see ), then the developer guidelines should
link to it.
Wenn das Projekt niedergeschriebene Verhaltensregeln hat (siehe ), dann sollten die Entwicklerrichtlinien
darauf verweisen.
Das etwas andere Thema, die Bereitstellung einer Projekt-Einführung
für Programmierer, wird im Abschnitt
später in diesem Kapitel behandelt.
Dokumentation
Dokumentation ist unerlässlich. Es muss irgendetwas
zum Lesen geben, selbst wenn es nur rudimentär und
unvollständig ist. Die Dokumentation ist ganz klar ein Teil der vorhin
erwähnten "Plackerei" und sie ist oft das erste, das in einem neuen
Open-Source-Projekt zu kurz kommt. Die Missionsziele und eine Liste von
Funktionen zu schreiben, die Wahl einer Lizenz, den Stand der Entwicklung
zusammenzufassen — das sind alles relativ kleine Aufgaben, die mit
einem Schlag erledigt werden können und normalerweise nicht wieder angefasst
werden müssen, wenn einmalig erledigt. Die Dokumentation
hingegen ist nie wirklich fertig, was vielleicht ein Grund dafür ist,
dass man es manchmal hinauszögert, sie überhaupt in Angriff zu
nehmen.
Das heimtückischste daran ist, dass die Autoren der Dokumentation
keinen direkten Nutzen aus ihr ziehen, während sie für neue Nutzer
unerlässlich ist. Die wichtigste Dokumentation für neue Benutzer sind die
Grundlagen: Wie richte ich die Software zügig ein, eine Übersicht über
ihre Funktionsweise, vielleicht auch Anleitungen für häufige Aufgaben.
All dies ist den Autoren nur allzu gut
bekannt – so bekannt, dass es für sie schwierig sein kann, sich in
die Lage der Leser zu versetzen, und mühsam die offensichtlichen
Einzelschritte zu buchstabieren, die aus ihrem Blickwinkel kaum der
Erwähnung wert scheinen.
Es gibt keine magische Lösung für dieses Problem. Es muss sich nur
jemand hinsetzten und die Sachen aufschreiben und dann, was am wichtigsten ist,
die Anmerkungen der Leser einbinden. Benutzen Sie ein
einfaches, leicht zu bearbeitendes Format wie HTML, Klartext, Markdown, ReStructuredText
oder eine XML-Variante – etwas geeignetes für kleine und spontane
VerbesserungenMachen Sie sich für den Anfang nicht zuviele Gedanken
über das richtige Format. Wenn Sie ihre Meinung später ändern, können Sie immer noch
eine autmatische Konvertierung mittes http://johnmacfarlane.net/pandoc/ durchführen..
Das reduziert nicht nur den Aufwand für die ersten
Autoren, die Dokumentation schrittweise zu verbessern, sondern auch
allen, die später zum Projekt hinzukommen.
Eine Möglichkeit, eine erste grundlegende Dokumentation abzusichern
ist es, ihren Umfang von vornherein einzuschränken. So erscheint die
Aufgabe zumindest nicht bodenlos. Als Richtlinie könnte gelten, dass
folgende minimale Bedingungen erfüllt werden:
Sagen Sie dem Leser klar, welche technischen
Kenntnisse erwartet werden.
Beschreiben sie klar und deutlich, wie man die
Software einrichtet, und nennen Sie dem Benutzer irgendwo am
Anfang der Dokumentation ein Merkmal oder einen Befehl, mit
dem man prüfen kann, ob sie richtig eingerichtet wurde. Die
erste Dokumentation ist in mancherlei Hinsicht wichtiger als
eine echte Bedienungsanleitung. Je mehr Mühe jemand in die
Installation und Einrichtung der Software investiert hat,
desto beharrlicher wird er darin sein, fortgeschrittene,
unzureichend dokumentierte Funktionen zu erfassen. Wenn Leute
aufgeben, passiert es meistens gleich am Anfang; deshalb sind
es die frühesten Phasen wie die Installation, bei der man die
meiste Unterstützung braucht.
Geben Sie Tutorial-artige Beispiele für typische
Aufgaben. Natürlich sind viele Beispiele für viele
Aufgaben noch besser, aber wenn die Zeit knapp ist, wählen
Sie einen Punkt aus und schreiben Sie dazu eine ausführliche
Anleitung. Sobald jemand sieht, dass die Software für eine
Sache benutzt werden kann, wird er
beginnen alleine herauszufinden, wofür sie noch zu gebrauchen
ist – und wenn Sie Glück haben, dazu übergehen, die
Dokumentation selbst zu erweitern. Was uns zum nächsten Punkt
bringt...
Kennzeichnen Sie unvollständige Bereiche der
Dokumentation als solche. Indem Sie dem Leser zeigen, dass
Sie sich über die Defizite im Klaren sind, stellen Sie sich
auf seine Sicht ein. Durch Einfühlungsvermögen geben Sie
ihm zu verstehen, dass das Projekt nicht erst überzeugt werden
muss, was wichtig ist. Solche Kennzeichen entsprechen keiner
Verpflichtung, die Lücken bis zu einem bestimmten Datum
auszufüllen – sie können auch als offenen Anfragen um
Hilfe betrachtet werden.
Der letzte Punkt hat tatsächlich umfassendere Bedeutung und kann auf
das ganze Projekt angewendet werden, nicht nur auf die Dokumentation. Eine
genaue Buchführung über bekannte Defizite ist in der Open-Source-Welt die
Norm. Sie müssen die Mängel des Projekts nicht hochspielen, sondern
einfach gewissenhaft und leidenschaftslos aufzählen, wo die Veranlassung
gegeben ist (das kann in der Dokumentation, im Bugtracker oder in einer
Diskussion auf einer Mailingliste geschehen). Keiner wird das als vom
Projekt ausgehende Miesmacherei ansehen, oder als Verpflichtung die
Probleme bis zu einem bestimmten Datum zu lösen, es sei denn, das Projekt
geht ausdrücklich eine solche Verpflichtung ein. Da jeder Nutzer diese
Mängel selbst finden wird, ist es besser, sie psychologisch darauf
vorzubereiten – das gibt den Eindruck, dass im Projekt ein
Bewusstsein über seinen Zustand besteht.
Die Pflege einer FAQ-Liste
Eine FAQ ("Frequently Asked
Questions"Häufig gestellte Fragen)
kann eine der besten Investitionen des Projekts hinsichtlich ihres
Informationsgehalts sein. Eine FAQ ist auf
Fragen abgestimmt, die von Benutzern und
Entwicklern wirklich gestellt werden – nicht auf Fragen die Sie
vielleicht erwarten würden – und
deshalb neigt eine gut gepflegte FAQ dazu, denjenigen, die sie zu Rate
ziehen, genau das zu geben wonach sie suchen. Die FAQ ist oft die
erste Stelle, die Benutzer durchsuchen, wenn sie auf ein Problem
stoßen, sie ziehen es oft sogar dem offiziellen Handbuch vor und es
ist wahrscheinlich das Dokument in ihrem Projekt, worauf andere
Seiten am ehesten verweisen.
Leider können Sie die FAQ nicht am Anfang eines Projekts
schreiben. Eine gute FAQ schreibt man nicht, man lässt sie wachsen.
Sie sind definitionsgemäß reaktive Dokumente, die sich im Laufe der
Zeit als Antwort auf die Fragen entwickeln, welche die Benutzer nach der
Software stellen. Da es unmöglich ist, die Fragen der Benutzer zu erahnen,
ist es unmöglich sich hinzusetzen und von Grund auf eine nützliche
FAQ zu schreiben.
Verschwenden Sie also nicht Ihre Zeit damit, es zu versuchen.
Sie können jedoch eine größtenteils leere FAQ als Vorlage einrichten,
damit es eine offensichtlichen Ort gibt, an dem Leute Fragen und Antworten
eintragen können, wenn das Projekt erst einmal läuft. Zunächst ist wichtigste
Eigenschaft einer FAQ aber nicht ihre Vollständigkeit, sondern ihre
Einfachheit: Wenn es einfach ist, neue Einträge anzufügen,
werden Leute dies auch tun. (Die vernünftige Pflege einer FAQ ist eine nicht
ganz triviale, aber faszinierende Angelegenheit: siehe in
,
in
und in .)
Erreichbarkeit der Dokumentation
Die Dokumentation sollte an zwei Stellen erreichbar sein: Online
(direkt auf der Website) und in der zum Download
verfügbaren Ausgabe der Software (siehe
im Kapitel
). Sie sollte online in
durchsuchbarer Form vorliegen, weil Interessierte die Dokumentation oft
lesen, bevor sie die Software zum ersten Mal
herunterladen, um besser entscheiden zu können, ob sie dies überhaupt
tun sollen. Prinzipiell sollte die Dokumentation aber auch der Software
beiliegen, denn ein veröffentlichtes Paket sollte alles enthalten
(d.h. lokal verfügbar machen), was man braucht um die Software zu
benutzen.
Im Falle der Online-Dokumentation sollten Sie für einen Link sorgen,
der auf eine vollständige Dokumentation auf einer einzigen
HTML-Seite verweist (schreiben Sie einen Hinweis wie "monolitisch" oder
"umfangreiche Einzelseite" daneben, damit die Leser nicht überrascht sind
wenn es beim Laden etwas Zeit braucht). Das ist nützlich, da Leute oft die
ganze Dokumentation nach einem bestimmten Wort oder einer Wendung absuchen
wollen. Im Allgemeinen wissen sie schon, wonach sie suchen, können sich
nur nicht erinnern an welcher Stelle es stand. In dieser Situation gibt es nichts
frustrierenderes, als je eine HTML-Seite für Inhaltsangabe, eine für die
Einleitung, eine weitere für die Installationsanleitung, usw zu haben.
Wenn die Seiten so aufgeteilt sind, machen sie die Suchfunktion des
Browsers wertlos. Eine in mehrere Seiten aufgebrochene Dokumentation ist
gut, wenn man weiß, welchen Abschnitt man braucht oder die ganze
Dokumentation von vorne nach hinten durchlesen möchte. Das ist aber
nicht notwendigerweise die häufigste Art des Dokumentationszugriffs.
Häufiger kennt sich jemand im Grunde genommen mit
der Software aus und kehrt zurück, um nach einem bestimmten Wort oder
Ausdruck zu suchen, und keine monolitische Datei bereitzustellen, würde in
solchen Fällen deren Leben unnötig erschweren.
Entwickler-Dokumentation
Developer documentation is written by programmers to help other
programmers
understand the code, so they can repair and extend it. This is
somewhat different from the developer guidelines
discussed earlier, which are more social than technical. Developer
guidelines tell programmers how to get along with each other;
developer documentation tells them how to get along with the code
itself. The two are often packaged together in one document for
convenience (as with the http://subversion.apache.org/docs/community-guide/ example given
earlier), but they don't have to be.
-->
Die Entwickler-Dokumentation wird von Programmierer geschrieben, um
anderen Programmierern zu helfen, den Code verstehen, so dass sie ihn reparieren
und erweitern können. Sie unterscheidet sich ein wenig zu den vorhin erwähnten
Richtlinien für Entwickler, die eher sozialer als
technischer Natur sind. Entwickler-Richtlinien sagen den Programmierern,
wie sie miteinander zurecht kommen; die Entwickler-Dokumentation
hingegen sagt ihnen, wie sie mit dem Code zurechtkommen. Beide werden
oft der Bequemlichkeit halber gemeinsam in einem Dokument angeboten
(wie im oben erwähnten Beispiel
http://subversion.apache.org/docs/community-guide/),
müssen dies jedoch nicht.
Obwohl die Entwickler-Dokumentation sehr hilfreich sein kann,
gibt es keinen Grund, um ihretwillen eine Freigabe zu verzögern. So
lange die ursprünglichen Autoren verfügbar (und bereit) sind, Fragen zum
Code zu beantworten, genügt das für den Anfang. Tatsächlich ist eine
häufige Motivation zum Schreiben der Dokumentation, dass man wieder und
wieder die immer gleichen Fragen beantworten muss. Aber selbst bevor sie
geschrieben ist, wird es entschlossenen Freiwilligen gelingen, sich einen
Weg durch den Code zu bahnen. Was Menschen dazu treibt, ihre Zeit mit
dem Erarbeiten einer Codebasis zu verbringen, ist, dass der Code aus
ihrer Sicht etwas Nützliches tut. Solange sie sich dessen gewiss sind,
nehmen sich die Zeit, Probleme zu lösen; ohne diese Zuversicht wird sie
keine auch noch so gute Dokumentation anlocken oder halten
können.
Wenn Sie also nur die Zeit zum Schreiben einer Dokumentation haben,
so schreiben Sie eine für Benutzer. Jede Dokumentation für Benutzer ist
auch für die Entwickler effektiv; jeder Programmierer, der an einer
Software arbeitet, muss auch damit vertraut sein, wie man sie benutzt.
Wenn Sie später sehen, wie Programmierer andauernd die gleichen Fragen
stellen, nehmen Sie sich die Zeit, eine paar separate Dokumente eigens
für sie zu schreiben.
Manche Projekte nutzen Wikis für die allererste Dokumentation, oder
sogar für die Hauptdokumentation. Nach meiner Erfahrung funktioniert das
nur dann, wenn das Wiki aktiv von einer Handvoll Leuten bearbeitet wird,
die sich hinsichtlich der Organisation und des Tonfalls der Dokumentation
einig sind. Mehr dazu steht in
im Kapitel
.
If the infrastructure aspects of documentation workflow seem
daunting, consider using https://readthedocs.org/. Many projects now depend on it to automate
the process of presenting their documentation online. The site takes
care of format conversion, integration with the project's version
control repository (so that documentation rebuilds happen
automatically), and various other mundane tasks, so that you and your
contributors can focus on content.
Wenn die Infrastrukturaspekte des Dokumentationsworkflows entmutigend
werden, erwäge die Verwendung von https://readthedocs.org/. Viele Projekte vertrauen diesem beim
automatisieren des Prozesses der Online-Präsentation ihrer Dokumentation.
Die Seite kümmert sich um die Formatkonvertierung, Integration mit dem
Versionkontroll-Repository des Projektes (so dass die Neuerstellung der
Dokumentationen automatisch erfolgt) und verschiedene andere weltliche
Aufgaben, so dass Sie und Ihre Mitarbeiter sich auf den Inhalt konzentrieren
können.
Demos, Screenshots, Videos und Beispielausgabe
Ein Projekt mit graphischer Benutzeroberfläche oder mit graphischen
oder anderen markanten Ausgaben, sollte Beispiele auf der Website des
Projekts anbieten. Im Fall einer Benutzeroberfläche bedeutet dies Screenshots
oder besser noch ein kurzes Video (4 Minuten oder weniger) mit Untertiteln
und einem Sprecher. Für Ausgaben mögen es Screenshots oder eben Beispieldateien
zum Download sein. Für web-basierte Software ist der goldenen Weg einen Demo-Seite,
davon ausgehend, dass sie dem zugänglich ist.
The main thing is to cater to people's desire for instant
gratification in the way they are most likely to expect. A single
screenshot or video can be more convincing than paragraphs of
descriptive text and mailing list chatter, because it is proof
that the software works. The code may still be
buggy, it may be hard to install, it may be incompletely documented,
but image-based evidence shows people that if one puts in enough effort,
one can get it to run.
Es geht hauptsächlich darum, das Bedürfnis des Menschen nach direkter Belohnung
auf der Weise zu befriedigen, auf der sie es am ehesten erwarten.
Ein einziges Bild oder Video kann überzeugender sein, als ganze Absätze von
Beschreibungen oder Geplapper auf Mailinglisten, denn ein Bild
ist ein unverkennbarer Beweis dafür, dass die Software
funktioniert. Sie mag ihre Fehler haben, schwer
zu installieren und unvollständig dokumentiert sein, aber ein Bild ist
immerhin ein Beweis, dass man sie zum Laufen bringen kann,
wenn man sich nur genug Mühe gibt.
Halte die Videos kurz und Sage dass sie kurz sind
Wenn sie eine Video-Demonstration ihres Projektes haben, halten sie das Video
unter 4 Minuten und stellen sie sicher, dass die Leute die Dauer erkennen
können, bevor diese darauf klicken. Dies, damit es
dem zuvor bereits erwähntem "Prinzip der skalierten Präsentation" gehorcht:
Sie möchten, dass die Entscheidung zur Sichtung des Videos leicht fällt,
indem sie alle Risiken entfernen. Besucher klicken lieber auf einen Link
der "Sieh dir unser 3 Minuten Video an" anstatt "Sieh dir unser Video an" heißt,
weil sie im ersten Fall wissen, bevor sie klicken —
worauf sie sich einlassen und sie sehen es sich eher an, weil sie mental
auf die notwendige Zeit vorbereitet sind, und werden nicht auf der halben
Strecke ermüden.
Woher diese 4-Minuten Grenze kommt? Es ist eine wissenschaftliche Tatsache,
welche durch viele Versuche derselben experimentellen Fragestellung (durch wen
sein hier nicht genannt) zum Ansehen von Videos ermittelt wurde. Die Grenze
bezieht sich nicht auf Tutorials oder anderes Anleitungsmaterial, ja; es bezieht
sich nur auf Einführungsvideos.
Für den Fall, dass sie nicht schon eine bevorzugte Software zur Bildschirmaufzeichnung
haben: Wenn sie den GNOME 3 Desktop Manager nutzen, könenn sie den dort eingebauten Recorder nutzen
( siehe https://help.gnome.org/users/gnome-help/stable/screen-shot-record.html.en#screencast — zusammenfassend,
drücke
Ctl+Alt+Shift+R
um die Aufzeichnung zu starten, und drücke dann
Ctl+Alt+Shift+R
erneut, um sie anzuhalten).
Sie können der Website des Projekts noch vieles mehr hinzufügen,
wenn die Zeit dazu reicht, oder wenn es aus irgendeinem Grund besonders
passend erscheint: Eine Seite mit Neuigkeiten, eine Seite mit der
Historie des Projekts, eine Seite mit verwandten Links, eine
Suchfunktion, ein Link für Spenden, usw. Nichts davon ist am Anfang
notwendig, aber man sollte es für später im Hinterkopf behalten.
Hosting
Wo im Internet sollten sie ihr Projektmaterial platzieren?
Auf einer Webseite, sicherlich — aber die umfassende
Antwort darauf ist ein wenig komplizierter als das.
Viele Projekte unterscheiden zwischen ihrer primär öffentlichen
anwenderbezogenen Webseite — die mit den schönen Bildern
und der "Über" Seite und den zaghaften Einführungen und Videos und Führungen
und all dem Zeug — und ihrer Entwickler-Seite, wo alles
schmuddelig und voller eng beieinander liegender Texte in Monospace-Schriften
und undurchdringlichen Abkürzungen ist.
Nun, ich übertreibe. Ein bisschen. In jedem Fall ist es in der
frühen Phase Ihres Projekts nicht so wichtig, zwischen diesen beiden
Zielgruppen zu unterscheiden. Die meisten interessierten Besucher werden
Entwickler oder zumindest Leute sein, die gerne neuen Code ausprobieren.
Im Laufe der Zeit kann es sinnvoll sein, eine benutzerbezogene Seite
(wenn Ihr Projekt eine Codebibliothek ist, können diese "Benutzer" andere
Programmierer sein) und einen etwas separaten Bereich für die Collaboration
diejenigen zu haben, welche an der Teilnahme an der Entwicklung interessiert
sind. Die Collaborations-Seite würde das Code-Repository, den Bug-Tracker,
das Entwicklungs-Wiki, Links zu Entwicklungs-Mailinglisten usw. enthalten.
Die beiden Websites sollten miteinander verknüpft sein. Insbesondere ist
wichtig, dass auf der benutzerbezogenen Website klargestellt wird, dass
es sich bei dem Projekt um Open Source handelt und wo sich die
Open Source-Entwicklungsaktivität befindet.
In der Vergangenheit, viele Projekte erstellten ihre Entwickler-Seite
und Infrastruktur selbstständig. Seit der letzten Dekade oder so,
wie auch immer, nutzen die meisten Open-Source-Projekte —
und i.d.R. alle neuen — eine der gehosteten Seiten
die entstanden sind, um diese Dienste kostenlos für Open-Source-Projekte
anzubieten. Bis jetzt ist die popolärste Seite, zu Beginn von 2018, GitHub
(https://github.com/) und wenn Sie
keine starke Präferenz für ein bestimmtes Hosting haben, sollten sie wirklich
GitHub wählen; viele Entwickler kennen es bereits gut und haben persönliche
Accounts dort. Siehe
in hinsichtlich einer detaillierteren
Diskussion der Fragen, die bei der Auswahl einer vorgefertigten Hosting-eite
zu berücksichtigen sind und für einen Überblick über die beliebtesten.
Die Wahl einer Lizenz und ihre Anwendung
Dieser Abschnitt soll eine schnelle und sehr grobe Anleitung zur
Wahl einer Lizenz bieten. Lesen Sie , um die
rechtlichen Folgen der verschieden Lizenzen im Detail besser zu verstehen
und zu erkennen, inwiefern sich Ihre Lizenz-Entscheidung auf die
Möglichkeit auswirkt, Ihre Software mit anderer Software zu
kombinieren.
Synonyme: "free software license", "FSF-approved", "open
source license" und "OSI-approved"
Die Begriffe "free software license" und "open source license"
sind inhaltich Synonyme und ich behandele sie als solche das
ganze Buch hindurch.
Technisch gesehen bezieht sich der erstgenannte Begriff auf Lizenzen, die
von der Free Software Foundation als mit den "vier Freiheiten" versehen
bestätigt wurden, die für freie Software erforderlich sind (siehe https://www.gnu.org/philosophy/free-sw.html), wohingegen der
letztere Begriff sich auf Lizenzen bezieht, welche die Open Source Definition
der Open Source Initiative erfüllen (https://opensource.org/osd). Wie auch immer, wenn sie die FSF Definition
von freier Software und die OSI Definition von Open-Source-Software lesen,
wird es offensichtlich, dass die beiden Definitionen die gleichen Freiheiten umreißen
— nicht überraschend, wie in erklärt. Das unvermeidliche und in
gewissem Sinne absichtliche Ergebnis ist, dass die beiden Organisationen
denselben Lizenzsatz genehmigt haben.Aktuell gibt es ein paar
kleine Unterschiede zwischen den jeweiligen Listen der geprüfter Lizenzen, aber diese sind
für unsere Zwecke nicht signifikant — oder tatsächlich für
die meisten praktischen Belange. In einigen Fällen ist die eine oder andere
Organisation einfach nicht dazu gekommen, eine bestimmte Lizenz in Betracht
zu ziehen, normalerweise eine Lizenz, die ohnehin nicht weit verbreitet ist.
Und anscheinend (so wurde mir gesagt) gab es historisch gesehen eine Lizenz,
der mindestens eine der Organisationen und möglicherweise beide zustimmten,
dass sie einer Definition entsprachen, der anderen jedoch nicht. Immer wenn
ich versuche, die Details dazu zu erfahren, bekomme ich eine andere Antwort
darauf, was diese Lizenz war, außer dass die genannte Lizenz immer eine ist,
die sowieso nicht von vielen Personen verwendet wurde. Daher können die
Begriffe "OSI-genehmigt" und "FSF-genehmigt" für jede Lizenz, die Sie
wahrscheinlich verwenden, so behandelt werden, als würden sie sich gegenseitig
implizieren.
Sie können aus einer Menge von Lizenzen für freie Software wählen.
Die meisten müssen wir hier nicht beachten, da sie für die speziellen
rechtlichen Bedürfnisse einer bestimmten Firma oder Person geschrieben
wurden und für Ihr Projekt nicht angemessen wären. Wir beschränken uns
auf die am häufigsten verwendeten Lizenzen; in den meisten Fällen werden Sie sich für
eine von ihnen entscheiden wollen.
"Alles ist erlaubt"-Lizenzen
Wenn Sie kein Problem damit haben, dass der Code Ihres Projekts
in proprietären Anwendungen benutzt wird, können Sie eine
MIT-artige Lizenz nutzen. Es ist die einfachste
der verschiedenen Minimal-Lizenzen, die wenig mehr leisten als die
Vervielfältigungsrechte abzusichern (ohne dabei wirklich die
Vervielfältigung einzuschränken) und zu erklären, dass keiner für den
Code haftet. Weiteres darüber finden Sie in
.
Die GPL
Wenn Sie nicht wollen, dass Ihr Code in proprietären Anwendungen
verwendet wird, benutzen Sie die GNU General Public License, version 3 (https://www.gnu.org/licenses/gpl.html). Die GPL ist
heute die wahrscheinlich bekannteste Lizenz für freie Software der
Welt. Das ist an und für sich schon ein großer Vorteil, da viele
potentielle Benutzer und Teilnehmer bereits mit ihr vertraut sein
werden und deshalb keine zusätzliche Zeit aufbringen müssen, um Ihre
Lizenz zu lesen und zu verstehen. Siehe in for details.
Wenn Anwender auf ihren Code hauptsächlich über eine Netzwerkverbindung zugreifen
— meist dann, wenn die Software gewöhnlicherweise eher Bestandteil
eines gehosteten Service ist anstatt verteilt zu werden, um auf einem Client zu laufen
— dann erwäge, stattdessen die GNU Affero GPL
zu nutzen. Die AGPL ist gerade die GPL mit einer zusätzlichen Klausel, welche die
Netzwerkzugänglichkeit als eine Form der Verteilung in der Lizenz festschreibt.
Siehe in for more.
Eine Lizenz für Ihre Software
Wenn Sie sich einmal für eine Lizenz entschieden haben, müssen
Sie diese auf Ihre Software anwenden.
Dazu sollten Sie diese zunächst auf Ihrer Website
klar benennen. Sie müssen dort nicht den vollständigen Text dieser
Lizenz angeben; der Name und ein Verweis auf den vollständigen Text
genügen für's erste. So erklären Sie der Öffentlichkeit, unter welcher
Lizenz Sie beabsichtigen, die Software zu
veröffentlichen, rechtlich gesehen reicht das natürlich nicht. Dafür
muss die Software selbst die Lizenz enthalten.
Der übliche Weg dies zu tun ist, den vollständigen Text der Lizenz
in einer Datei namens COPYING (oder
LICENSE) abzulegen; dann fügen sie jeder
Quellcode-Datei am Beginn eine knappe Notiz hinzu, in der Sie
Copyright-Datum, -Inhaber und Lizenz benennen und angeben, wo der
vollständige Text der Lizenz zu finden ist.
Davon gibt es viele Variationen, also werden wir uns hier nur
ein Beispiel anschauen. Die GNU GPL sagt, dass man einen Hinweis wie
diesen an den Anfang jeder Datei des Quellcodes setzen sollte.
Copyright (C) <Jahr> <Name des Autors>
Dieses Programm ist Freie Software: Sie können es unter den Bedingungen
der GNU General Public License, wie von der Free Software Foundation,
Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
veröffentlichten Version, weiterverbreiten und/oder modifizieren.
Dieses Programm wird in der Hoffnung, dass es nützlich sein wird, aber
OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite
Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
Damit drücken Sie nicht explizit aus, dass der vollständige Text der
Lizenz in der Datei COPYING oder LICENSE
steht, es ist aber meistens der Fall. (Sie können den obigen Hinweis abändern um dies
direkt auszudrücken, was aber nicht wirklich notwendig ist.)
Generell muss die Notiz, die sie in jede Sourcecode-Datei einfügen, nicht
exakt wie die weiter oben aussehen, solange sie mit dem selben Hinweis auf
den Inhaber des Urheberrechts und dem DatumDas Datum sollte die Datümer
auflisten, an denen die Datei verändert wurde, aus Urheberechtsgründen. Mit anderen
Worten würden sie für eine Datei, die 2008, 2009 und 2013 geändert wurde
"2008, 2009, 2013" — nicht
"2008-2013" schreiben, weil die Datei nicht in jedem Jahr des Zeitbereichs
geändert wurde. beginnt, den Namen der Lizenz nennt und klarstellt,
wo der vollständige Text der Lizenz einzusehen ist. Es ist natürlich immer am besten,
einen Anwalt zu konsultieren, wenn Sie sich einen leisten können.
Den Ton angeben
Bis jetzt haben wir Aufgaben behandelt, welche einmalig beim
Aufbau des Projekts zu erledigen sind: Eine Lizenz wählen, die
Website einrichten usw. Die wichtigsten Aspekte beim Start
eines Projekts sind aber dynamisch. Es ist einfach, eine Adresse für
eine Mailingliste zu wählen; aber dafür zu sorgen, dass dort die
Kommunikation beim Thema und produktiv bleibt, ist eine ganz andere
Sache. Wenn das Projekt nach Jahren der geschlossenen Entwicklung
geöffnet wird, verändert sich der Entwicklungsprozess und Sie werden die
bestehenden Entwickler auf diesen Wandel vorbereiten müssen.
Die ersten Schritte sind die schwersten, da es für zukünftiges
Verhalten noch keine Beispiele oder Erwartungen gibt, nach denen man
sich richten könnte. Beständigkeit in einem Projekt entsteht nicht durch
formale Richtlinien, sondern durch eine von allen geteilte, schwer
greifbare kollektive Weisheit, die sich mit der Zeit entwickelt. Oft
gibt es auch geschriebene Regeln, die aber im wesentlichen eine
Zusammenfassung der sich fortwährend weiterentwickelnden Vereinbarungen
sind, an denen sich das Projekt wirklich orientiert. Die schriftlichen
Richtlinien legen die Kultur des Projekts nicht fest, sondern beschreiben
sie eher und selbst das nur näherungsweise.
Dafür gibt es ein paar Gründe. Wachstum und hohe Fluktuation sind
keineswegs so schädlich für die Herausbildung sozialer Normen,
wie man vielleicht denken würde. So lange Veränderungen nicht
zu schnell ablaufen, haben auch Neulinge Zeit,
Abläufe zu lernen. Später werden sie diese Regeln selbst anwenden und
durchsetzen. Bedenken Sie, wie Kinderlieder Jahrhunderte überdauern. Es
gibt heute Kinder, die ungefähr die gleichen Lieder singen wie Kinder
vor Hunderten von Jahren, auch wenn keines von ihnen heute noch am
Leben ist. Jüngere Kinder hören die Lieder, wie sie von den älteren
gesungen werden und wenn sie wiederum älter sind, singen sie vor den
anderen jüngeren Kindern. Dabei geben sie die Lieder natürlich nicht
bewusst weiter, aber die Lieder überleben trotzdem, weil sie
regelmäßig und wiederholt weitergegeben werden. Die Lebenszeit freier
Software-Projekte wird vielleicht nicht in Jahrhunderten gemessen
(zumindest bis jetzt noch nicht), aber die Dynamik der Übertragung ist
ziemlich dieselbe. Die Fluktuation ist allerdings viel höher und
muss bei der Weitergabe durch eine aktivere und bewusstere
Anstrengung ausgeglichen werden.
Diese Anstrengung wird dadurch unterstützt, dass Neuankömmlige
für gewöhnlich soziale Normen erwarten und auch suchen.
Das liegt einfach in der Natur des Menschen. In einer Gruppe,
die durch ein gemeinsames Bestreben vereint ist, sucht man
instinktiv nach Verhaltensmustern, um sich als Mitglied dieser Gruppe
darzustellen. Sie sollten früh Beispiele setzen, um das Verhalten
der Mitglieder so zu beeinflussen, dass es für das Projekt nützlich
ist; einmal etabliert, werden sie überwiegend von selbst
weiterbestehen.
Es folgen ein paar Beispiele, um gute Präzedenzfälle zu setzen.
Es ist keine ausführliche Liste, sondern lediglich eine Veranschaulichung
der Idee, dass es hilfreich ist, die Stimmung für die Zusammenarbeit
im Projekt bereits frühzeitig zu prägen. Rein physikalisch mögen die
einzelnen Entwickler jeder für sich in einem Raum arbeiten,
Sie können jedoch eine Menge dafür tun, ihnen das
Gefühl zu geben, sie würden alle in einem gemeinsamen
Raum arbeiten. Je mehr sie sich so fühlen, desto mehr Zeit werden sie
für das Projekt aufwenden wollen. Ich habe diese Beispiele gewählt, da
sie in dem Subversion-Projekt aufkamen,
(http://subversion.apache.org/),
in dem ich tätig war und das ich seit seiner Gründung beobachte. Sie gelten aber nicht
allein für Subversion; diese Situationen werden in den meisten
Open-Source-Projekten aufkommen und sie sollten als Gelegenheit
betrachtet werden, die Dinge auf dem richtigen Fuß zu erwischen.
Private Diskussionen vermeiden
Selbst nachdem Sie ein Projekt an die Öffentlichkeit gebracht
haben, werden Sie und die anderen Gründungsmitglieder manchmal damit
konfrontiert werden, schwierige Fragen innerhalb eines kleineren
Kreises durch private Kommunikation lösen zu müssen. Das gilt besonders
am Anfang des Projekts, wo viele wichtige Entscheidungen zu treffen
sind und es meist nur wenige Freiwillige gibt, die qualifiziert wären,
sie zu treffen. All die offensichtlichen Nachteile öffentlicher
Diskussionen auf Mailinglisten werden greifbar vor Ihnen liegen:
Die bei E-Mail-Diskussionen unvermeidbare Verzögerung, die für einen
Konsens erforderliche Zeit, die Mühe, sich mit naiven Neulingen
auseinandersetzen zu müssen, die meinen, alles zu verstehen (solche gibt
es in jedem Projekt; manchmal bringen sie im nächsten Jahr die besten
Beiträge, manchmal bleiben sie ewig naiv), die Person, die nicht
versteht, warum Sie nur das Problem X lösen wollen, wenn es
offensichtlich eine Untermenge des größeren Problems Y ist, usw. Die
Verlockung, diese Unterhaltungen hinter verschlossenen Türen zu führen
und sie als vollendete Tatsache zu präsentieren oder zumindest als
nachdrückliche Empfehlung einer vereinigten und einflussreichen
Wählergruppe, ist tatsächlich groß.
Tun Sie's nicht.
So langsam und mühselig öffentliche Diskussionen auch sein mögen,
sie sind auf lange Sicht trotzdem vorzuziehen. Wichtige Entscheidungen
privat zu treffen ist Gift für Freiwillige. Kein Freiwilliger, der seine
Sache ernst meint, würde es lange in einer Umgebung aushalten, in dem
alle wichtigen Entscheidungen von einer geheimen Versammlung getroffen
werden. Desweiteren hat die öffentliche Diskussion den Vorteil, dass
ihre positiven Nebenwirkungen viel länger fortbestehen als die
kurzlebige technische Frage, um die es geht:
Die Diskussion wird dabei helfen, neue Entwickler auszubilden
und zu unterrichten. Sie können nie wissen, wie viele Augen die
Diskussion beobachten; selbst wenn die Meisten sich nicht
beteiligen, mögen viele im Stillen lauern,
um Informationen über das Projekt zu sammeln.
Bei der Diskussion werden Sie die Kunst
erlernen, technische Angelegenheiten für Leute zu erklären, welche
mit der Software nicht so vertraut sind wie Sie. Das ist eine
Fähigkeit, die Übung erfordert und nicht durch die Unterhaltung
mit Ebenbürtigen erlangt werden kann.
Die Diskussion und ihre Ergebnisse werden auf ewig in den
öffentlichen Archiven verfügbar sein und es zukünftigen
Diskussionen ermöglichen, Wiederholungen zu vermeiden. Siehe
im
Kapitel.
Schließlich besteht die Möglichkeit, dass jemand auf der
Mailingliste einen echten Beitrag zu der Diskussion leisten könnte, indem
er eine Idee aufbringt, an die Sie nie gedacht hätten. Es ist schwer zu
sagen, wie wahrscheinlich das ist; es hängt schlicht von der Komplexität
des Problems und dem erforderlichen Grad der Spezialisierung ab.
Wenn ich aber ein Beispiel anführen darf, wage ich zu behaupten, dass
es viel wahrscheinlicher ist, als sie es intuitiv erwarten würden. Im
Subversion-Projekt glaubten wir (die Gründer), mit einer tiefen und
komplexen Problematik konfrontiert zu sein, über die wir uns
seit ein paar Monaten viele Gedanken gemacht hatten; und offen gesagt
zweifelten wir daran, dass irgendjemand auf der kürzlich eingerichteten
Mailingliste etwas Wertvolles zu der Diskussion beizutragen hätte.
Wir nahmen also den einfachen Weg und begannen, unsere technischen
Ideen in privaten E-Mails untereinander auszutauschen, bis ein
Beobachter des ProjektsWir haben zwar noch nicht das
Thema der Namensnennung und Anerkennung angesprochen, aber um auch zu
praktizieren, was ich später predigen werde: Der Name des Beobachters
war Brian Behlendorf; und er war es, der darauf hingedeutet hat, wie
wichtig es ist, alle Diskussionen öffentlich zu halten, es sei denn es
gibt einen bestimmten Grund für Geheimhaltung. davon
Wind bekam und uns bat, die Diskussion auf die öffentliche Mailingliste
zu verlegen. Wir verdrehten zwar ganz schön die Augen, taten es aber
– und waren ganz erstaunt über die Anzahl aufschlussreicher
Kommentare und Vorschläge, die sich recht schnell ergaben. In vielen
Fällen boten Leute Ideen an, die uns nie in den Sinn gekommen wären. Es
stellte sich heraus, dass ein paar sehr kluge Köpfe
auf dieser Liste waren; sie hatten nur auf den richtigen Köder
gewartet. Es ist wahr, dass die resultierenden Diskussionen länger
dauerten, als wenn wir sie privat gehalten hätten, allerdings waren sie
um vieles produktiver, was die zusätzliche Zeit in jedem Fall wert
war.
Ohne in allzu verallgemeinernde Aussagen wie "Die Gruppe ist
immer schlauer als der Einzelne" abzugleiten (wir kennen alle genügend
Gruppen, die daran zweifeln lassen), muss man doch anerkennen, dass es
bestimmte Aktivitäten gibt, für die Gruppen besonders geeignet sind.
Ausführliche Gutachten sind eine; schnell auf viele Ideen zu kommen
eine weitere. Die Qualität dieser Ideen hängt natürlich davon ab,
wie hochwertig die Gedanken waren, die man hineingesteckt hat. Sie
werden aber nie erfahren, was für geistreiche Denker da draußen sind,
solange Sie ihnen keine echten Herausforderungen bieten.
Es gibt natürlich auch Diskussionen, die man im Privaten führen
muss; im Verlauf des Buches werden wir Beispiele dafür sehen. Das leitende
Prinzip sollte aber sein: Solange es keinen Grund gibt, etwas
privat zu regeln, sollte es öffentlich geschehen.
Dies in Gang zu setzen erfordert Ihre Einflussnahme. Es
reicht nicht, lediglich sicherzustellen, dass Ihre eigenen Nachrichten
an die öffentliche Mailingliste gehen; Sie müssen auch andere dazu
bewegen, ihre unnötig privaten Unterhaltungen öffentlich zu halten. Wenn
jemand versucht, eine private Diskussion mit ihnen anzufangen und es keinen Grund
gibt, sie privat zu halten, sollten Sie sich verpflichtet fühlen, sofort
eine angemessene übergeordnete Diskussion zu eröffnen. Sie sollten nicht
einmal direkt auf das Thema eingehen, bevor Sie nicht entweder die
Diskussion erfolgreich an einem öffentlichen Ort gelenkt haben oder
deutlich erkannt haben, dass sie tatsächlich besser privat gehalten werden
sollte. Wenn Sie sich konsequent so verhalten, werden die Beteiligten es
ziemlich schnell mitbekommen und gleich die öffentlichen Foren
benutzen.
Unhöflichkeit im Keim ersticken
Sie sollten von Anfang an, gleich nachdem Ihr Projekt an die
Öffentlichkeit geht, null Toleranz gegenüber unhöflichem oder
beleidigendem Verhalten in ihren Foren zeigen. Null Toleranz heißt
nicht unbedingt, diese technisch durchzusetzen. Sie sollten diese Leute
nicht aus der Liste entfernen, wenn sie einen anderen Teilnehmer
"flamen", oder ihnen wegen abfälligen Bemerkungen den Commit-Zugriff
entziehen. (Theoretisch müssten Sie eventuell auf solche Mittel
zurückgreifen, aber erst nachdem alle anderen erschöpft sind – was
am Anfang eines Projekts per Definition noch nicht der Fall ist.) Null
Toleranz bedeutet, schlechtes Benehmen niemals einfach unbemerkt
geschehen zu lassen. Wenn jemand zum Beispiel eine technische
Bemerkung zusammen mit einem argumentum ad
hominem gegen einen anderen Entwickler koppelt, ist es
zwingend notwendig, dass Ihre Reaktion den persönlichen Angriff anspricht,
als separate Angelegenheit, und erst dann auf den technischen Inhalt eingeht.
Leider ist es sehr leicht und allzu üblich, dass konstruktive
Diskussionen in destruktive "flame wars" ausarten. Menschen werden
Dinge sagen, die sie nie von Angesicht zu Angesicht sagen würden. Die
Themen dieser Diskussionen verstärken nur diesen Effekt: Bei
technischen Angelegenheiten glauben Menschen oftmals, dass es nur eine
richtige Antwort zu den meisten Fragen gibt und dass eine
Abweichung von ihrer Antwort nur durch Ignoranz oder
Dummheit des Anderen erklärt werden kann. Den Vorschlag einer Person als
dämlich zu bezeichnen ist oft nur einen winzigen Schritt davon entfernt,
die Person selbst als dämlich zu bezeichnen. Tatsächlich ist es oft schwer
zu unterscheiden, wo die technische Diskussion aufhört und die persönliche
Beleidigung anfängt, was auch ein Grund ist warum drastische Maßnahmen
oder Bestrafungen nicht angebracht sind. Sie sollten stattdessen, sobald
Ihnen derartiges auffällt, eine Nachricht schreiben, die nachdrücklich
darauf hinweist, wie wichtig es ist, die Unterhaltung in einem freundlichen
Ton zu führen, ohne dabei jemanden zu beschuldigen, absichtlich giftig
gewesen zu sein. Leider hören sich diese "Netter-Polizist"-Nachrichten
meist an wie die Predigt einer Vorschullehrerin, die ihre Klasse
über gutes Benehmen belehrt:
Lasst uns bitte zuerst mit den u.U. ad hominem
Bemerkungen aufhören; zum Beispiel, J's Entwurf der Sicherheitsschicht als "naiv
und dumm gegenüber allen Grundprinzipien der Informationssicherheit"
zu bezeichnen. Ob das so stimmt
oder nicht, es ist in jedem Fall nicht die Art, eine Diskussion zu
führen. J hat seinen Entwurf in guter Absicht vorgeschlagen.
Wenn er Fehler aufweist, weist darauf hin und wir werden sie
beheben oder einen neuen Entwurf suchen. Ich bin mir sicher, dass
M niemanden persönlich beleidigen wollte, aber er hat sich
unglücklich ausgedrückt, und wir wollen versuchen, hier
konstruktiv zu bleiben.
Und jetzt zu dem Entwurf. Ich denke M hatte recht
als er sagte, ...
So gestelzt sich solche Antworten auch anhören, sie haben doch
eine messbare Wirkung. Wenn Sie immer wieder auf solches Verhalten
hindeuten, aber keine Entschuldigung von der angreifenden Partei
fordern, lassen Sie ihr die Möglichkeit, sich abzuregen und ihre
bessere Seite zu zeigen, indem sie sich beim nächsten mal anständiger
benimmt — und das wird sie.
Eines der Geheimnisse, erfolgreich
gegen solches Verhalten vorzugehen, ist niemals die untergeordnete
Diskussion zum Hauptthema werden zu lassen. Es sollte immer nur
nebenbei erwähnt werden, ein kurzes Vorwort zu der eigentlichen Antwort.
Weisen Sie im Vorbeigehen darauf hin, dass "wir hier so nicht arbeiten",
aber gehen Sie dann weiter zum echten Inhalt, damit die Beteiligten immer
etwas zum Thema haben, worauf sie antworten können. Wenn jemand
protestiert, dass er unrechtmäßig zurechtgewiesen wurde, sollten Sie sich
nicht in einen Streit verzetteln. Antworten Sie entweder gar nicht (wenn
Sie denken, dass die Person nur Dampf ablassen will und nicht wirklich
eine Antwort erwartet), oder entschuldigen Sie sich für die übertriebene
Reaktion und schreiben Sie, dass es schwer ist, Nuancen aus einer E-Mail
herauszulesen. Gehen Sie danach aber wieder zum eigentlichen Thema
über. Bestehen Sie niemals auf ein Eingeständnis, privat oder öffentlich,
von jemandem, der sich unangemessen verhalten hat. Wenn er sich von
sich aus entschuldigt, ist das großartig, aber es von ihm zu verlangen,
würde nur Verbitterung heraufbeschwören.
Das übergeordnete Ziel ist, dass gute Umgangsformen zu einem
wesentlichen Merkmal in der Kerngruppe werden. Das hilft dem Projekt, da
Entwickler durch "flame wars" vertrieben werden können (sogar von
Projekten, welche sie mögen und unterstützen). Es kann passieren, dass sie
ihre Vertreibung nicht einmal mitbekommen; Mancher könnte sich die Liste
anschauen, erkennen dass er ein dickeres Fell bräuchte, um an diesem
Projekt teilzunehmen, und verzichtet daraufhin besser gleich ganz auf die
Teilnahme. Foren freundlich zu halten ist auf
lange Sicht eine Überlebenstaktik und das ist einfacher,
wenn das Projekt noch klein ist. Ist es erst zu einem Teil der Kultur
geworden, werden Sie nicht mehr der einzige sein, der sich darum bemüht.
Jeder wird daran mitwirken.
Verhaltensregeln
In der Dekade seit der ersten Ausgabe dieses Buches von 2006 ist es
gewissermaßen üblicher für Open-Source-Projekte geworden, gerade auch
für die Größeren, explizite Verhaltensregeln zu
verabschieden. Ich denke dies ist ein guter Trend. Da Open-Source-Projekte
nach langer Zeit endlich auch vielfältiger werden, kann das Vorhandensein
eines Verhaltenskodex die Teilnehmer daran erinnern, zweimal darüber
nachzudenken, ob ein Witz für manche Menschen verletzlich sein könnte oder ob es
— um ein zufälliges Beispiel zu nehmen —
zu einer willkommenden und einbindenden Atmosphäre beiträgt wenn eine
Dokumentation einer Open-Source Bildbearbeitungsbibliothek abermals
ein weiters Bild einer hübschen jungen Frau verwendet um das Verhalten
eines bestimmten Algorithmus zu illustrieren. Verhaltensregeln erinnern
Teilnehmende daran, dass die Pflege einer respektvollen und willkommenden
Umgebung eines jeden Verantwortung ist.
Eine Internetsuche wird leicht viele Beispiele von Verhaltensregeln
für Open-Source-Projekte finden. Die Populärste ist möglicherweise
die bei https://contributor-covenant.org/, so ist dort natürlicherweise
eine positive Rückkoppelungsdynamik wenn Sie diese wählen: Mehrere Entwickler
werden diese bereits kennen, zusätzlich bekommen sie ihre Übersetzung in
andere Sprachen kostenlos usw.
Ein Verhaltenskodex wird nicht alle zwischenmenschlichen
Probleme in ihrem Projekt lösen. Weiter gilt, wenn er missbraucht wird, dass er
das Potential hat, neue Probleme zu erzeugen — es ist immer möglich,
Menschen zu finden, die sich darauf spezialisiert haben, soziale Normen und
Regeln zu manipulieren, um einer Gemeinschaft Schaden zuzufügen, anstatt ihr
zu helfen (siehe in ), und wenn
sie selbst zum Teil unglücklich sind, mögen einige dieser Menschen ihren Weg
in ihr Projekt finden. Es liegt immer an der Führung des Projektes, wobei ich
diejenigen meine, denen die meisten anderen des Projektes am meisten bereitwillig
zuhören, einen Verhaltenskodex durchzusetzen und darauf zu achten, dass er
weise benutzt wird (Siehe auch in ).
Einige Teilnehmer werden tatsächlich nicht mit der Notwendigkeit, überhaupt
einen Verhaltenskodex einzuführen, übereinstimmen und argumentieren gegen
ihn mit der Begründung, dass er mehr Schaden als Gutes anrichten könnte.
Auch wenn sie den Eindruck hast, dass diese falsch liegen, ist es zwingend, dass
sie sicherzustellen helfen, dass diese ihre Meinung äußern können ohne dafür
angegriffen zu werden. Nach allem nicht mit der Notwendigkeit eines Verhaltenskodex
übereinzustimmen ist nicht das Selbe wie — es ist faktisch
komplett unabhängig davon — sich in einem Verhalten zu engagieren,
welches eine Verletzung des angestrebten Verhaltenskodex darstellt. Manchmal
bringen Menschen diese Dinge durcheinander und müssen an diesen Unterschied
erinnert werden.Es gibt einen exzellenten Post mit Titel https://subfictional.com/2016/01/25/the-complex-reality-of-adopting-a-meaningful-code-of-conduct/
von Christie Koehler, der das viel tiefergehender bespricht.
Code Review
Eine der besten Möglichkeiten, eine produktive
Entwicklergemeinschaft zu fördern ist es, Leute zu überreden, sich
gegenseitig Ihren Code anzuschauen. Das effektiv zu gewährleisten,
erfordert ein wenig technische Infrastruktur – insbesondere sollten
Commit-E-Mails angeschaltet werden; siehe
für Details hierzu. Commit-E-Mails
sorgen dafür, dass jede Änderung am Quellcode eine E-Mail zur Folge hat
mit dem zugehörigen Kommentar des Autors und den Diffs (siehe
im Kapitel
). Code Review
heißt, diese Commit-E-Mails beim Eintreffen auch durchzulesen und nach
Fehlern und möglichen Verbesserungen zu suchen. So
wird Review zumindest in Open-Source-Projekten praktiziert. Für
zentralisierte Projekte kann "Code Review" auch bedeuten, dass mehrere
Personen gemeinsam den ausgedruckten Code durchgehen und nach
bestimmten Problemen und Mustern suchen.
Code Review dient mehreren Zwecken gleichermaßen. Er ist das
offensichtlichste Beispiel für "Peer Review" in der Open-Source-Welt
und hilft unmittelbar, die Qualität der Software zu erhalten. Jeder
Fehler, der in einer Software ausgeliefert wird, kam durch einen Commit
zustande der übersehen wurde; es werden umso weniger Fehler in einer
veröffentlichten Version sein, je mehr Augen auf jeden Commit
gerichtet sind. Code Review dient aber auch einem indirekten Zweck: Es
bestätigt Menschen, dass ihre Arbeit Bedeutung hat, man würde sich
schließlich nicht die Zeit nehmen über einen Commit zu schauen, wenn es
einen nicht interessieren würde, welche Auswirkungen er hat. Menschen
leisten dann die beste Arbeit wenn sie wissen, dass andere sich
die Zeit nehmen diese zu prüfen.
Jeder Review sollte öffentlich durchgeführt werden. Selbst wenn
ich im selben Raum mit anderen Entwicklern bin und einer
von uns einen Commit macht, achten wir darauf, den Review nicht verbal
im Raum zu führen, sondern ihn über die Entwickler-Liste zu schicken.
Jeder profitiert davon, wenn der Review sichtbar ist. Leute folgen den
Erläuterungen und finden darin manchmal Mängel und selbst wenn nicht,
erinnert es sie zumindest daran, dass Code Review eine zu erwartende
regelmäßige Aktivität ist, wie Geschirrspülen oder Rasenmähen.
Im Subversion-Projekt hatten wir am Anfang nicht diese
Gewohnheit. Es gab keine Garantie, dass jeder Commit überprüft wurde,
wir schauten zwar manchmal über bestimmte Änderungen, wenn ein
bestimmter Bereich im Quellcode besonders interessant schien. Es
schlichen sich Fehler ein, die man eigentlich hätte sehen sollen und
müssen. Ein Entwickler namens Greg Stein, der aus seiner vorherigen
Arbeit den Wert von Code Review kannte, entschied sich, ein Beispiel zu
setzen, indem er sich jede Zeile von jedem einzelnen
Commit anschaute. Auf jeden Commit, den irgendjemand machte,
folgte bald eine E-Mail von Greg an die Entwickler-Liste, indem er
den Commit sezierte, mögliche Probleme analysierte und ab und zu, für
besonders cleveren Code, ein Lob aussprach. Sofort begann er, Fehler
und problematische Programmierpraktiken zu entdecken, die ansonsten
durchgerutscht wären, ohne je bemerkt zu werden. Er beschwerte sich
wohlgemerkt nie, dass er der einzige sei, der Code Review betrieb, auch
wenn es keinen unwesentlichen Teil seiner Zeit in Anspruch nahm, er
lobte bei jeder Gelegenheit die Vorteile von Code Review. Ziemlich bald
fingen andere an, mich eingeschlossen, regelmäßig Commits zu überprüfen.
Was war unsere Motivation? Greg hatte uns nicht bewusst durch Beschämung
dazu gebracht. Er hatte bewiesen, dass Code Review eine wertvolle
Investition von Zeit ist und dass man durchaus auch zum Projekt
beitragen kann, wenn man die Änderungen anderer durchsieht, anstatt selbst
neuen Code zu schreiben. Nachdem er das demonstriert hatte, wurde
es zum erwarteten Verhalten. Das ging sogar soweit, dass man sich, wenn
auf einen Commit keine Reaktion folgte, als Committer Sorgen machte und
sogar auf der Liste nachfragte, ob denn niemand die Zeit gefunden
hätte, es sich anzuschauen. Später bekam Greg eine Arbeit, die ihm nicht
so viel Zeit für Subversion ließ, und er musste mit dem regelmäßigen
Code Review aufhören. Aber inzwischen war die Angewohnheit unter uns
anderen bereits so weit verbreitet, als sei es nie anders gewesen.
Beginnen Sie mit Code Reviews vom allerersten Commit an. Probleme,
die man am einfachsten bei der Durchsicht von Diffs erkennt, sind
Sicherheitslücken, Speicherlecks, ungenügende Kommentare oder
Dokumentation von Schnittstellen, Eins-daneben-Fehler,
Aufrufer-Aufgerufener-Divergenzen
und andere Probleme, deren Entdeckung keinen großen
Kontext erfordern. Selbst Angelegenheiten größeren Umfangs,
wie z.B. häufig auftauchende Muster, nicht an einer gemeinsamen
Stelle zu abstrahieren, werden leichter erkennbar, wenn man Code
Review regelmäßig betreibt, weil man sich an vergangene Diffs
erinnert.
Machen Sie sich keine Sorgen, dass Sie nichts finden, worüber es
etwas zu sagen gäbe, oder dass Sie nicht genug über alle Bereiche im
Code wissen. Es gibt meistens irgendetwas über so ziemlich jeden Commit
zu sagen; selbst wenn Sie nichts Bedenkliches finden, kann es sein, dass
Sie etwas Lobenswertes finden. Wichtig ist, jedem der Committer
klar zu machen, dass ihre Arbeit gesehen und verstanden wird. Natürlich
befreit Code Review die Programmierer nicht von der Verantwortung, ihre
Änderungen vor dem Commit zu überprüfen und zu testen; niemand sollte
sich auf Code Review verlassen, um Fehler zu finden, die er eigentlich
selbst hätte finden sollen.
Der Übergang ehemals geschlossener Projekte zu Open Source
Wenn Sie ein bestehendes Projekt mit aktiven Entwicklern,
die eine Umgebung mit geschlossenem Code gewohnt sind, öffnen, sorgen Sie dafür,
dass Klarheit über den Umfang der Änderungen besteht, die auf die
Entwickler zukommen – und versuchen Sie sich so gut wie möglich
in ihre Lage zu versetzen.
Versuchen Sie sich die Situation aus ihrer Sicht vorzustellen:
vorher wurden Entscheidungen über Code und Architektur in einer Gruppe
von Programmierern getroffen, die sich alle mehr oder weniger gleich
gut mit der Software auskannten, die alle den gleichen Druck von oben
zu spüren bekamen und die sich alle gegenseitig in ihren Stärken und
Schwächen kannten. Jetzt verlangen Sie von ihnen, ihren Code
freizugeben, nur damit irgendwelche Fremden ihn auseinandernehmen,
untersuchen und sich Meinungen über ihn allein anhand des
Quellcodes bilden, ohne zu wissen, welcher geschäftliche Druck
Sie zu bestimmten Entscheidungen gezwungen hat. Diese Fremden werden
viele Fragen stellen, Fragen die vorhandene Entwickler aufrütteln
werden, wenn Sie feststellen müssen, dass die Dokumentation, an der sie
so hart gearbeitet haben, immer noch lückenhaft
ist (das ist unvermeidbar). Um dem ganzen noch ein Sahnehäubchen
aufzusetzen: die Neulinge sind unbekannte, gesichtslose Wesen. Wenn einer
Ihrer Entwickler sich seiner Fähigkeiten als Programmierer unsicher
ist, stellen Sie sich vor, wie es ihn erst verbittern wird, wenn die
Neulinge auf Mängel in seinem Code hinweisen, noch dazu vor
seinen Kollegen. Wenn Sie kein Team von perfekten Programmierern
haben, ist sowas unvermeidlich – tatsächlich wird es am Anfang
wahrscheinlich allen passieren. Nicht weil sie schlechte
Programmierer sind; sondern weil jedes Projekt oberhalb einer bestimmten
Größe zwangsläufig Fehler beinhaltet, und die Überprüfung durch eine
Gemeinschaft manche dieser Fehler aufdecken wird (siehe
früher in
diesem Kapitel). Gleichzeitig werden die neuen Freiwilligen
selber nicht so sehr dieser Prüfung unterliegen, da sie selber noch
keinen Code beisteuern können, bis sie mehr mit dem Projekt vertraut
sind. Für Ihre Entwickler kann das erscheinen, als ob die ganze Kritik
immer nur auf sie gerichtet ist und nie nach außen geht. Es besteht
deshalb die Gefahr, dass sich unter den alten Hasen eine
Belagerungsmentalität einstellt.
Am besten kann man das verhindern, indem man alle vorwarnt, was
auf Sie zukommt; es ihnen erklärt, ihnen sagt, dass ein anfängliches
Unbehagen völlig normal ist, und ihnen versichert, dass es mit der Zeit
besser wird. Manche dieser Warnungen sollten privat geschehen, bevor das
Projekt geöffnet wird. Es könnte aber auch hilfreich sein, die Leute
auf der Mailingliste zu erinnern, dass es für das Projekt eine neue
Art der Entwicklung ist und dass die Anpassung eine gewisse Zeit
brauchen wird. Das beste was Sie machen können, ist als gutes Beispiel
voranzugehen. Wenn Sie sehen, dass Ihre Entwickler nicht genügend
Fragen der neuen Freiwilligen beantworten, nützt es nichts, ihnen zu
sagen, dass sie mehr antworten sollten. Es mag sein, dass sie kein gutes
Gefühl dafür haben, wann eine Reaktion gerechtfertigt ist, oder es kann
sein, dass sie nicht wissen, welche Priorität die eigentliche Arbeit am
Code gegenüber der neuen Bürde einnimmt, mit Außenstehenden zu
kommunizieren. Man kann sie am ehesten dazu überreden, sich zu beteiligen,
indem man sich selbst beteiligt. Beobachten Sie die öffentliche
Mailingliste und beantworten Sie ein paar Fragen. Wenn Sie nicht genügend
Erfahrung haben, um die Fragen zu beantworten, sollten Sie es für alle
sichtbar an einem anderen Entwickler weitergeben, der die nötige
Erfahrung hat – und achten Sie darauf, dass er eine Antwort oder
zumindest eine Reaktion gibt. Natürlich wird es für die älteren
Entwickler verlockend sein, in private Diskussionen zu verfallen,
schließlich sind sie daran gewöhnt. Beobachten Sie deshalb auch die
interne Mailingliste und bitten Sie ggf. darum, bestimmte Diskussionen
besser gleich auf die öffentliche Liste zu verlegen.
Es gibt andere, langfristigere Bedenken beim Öffnen vormals
geschlossener Projekte.
untersucht Techniken um bezahlte und unbezahlte Entwickler erfolgreich
zu mischen und behandelt die nötige rechtliche
Sorgfalt beim Öffnen von privatem Code, mit bestimmten Komponenten,
die einer anderen Partei "gehört", bzw. von ihnen geschrieben
wurde.
Bekanntgabe
Sobald das Projekt in einem vorzeigbarem Zustand ist – nicht
perfekt, lediglich vorzeigbar – ist es bereit, der Welt
bekannt gemacht zu werden. Tatsächlich geht das relativ einfach: Gehen
Sie auf , klicken Sie in der oberen
Navigationsleiste auf Submit und füllen Sie
das Formular aus, um Ihr Projekt bekanntzumachen. Freshmeat ist der Ort,
auf dem alle nach Ankündigungen neuer Projekte Ausschau halten. Sie müssen
dort nur ein paar Augen erwischen und ihre Nachricht wird sich von da
an über Mundpropaganda weiterverbreiten.
Wenn Sie Mailinglisten oder Newsgroups kennen, auf denen eine
Ankündigung Ihres Projekts thematisch passen würde und von Interesse
wäre. Sollten Sie dort einen Eintrag machen, achten Sie aber darauf,
genau einen Eintrag pro Forum zu machen, und
verweisen Sie dabei auf Ihre eigenen Foren für weitere anschließende
Diskussionen (indem Sie den Reply-to
Header setzen). Die Einträge sollten kurz und prägnant sein:
An: discuss@lists.example.org
Betreff: [ANN] Das Scanley-Projekt für Volltext-Indizierung
Antwort-An: dev@scanley.org
Diese Nachricht ist die einmalige Bekanntgabe über die Gründung des
Scanley-Projekts, eine Open-Source-Volltextindizierungs- und Suchmaschine,
mit einer reichen API für Programmierer, die Suchfunktionen für große
Mengen an Text implementieren wollen. Der Code von Scanley läuft, wird
aktiv entwickelt, und wir suchen sowohl nach Entwickler als auch Nutzern
die testen wollen.
Webseite: http://www.scanley.org/
Funktionen:
- Durchsucht Klartext, HTML, und XML
- Suche nach Wörtern oder Ausdrücken
- (geplant) Unscharfe Suche
- (geplant) Inkrementelle Aktualisierung der Indizes
- (geplant) Indizierung von Webseiten
Voraussetzungen:
- Python 2.2 oder neuer
- Genügend Festplattenplatz für die Indizes (ca. 2x die Größe der
ursprünglichen Daten)
Weiteres finden Sie auf scanley.org.
Vielen Dank,
-H. Mustermann
(Siehe
im Kapitel für Ratschläge
über die Bekanntmachung neuer Versionen und anderer Ereignisse im
Projekt.)
Es gibt eine anhaltende Diskussion in der
Open-Source-Gemeinschaft darüber,
ob ein Projekt schon am Anfang laufenden Code haben muss,
oder ob es einem Projekt hilft, selbst in den frühen Phasen des
Entwurfs offen zu sein. Ich dachte früher, dass es am allerwichtigsten
sei, mit laufendem Code anzufangen, dass man so erfolgreiche Projekte
vom Spielzeug unterscheiden könnte, und ernstzunehmende Entwickler nur
etwas anfassen würden, was auch schon etwas Handfestes machte.
Wie es sich herausstellte, war das nicht der Fall. Beim
Subversion-Projekt, fingen wir mit einem Entwurf an, ein Kern
interessierter und miteinander vertrauter Entwickler, viel Fanfare und
keine einzige Zeile lauffähigen Codes. Zu meiner
völligen Überraschung, schaffte es das Projekt von Anfang an, aktive
Freiwillige anzulocken und bis wir tatsächlich etwas Laufendes hatten,
waren bereits eine ziemliche Menge freiwilliger Entwickler beteiligt.
Subversion ist nicht das einzige Beispiel; das Mozilla-Projekt fing
auch ohne laufenden Code an und bietet heute einen erfolgreichen und
beliebten Web-Browser.
Angesichts solcher Beweise muss ich von meiner ursprünglichen
Behauptung zurücktreten, dass laufender Code absolut notwendig ist, um
ein Projekt anzufangen. Trotzdem ist laufender Code immer noch eines
der besten Grundlagen für Erfolg, und eine gute Grundregel wäre es, mit
der Bekanntgabe zu warten, bis Sie solchen haben. Es mag allerdings
Umstände geben, unter denen eine frühere Bekanntmachung Sinn macht. Ich
denke, dass zumindest ein gut ausgearbeiteter Entwurf oder irgend
ein Grundgerüst für den Code notwendig ist – dieser kann natürlich
wegen öffentlicher Rückmeldungen überarbeitet werden müssen, aber es
muss etwas Handfestes und Greifbares geben, etwas mehr als gute
Absichten, von dem aus Leute ausgehen und weiterarbeiten können.
Wenn Sie die Ankündigung machen, sollten Sie jedoch nicht gleich
darauf ein Schar Freiwilliger erwarten. Für gewöhnlich ist das Resultat
einer Bekanntmachung, dass Sie nebenbei ein paar Anfragen bekommen, es
melden sich ein paar Leute auf der Mailingliste an, abgesehen davon geht
so ziemlich alles weiter wie bisher. Mit der Zeit werden Sie aber eine
stete Zunahme von Beiträgen neuen Mitarbeiter und Benutzer bemerken.
Die Ankündigung ist lediglich das Pflanzen eines Samenkorns.
Es braucht Zeit, bis die Nachricht sich fortpflanzt. Wenn
das Projekt beständig diejenigen honoriert, die sich beteiligen, wird
sich die Nachricht verbreiten, denn Menschen teilen einander mit, wenn
sie etwas Gutes entdecken. Wenn alles gut läuft, wird die Dynamik der
exponenziellen Kommunikationsnetze das Projekt langsam in eine komplexe
Gemeinschaft verwandeln, in der Sie nicht unbedingt jeden Namen
kennen und nicht länger jede Unterhaltung mitverfolgen können. Die
nächsten Kapitel handeln vom Arbeiten in einer solchen Umgebung.