7.7 KiB
Selfhosting von Open-Source-Entwicklertools
Um effizient mit anderen Entwicklern an Open-Source-Projekten arbeiten zu können, muss man den Quellcode seines Projekts veröffentlichen, Aufgaben koordinieren und neue Codebeiträge entgegen nehmen.
Hierbei kommt fast immer eine Git-Hosting-Plattform zum Einsatz. Diese erlaubt es einem, sein Repository zu veröffentlichen und mit anderen Personen über das Internet zusammenzuarbeiten. Andere Nutzer und Entwickler können Softwarefehler melden, Vorschläge für neue Features machen und neuen Code zum Projekt beitragen.
Der meistgenutzte Git-Hosting-Anbieter ist GitHub. Die Plattform wurde von Tom Preston-Werner, Chris Wanstrath, P. J. Hyett and Scott Chacon gegründet und ging 2008 ans Netz. 2018 wurde die Firma von Microsoft übernommen.
Der große Vorteil von GitHub ist, dass der Dienst für öffentliche Projekte vollkommen kostenlos ist. Zudem hat der Dienst mit 100 Millionen Nutzern die mit Abstand größte Community an potenziellen Beitragenden.
GitHub bietet auch einen Continuous-Integration-Dienst namens GitHub Actions an, mit dem man sein Projekt automatisch testen und veröffentlichen lassen kann. Im Gegensatz zu vielen Konkurrenzanbietern setzt GitHub hierbei kein Nutzungslimit bei öffentlichen Repositories.
Allerdings hat die Nutzung von GitHub auch seine Nachteile. Zum einen ist man bei der Nutzung eines fremden Webdiensts, insbesondere wenn dieser kostenlos ist und man deswegen keinen Vertrag mit dem Anbieter abgeschlossen hat, komplett von dessen Entscheidungen und Nutzungsbedingungen abhängig. Der Anbieter kann den Dienst einstellen, kostenpflichtig machen, Features entfernen oder bestimmte Nutzer ausschließen.
Beispielsweise wurde der russische Webentwickler Nikolay Kuchumov wegen eines einzigen beleidigenden Issues 2020 auf GitHub gesperrt. Dabei wurden alle seine Repositories von der Plattform entfernt. Noch absurder: GitHub verlangte eine Kopie seines Personalausweis um die Sperre wieder aufzuheben.
Es gibt auch einige Fälle von Open Source-Projekten, die von GitHub wegen angeblichen Verstößen gegen das amerikanische Urheberrecht (DMCA) gesperrt wurden. Das prominenteste Beispiel hierfür ist der Video-Downloader youtube-dl. Auch das Repository der alternativen Smartwatch-App Gadgetbridge wurde zeitweise von GitHub gesperrt. Eine selbstgehostete Plattform ist dagegen viel schwieriger zu sperren.
Ein weiterer Grund für einige Entwickler, die GitHub-Plattform zu verlassen, ist die Einführung von GitHub Copilot. Hierbei handelt es sich um ein künstliche Intelligenz, die einem Programmierer automatisch Code-Vorschläge geben kann. Dessen Sprachmodell wurde mit dem Code aus öffentlichen GitHub-Repositories trainiert. Kritiker sehen hierbei eine Urheberrechtsverletzung, da der AI-generierte Code Schnipsel aus den Trainingsdaten enthalten kann, die dann ohne Erwähnung des Urhebers in andere Projekte eingefügt werden.
Insbesondere bei privaten oder firmeninternen Projekten kann auch der Datenschutz ein Grund sein, auf Webanwendungen von Fremdanbietern zu verzichten und die Daten auf eigenen Servern zu speichern. Da GitHub nicht quelloffen ist und nur mit einer kostspieligen Enterprise-Lizenz selbst gehostet werden kann, ist is für solche Fälle attraktiv, eine Open-Source-Anwendung einzusetzen.
Mittlerweile gibt es mehrere Open-Source-Projekte, die Alternativen zu GitHub entwickelt hat. Im Gegensatz zu proprietären Webdiensten lassen sich diese Anwendungen auf eigenen Servern installieren, sodass man die volle Autonomie über sein System behält.
In dieser Arbeit werde ich vier von ihnen testen und vergleichen.
Testkriterien
Ich habe jede Plattform auf meinem Rechner installiert und nach folgenden Kritierien getestet:
0. Über das Projekt
Zuerst werde ich einige grundlegende Informationen über die entsprechende Anwendung präsentieren.
- In welcher Programmiersprache ist die Anwendung geschrieben?
- Wie lange existiert das Projekt bereits? Ist es eine Abspaltung eines anderen Projekts?
- Wie viele Beitragende hat das Projekt?
- Wie sieht die Architektur der Anwendung aus? Welche Dienste werden benötigt?
1. Installation und Einrichtung
Hier gebe ich eine kurze Anleitung zur Installation und Einrichtung der Anwendung. Ich werde hierbei bewerten, wie einfach die Installation vonstatten geht.
Monolithisch (d.h. aus einem Dienst) aufgebaute Anwendungen sind in der Regel einfacher einzurichten, bieten aber weniger Flexibilität bei der Skalierung für viele User.
2. Systemanforderungen
Hierbei geht es nicht nur um die unterstützten Betriebssysteme und CPU-Architekturen, sondern auch um den Bedarf an Rechenleistung und Arbeitsspeicher. Im Idealfall soll die Software auch auf preisgünstigen Single Board-Computern und virtualisierten Servern lauffähig sein, sodass sich jeder ein selbst gehostetes Setup leisten kann und nicht aus Kostengründen auf proprietäre Anbieter angewiesen ist.
Getestet wurden CPU-Auslastung und Arbeitsspeicherverbrauch auf einem Rechner mit einem Ryzen 5700G-Prozessor (16 Threads) und 32GB RAM. Die angegebene CPU-Auslastung bezieht sich auf die ausgelasteten Threads (wie in htop angezeigt), d.h. 100% entspricht einem voll ausgelastetem Thread, 16.000% einem voll ausgelasteten Prozessor.
Neben dem Ressourcenverbrauch im Leerlauf habe ich auch die CPU-Auslastung unter Last gemessen. Hierfür habe ich das Repository des Linux-Kernels importiert und mir die Versionsgeschichte und die Blame-Ansicht der Makefile im Stammverzeichnis anzeigen lassen.
3. Bedienung
Wie einfach ist die Weboberfläche zu bedienen? Ist es möglich, schnell durch Repositories zu navigieren? Gibt es eine Suchfunktion, um beispielsweise eine bestimmte Funktion im Code zu finden?
Zudem habe ich dir Unterstützung für verschiedene Dateiformate getestet. Alle Plattformen können Code, Markdown und Textdateien darstellen. Binärdateien können auf diese Weise natürlich nicht dargestellt werden, weswegen einige Plattformen spezielle Viewer für bestimmte Dateitypen mitbringen. Um dies zu testen, habe ich ein Repository mit Dateien in folgenden Formaten angelegt.
- Bilder (*.jpg, *.svg)
- Tabellen (*.csv, *.xlsx, *.ods)
- Text (*.rst, *.tex, *.docx, *.odt)
- PDF-Dokumente
- 3D-Modelle (*.stl)
- Jupyter-Notebooks (*.ipynb)
Zum Vergleich: GitHub unterstützt alle diese Dateitypen mit Ausnahme von LaTEX- und MS/Open Office-Dokumenten.
4. Import bestehender Projekte
Eine gute GitHub-Alternative sollte es dem Entwickler ermöglichen, bestehende Projekte von anderen Providern zu importieren. Hierbei soll nicht nur das Repository, sondern auch z.B. Issues übertragen werden können.
5. Zusatzfeatures
Bietet die Anwendung zusätzlich zu Git-Repositories, Issues und Pull-Requests noch weitere Features an?
Beispiele hierfür wären das Hosting von statischen Websites direkt aus Repositories heraus, ein Repository für Softwarepakete verschiedener Programmiersprachen oder Projektmanagement-Tools.
6. Continuous Integration
Continuous Integration (CI), also das automatische Testen von neuem Code ist ein fester Teil des Worflows vieler Entwickler. Hat die Plattform einen CI-Dienst eingebaut oder lässt sie sich mit anderen CI-Diensten integrieren?
7. Öffentliche Instanzen
Nicht jeder möchte den Aufwand betreiben, seine Git-Hosting-Plattform selbst zu hosten. Deswegen ist es vom Vorteil, wenn es die Möglichkeit gibt, anstelle dessen einer öffentlichen Instanz beizutreten.
Quellen
- Software Freedom Conservancy: Give up GitHub