Soziale und politische Infrastruktur Das erste, was viele über freie Software wissen wollen, ist meist: "Wie funktioniert das? Was hält ein Projekt am Laufen? Wer trifft die Entscheidungen?". Ich bin immer unzufrieden mit dem faden Geschmack der Antworten über Meritokratie, den Geist der Zusammenarbeit, Code der für sich selbst spricht, usw. Tatsache ist, die Frage ist nicht so leicht zu beantworten. Leistung, Zusammenarbeit und laufender Code gehören zwar alle dazu, sagen aber nichts über den täglichen Ablauf in einem Projekt, oder wie Konflikte gelöst werden. Dieses Kapitel soll zeigen, welche Grundbausteine zu einem erfolgreichen Projekt gehören. Mit "erfolgreich" meine ich nicht nur die technische Qualität, sondern auch die Gesundheit der Gemeinschaft und seine Überlebensfähigkeit. Die Gesundheit bezieht sich auf die Fähigkeit eines Projeks, neue Codebeiträge und Entwickler aufzunehmen, sowie auf eingehende Bug-Meldungen zu reagieren. Überlebensfähigkeit bedeutet, unabhängig von irgendeinem Beteiligten oder Geldgeber fortbestehen zu können – betrachten Sie es als die Wahrscheinlichkeit für das Weiterleben eines Projekts, selbst wenn alle Gründungsmitglieder ihre Sachen packen und sich etwas anderem widmen. Technischer Erfolg ist leicht zu erreichen, aber ohne eine solide Entwicklergemeinschaft wird ein Projekt scheitern, sobald es wächst, Erfolg hat oder ein charismatisches Mitglied verliert. Es gibt verschiedene Wege zu diesem Erfolg. Manche benutzen formelle Leitungsstrukturen um ihre Debatten zu lösen, neue Entwickler einzuladen (manchmal auch auszuladen), neue Funktionen zu planen usw. Andere haben weniger formelle Strukturen, dafür halten sich die Teilnehmer bewusst zurück, um eine gerechte Atmosphäre herzustellen, in der sich Leute auf diese Quasi-Regierungsform verlassen können. Beide Wege führen zum gleichen Ziel: das Gefühl einer beständigen Institution, die durch Gewohnheiten und Abläufe unterstützt wird, die alle Beteiligten gut verstehen. Diese Eigenschaften sind bei selbstorganisierenden Systemen noch wichtiger, als bei solchen mit einer zentralen Verwaltung, da jeder sich darüber im Klaren ist, dass ein paar faule Äpfel die ganze Kiste verderben können, zumindest eine Zeit lang. Aufspaltbarkeit Entwickler in einem freien Softwareprojekt sind durch eine unverzichtbare Zutat verbunden: die Möglichkeit, es zu forkende. Gabel im Sinne einer Gabelung: jeder kann eine Kopie des Quellcodes nehmen und daraus ein neues Projekt starten. Dieses wird als Fork bezeichnet und steht meistens in Konkurrenz zu dem ursprünglichen Projekt. Das paradoxe daran ist, dass die Möglichkeit von Forks zumeist ein viel größerer Antrieb ist, als ein tatsächlich bestehender Fork, der übrigens sehr selten eintritt. Ein Fork ist schlecht für alle (die Gründe dafür werden in im Kapitel genauer untersucht), je ernster die Gefahr eines Forks wird, desto größer ist die Bereitschaft der Projektbeteiligten, Kompromisse einzugehen, um diese Gefahr abzuwenden. Ein Fork, oder vielmehr das Potential dafür, ist der Grund, dass freie Software-Projekte keine wirklichen Diktatoren haben. Das klingt überraschend, wenn man bedenkt, wie viele "Diktatoren" oder "Tyrannen" es bei verschiedenen Open-Source-Projekten gibt. Diese Art der Tyrannei ist aber etwas Besonderes, völlig verschieden von dem gewöhnlichen Verständnis des Wortes. Stellen Sie sich einen König vor, dessen Untertanen jederzeit eine Kopie seines Königreichs machen könnten, in dem sie selbst nach eigenem Ermessen regieren könnten. Würde dieser König sich nicht völlig anders benehmen, als einer dessen Untertanen auf Gedeih und Verderb an ihn gebunden sind? Projekte sind deshalb, auch ohne formal demokratische Struktur, faktisch Demokratien, zumindest bei wichtigen Entscheidungen. Die Kopierbarkeit von Projekten impliziert die Aufspaltbarkeit; diese wiederum impliziert Konsens. Möglich, dass eine große Bereitschaft besteht, einem Anführer zu vertrauen (das bekannteste Beispiel ist wohl Linus Torvalds bei der Entwicklung des Linux-Kernels), aber nur deshalb, weil sie es sich so ausgesucht haben, und das ist ganz und gar nicht ironisch oder zynisch gemeint. Der Diktator hat keine magische Macht über das Projekt. Eine wesentliche Eigenschaft aller Open-Source-Lizenzen ist, dass sie keiner einzelnen Partei die Entscheidungsgewalt über Änderungen am Code oder seine Nutzung einräumen. Wenn der Diktator plötzlich anfangen würde, schlechte Entscheidungen zu treffen, würde das Unruhe hervorrufen, gefolgt von einer Revolte und einem Fork. Aber so weit kommt es meist nicht, da der Diktator vorher Kompromisse eingeht. Aber auch wenn die Aufspaltbarkeit die Obergrenze für die Macht Einzelner im Projekt bestimmt, heißt das nicht, dass es nicht große Unterschiede in der Leitung von Projekten geben würde. Sie werden nicht jede einzelne Entscheidung auf die Frage hinauslaufen lassen wollen, ob das jemanden zu einem Fork veranlassen könnte. Das würde ermüdend wirken und eine Menge Energie von der eigentlichen Arbeit abziehen. Die nächsten beiden Abschnitte untersuchen die verschiedenen Wege, Projekte so zu organisieren, dass die meisten Entscheidungen reibungslos verlaufen. Diese beiden Beispiele sind zugegeben idealisierte Grenzfälle; viele Projekte bewegen sich irgendwo dazwischen. Gütige Diktatoren Das Modell des gütigen Diktators entspricht genau dem, wonach es sich anhört: Die letzte Entscheidungsgewalt liegt bei einer Person, von der man aufgrund ihrer Persönlichkeit und Erfahrung erwartet, dass sie mit dieser weise umgeht. Auch wenn der Begriff "gütiger Diktator", im Englischen bekannt als "benevolent dictator" (oder BD), der übliche Begriff für diese Rolle ist, wäre es besser, ihn als einen von der Gemeinschaft anerkannten Vermittler oder Richter zu betrachten. Im allgemeinen treffen gütige Diktatoren nicht alle oder auch nur die meisten Entscheidungen. Es ist ohnehin unwahrscheinlich, dass eine einzelne Person genügend Kenntnisse hat, um in einem größeren Projekt durchweg gute Entscheidungen treffen zu können. Hochrangige Entwickler werden sich nicht lange am Projekt beteiligen, wenn sie nicht zumindest ein Stückweit Einfluss auf seine Richtung haben. Deshalb diktieren gütige Diktatoren nicht besonders viel. Stattdessen lassen sie möglichst viel ohne ihr Zutun, durch Diskussionen oder Experimente entscheiden. Sie nehmen zwar auch selber an diesen Diskussionen teil, jedoch nur als gewöhnliche Entwickler, oftmals verweisen sie auf einen Zuständigen, mit mehr Kenntnissen über einen bestimmten Bereich. Nur wenn offensichtlich wird, dass kein Konsens erreicht werden kann und dass der größte Teil der Gruppe eine Entscheidung haben will, damit die Entwicklung fortgesetzt werden kann, sprechen sie ein Machtwort. Der Widerwille gegen Entscheidungen von oben ist ein Wesenszug, den praktisch alle erfolgreichen gütigen Diktatoren teilen; er ist einer der Gründe, dass sie es schaffen, diese Rolle zu behalten. Wer kann ein gütiger Diktator sein? Ein gütiger Diktator braucht eine Kombination verschiedener Wesenszüge. Erstens bedarf es eines feinsinniges Gespürs für den eigenen Einfluss im Projekt, das wiederum Zurückhaltung mit sich bringt. In der frühen Phase einer Diskussion sollte man nicht seine Meinungen und Folgerungen mit einer solchen Sicherheit ausdrücken, dass andere das Gefühl bekommen, es wäre sinnlos zu widersprechen. Menschen sollten die Freiheit haben, ihre Ideen auszudrücken, selbst blöde Ideen. Es lässt sich natürlich nicht vermeiden, dass der gütige Diktator ab und zu selber eine blöde Idee vorschlägt, weshalb die Rolle auch die Fähigkeit erfordert, die eigenen schlechten Entscheidungen zu erkennen und sie als solche zu akzeptieren – wobei das ein Wesenszug ist, den jeder gute Entwickler aufweisen sollte, insbesondere wenn er lange beim Projekt bleibt. Der Unterschied ist aber, dass der gütige Diktator sich ab und zu solche Patzer leisten kann, ohne sich über sein Ruf all zu viele Sorgen machen zu müssen. Neue Entwickler werden sich weniger selbstsicher fühlen, also sollte der gütige Diktator seine Kritik mit etwas Gespür, sowohl für das technische als auch das psychologische Gewicht seiner Worte formulieren. Der gütige Diktator muss nicht die besten technischen Fähigkeiten im Projekt haben. Er muss lediglich gut genug sein, um selber am Code zu arbeiten und einen Kommentar zu einer in Frage stehenden Änderung abgeben zu können, mehr aber nicht. Die Position des gütigen Diktators kann man sich weder durch einschüchternd gute Programmierfähigkeiten aneignen noch behalten. Wichtig ist vor allem Erfahrung und ein allgemeines Gespür für die Architektur von Quellcode – nicht unbedingt die Fähigkeit, auf Befehl guten Code zu produzieren, wohl aber die Fähigkeit, guten Code unabhängig von der Quelle zu erkennen. Der gütige Diktator ist auch häufig der Gründer des Projekts, was sich aber eher so ergibt, als das es ein Grund wäre. Die Qualitäten die es ermöglichen, erfolgreich ein Projekt zu starten – technische Kompetenz, die Fähigkeit andere zur Beteiligung überzeugen zu können, usw. – sind genau die Qualitäten, die jeder gütige Diktator besitzen muss. Natürlich besitzen die Gründer auch automatisch eine gewisse Erfahrung mit dem Projekt, was ausreichen kann, allen Beteiligten eine gütige Diktatur als einfachsten Weg erscheinen zu lassen. Bedenken Sie, dass ein Fork aus beiden Richtungen droht. Ein gütiger Diktator kann genau so wie jeder andere einen Fork anfangen, und das haben gelegentlich schon welche gemacht, sobald sie das Gefühl hatten, das sie das Projekt in eine andere Richtung führen sollten, als die Mehrheit der übrigen Entwickler. Da jeder die Möglichkeit zu einem Fork hat, ist es egal, ob der gütige Diktator vollen Zugriff auf die Server des Projekts hat oder nicht. Die Leute reden mitunter vom Zugriff auf den Server, als sei er die ultimative Quelle der Macht in einem Projekt, tatsächlich ist er aber bedeutungslos. Die Fähigkeit, Benutzer zur Versionsverwaltung hinzuzufügen oder zu entfernen, beeinflusst nur die Kopie des Projekts die auf dem Server liegt. Anhaltender Missbrauch dieser Macht, ob vom gütigen Diktator oder jemand anderem, würde einfach zum Umzug der Entwicklung auf einem anderen Server führen. Ob Ihr Projekt einen gütigen Diktator haben sollte oder mit einem weniger zentralisierten System besser laufen würde, hängt größtenteils davon ab, wer die Rolle einnehmen könnte. Eine gute Faustregel ist: wenn für alle klar ist, wer der gütige Diktator sein sollte, dann ist das der richtige Weg. Wenn es aber keinen offensichtlichen Kandidaten gibt, sollte das Projekt wahrscheinlich ein dezentrales System für Entscheidungen benutzen, wie im nächsten Abschnitt beschrieben. Konsensbasierte Demokratie Mit zunehmenden Alter neigen Projekte dazu, vom Modell des gütigen Diktators zu offeneren demokratischen Systemen zu wechseln. Das ist nicht zwangsläufig auf Unzufriedenheit mit einem bestimmten gütigen Diktator zurückzuführen. Ein gemeinschaftliches Regierungssystem ist auf Dauer einfach stabiler. Immer wenn ein gütiger Diktator zurücktritt, oder versucht die Entscheidungsgewalt gleichmäßiger zu verteilen, bekommt die Gruppe eine Gelegenheit, ein neues, nicht-diktatorisches System einzuführen – sich sozusagen eine neue Verfassung zu geben. Die Gruppe wird diese Gelegenheit vielleicht nicht beim ersten oder zweiten Mal wahrnehmen, doch letztendlich wird sie es; sobald sie es tut, ist es unwahrscheinlich, dass das jemals rückgängig gemacht wird. Dieser Vorgang ist auch logisch: Wenn eine Gruppe bestehend aus N Personen, einer bestimmten Person Macht zuspräche, würde das bedeuten, dass N - 1 Personen damit einverstanden wären, ihre eigene Macht zu verringern. Menschen können sich auf so etwas im Allgemeinen nicht einigen. Selbst wenn, wäre das entstandene System auch nur bedingt eine Diktatur: Ein von der Gruppe erkorener gütiger Diktator kann genau so gut durch die Gruppe wieder abgesetzt werden. Sobald ein Projekt von der Führung durch eine einzelne charismatische Person zu einem formaleren gemeinschaftlichen System wechselt, wird es schwerlich einen Schritt zurück tun. Die Einzelheiten dieser Systeme variieren zwar erheblich, es gibt aber zwei Gemeinsamkeiten: Erstens, die Gruppe arbeitet meist im Konsens; zweitens, es gibt eine formale Einrichtung zur Abstimmung, auf die man zurückgreifen kann, sobald kein Konsens erreicht werden kann. Konsens bedeutet lediglich eine Vereinbarung, mit der jeder leben kann. Es ist kein unklarer Zustand: Eine Gruppe hat Konsens erreicht, wenn jemand behauptet, man habe sich geeinigt und keiner widerspricht. Die Person, die den Konsens konstatiert, sollte natürlich genau formulieren worauf man sich einigt, und welche konkreten Schritte sich daraus ergeben, falls diese nicht offensichtlich sind. Die meisten Unterhaltungen in einem Projekt drehen sind um technische Themen, z.B. den besten Weg, einen Fehler zu beheben, ob eine neue Funktion hinzugefügt werden soll oder nicht, wie streng Schnittstellen dokumentiert werden sollen, usw. Konsens-basierte Entscheidungen funktionieren gut, weil sie nahtlos mit der technischen Diskussion verlaufen. Am Ende der Diskussion ist man sich meist über den richtigen Kurs einig. Oft schreibt jemand eine abschließende Zusammenfassung der Entscheidungen, und schlägt dadurch implizit den Konsens vor. So gibt es eine letzte Möglichkeit, Einspruch zu erheben, um das Thema gründlicher zu besprechen. Bei kleinen, nicht kontroversen Entscheidungen ist der Konsensvorschlag implizit. Wenn ein Entwickler zum Beispiel spontan einen Commit macht, um einen Fehler zu beheben, ist das zugleich ein Konsensvorschlag: "Ich nehme an, dass wir alle darüber einstimmen, dass dieser Fehler behoben werden muss und dies der Weg dazu ist". Natürlich sagt das der Entwickler nicht tatsächlich; Er macht einfach den Commit, und die Anderen im Projekt machen sich nicht die Mühe, ihre Zustimmung zu geben, da Schweigen hier Zustimmung bedeutet. Wenn jemand einen Commit macht, bei dem sich herausstellt, dass es keinen Konsens gab, wird die Änderung so besprochen, als wäre sie noch gar nicht gemacht. Der Grund dafür ist Thema des nächsten Abschnitts. Versionsverwaltung bedeutet Entspannung Die Tatsache, dass der Quellcode des Projekts in der Versionsverwaltung gehalten wird, hat zur Folge, dass die meisten Entscheidungen leicht rückgängig gemacht werden können. Der häufigste Fall ist, dass jemand einen Commit in der falschen Annahme ausführt, dass alle einverstanden seien, und sich kurze Zeit später mit Einwänden konfrontiert zu sehen. Diese Einwände beginnen im Allgemeinen mit der obligatorischen Entschuldigung dafür, dass man die vorangegangene Diskussion verpasst habe, wobei man dies auslassen kann, falls in den Archiven der Mailingliste keine Aufzeichnung der Diskussion zu finden sind. So oder so sollte der Ton nach dem Commit nicht anders sein als davor. Jede Änderung kann rückgängig gemacht werden, zumindest solange, bis davon abhängige Änderungen eingeführt werden (wie neuer Code, der nicht mehr funktionieren würde, wenn man die Änderung plötzlich herausnehmen würde). Die Versionsverwaltung eröffnet dem Projekt die Möglichkeit, Auswirkungen schlechter oder übereilter Entscheidungen rückgängig zu machen. Das wiederum gibt den Leuten die Freiheit, sich in der Frage auf ihren Instinkten zu verlassen, wie viel Rücksprache eine Aktion erfordert. Der Vorgang der Konsenssuche muss deshalb auch nicht sonderlich formal sein. In den meisten Projekten läuft das nach Gefühl. Kleine Änderungen können ohne Diskussion erledigt werden, oder nach minimaler Diskussion und beiläufigem Abnicken. Bei größeren Änderungen, besonders solchen die eine Menge Code instabil machen könnten, sollten die Beteiligten ein bis zwei Tage warten, bevor sie Konsens annehmen, denn bei einer so wichtigen Diskussion sollte niemand übergangen werden, nur weil er seine E-Mails nicht oft genug abgerufen hat. Wenn sich also jemand sicher ist, was getan werden muss, sollte er es einfach durchziehen. Das gilt nicht nur für Fehlerbehebungen, sondern auch für Aktualisierungen der Website, Änderungen an der Dokumentation und alles andere, für das Kontroversen unwahrscheinlich sind. Es gibt selten Fälle, bei denen etwas rückgängig gemacht werden muss, und diese können jeder für sich behandelt werden. Natürlich sollte man Menschen nicht zu Eigensinnigkeit ermutigen. Es gibt immer noch einen psychologischen Unterschied zwischen einer Entscheidung, die zur Debatte steht und einer, die bereits getroffen wurde, selbst wenn sie technisch umkehrbar ist. Menschen haben das Gefühl, dass Bewegung mit Tatkraft einhergeht, und sind deshalb seltener bereit eine Änderung rückgängig zu machen, als sie von vornherein zu verhindern. Wenn ein Entwickler diese Tatsache missbraucht, indem er eine potentiell kontroverse Änderung zu schnell einpflegt, kann und sollte man sich beschweren und dem Entwickler engere Grenzen setzen, bis hier Besserung eintritt. Wenn kein Konsens möglich ist, stimme ab! Zwangsläufig wird es Debatten geben, bei denen man sich einfach nicht einig wird. Wenn alle anderen Möglichkeiten fehlschlagen, einen Stillstand aufzulösen, sollte man abstimmen. Bevor aber eine Abstimmung stattfinden kann, muss es eine klare Auswahl auf dem Stimmzettel geben. Auch hier läuft die technische Diskussion glücklicherweise mit den Entscheidungsabläufen des Projekts zusammen. Die Art von Fragen, die zu einer Abstimmung führen, drehen sich oftmals um komplexe, mehrschichtige Angelegenheiten. Bei jeder dieser komplexen Diskussionen gibt es meistens ein oder zwei Personen mit der Rolle des ehrlichen Vermittlers: sie fassen periodisch die verschiedenen Argumente zusammen und behalten den Überblick über die zentralen Streitpunkte (und Übereinstimmungen). Diese Zusammenfassungen helfen allen, den Fortschritt einzuschätzen und erinnern daran, welche Punkte noch offen sind. Sie dienen auch als Prototypen für die Stimmzettel, sollte es zur Abstimmung kommen. Wenn die Vermittler ihre Arbeit gut machen, werden sie glaubhaft abstimmen können, sobald das nötig wird, und die Gruppe wird diese Stimmzettel akzeptieren. Die Vermittler können an der Debatte teilnehmen; es ist nicht nötig, dass sie sich aus dem Schlachtgetümmel heraushalten, solange sie die Ansichten Anderer verstehen und angemessen repräsentieren können, und die Meinungen ihrer Partei sie nicht daran hindert, den Stand der Diskussion auf eine neutrale Art zusammenzufassen. Der tatsächliche Inhalt des Stimmzettels ist normalerweise nicht kontrovers. Bis es zu einer Abstimmung kommt, hat sich die Meinungsverschiedenheit auf ein paar Kernpunkte reduziert, mit erkennbaren Namen und kurzen Beschreibungen. Ab und zu wird ein Entwickler die Form des Stimmzettels beanstanden. Manchmal sind diese Bedenken gerechtfertigt, wenn beispielsweise ein wichtiger Punkt auf dem Stimmzettel ausgelassen oder nicht richtig beschrieben wurde. Zuweilen kann ein Entwickler aber auch lediglich die Absicht haben, das Unausweichliche hinauszuschieben, vielleicht mit dem Wissen, dass die Wahl nicht zu seinen Gunsten ausfallen wird. Siehe im Kapitel für eine Beschreibung wie man mit solchen Quertreibern umgehen sollte. Denken Sie daran, die Wahlform festzulegen, da es viele verschiedene gibt und es falsche Annahmen darüber geben könnte, welche Form benutzt wird. Meistens ist eine Zustimmungs-Wahl eine gute Entscheidung, bei der jeder Wähler für so viele der Kandidaten auf den Stimmzettel stimmen kann wie er möchte. Zustimmungs-Wahlen sind einfach zu erklären und auszuzählen, und im Gegensatz zu anderen Wahlsystemen erfordern sie nur einen Wahlgang. Siehe für weitere Details über Zustimmungs-Wahlen. Lassen Sie sich aber nicht zu einer Debatte verleiten, welches Wahlsystem benutzt werden soll (dann fänden Sie sich schnell in einer Debatte über ein Wahlsystem, um über ein Wahlsystem abzustimmen!). Zustimmungs-Wahlen sind auch gut, weil es sehr wenig an ihnen zu beanstanden gibt – sie sind so gerecht, wie ein Wahlsystem nur sein kann. Und schließlich sollten die Wahlen öffentlich gehalten werden. Es gibt keinen Grund für Geheimhaltung oder Anonymität bei einer Wahl, bei der zuvor sowieso öffentlich debattiert wurde. Lassen Sie jeden Beteiligten seine Stimmen an die Mailingliste schicken, damit jeder Beobachter selber die Ergebnisse nachrechnen und überprüfen kann, und alles in den Archiven aufgezeichnet wird. Wann sollte abgestimmt werden? Das schwerste bei Wahlen ist zu bestimmen, wann es dafür Zeit ist. Im allgemeinen sollten Wahlen sehr selten sein – als letztes Mittel, wenn alle anderen fehlgeschlagen sind. Betrachten Sie Wahlen nicht als eine tolle Möglichkeit, Debatten zu klären. Das sind sie nicht. Sie beenden Diskussionen und dadurch auch kreative Überlegungen zu dem Problem. So lange die Diskussion weitergeht, kann jemand auf eine neue Lösung kommen, die allen gefällt. Das geschieht überraschend oft: Eine lebhafte Debatte kann zu einer neuen Art führen, das Problem anzugehen und schließlich zu einer für alle zufriedenstellenden Lösung. Selbst ohne solche Vorschläge ist es meist dennoch besser, einen Kompromiss auszuhandeln als eine Wahl abzuhalten. Nach einem Kompromiss ist keiner ganz glücklich, aber zumindest gibt es anders als bei Wahlen keinen der völlig unzufrieden ist. Politisch gesehen ist die erste Situation vorzuziehen: Zumindest bekommt jeder das Gefühl, etwas für seine Unzufriedenheit bekommen zu haben. Er mag unzufrieden sein, aber das sind alle anderen auch. Der Hauptvorteil einer Abstimmung ist die Lösung der Frage, damit alle endlich weitermachen können. Es wird aber durch das Zählen von Köpfen erledigt, anstatt durch einen vernünftigen Dialog, der alle zum selben Ergebnis führt. Die Bereitschaft, Fragen durch Wahlen zu lösen, scheint mir mit zunehmender Erfahrung der Teilnehmer bei Open-Source-Projekten abzunehmen. Stattdessen versuchen Sie, vorher nicht in Erwägung gezogene Lösungen zu erkunden, oder größere Kompromisse einzugehen, als sie ursprünglich geplant hatten. Es gibt verschiedene Möglichkeiten, um eine voreilige Wahl zu verhindern. Die offensichtlichste ist einfach zu sagen, "Ich denke nicht, dass wir schon bereit für eine Wahl sind" und zu erklären warum. Eine weitere ist, eine informelle (nicht bindende) Zählung durchzuführen. Wenn die Reaktion klar in die eine oder andere Richtung tendiert, wird es manche Teilnehmer plötzlich kompromissbereiter und damit eine formelle Wahl überflüssig machen. Die effektivste Lösung ist aber, einfach eine neue Lösung anzubieten, oder eine neue Sicht auf einen alten Vorschlag, damit Leute sich erneut mit dem Sachverhalt befassen, anstatt immer wieder die gleichen Argumente zu wiederholen. Es gibt auch seltene Fälle, in denen alle sich einig sind, dass jede Kompromisslösung schlimmer ist als jeder der Nicht-Kompromisse. In einem solchen Fall gibt es weniger an einer Abstimmung auszusetzen, sowohl weil es wahrscheinlich zu einer besseren Lösung führt, als auch weil die Beteiligten nicht sonderlich unglücklich mit der Lösung sein werden, egal wie es ausgeht. Auch dann sollte man die Wahl nicht übereilen. Die Diskussion, die der Wahl vorausgeht, bildet die Wählerschaft auch weiter, also kann ein frühes Ende dieser Diskussion die Qualität des Ergebnisses schmälern. (Denken Sie daran, dass diese Empfehlung zur Zurückhaltung beim Ausrufen von Wahlen nicht für Wahlen zur Aufnahme von Änderungen gilt, die in im Kapitel beschrieben werden. Dort sind Wahlen eher ein Mittel zur Kommunikation, eine Möglichkeit seine Beteiligung an der Überprüfung einer Änderung kundzugeben, damit alle erkennen können ob eine Änderung ausreichend überprüft wurde). Wahlberechtigung Bei einem Wahlsystem stellt sich die Frage nach der Wählerschaft: Wer darf wählen? Das kann eine sensible Frage sein, da es das Projekt zwingt, bestimmte Personen offiziell für ihre Beteiligung anzuerkennen oder für ihr besseres Urteilsvermögen gegenüber anderen anzuerkennen. Die beste Lösung ist einfach eine vorhandene Unterscheidung wie den Commit-Zugriff zu nehmen, und das Wahlrecht daran festzumachen. Bei Projekten mit mehreren Ebenen für den Zugriff, hängt die Frage ob Personen mit geringerem Zugriff wählen können, größtenteils von dem Ablauf ab mit dem die Zugriffsrechte gewährt werden. Wenn ein Projekt sie freizügig austeilt, um beispielsweise eine Vielzahl an Programmen von dritten Parteien im Projektarchiv zu pflegen, solle es klar gestellt werden, dass es bei eingeschränktem Commit-Zugriff wirklich um die Pflege der Software geht und nicht um die Wahlberechtigung. Die umgekehrte Implikation gilt natürlich auch: Da Personen mit vollem Commit-Zugriff Wahlberechtigte sind, müssen sie nicht nur als Programmierer, sondern als Mitglieder der Wählerschaft ausgesucht werden. Wenn jemand auf der Mailingliste dazu tendiert, Unruhe zu stiften oder Behinderungen zu verursachen, sollte die Gruppe sich gut überlegen ob er die Commit-Berechtigung bekommt, selbst wenn diese Person guten Code schreibt. Das Wahlsystem selbst, sollte benutzt werden um neue Commiter zu wählen, sowohl Teil- als auch Vollberechtigte. Hier ist allerdings eine der wenigen Stellen an denen Geheimhaltung angemessen ist. Sie können keine Wahlen über Kandidaten auf der öffentlichen Mailingliste halten, da es die Gefühle (und den Ruf) des Kandidaten verletzen könnte. Der übliche Weg ist stattdessen, dass bereits bestehende Commiter an einen privaten Verteiler schreiben, ausschließlich im Kreise der anderen Committer, mit dem Vorschlag für den neuen Kandidaten. Die anderen Committer geben ihre ehrliche Meinung, in dem Wissen, dass die Diskussion privat ist. Oft wird es keinen Einspruch geben und eine Wahl ist nicht notwendig. Nachdem man ein paar Tage gewartet hat, um allen Committern genügend Reaktionszeit zu geben, schreibt der Antragsteller dem neuen Kandidaten eine E-Mail indem ihm der Commit-Zugriff angeboten wird. Wenn es Einwände gibt, wird wie bei jeder anderen Frage eine Diskussion entstehen die möglicherweise mit einer Abstimmung endet. Damit diese Diskussion offen und ehrlich abläuft, sollte die bloße Tatsache, dass sie stattfindet geheim gehalten werden. Wenn die Person die in Betracht gezogen wird davon wüsste und niemals das Angebot bekäme, könnte er daraus schließen, dass er die Wahl verloren hat und wäre wahrscheinlich gekränkt. Wenn jemand natürlich explizit nach Commit-Zugriff fragt, dann gibt es keine andere Möglichkeit als den Vorschlag in Betracht zu ziehen und ihn entweder anzunehmen oder abzuweisen. Wenn letzteres der Fall ist, dann sollte es so höflich wie möglich verlaufen, mit einer eindeutigen Erklärung: "Wir mögen deine Patches, haben davon aber bisher nicht genug gesehen", oder "Wir mögen deine Patches, mussten aber wesentliche Anpassungen machen, damit sie angewandt werden konnten, also fühlen wir uns noch nicht Wohl dabei, dir derzeit Commit-Zugriff zu geben. Wir hoffen allerdings, dass sich das mit der Zeit ändert". Bedenken Sie, dass ihre Worte der Person einen Schlag versetzen könnte, je nachdem wie selbstsicher sie ist. Versuchen Sie aus der Sicht des Empfängers zu sehen wenn Sie die E-Mail schreiben. Da es eine schwerwiegendere Entscheidung ist einen neuen Committer aufzunehmen als die meisten anderen einmaligen Entscheidungen, haben manche Projekte besondere Anforderungen für solche Abstimmungen. Es kann beispielsweise erforderlich sein, n Stimmen für und keine gegen den Kandidaten zu bekommen, oder die Zustimmung einer qualifizierte Mehrheit. Die genaue Grenze ist nicht wichtig; grunsätzlich geht es darum bei der Aufnahme Vorsicht walten zu lassen. Ähnliche, oder noch strengere, spezielle Anforderungen können bei Abstimmungen über das Entfernen eines Committers, obgleich das hoffentlich niemals nötig sein wird. Siehe im Kapitel für weiteres über Aspekte zu der Aufnahme und Entfernung neuer Committer, ohne Zusammenhang mit Wahlen. Meinungsumfragen contra Abstimmung Für bestimmte Abstimmungen, kann es sich lohnen den Wahlkreis auszuweiten. Wenn die Entwickler beispielsweise einfach nicht herausbekommen, ob eine bestimmte Schnittstelle zu der Art passt, in der Leute die Software tatsächlich benutzen, ist eine Lösung, auf der Mailingliste des Projekts darüber abstimmen zu lassen. Dies sind in Wirklichkeit eher Meinungsumfragen als Abstimmungen, aber die Entwickler können die Ergebnisse als bindend betrachten, wenn sie wollen. Wie bei jeder Meinungsumfrage erklären Sie den Beteiligten, dass es eine Möglichkeit gibt, Vorschläge zu machen: Wenn jemandem etwas besseres einfällt als bei der Umfrage angeboten wird, kann seine Reaktion zu dem wichtigsten Ergebnis der Umfrage werden. Vetos Manche Projekte erlauben besondere Stimmen, bekannt als Veto. Ein Veto ist ein Weg für einen Entwickler eine übereilte oder schlecht überlegte Änderung aufzuhalten, zumindest lange genug, um weiter darüber zu diskutieren. Sie können ein Veto irgendwo zwischen starken Einspruch und handfester Obstruktion einordnen. Seine genaue Bedeutung unterscheidet sich von einem Projekt zu anderen. Manche Projekte machen es sehr schwer ein Veto aufzuheben; andere erlauben ihre Aufhebung durch eine gewöhnliche Mehrheit, etwa nach einer erzwungenen Verzögerung für weitere Diskussion. Jedes Veto sollte von einer ausführliche Erklärung begleitet werden; ein Veto ohne Erklärung sollte gleich als ungültig erachtet werden. Mit Vetos kommt das Problem des Missbrauchs. Manchmal sind Entwickler zu begierig den Einsatz zu erhöhen indem Sie ein Veto aussprechen. Sie können den Missbrauch von Vetos verhindern, indem Sie selber nur widerstreben darauf zurückgreifen, sowie indem Sie sanft darauf hinweisen wenn jemand anderes das Veto zu oft benutzt. Falls nötig, können Sie die Gruppe auch daran erinnern, dass Vetos nur so lange bindend sind, wie die Gruppe sich darüber einig ist – schließlich wird sich Änderung X durchsetzten, wenn eine klare Mehrheit der Entwickler X machen will. Entweder wird das Veto zurückgezogen, oder die Gruppe wird sich entschließen seine Bedeutung zu verringern. Sie werden Leute vielleicht "-1" schreiben sehen, um ein Veto auszudrücken. Diese Nutzung kommt von der Apache Software Foundation, die einen hochgradig strukturierten Ablauf für Abstimmungen und Vetos hat, beschrieben bei . Die Apache-Normen haben sich auf andere Projekte übertragen und Sie werden ihre Konventionen in unterschiedlichem Maße an vielen Stellen in der Open-Source-Welt beobachten können. Technisch gesehen, bedeutet "-1" nicht immer ein formelles Veto, selbst nach den Apache-Normen. Informell wird es jedoch für gewöhnlich als solches betrachtet, oder zumindest als starken Einspruch. Wie Stimmen bei einer Wahl, kann ein Veto auch im Nachhinein ausgesprochen werden. Es ist nicht in Ordnung einem Veto mit der Begründung zu widersprechen, dass die zur Debatte stehende Änderung bereits durchgeführt oder die Aktion bereits getätigt wurde (es sei denn es handelt sich um etwas unumkehrbares, wie eine Pressemitteilung). Andererseits wird und sollte ein Veto welches Wochen oder Monate später ankommt wahrscheinlich nicht sonderlich Ernst genommen werden. Schriftliche Regeln Irgendwann wird die Anzahl der Vereinbarungen und Übereinkünfte die in Ihrem Projekt umhergehen derart groß werden, dass sie irgendwo aufgezeichnet werden müssen. Damit ein solches Dokument rechtmäßig ist, sollten Sie klarstellen, dass es auf Diskussionen und Vereinbarungen auf den Mailinglisten beruht, die bereits in Kraft sind. Wenn Sie es zusammenstellen, verweisen Sie auf die relevanten Threads in den Archiven und immer wann Sie an einen Punkt erreichen, bei dem Sie sich nicht sicher sind, fragen Sie nochmal nach. Das Dokument sollte keine Überraschungen enthalten: Es ist keine Quelle für Vereinbarungen sondern lediglich ihre Beschreibung. Wenn es Erfolg hat, werden Leute natürlich anfangen es zu Zitieren, als eine Quelle für Autorität, was aber nur bedeutet, dass es den allgemeinen Wille der Gruppe zutreffend widerspiegelt. Dieses ist das Dokument, welches in im Kapitel angespielt wird. Wenn das Projekt noch sehr jung ist, werden Sie selbstverständlich die Richtlinien auslegen müssen, ohne den Vorteil einer langen Historie im Projekt, worauf Sie sich beziehen können. Mit zunehmender Reife der Entwicklungergemeinschaft, können Sie die Sprache anpassen um widerzuspiegeln, welche Abläufe sich tatsächlich entwickelt haben. Versuchen Sie nicht alles abzudecken. Kein Dokument kann alles umfassen, was Leute wissen müssen um an einem Projekt teilzunehmen. Viele der Konventionen die ein Projekt entwickelt werden nie ausgesprochen oder explizit erwähnt und würden von dem wichtigen aber nicht offensichtlichem Material ablenken. Es hat beispielsweise keinen Sinn, Richtlinien wie folgende zu schreiben "Seien Sie höflich und respektvoll zu anderen auf der Mailingliste und fangen Sie keine Flamewars an", oder "Schreiben Sie sauberen, lesbaren, bugfreien Code". Diese Sachen sind natürlich wünschenswert, da es allerdings kein denkbares Universum gibt, indem sie nicht wünschenswert wären, ist ihre Erwähnung der Mühe nicht wert. Wenn Leute auf der Mailingliste unhöflich sind oder fehlerhaften Code schreiben, dann werden sie nicht damit aufhören, nur weil es die Richtlinien des Projekts es vorschreiben. Solche Situationen müssen bei ihrem Auftreten behandelt werden, nicht durch pauschale Ermahnungen sich gut zu benehmen. Wenn das Projekt andererseits spezifische Richtlinien hat wie man guten Code schreibt, z.B. Regeln über die Dokumentation jeder API in einem bestimmten Format, dann sollten diese Richtlinien so vollständig wie möglich niedergeschrieben werden. Der Inhalt des Dokuments lässt sich gut bestimmen, durch die die Fragen von Neulingen sowie anhand der Beschwerden, denen erfahrene Entwickler am häufigsten begegnen. Das bedeutet nicht zwangsläufig, dass es zu einer FAQ werden sollte – es braucht wahrscheinlich eine kohärentere erzählerische Struktur, als es eine FAQ bieten kann. Es sollte aber genauso auf tatsächlichen Fragen basieren, nicht auf solchen die Sie erwarten gestellt zu bekommen. Ein Projekt mit einem gütigen Diktator, oder Mitglieder mit besonderen Vollmachten (Präsidenten, Vorsitzende, was auch immer), sollte das Dokument als gute Gelegenheit betrachten, den Ablauf für Nachfolger festzulegen. Manchmal kann das so einfach sein wie bestimmte Personen als Ersatz zu benennen, sollte der gütige Diktator das Projekt aus irgend einem Grund verlassen. Wenn es einen gütigen Diktator gibt, kann im allgemeinen nur der Diktator selber damit durchkommen einen Nachfolger zu benennen. Wenn es gewählte Vorstandsmitglieder hat, dann sollten die gleichen Abläufe die bei ihrer Wahl verwendet wurden in dem Dokument beschrieben werden. Wenn es ursprünglich keinen Ablauf gab, dann sollten Sie sich innerhalb des Projekts auf einen bestimmten Ablauf einigen bevor Sie darüber schreiben. Menschen können empfindlich sein, was hierarchische Strukturen angeht. Das wichtigste ist vielleicht klarzustellen, dass die Regeln überdacht werden können. Sollten die Konventionen in dem Dokument anfangen das Projekt zu behindern, erinnern Sie alle daran, dass es ein lebendes Spiegelbild der Absichten der Gruppe sein soll, und keine Quelle für Frustration und Behinderung. Wenn jemand es sich zur Gewohnheit macht, unangebrachterweise immer gerade dann wenn ihm Regeln im Weg stehen, darum zu bitten, diese neu zu überdenken – ist Schweigen manchmal die beste Taktik. Wenn andere mit den Beschwerden übereinstimmen, werden sie auch das Wort ergreifen und es wird offensichtlich sein, dass sich etwas ändern muss. Wenn sonst keiner zustimmt, dann wird die Person nicht sonderlich viel Resonanz erhalten und die Regeln werden so stehenbleiben wie sie sind. Zwei gute Beispiele für Projekt-Richtlinien sind der Subversion Community Guide unter und die Dokumente zur Organisation der Apache Software Foundation unter und . Die ASF ist in Wirklichkeit eine Sammlung von Software-Projekten, rechtlich als eine Gemeinnützige Organisation aufgestellt, also tendieren ihre Dokumente stärker dazu, Leitungsabläufe zu beschreiben als Konventionen für Entwickler. Sie sind es trotzdem lesenswert, denn sie stellen die gesammelte Erfahrung einer Vielzahl von Open-Source-Projekten dar.