Weil gestern jemand in unserer TALK-Gruppe danach fragte, schreibe ich zu diesem Thema einen Artikel. Es geht um den Unterschied zwischen Forken, Klonen und Derivaten in der freien Software-Welt.
Man kann die Sache aus drei Perspektiven betrachten: technisch, rechtlich, ökonomisch. Dabei ist letztere die interessanteste Betrachtung:
Technisch
Schaut man sich die Funktionen von Git-Repositories an, so kann man darin Forken und Klonen. Der Hauptunterschied zwischen liegt darin, wie viel Kontrolle und Unabhängigkeit man über die Codebasis haben möchte, nachdem man sie kopiert hat. Jedes öffentliche Git-Repository kann geforkt oder geklont werden. Ein Fork erstellt eine völlig unabhängige Kopie des Git-Repositorys. Im Gegensatz zu einem Fork erstellt ein Git-Klon eine verknüpfte Kopie, die weiterhin mit dem Ziel-Repository synchronisiert wird.
Wenn ein Git-Repository geklont wird, bleibt das Ziel-Repository für alle Entwickler freigegeben, die zuvor daran mitgearbeitet haben. Andere Entwickler, die zuvor zu dieser Codebasis beigetragen haben, können weiterhin ihre Änderungen veröffentlichen und Aktualisierungen aus dem geklonten Repository ziehen. Jeder Entwickler, der ein Repository klont, kann seine Kopie der Codebasis mit allen Aktualisierungen seiner Kollegen synchronisieren.
Im Gegensatz zu einem Klon wird bei einem Git-Fork eine völlig neue Kopie des Ziel-Repositorys erstellt. Der Entwickler, der den Fork durchführt, hat die vollständige Kontrolle über die neu kopierte Codebase. Entwickler, die an dem Git-Repository, das geforkt wurde, mitgewirkt haben, haben keine Kenntnis von dem neu geforkten Repository. Frühere Mitwirkende haben keine Möglichkeit, zum Git Fork beizutragen oder ihn zu synchronisieren, es sei denn, der Entwickler, der die Fork-Operation durchgeführt hat, gewährt ihnen Zugang.
Rechtlich
Hierbei kommen wir zur Freiheit Nummer 3, nämlich dem Recht, Software beliebig zu modifizieren und anzupassen und diese Verbesserungen (oder Änderungen) weiterzugeben. Der GNU General Public License (GPL) ist es völlig egal, ob man eine Software forkt oder klont; beides ist erlaubt. Die Lizenz schert sich nicht um die ökonomischen Abhängigkeiten, die sich daraus ergeben.
Ökonomisch
Jetzt wird es interessant und wir kommen zum Kern der Sache. Beginnen möchte ich mit ein paar Fragen an euch. Bei welcher Software handelt es sich um einen Fork oder um ein Derivat (eine Ableitung)?
- Chrome → Chromium
- Audacity → Tenacity
- Debian → Ubuntu → Linux Mint
- Matrix Element → SchildiChat
- Firefox → LibreWolf
Der Unterschied zwischen Fork und Derivat besteht in der Unabhängigkeit des Projektes. Mit einer einfachen Frage kann man entscheiden, ob es sich um das eine oder andere handelt: "Kann der Fork ohne den Ursprung überleben?". Wendet man diese Frage auf die oben genannten Beispiele an, so sieht man, dass es sich fast nur um Derivate, und nicht um Forks handelt. Ohne Debian gibt es kein Ubuntu, ohne Arch gibt es kein Manjaro, ohne Firefox gibt es keinen LibreWolf. Diese Derivate stehen auf den Schultern von Giganten. Falls die Basis wegfällt, sterben auch die Ableitungen.
Ein Beispiel für einen echten Fork, ist das Projekt Tenacity. Dort hat man sich entschlossen, die gesamte Codebasis unabhängig vom Muttercode aus dem Audacity-Projekt zu pflegen. Euch fallen bestimmt noch weitere Beispiele für echte Forks ein. Ein Spezialfall ist Chrome und Chromium. Hier habe ich die Frage falsch gestellt. Korrekt wäre: 'Chromium → Chrome', weil Chrome ein Derivat von Chromium ist. Der Code beider Webbrowser wird von Google gepflegt, wobei Chromium die Open Source Variante ist und Chrome das proprietäre Derivat ist. Da beide von Google kontrolliert werden, stellt sich hier die Frage der ökonomischen Abhängigkeit nicht.
Fazit
In den meisten Fällen handelt es sich bei Code-Ableitungen nicht um Forks, sondern um Derivate.
Echte Forks sind oft nicht sehr lange überlebensfähig, da oft der Aufwand unterschätzt wird ein Projekt erfolgreich zu führen.
Beispiele für erfolgreiche Forks sind meiner Meinung nach:
Sodipodi -> Inkscape
OpenOffice -> LibreOffice
dcraw -> libraw mit dcraw_emu Slackware -> SuSE