Das Projekt befindet sich in Entwicklung. Du kannst dazu beitragen! Neben Feedback zum Inhalt brauchen wir auch noch ein Design. Mehr Infos auf: https://codeberg.org/davidak/gute-software


Gute Software

Auf dieser Webseite habe ich zusammengefasst, was meiner Meinung nach gute Software ist. Es müssen nicht zwingend alle Kriterien erfüllt sein, damit ich von guter Software sprechen würde. Eher kann man sagen, je mehr Kriterien zutreffen, desto eher würde ich mich für diese Software entscheiden. Oft gibt es die perfekte Software für eine Aufgabe nicht und man muss Kompromisse eingehen.

Die Seite soll Benutzern und Entwicklern eine Orientierung bieten.

Wenn du eine andere Sichtweise zu dem Thema hast bin ich sehr daran interessiert. Entweder per E-Mail an info at gutesoftware.de oder im öffentlichen Issue-Tracker.


Was macht gute Software aus?

Gute Software ist bedarfsorientiert, frei lizensiert, zugänglich, nachhaltig und gemeinschaftsbasiert.


Bedarfsorientiert

Die Software wird nach den Anforderungen der Benutzer entwickelt (siehe User-Centered Design). Das führt zu einer guten Benutzerfreundlichkeit und einem angenehmen Nutzungserlebnis.

Das schließt Werbung in der Anwendung, Lizenzschlüssel-Aktivierung, Abo-Modelle, manipulatives oder süchtigmachendes Design oder unerwünschte Funktionalität (Malware) aus.

Beispiel: Die Entwicklung von Mobilizon wurde erfolgreich per Crowdfunding finanziert. Neben guter Präsentation und einer Roadmap überzeugt das Projekt durch eine UX-Studie, User-Centered Design und Prototyping.


Es werden keine Inhalte zensiert. Dem Benutzer werden aber Funktionen bereitgestellt, um unerwünschte Inhalte oder bösartige Benutzer zu blockieren.


Freie Software

Die Lizenz von Freier Software gibt dem Benutzer die Freiheit, die Software für jeden Zweck zu verwenden, die Funktionsweise zu untersuchen und an die eigenen Anforderungen anzupassen sowie die Software an andere Menschen weiterzugeben. Open Source meint grundsätzlich das gleiche, beschreibt aber nur ein Entwicklungsmodell und nicht die Freiheit der Benutzer.

Am besten ist eine Freie Software-Lizenz mit Copyleft, wie z.B. die GNU General Public License. Sie verhindert, dass die Software unfrei gemacht werden kann. Bearbeitete Versionen müssen unter der gleichen Lizenz wie das Original veröffentlicht werden. Das stellt sicher, dass Benutzer weiterhin die Freiheiten haben und Verbesserungen allen Benutzern zugute kommen.

Beispiel: Der Caddy Webserver ist Open Source unter der freizügigen Apache 2.0 Lizenz. Der Download des kompilierten Programms steht unter anderen Nutzungsbedingungen. Eine Private- oder Non-Profit-Nutzung ist kostenlos erlaubt während eine kommerzielle Nutzung ein Abo von mind. $25 pro Instanz und Monat kostet. Es ist also keine Freie Software mehr!


Zugänglich

Die Software ist für jeden zugänglich, unabhängig von den finanziellen Möglichkeiten. Ein Zahle, was du willst Modell wäre möglich.

Beispiel: Elementary OS finanziert erfolgreich mehrere Mitarbeiter über einen Zahle, was du willst-Download. Das Betriebssystem enthält auch einen Zahle, was du willst-AppStore.


Die Software ist intuitiv und leicht zu bedienen (siehe Usability/User Experience). Fortgeschrittene Funktionen müssen explizit bei Bedarf aktiviert werden.

Beispiel: Medien lassen sich mit dem VLC Media Player leicht abspielen. Im Menü finden sich weitere Funktionen wie Datei-Konvertierung und Streaming.


Die Software ist nach Möglichkeit auf allen populären Plattformen verfügbar. Also Windows, Linux und macOS auf dem Computer und Android sowie iOS auf dem Smartphone.

Beispiel: Mozilla Firefox ist für alle genannten Plattformen verfügbar.


Die Software lässt sich leicht installieren. Zum Beispiel über Paketmanager auf Linux-Distributionen, distributionsübergreifende Alternativen wie Flatpak, AppImage oder Snappy, Installer oder portable Version auf Windows, DMG oder den AppStore auf macOS. Darüber hinaus gibt es eine Anleitung zum Bauen der Software aus dem Quellcode. Das hilft Paketmaintainern von Distributionen ein Paket zu bauen.

Beispiel: Von Gimp gibt es 206 Pakete in 43 Familien von GNU/Linux-Distributionen. Auch Flatpak wird offiziell angeboten. Außerdem sind Installer für Windows und macOS verfügbar.


Möglichst geringer Ressourcenbedarf (CPU, RAM, Speicherplatz, Netzwerk), damit die Software auch auf schwacher Hardware läuft.

Beispiel: Die Desktop-Umgebung Xfce benötigt einen Prozessor mit 1 GHz und 512 MB Arbeitsspeicher.


Die Software ist in der Sprache der Benutzer verfügbar.

Beispiele: WordPress steht in über 100 Sprachen zur Verfügung. Nextcloud immerhin in über 60.


Die Software ist auch für Menschen mit Behinderung benutzbar (siehe Barrierefreiheit). Das macht es auch für andere Menschen benutzbarer, z.B. für alte Menschen.

Beispiel: Die Desktop-Umgebung GNOME bietet einige Funktionen, um die Benutzung für Menschen mit Einschränkungen zu erleichtern.


Die Software wird von Menschen gefunden, die sie brauchen. Das kann durch eine gute Präsentation des Projekts erreicht werden, wodurch es über Suchmaschinen auffindbar ist, indem Entwickler und Benutzer für Interviews zur Verfügung stehen, wodurch darüber berichtet werden kann. Mit einem Lightningtalk auf einer passenden Konferenz erreicht man viele potentielle Benutzer. Eventuell könnte auch aktiv Werbung gemacht werden?

Beispiel: sva hält regelmäßig Vorträge über Projekte wie GNU Taler, GNUNet und p≡p.


Nachhaltig

Das Projekt wird durch seine Benutzer finanziert. Diese werden dazu aufgerufen, jeden Monat freiwillig einen kleinen Betrag zu spenden. Dadurch bleibt das Projekt unabhängig und kann nach den Interessen der Benutzer entwickelt werden und nicht im Interesse großer Sponsoren oder Investoren.

Beispiele: Die Godot Engine und der Webcomic Pepper&Carrot werden erfolgreich über Patreon finanziert.


Der Code ist wartbar, idiomatisch, einfach zu lesen, kommentiert und dokumentiert. Neue Entwickler können sich so schnell mit der Codebasis vertraut machen.


Es wird zukunftsfähige Technologie verwendet (Programmiersprache, Bibliotheken, Algorithmen, Formate).


Es wird auf offene Standards gesetzt. Dadurch sind die Daten mit anderen Programmen kompatibel.


Das Projekt hat mindestens 2 Maintainer, um den Bus-Faktor zu verringern. Beide haben die gleichen Befugnisse, z.B. Zugriff auf Repository, Webseite, Domain und Geld.


Die Software wird aktiv gepflegt.


Gemeinschaft

Die Software wird in einer Gemeinschaft aus Entwicklern und Benutzern entwickelt. Benutzer können sich durch Feedback einbringen oder selbst zu Entwicklern werden. Dabei geht es nicht nur um Programmieren, sondern auch ums Testen, Übersetzen, Dokumentieren und Verbreiten. Hilfe bekommen Benutzer auch durch andere Benutzer oder die Entwickler, z.B. in einem Forum oder Chat.

Generell wird auf Kooperation statt Konkurrenz gesetzt. So wird auch mit Entwicklern anderer Freie Software-Projekte zusammengearbeitet, um für gemeinsame Probleme eine gute Lösung zu finden oder gemeinsam genutzte Bibliotheken zu erweitern.


Wie wird gute Software entwickelt?

Bei der Entwicklung von guter Software ist Planung, Organisation, Unabhängigkeit, Best Practices und Automatisierung wichtig.


Planung

Bevor die erste Zeile Code geschrieben wird muss das Ziel des Projekts definiert sein. Eine Analyse der Zielgruppe verhindert an ihren Anforderungen vorbei zu entwickeln.

Gute Planung kann später viel Aufwand bei der Entwicklung vermeiden.


Organisation

Es wird transparent gemacht, wie das Projekt organisiert ist. Alle Abläufe, Entscheidungen, verwendete Infrastruktur und so weiter werden dokumentiert. Es wird kommuniziert, wie viel Geld benötigt wird und wofür es ausgegeben wurde. Das schafft Vertrauen bei den Benutzern und andere Projekte können von dem Wissen profitieren.


Code Reviews erhöhen die Qualität der Software und Fehler werden frühzeitig erkannt. Sie lassen sich gut als Teil eines Merge Request-Workflows umsetzen. Die Maintainer tragen die Verantwortung für hinzugefügte Änderungen.


Für die Verwaltung von Fehlerberichten und Verbesserungsvorschlägen wird ein Ticketsystem verwendet. Milestones können genutzt werden, um diese einem geplanten Release zuzuordnen.


Mentoring hilft neuen Entwicklern zum Projekt beizutragen und von der Erfahrung und dem Wissen von bestehenden Entwicklern zu profitieren.


Damit mehr Menschen die Software vor einem Release testen können Beta-Versionen und Release Candidates veröffentlicht werden. Auch hier ist wichtig transparent zu kommunizieren, was das bedeutet.


Unabhängigkeit

Verwendete Entwicklungs-Werkzeuge sind ebenfalls Freie Software. Die Infrastruktur wird unabhängig betrieben und finanziert.

Das schließt Plattformen wie github.com, gitlab.com, travis-ci.org, codeclimate.com und Software wie Sublime Text, PhpStorm und Jira aus.

Hier ein kurzer Vortrag zu dem Thema: Free Software Needs Free Tools (englisch).

Beispiele: Gitea ist eine freie Repository-Hosting-Software, die von einer Gemeinschaft entwickelt wird. Codeberg ist eine öffentliche Instanz davon, die von einem gemeinnützigen Verein betrieben und von den Benutzern finanziert wird.


Best Practices

Sicherheitslücken werden vermieden und schnell geschlossen.


Die Privatsphäre der Benutzer wird aktiv geschützt. Es werden keine unnötigen Daten erhoben. Es ist transparent, welche Daten für welchen Zweck erhoben werden.


Die Software läuft stabil und zuverlässig, Fehler werden vermieden und schnell behoben.


Der Code ist modular strukturiert, so dass er einfach in anderen Projekten verwendet werden kann.


Die Form folgt der Funktion bzw. Methode folgt Problem.


Reproducible Builds ermöglichen die Überprüfung, dass beim Kompilieren des Programms keine Schwachstellen oder Hintertüren hinzugefügt wurden.


Das Projekt hat mindestens eine README- und LICENSE-Datei. Ein CHANGELOG ist auch sehr hilfreich für Benutzer. Wenn das Programm keine integrierte Hilfe hat (z.B. Manpage bei Kommandozeilen-Werkzeugen oder HTML-Dateien) ist es sinnvoll, eine ausführliche Dokumentation auf einer Webseite zur Verfügung zu stellen. Eine Webseite hilft außerdem, dass Benutzer das Projekt finden.


Kleine Programme sollten nach der UNIX Philosophie entwickelt werden: „Mache nur eine Sache und mache sie gut.“


Automatisierung

Continuous Integration führt regelmäßig die Unit Tests und Integration Tests aus, um Fehler frühzeitig zu bemerken.

Die Veröffentlichung von Aktualisierungen ist durch Continuous Delivery automatisiert. Dadurch erzeugt ein Release keinen großen Aufwand und Änderungen können schnell veröffentlicht werden.


Für weitere Informationen siehe auch die Quellen.


Über den Autor

Mein Name ist David Kleuker aka davidak. Ich arbeite in der Qualitätssicherung und mache mir in der Freizeit Gedanken, wie Freie Software verbessert werden kann. Ich sehe ein großes Potential in Freier Software. Es gibt schon sehr viele Projekte, aber nicht alle haben eine gute Qualität. In dem die Qualität verbessert und die Software zugänglicher gemacht wird, bekommt sie mehr Benutzer, wodurch eine nachhaltige Finanzierung möglich ist, wodurch die Qualität weiter verbessert wird. So wird Freie Software langfristig besser als proprietäre Alternativen!