{"id":3964,"date":"2024-10-28T07:00:00","date_gmt":"2024-10-28T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3964"},"modified":"2024-10-21T19:15:24","modified_gmt":"2024-10-21T17:15:24","slug":"gedanken-zur-release-versionierung-von-software-projekten","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/gedanken-zur-release-versionierung-von-software-projekten\/","title":{"rendered":"Gedanken zur Release-Versionierung von Software-Projekten"},"content":{"rendered":"\n<p>K\u00fcrzlich habe ich auf <a href=\"https:\/\/fryboyter.de\">Fryboyter<\/a> diesen Artikel gelesen: <a href=\"https:\/\/fryboyter.de\/wie-sollte-man-veroeffentlichungen-versionieren\/\">Wie sollte man Ver\u00f6ffentlichungen versionieren?<\/a><\/p>\n\n\n\n<p>Meine Gedanken zu dem Artikel und dem Thema m\u00f6chte ich an dieser Stelle mit Fryboyter und euch teilen.<\/p>\n\n\n\n<p>Fryboyter favorisiert nach eigener Darstellung <a href=\"https:\/\/calver.org\/\">Calendar Versioning<\/a> (CalVer), da dies seiner Meinung nach aussagekr\u00e4ftiger ist, als z.B. 0.78.1, was sehr stark nach <a href=\"https:\/\/semver.org\/lang\/de\/\">Semantic Versioning<\/a> (SemVer) aussieht. Meiner Meinung nach kann man dies nicht pauschal sagen, da beide Versionsschemata ihre eigenen Vor- und Nachteile haben. Doch wann sollte man zu welchem Schema greifen?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calendar Versioning<\/h2>\n\n\n\n<p>Die folgende Liste ist eine \u00dcbersetzung des englischen Textes, welcher <a href=\"https:\/\/calver.org\/#when-to-use-calver\">hier<\/a> zu finden ist. Wenn einer der in dieser Liste genannten Punkte auf ein Projekt zutrifft, scheint CalVer ein geeignetes Schema f\u00fcr die Versionierung zu sein.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hat Ihr Projekt einen gro\u00dfen oder st\u00e4ndig wechselnden Umfang?<\/li>\n\n\n\n<li>Gro\u00dfe Systeme und Frameworks, wie Ubuntu und Twisted.<\/li>\n\n\n\n<li>Amorphe Gruppen von Dienstprogrammen, wie Boltons.<\/li>\n\n\n\n<li>Ist Ihr Projekt in irgendeiner Weise zeitkritisch? Beeinflussen externe \u00c4nderungen neue Projektver\u00f6ffentlichungen?<\/li>\n\n\n\n<li>Gesch\u00e4ftliche Anforderungen, wie Ubuntus Fokus auf Unterst\u00fctzungstermine.<\/li>\n\n\n\n<li>Sicherheitsupdates, wie certifi&#8217;s Notwendigkeit, Zertifikate zu aktualisieren.<\/li>\n\n\n\n<li>Politische Ver\u00e4nderungen, wie die Handhabung von Zeitzonen\u00e4nderungen durch die IANA-Datenbank.<\/li>\n<\/ul>\n\n\n\n<p>Einige Betriebssysteme wie z.B. Ubuntu haben einen festen Ver\u00f6ffentlichungsrythmus und Unterst\u00fctzungszeitraum. So werden Ubuntu LTS Versionen ohne Zusatzvertr\u00e4ge f\u00fcr 5 Jahre unterst\u00fctzt und mit Aktualisierungen versorgt. Bei Ubuntu 24.04 LTS kann man bereits am Namen erkennen, wie alt dieses Release ist und wie lange es mit Aktualisierungen versorgt wird. Ubuntu ver\u00f6ffentlicht Aktualisierungen f\u00fcr die enthaltenen Pakete in unregelm\u00e4\u00dfigen Abst\u00e4nden, meist sobald diese verf\u00fcgbar sind. Aufgrund der vielen enthaltenen Pakete und der Aktualisierungsrichtlinie scheint SemVer (siehe n\u00e4chster Abschnitt) hier nicht vorteilhaft zu sein.<\/p>\n\n\n\n<p>Bei Debian 12, RHEL 9 oder SLES 15 erkennt man das Datum der Ver\u00f6ffentlichung hingegen nicht. Hier hilft nur ein Blick in die jeweilige Versionshistorie der Projekte, um Informationen \u00fcber den Zeitpunkt der Ver\u00f6ffentlichung und der jeweiligen Unterst\u00fctzungszeitr\u00e4ume zu finden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Semantic Versioning<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Auf Grundlage einer Versionsnummer von MAJOR.MINOR.PATCH werden die einzelnen Elemente folgenderma\u00dfen erh\u00f6ht:<br>1. MAJOR wird erh\u00f6ht, wenn API-inkompatible \u00c4nderungen ver\u00f6ffentlicht werden,<br>2. MINOR wird erh\u00f6ht, wenn neue Funktionalit\u00e4ten, die kompatibel zur bisherigen API sind, ver\u00f6ffentlicht werden, und<br>3. PATCH wird erh\u00f6ht, wenn die \u00c4nderungen ausschlie\u00dflich API-kompatible Bugfixes umfassen.<\/p>\n<cite>Quelle: <a href=\"https:\/\/semver.org\/lang\/de\/\">https:\/\/semver.org\/lang\/de\/<\/a><\/cite><\/blockquote>\n\n\n\n<p>SemVer ist stringent, einfach nachzuvollziehen und bietet f\u00fcr mich als Systemadministrator die folgenden Vorteile.<\/p>\n\n\n\n<p>Wird PATCH erh\u00f6ht, wei\u00df ich, dass lediglich Fehler behoben wurden, sich am Funktionsumfang einer Anwendung jedoch nichts \u00e4ndert. Das Einzige, was mir hierbei den Tag vermiesen kann, sind Regressionen. Das Risiko, dass irgendetwas kaputtgeht oder schlimmer wird, ist jedoch gering.<\/p>\n\n\n\n<p>Wird MINOR erh\u00f6ht, wei\u00df ich, dass die Anwendung neue Funktionalit\u00e4t enth\u00e4lt und ich wei\u00df, dass nun ein genauerer Blick erforderlich ist, um zu entscheiden, ob diese Funktionalit\u00e4t in meiner Umgebung bereitgestellt werden soll bzw. darf. Gegebenenfalls sind vor einer Aktualisierung Anwenderschulungen durchzuf\u00fchren und interne Prozessbeschreibungen zu aktualisieren, bevor die neue Version zur Nutzung freigegeben werden kann.<\/p>\n\n\n\n<p>Einem an <em>Featureritis<\/em> erkrankter Nerd mag jede neue Funktion gefallen. Unzureichend geplante Ver\u00f6ffentlichungen neuer Funktionen in Unternehmen k\u00f6nnen hingegen <em>interessante<\/em> Folgen haben.<\/p>\n\n\n\n<p>Wird MAJOR erh\u00f6ht, ist ein Blick in die Release Notes angeraten. Denn man wei\u00df schon mit einem Blick auf die Versionsnummer, dass diese Version <em>Breaking Changes<\/em> enth\u00e4lt. Dies k\u00f6nnen sein:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API-inkompatible \u00c4nderungen<\/li>\n\n\n\n<li>Entfallene bzw. entfernte Funktionalit\u00e4t<\/li>\n\n\n\n<li>Ge\u00e4nderte Architektur<\/li>\n\n\n\n<li>Ge\u00e4ndertes Format der Konfigurationsdatei(en)<\/li>\n\n\n\n<li>etc.<\/li>\n<\/ul>\n\n\n\n<p>Eine solche Aktualisierung kann man in aller Regel nicht ohne sorgf\u00e4ltige Planung installieren. Das Risiko, dass dabei etwas kaputtgeht und Stress und Produktionsausfall folgen ist einfach zu gro\u00df.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aussagekraft<\/h2>\n\n\n\n<p>Fryboyter schreibt: \u201eZumal meiner Meinung nach 2024.10.11 aussagekr\u00e4ftiger als 0.78.1 ist.\u201c<\/p>\n\n\n\n<p>Aber ist es wirklich aussagekr\u00e4ftiger? Wenn ich nur das Datum sehe, wei\u00df ich lediglich, wann die Version ver\u00f6ffentlicht wurde. Welchen Funktionsumfang die Version hat, welche \u00c4nderungen es zur vorhergehenden Version es gibt, ob diese Version stabil ist oder ob es die aktuellste Version ist, erkennt man nicht. Bei zwei Daten erkennt man zumindest, welches die aktuellere Version ist.<\/p>\n\n\n\n<p>Sehe ich nur 0.78.1, wei\u00df ich nicht, wann diese Version ver\u00f6ffentlicht wurde. Ich sehe jedoch auf den ersten Blick, dass sich diese Version in einer initialen Entwicklungsphase befindet, der Funktionsumfang nicht abschlie\u00dfend definiert ist und sich jederzeit \u00e4ndern kann. Kurz gesagt, mit jeder weiteren Erh\u00f6hung von MINOR und PATCH ist damit zu rechnen, dass sich das Verhalten und der Funktionsumfang signifikant \u00e4ndern. Da die einzelnen Elemente bei SemVer ausschlie\u00dflich erh\u00f6ht jedoch nie gesenkt werden, kann man bei Vorliegen von zwei Versionsnummern der gleichen Anwendung erkennen, welches die aktuellere ist. Details zu \u00c4nderungen gegen\u00fcber der Vorg\u00e4ngerversion verr\u00e4t SemVer zwar auch nicht, doch kann ich den Umfang der \u00c4nderungen erkennen. F\u00fcr mich besitzt SemVer damit in den meisten F\u00e4llen die gr\u00f6\u00dfere Aussagekraft.<\/p>\n\n\n\n<p>Die Frage wann es Zeit f\u00fcr Version 1.0.0 ist, beantwortet SemVer wie folgt:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Wenn die Software schon in der Produktion verwendet wird, sollte sie bereits in Version 1.0.0 vorliegen. Falls eine <em>stable<\/em> API existiert, auf die sich Nutzer bereits verlassen, sollte es ebenfalls die Version 1.0.0 sein. Auch wenn Kompatibilit\u00e4t zu vorherigen Versionen bereits eine wichtige Rolle spielt, ist Version 1.0.0 angebracht.<\/p>\n<cite>Quelle: <a href=\"https:\/\/semver.org\/lang\/de\/#woher-wei%C3%9F-ich-wann-es-zeit-ist-version-100-zu-ver%C3%B6ffentlichen\">https:\/\/semver.org\/lang\/de\/#woher-wei%C3%9F-ich-wann-es-zeit-ist-version-100-zu-ver%C3%B6ffentlichen<\/a><\/cite><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Abschlie\u00dfende Bemerkung<\/h2>\n\n\n\n<p>Ich geh\u00f6re tendenziell eher zu Team SemVer und denke, dass dies eine h\u00f6re Aussagekraft als CalVer besitzt.<\/p>\n\n\n\n<p>Grunds\u00e4tzlich halte ich es f\u00fcr sinnvoll und wichtig, wenn sich Entwickler bzw. Organisationen Gedanken machen, welches Versionsschema am besten zu ihrem Projekt passt.<\/p>\n\n\n\n<p>Wie denkt ihr dar\u00fcber? Hinterlasst doch gern einen Kommentar mit eurer Meinung oder ver\u00f6ffentlicht einen eigenen Text dazu in eurem Blog.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>K\u00fcrzlich habe ich auf Fryboyter diesen Artikel gelesen: Wie sollte man Ver\u00f6ffentlichungen versionieren? Meine Gedanken zu dem Artikel und dem Thema m\u00f6chte ich an dieser Stelle mit Fryboyter und euch teilen. Fryboyter favorisiert nach eigener Darstellung Calendar Versioning (CalVer), da dies seiner Meinung nach aussagekr\u00e4ftiger ist, als z.B. 0.78.1, was sehr stark nach Semantic Versioning<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/gedanken-zur-release-versionierung-von-software-projekten\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[1],"tags":[430,305,851,852,853],"class_list":["post-3964","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-osbn","tag-planet","tag-versionierung","tag-versionsschema","tag-versionsschemata"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3964"}],"version-history":[{"count":8,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3964\/revisions"}],"predecessor-version":[{"id":3972,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3964\/revisions\/3972"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}