Unterschied Downstream/Upstream

Die meisten Softwarekomponenten haben Abhängigkeiten zu anderen Komponenten. Was also ist eine Upstream-Abhängigkeit und eine Downstream-Abhängigkeit?

Es gibt Upstream Projekte an denen wir, Redhat, uns beteiligen. Wir kontributieren in diese Projekte, in diese Communities, und leisten so einen Anteil zum fertigen Produkt welches wir dann als „Downstream“ kennzeichnen. Dies ist typisch für Open Source Projekte und ist der lange bekannte und allgemeine Entwicklungsstil.

Red Hat erstellt also einen Fork, einen Snapshot, von einem Projekt (z.B. von Fedora was dann später unser „RHEL“ im Downstream darstellt).  Diesen Fork nehmen wir also und schauen uns ihn genau an. Wir fügen diesem Fork nun neue Funktion hinzu oder entwickeln Patche. Dieses Änderungen oder Verbesserungen reichen wir dann in das ursprüngliche Fedora Projekt (Upstream) ein und hoffen das nach intensiver Prüfung durch die Upstream community unsere Veränderungen, Vorschläge, neuen Funktionen oder Patche akzeptiert werden und in das aktuelle Community Projekt (Downstream) einfließen.  So können wir dann im „Downstream“ ein stabileres Produkt, ein stabileres RHEL anbieten.

Upstream / Downstream Flow – ohne Upstream, kein Downstream.

Ihr seht, in diesem Zusammenhang macht die Abhängigkeits-regel die wir uns selber auferlegt haben Sinn. Alles ist „Upstream First!“ Es gibt keine privaten Patche und Funktionen, alles muss im Upstream genehmigt werden. Nur so ist gewährleistet das wir immer im Sync fahren mit der Upstream Community. Das entwickeln von „privaten“ Patchen in unserem RHEL könnte fatale Folgen nach sich ziehen. Von uns durchgeführte Änderungen würden mit dem nächsten „offiziellen“ Update wieder rückgängig gemacht werden da das Downstream Projekt (in dem Fall Fedora) schließlich keine Kenntnis über die im Downstream vollzogenen Änderungen hat. Diese Änderungen würden also gnadenlos und ungefragt überschrieben werden.

Das heißt durch die auferlegte Abhängigkeits-regel würde zwar Projekt A (in dem Beispiel Linux Fedora) weiter existieren da es das vorgelagerte Projekt darstelle, aber Projekt B (Unser Produkt, Red Hat Enterprise Linux, RHEL) würde ohne ohne Projekt A aufhören zu existieren.