Re: RELENG_6

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 8 Mar 2006 09:40:06 +0100 (CET)

Heino Tiedemann <rotkaps_spam_trap(at)gmx.de> wrote:
> Ich kann das aber nicht 100% sagen, da ich auch nur halbwissen darüber
> habe. Ich benutze zwar FreeBSD schon ein Jahr, aber diese Tag-Suppe
> habe ich noch nie ganz begriffen. Ob es wohl einen gibt, der
>
> a) das Tag-gewusel in und auswendig kennt
> und das
> b) jemandem wie uns vermitteln kann?

So kompliziert ist das doch gar nicht. Der wichtigste
Punkt ist, daß man sich klarmacht, daß es zwei Arten
von tags gibt und was der Unterschied ist:

1. Branch-tags (z.B. RELENG_6 oder RELENG_6_1) bezeichnen
    einen Entwicklungszweig. Genauer gesagt bezeichnet es
    die aktuelle Spitze dieses Zweiges, also den aktuellen
    Stand der Entwicklung. Der tag verschiebt sich also
    quasi ständig weiter nach vorne. Wenn man einen Ver-
    sionsstand angeben will (z.B. in einem Bugreport), muß
    man bei einem solchen tag immer den Zeitpunkt nennen,
    da es sonst nicht eindeutig ist (z.B. »RELENG_6 vom
    8. März«).

2. Release-tags (z.B. RELENG_6_1_0_RELEASE) bezeichnen
    einen fixierten Stand, der zu einem bestimmten Zeit-
    punkt festgelegt wurde und unveränderlich ist (in sel-
    tenen Ausnahmen wurden Release-tags auf einzelnen
    Dateien, in denen kritische »Show-stopper« entdeckt
    wurden, nochmals nach vorn geschoben, aber das ist
    nicht die Regel).

Der aktuelle Hauptzweig, der als »stable« bezeichnet wird,
ist RELENG_6. In diesen Zweig fließen alle Neuentwicklungen
ein, die in »current« erpropt worden sind und für »stable«
als geeignet befunden worden sind.

Von diesem Zweig wird kurz vor jeder Release ein Unterzweig
abgespalten, der RELENG_6_x genannt wird (zur Zeit steht
also RELENG_6_1 unmittelbar bevor). Auf diesem Unterzweig
wird dann kurz darauf die Release markiert, im vorliegenden
Fall wäre das RELENG_6_1_0_RELEASE. Der Unterzweig wird
nach der Release weitergeführt, erhält aber nur kritische
Änderungen aus RELENG_6 (z.B. sicherheitsrelevante Fixes),
keine allgemeinen Neuentwicklungen oder neue Features. Es
handelt sich quasi um eine Sackgasse, denn es werden keine
weiteren Releases (etwa 6.2) von diesem Unterzweig gebildet.

Wer möglichst aktuell bleiben möchte, sollte also dann, wenn
6.2 erscheint, RELENG_6_1 verlassen und auf RELENG_6_2 über-
wechseln. Oder halt gleich auf RELENG_6 bleiben: Dann be-
kommt man automatisch alle neuen Features mit und muß sich
praktisch überhaupt nicht um Releases und Unterzweige küm-
mern, allerdings besteht das (geringe) Risiko, daß man mal
einen Stand erwischt, wo irgendwas »broken« ist. Dieses
Risiko ist meiner Meinung nach aber minimal, insbesondere
wenn man die »stable«-Mailingliste verfolgt. Manche Leute
haben es sich auch zur Angewohnheit gemacht, nicht auf das
aktuelle RELENG_x zu updaten, sondern immer auf das jewei-
lige von vor sieben Tagen o.ä., denn wenn es wirklich mal
Bruch gibt, wird das i.allg. von anderen Leuten bemerkt und
in der Mailingliste gemeldet (und dann auch kurz darauf re-
pariert).

Eine kleine ASCII-Graphik (zur korrekten Darstellung ist
ein Monospaced-font nötig, kein Proportional-font):

RELENG_6
---+-----------------+-----------------+------------------>
   | | |
   | | | RELENG_6_2
   | | RELENG_6_1 `---+--------->
   | RELENG_6_0 `---+---------> |
   `---+---------> | |
       | | |
       ^ ^ ^
    6_0_0_RELEASE 6_1_0_RELEASE 6_2_0_RELEASE

Es gibt noch ein paar weitere Details, die aber für das
Verständnis nicht so wichtig sind:

 - Direkt von RELENG_6 werden auch regelmäßig sogenannte
   Snapshots gemacht und per FTP/HTTP zugänglich gemacht.
   Diese werden im Prinzip wie Releases generiert, unter-
   liegen aber nicht dem ganzen RE-Overhead (Code-Freeze
   usw.). Auch werden sie nicht durch tags im CVS mar-
   kiert, sondern einfach durch das Datum bezeichnet, an
   dem sie erstellt wurden.

 - Die Zeitpunkte, zu denen ein Unterzweig erstellt wird,
   werden durch feste Tags markiert, im Falle von RELENG_6_1
   ist das RELENG_6_1_BP (das »BP« steht für Branch-point).
   Diese braucht man aber normalerweise nicht.

Man könnte jetzt noch fragen, wie das mit »current« ist (in
obiger ASCII-Graphik fehlt es). Es handelt sich um den
Zweig, in dem experimentelle neue Features getestet und
debugged werden, bevor sie -- wenn möglich -- nach »stable«
(RELENG_6) übernommen werden (diese Übernahme wird als MFC
bezeichnet, was für »merge from current« steht).

Da aber current teilweise starken Änderungen unterworfen
ist, die auch die APIs betreffen, divergiert es mit der Zeit
immer stärker von stable, und es wird immer schwerer, MFCs
durchzuführen. Daher wird irgendwann (wahrscheinlich in der
ersten Hälfte 2007) aus current ein neuer RELENG-Zweig her-
vorgehen (RELENG_7), und ein neuer current-Zweig wird ent-
stehen (der dann auf RELENG_8 zuläuft, und so weiter). Von
dem RELENG_7 werden dann neue Unterzweige (RELENG_7_0) ab-
gezweigt, von der dann Releases gebildet werden, genau wie
bei RELENG_6, der ja bis Herbst letzten Jahres ja selbst
noch »current« war. Wenn RELENG_7 etabliert und »stable«
ist, wird RELENG_6 langsam auslaufen (es wird vielleicht
noch ein oder zwei »Legacy«-Releases geben, genau wie das
zur Zeit bei RELENG_5 der Fall ist).

Current (HEAD)
---+-------------------------+---------------------------->
   | |
   | | RELENG_7
   | RELENG_6 `---+-----+-----+---->
   `---+-----+-----+----> | | |
       | | | ... ... ...
       ... ... ...

Wie man an der Graphik sieht, funktioniert es im Grunde
genommen genauso wie das Abspalten der Release-Unterzweige
von RELENG_x, nur halt eine Ebene darüber.

Noch ein Wort zu den ganzen Bezeichnungen.

»Current« und »stable« sind nur umgangssprachliche Bezeich-
nungen, die nicht besonders gut definiert sind. Ich habe
mich daher bemüht, immer die CVS-tags beim Namen zu nennen,
da diese vollkommen eindeutig sind.

»Current« bezeichnet die Spitze der CVS-Entwicklung; der
zugehörige CVS-tag heißt HEAD. Manchmal liest man auch
die Bezeichnung »7-current«, was das gleiche meint (die
Sieben bezieht sich darauf, daß daraus irgendwann einmal
RELENG_7 werden wird).

Bei »stable« wird es schon komplizierter ... Genaugenommen
sollte damit RELENG_6 gemeint sein, es gibt aber Leute, die
auch RELENG_5 immer noch als »stable« bezeichnen (oder so-
gar RELENG_4). Das ist nicht völlig aus der Luft gegrif-
fen, da einige MFCs auch noch in RELENG_5 übernommen wer-
den. Allerdings wird dieser Zweig offiziell nur noch als
»legacy« geführt. Wenn man von _dem_ Stable-Zweig spricht,
ist daher davon auszugehen, daß der aktuelle gemeint ist,
also RELENG_6.

Etwas einfacher ist es dagegen bei Begriffen wie »6-stable«.
Da ist relativ eindeutig RELENG_6 gemeint, obwohl scheinbar
manche Leute damit auch den jeweils laufenden Unterzweig
der aktuellen Release meinen, was ich für irreführend halte.

Ich persönlich ziehe es immer vor, den Namen des CVS-tags
zu nennen, da das eindeutig ist, und im Falle von Branches
auch den möglichst genauen Zeitpunkt.

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
(On the statement print "42 monkeys" + "1 snake":)  By the way,
both perl and Python get this wrong.  Perl gives 43 and Python
gives "42 monkeys1 snake", when the answer is clearly "41 monkeys
and 1 fat snake".        -- Jim Fulton
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 08 Mar 2006 - 09:41:31 CET

search this site