<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FOSS Archives - Freigiebigkeit</title>
	<atom:link href="https://karsten-reincke.de/tag/foss/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>(Fach-) Informatik vom Dorf</description>
	<lastBuildDate>Sun, 15 Mar 2026 21:27:44 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Das eigene Farbkonzept mit bootScore</title>
		<link>https://karsten-reincke.de/farbkonzept/</link>
					<comments>https://karsten-reincke.de/farbkonzept/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 12:47:28 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=10749</guid>

					<description><![CDATA[<p>Als “leistungsstarkes, kostenloses Bootstrap-Starter-Theme für WordPress” verwendet bootScore das Farbdesign von Bootstrap und zeichnet seine Elemente entsprechend aus. Zur Verfeinerung dieser allseits gleichen Ergebnisse liefert es aber Techniken mit. So muss die Webdesignerin erst das eigene Farbkonzept entwickeln und es dann in und mit bootScore umsetzen, wenn sie ein persönliches Outfit ihrer Site möchte: Lösung [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/farbkonzept/">Das eigene Farbkonzept mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Als “leistungsstarkes, kostenloses Bootstrap-Starter-Theme für WordPress” verwendet <a href="https://bootscore.me/">bootScore</a> das <a href="https://getbootstrap.com/docs/5.2/utilities/colors/">Farbdesign von Bootstrap</a> und zeichnet seine Elemente entsprechend aus. Zur Verfeinerung dieser allseits gleichen Ergebnisse liefert es aber Techniken mit. So muss die Webdesignerin erst das eigene Farbkonzept entwickeln und es dann in und mit bootScore umsetzen, wenn sie ein persönliches Outfit ihrer Site möchte:<span id="more-10749"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/color-concept">en</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Lösung</h2>



<ol class="wp-block-list">
<li><strong>Konzipiere das Erscheinungsbild Deiner Site</strong>.</li>



<li><strong>Wähle die entsprechenden Bootstrap-Farbcluster</strong>.</li>



<li><strong>Schreibe die Funktionsfarben entsprechend um</strong>.</li>



<li><strong>Definiere die eigenen CSS-Klassen gemäß Deines Konzeptes</strong>.</li>



<li><strong>Weise die Klassen den intendierten Elementen Deiner Website zu</strong>.</li>
</ol>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Hintergrund</h2>



<p id="colorDemo"><a href="https://getbootstrap.com/docs/5.2/customize/color/">Bootstrap hat den RGB-Farbraum in 10 Farbcluster unterteilt</a>: Blau (<code class="bsblue">blue</code>), Indigo (<code class="bsindigo">indigo</code>), Violett (<code class="bspurple">purple</code>), Rosa (<code class="bspink">pink</code>), Rot (<code class="bsred">red</code>), Orange (<code class="bsorange">orange</code>), Gelb (<code class="bsyellow">yellow</code>), Grün (<code class="bsgreen">green</code>), Petrol (<code class="bsteal">teal</code>), Cyan (<code class="bscyan">cyan</code>), Grau (<code class="bsgray">gray</code>). Jeder Cluster beginnt mit einer entsprechend hellen Farbe und geht 9 Schritten bis zu einer entsprechend fast schwarzen Farbe. Definiert sind die Farben als SASS-Variablen, für jeden Cluster nach demselben Muster. Zugreifen können wir so etwa auf ein <code class="cdg100">$green-100</code>, <code class="cdg200">$green-200</code>, <code class="cdg300">$green-300</code>, <code class="cdg400">$green-400</code>, <code class="cdg500">$green-500</code>, <code class="cdg600">$green-600</code>, <code class="cdg700">$green-700</code>, <code class="cdg800">$green-800</code>, <code class="cdg900">$green-900</code>, wobei <code class="cdg">$green</code> der Farbe <code class="cdg500">$green-500</code> entspricht.</p>



<p>Wollen wir diese Farben in einem unserer Element verwenden, definieren wir in unserer Child-Themedatei <code>scss/bscore_custom.scss</code> eine CSS-Klasse <code>.cdg600 { color: $green-600; }</code> und weisen die dem intendierten HTML-Element zu, wie z.B. hier <code class="cdg600">&lt;code class="cdg600"&gt;$green-600&lt;/code&gt;</code>. Diese Technik verengt den RGB-Farbraum zwar, sie erleichtert es uns aber, farblich differenzierte und trotzdem einheitliche Themes zu erstellen.</p>



<p><a href="https://getbootstrap.com/docs/5.2/utilities/colors/">Neben der rein technischen Farbbehandlung</a> geht Bootstrap auch konzeptionell neue Wege: Es gäbe — so der Gedanke — Site-übergreifende kommunikative Aufgaben, die von verschiedenen Elementen einer Site ausgeführt werden (können). Bootstrap erlaubt es, diesen Funktionselementen typische “Funktionsfarben” zuzuordnen. Welche Elemente einer Site welche Funktion übernehmen, entscheidet die Web-Designerin — und ordnet diesen die entsprechend “Funktionsfarbe” zu.</p>



<p>Konkret geht Bootstrap davon aus, dass es in Sites typischerweise (mehrere) Elemente gibt, die Erfolg signalisieren, die abschrecken, warnen oder informieren. Oder, dass es primäre Elemente gibt, sekundäre oder teriäre<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_1_10749" id="identifier_1_10749" class="footnote-link footnote-identifier-link" title="semantisch ist dies wohl eine Abstufung der Wichtigkeit">1</a></sup>, dunkle oder helle Elemente. Für diese seitenübergreifenden kommunikativen Funktionen definiert Bootstrap ‘funktionale Farben’. Das entsprechende <a href="https://getbootstrap.com/docs/5.2/customize/color/">Bootstrap-color-Howto</a> zeigt die Vorbelegung dieser ‘Funktionsfarben’.</p>



<p>Ein Bootstrap-basiertes Theme muss also nur noch seine Elemente entsprechend der vorgesehenen Funktionen mit den zugehörigen CSS-Klassen auszeichnen, um ein minimal konsistentes Farbkonzept zu realisieren. Das hat <em>bootScore</em> vorbereitet. Allerdings verwendet es die Standard-Funktionsfarben von <em>Bootstrap</em>. So entsteht ein recht “buntes” Farbkonzept. Wir können die Farbwahl jedoch ‘entschärfen’, indem wir die CSS-Definitionen der ‘Funktionsklassen’ überschreiben und so die konzeptionell passende Farbe auf alle entsprechend markierten Elemente übertragen. <em>bootscore</em> <a href="https://bootscore.me/documentation/theme/bootstrap-css-sass/">demonstriert diesen Ansatz</a>, indem es die Primärfarbe von <em>Blau</em> auf <em>Rot</em> umsetzt — mithilfe der Zeile <code>$primary:#FF0000;</code> in der Datei <code>bscore_variables.scss</code>.</p>



<p>Dabei müssen wir den Wert der gewünschten Farbe jedoch explizit zuweisen, anstatt eine der Variablen aus den von Bootstrap definierten Farbclustern zu verwenden. Das ist nicht das, was wir eigentlich wollen. Intuitiv würden wir <code>$primary:$red;</code> schreiben. Leider ist das nicht möglich, weil die bootScore-Datei <code>bscore_variables.scss</code> vor der entsprechenden Bootstrap-Datei geladen wird.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_2_10749" id="identifier_2_10749" class="footnote-link footnote-identifier-link" title="bootScore sagt, dass es damit der Bootstrap-Richtlinie folgt.">2</a></sup>. Um also die von Bootstrap definierten und von bootScore verwendeten Funktionsfarben anzupassen, müssen wir die bestehenden Definitionen überschreiben, in denen wir explizit die Werte der beabsichtigten Clusterfarben verwenden. Dazu nutzen wir unserer Datei <code>bscore_variables.scss</code>.</p>



<p><a href="https://bootscore.me/documentation/theme/css-scss-compiler/">Die Umdefinition einer Funktionsfarbe</a> passt dann allerdings auch abgeleitete Farben an: Setzen wir die Primärefarbe auf <em>rot</em>, werden die Links rot eingefärbt, die Hintergrundfarbe der Badgets auf ein helleres Rot und deren Linktext auf ein dunkleres. <em>bootScore</em> reicht dabei ’nur’ die <a href="https://bootscore.me/documentation/bootstrap-components/">Entscheidungen von Bootstrap</a> durch.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_3_10749" id="identifier_3_10749" class="footnote-link footnote-identifier-link" title="Mehr noch: Gefragt danach, welche HTML-Elemente welcher Funktion zugeordnet sind, empfiehlt bootScore, das einfach auszuprobieren.">3</a></sup></p>



<p>Als Ausgleich für die Komplikation können wir dann alle vordefinierten Bootstrap-Variablen in unseren eigenen CSS-Definitionen verwenden, die wir in unserer Bootscore-Datei <code>bscore_custom.scss</code> definieren. Mehr noch: wir können auch die von <em>Bootstrap</em> vordefinierten CSS-Klassen (<code>text</code>|<code>bg</code>|…)<code>-</code>(<code>primary</code>|<code>secondary</code>|…|<code>danger</code>|…‘) direkt unseren HTML-Elementen zuordnen, sodass auch diese unseres Konzeptes entsprechend eingefärbt werden. Und noch weiter und feiner: Wir können auch bestehende Klassen — wie etwa die CSS-Klasse card — mit der SASS orienierten Definition <code>.card { backgroundcolor: var(--#{$prefix}dark);</code> in unserer Datei <code>bscore_custom.scss</code> auf einen schwarzen Hintergund umsetzen.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_4_10749" id="identifier_4_10749" class="footnote-link footnote-identifier-link" title="oder wie auch immer die Funktionsfarbe 'dark' gerade definiert ist">4</a></sup> Damit würden alle Karten in unseren Übersichtsdatei ‘verdunkelt’.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_5_10749" id="identifier_5_10749" class="footnote-link footnote-identifier-link" title="Das ginge zugegebenermaßen auch einfacher, nämlich mit der Anweisung .card { backgroundcolor: $dark}.">5</a></sup></p>



<p>Weil wir jedoch oft genug nicht alle Elemente ändern wollen, die mit vordefinierten Klassen ausgezeichnet sind, landen wir zum Schluß doch wieder bei der traditionelle Methode: wir definieren unsere eigenen Klassen, nutzen dabei Farben aus den Bootstrap-Clustern, und weisen unsere Klassen dann in den Templates den von uns intendierten Elemente zu. Und wie finden wir diese? Indem wir den Quellcode unserer bisherigen bootscore-Seiten studieren — und etwas ‘rumprobieren.</p>



<p>Um es zusammenfassen: Für einheitliches und technisch eingebundenes Farbkonzept, müssen wir</p>



<ol class="wp-block-list">
<li><strong>unsere Ziele definieren</strong> (hier:


<ul class="wp-block-list">
<li>Unsere Site soll blau-weiß-grau erscheinen = <em>in Datei _<code>bscore_variables.scss</code> einfügen:</em>
<ul class="wp-block-list">
<li><code>$primary: #0d6efd; // Wert von $blue-500</code> </li>



<li><code>$secondary: #6c757d;</code> <code>// Wert von $gray-600</code> </li>



<li><code>$info: #6ea8fe; // Wert von $blue-300</code></li>
</ul>
</li>



<li>Hervorstechende Elemente sollen violett erscheinen = <em>in Datei _<code>bscore_variables.scss</code> einfügen:</em>
<ul class="wp-block-list">
<li><code>$danger: #520dc2; // Wert von $indigo-600</code></li>



<li><code>$warning: #8540f5; // Wert von $indigo-400</code></li>
</ul>
</li>



<li>Nebensächlicher Text soll lesbar ausgegraut sein.</li>



<li>Die weißen Artikelteaser sollen schwach-blau umrandet sein = <em>in Datei _<code>bscore-sustom.scss</code> einfügen:</em> <code>.card { border-color: $blue-600; }</code></li>



<li>Die Teaser auf der Landingpage und auf den Übersichtsseiten sollen auf einem leicht blauen Hintergrund abgelegt werden. = <em>in Datei _<code>bscore-sustom.scss</code> einfügen:</em> <code>.page-template-mylap , .hfeed { background-color: $blue-100;}</code></li>



<li>Header und Footer sollen weiterhin auf grauem Hintergrund dargestellt werden.</li>
</ul>
</li>



<li><strong>die funktionalen Farben entsprechend umschreiben</strong> — in unserer Datei <code>bscore_variables.scss</code></li>



<li>unsere <strong>Siteelemente</strong> entsprechend ihrer Funktion<strong> mit den Funktionsklassen auszeichnen</strong><sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_6_10749" id="identifier_6_10749" class="footnote-link footnote-identifier-link" title="wie in u.a. Tabelle demonstriert">6</a></sup></li>



<li><strong>unsere eigenen CSS-Klassen entsprechend unserer Ziele definieren</strong> — in unserer Datei <code>bscore_custom.scss</code></li>



<li><strong>unsere Klassen den vorgesehenen Elementen unserer Site zuweisen</strong><sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_7_10749" id="identifier_7_10749" class="footnote-link footnote-identifier-link" title="wie oben vorgeführt">7</a></sup></li>
</ol>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table" align="center"><table><tbody>
  <tr><td class="bg-primary"><span class="text-white">CSS-class: bg-primary</span></td>
  <td><span class="text-primary">CSS-class: text-primary</span></td>
</tr>
  <tr><td class="bg-secondary"><span class="text-white">CSS-class: bg-secondary</span></td>
<td><span class="text-secondary">CSS-class: text-secondary</span></td>
</tr>

  <tr><td class="bg-success"><span class="text-white">CSS-class: bg-success</span></td>
<td><span class="text-success">CSS-class: text-success</span></td>
</tr>
  <tr><td class="bg-info"><span class="text-white">CSS-class: bg-info</span></td>
<td><span class="text-info">CSS-class: text-info</span></td>
</tr>
  <tr><td class="bg-warning"><span class="text-white">CSS-class: bg-warning</span></td>
<td><span class="text-warning">CSS-class: text-warning</span></td>
</tr>
  <tr><td class="bg-danger"><span class="text-white">CSS-class: bg-danger</span></td>
<td><span class="text-danger">CSS-class: text-danger</span></td>
</tr>
  <tr><td class="bg-dark"><span class="text-white">CSS-class: bg-dark</span></td>
<td><span class="text-dark">CSS-class: text-dark</span></td>
</tr>
  <tr><td class="bg-light"><span class="text-black">CSS-class: bg-light</span></td>
<td class="bg-dark"><span class="text-light">CSS-class: text-light</span></td>
</tr>
</tbody></table></figure>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit unserer <a href="https://karsten-reincke.de/bootscore-migration/">Migration</a> zu 
  <a href="https://bootscore.me/">bootScore</a>? Nun, einmal angefangen mit 
  <a href="https://karsten-reincke.de/bootscore-pimpen/">Verbesserungen</a> der 
  <a href="https://karsten-reincke.de/bilder-beschleunigen/">Bildbehandlung</a>, werden der Web-Designerin auch 
  die <a href="https://karsten-reincke.de/verwischte-primaere-beitragsbilder/">verwischten ‘primären Beitragsgilder’</a> 
  auffallen. Sie wird Lösungen <a href="https://karsten-reincke.de/groessere-bild-quadrate/">ausprobieren</a> 
  und <a href="https://karsten-reincke.de/weniger-verwischte-bilder/">verfeinern</a>. Und sie wird sie u.U. 
  auch mit neuen <a href="https://karsten-reincke.de/ganz-ohne-verwischte-bilder/">HTML‑5 Techniken</a> angehen. 
  Denn damit wird eine ausgefallenere <a href="https://karsten-reincke.de/bilder-datenbanken/">Bildstrategie</a> samt 
  integrierter <a href="https://karsten-reincke.de/bilderverzeichnis/">Lizenzerfüllung</a> und das eigene 
  <a href="https://karsten-reincke.de/logos-und-favicons/">Logo</a> erst richtig sinnvoll. Wie auch immer:
  Bilder bringen Farbe ins Leseleben. Zuletzt sollte all das also auch in 
  <a href="https://karsten-reincke.de/farbkonzept">ein eigenes Farbkonzept</a> eingebunden
  sein. Zu dieser Thematik trägt auch dieser Post etwas bei.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_10749" class="footnote">semantisch ist dies wohl eine Abstufung der Wichtigkeit</li><li id="footnote_2_10749" class="footnote"><a href="https://github.com/orgs/bootscore/discussions/749">bootScore sagt</a>, dass es damit der Bootstrap-Richtlinie folgt.</li><li id="footnote_3_10749" class="footnote">Mehr noch: Gefragt danach, welche HTML-Elemente welcher Funktion zugeordnet sind, <a href="https://github.com/orgs/bootscore/discussions/751">empfiehlt bootScore, das einfach auszuprobieren</a>.</li><li id="footnote_4_10749" class="footnote">oder wie auch immer die Funktionsfarbe ‘dark’ gerade definiert ist</li><li id="footnote_5_10749" class="footnote">Das ginge zugegebenermaßen auch einfacher, nämlich mit der Anweisung <code>.card { backgroundcolor: $dark}</code>.</li><li id="footnote_6_10749" class="footnote">wie in u.a. Tabelle demonstriert</li><li id="footnote_7_10749" class="footnote">wie oben vorgeführt</li></ol><p>The post <a href="https://karsten-reincke.de/farbkonzept/">Das eigene Farbkonzept mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/farbkonzept/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ein sauberes Cookie-Management — mit bootScore</title>
		<link>https://karsten-reincke.de/sauberes-cookie-management/</link>
					<comments>https://karsten-reincke.de/sauberes-cookie-management/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Tue, 26 Sep 2023 08:41:00 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9979</guid>

					<description><![CDATA[<p>Einen adäquaten Cookie-Dialog einzublenden ist das eine. Ihm eine echte Bedeutung zu geben, das andere. Denn die Abfrage allein reicht nicht. Wir müssen die Antworten unserer Leserinnen auch auswerten. Wir dürfen ausschließlich solche Cookies auf deren Rechnern ablegen, die zu schreiben sie oder das Gesetz uns erlaubt haben. Ein JavaScript-Funktion, die das gewährleistet, implementiert die [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/sauberes-cookie-management/">Ein sauberes Cookie-Management — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Einen adäquaten Cookie-Dialog einzublenden ist das eine. Ihm eine echte Bedeutung zu geben, das andere. Denn die Abfrage allein reicht nicht. Wir müssen die Antworten unserer Leserinnen auch auswerten. Wir dürfen ausschließlich solche Cookies auf deren Rechnern ablegen, die zu schreiben sie oder das Gesetz uns erlaubt haben. Ein JavaScript-Funktion, die das gewährleistet, implementiert die Semantik des Cookie-Dialogs und etabliert ein sauberes Cookie-Management.<span id="more-9979"></span></p>



<p>Das Plugin <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-Cookie-Settings</a> selbst liefert nur die Cookie-Abfrage. <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Wie man die aktiviert</a>, hatte ich bereits beschrieben. Die entsprechende Semantik zu implementieren, sieht <a href="https://bootscore.me/">bootScore</a> als <a href="https://github.com/orgs/bootscore/discussions/559">Aufgabe der jeweiligen Web-Designerin</a>. Hier eine Variante,  die gern allgemein wiederverwendet werden darf:</p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/properly-managed-cookies">en</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Lösung</h2>



<ul class="wp-block-list">
<li>Lade die <a href="https://github.com/js-cookie/js-cookie">JS-Cookie-Bibliothek</a> von z.B. cdnpkg.com herunter und lege sie (entpackt) unter dem Namen   <code>js/js.cookie.min.js</code> in Deinem Child-Theme-Ordner ab.</li>



<li>Erweitere in Deiner Datei <code>functions.php</code> die Funktion  <code>bootscore_child_enqueue_styles()</code> um den Eintrag</li>
</ul>



<pre class="wp-block-code"><code>wp_enqueue_script('js-cookie',get_stylesheet_directory_uri().'/js/js-cookie-min.js',false, '', true););</code></pre>



<ul class="wp-block-list">
<li>Erweitere die Datei <code>js/custom.js</code> Deines Child-Themes so:</li>
</ul>



<pre class="wp-block-code"><code>jQuery(function ($) {

  $(document).ready(function(){
    const bsCookieSettings='bs_cookie_settings';
    const analytics = 'analytics';
    const advertising = 'advertising';
    const analyticDemoCookie='bsAnalyticCookie';
    const advertisingDemoCookie='bsAdvertisingCookie';
    const necessaryDemoCookie='bsNecessaryCookie';
    const demoCookieValue='demo-cookie';

    // alert("adding cookie writing algorithm");
    const bsv=Cookies.get(bsCookieSettings);
    if (bsv) {
      const allowedCookies=JSON.parse(bsv);
      // alert(allowedCookies.level);

      if (allowedCookies.level.includes(analytics)) {
        // alert("writing analytic cookies");
        if (!(Cookies.get(analyticDemoCookie))) { 
          Cookies.set(analyticDemoCookie, demoCookieValue, { expires: 100, path: '/' });
        };
      };
      if (allowedCookies.level.includes(advertising)) { 
        // alert("writing advertising cookies"); 
        if (!(Cookies.get(advertisingDemoCookie))) { 
          Cookies.set(advertisingDemoCookie, demoCookieValue, { expires: 10, path: '/' });
        };
      };
      // alert("writing necessary cookies"); 
      if (!(Cookies.get(necessaryDemoCookie))) { 
        Cookies.set(necessaryDemoCookie, demoCookieValue, { expires: 14, path: '/' });
      };
    };
  });

  // Do your other stuff here

}); // jQuery End</code></pre>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Hintergrund</h2>



<p>Cookies könnten wir <a href="https://www.w3schools.com/js/js_cookies.asp">mit nativem Javascript setzen</a> und evaluieren. Mit fertigen Bibliotheken geht es einfacher. WordPress bringt <a href="https://wpengine.com/resources/how-to-add-jquery-wordpress-theme/">jQuery bereits mit</a>. Und <em>bootScore </em>hat dies schon aktiviert und uns eine Möglichkeit geschaffen, eigene JavaScript-/JQuery-Funktionen in unser <a href="https://bootscore.me/documentation/bootscore-child/#JavaScript">bootScore-Childtheme</a> einzubauen.</p>



<p>Früher gab es für das Cookie-Management ein echtes <a href="https://plugins.jquery.com/cookie">jQuery-cookie</a> Plugin. Das ist mittlerweile archiviert und in eine von jQuery unabhängige Javascript-Bibliothek <a href="https://github.com/js-cookie/js-cookie">js-cookie</a> überführt worden. Um die zu nutzen, laden wir Datei js-cookie-min.js herunter und legen sie im JavaScript-Ordner unseres Child-Themes ab. Außerdem erweitern wir die Funktion <code>bootscore_child_enqueue_styles()</code> in unser Datei <code>functions.php</code> so, dass die Bibliothek <code>js/js.cookie.min.js</code> auch geladen wird.</p>



<p>Den Algorithmus zur Evaluation der Cookie-Settings implementieren wir danach in der Datei <code>js/custom.js</code>. Er wirkt so:</p>



<ul class="wp-block-list">
<li>Zuerst versuchen wir den vom bs-Cookie-Plugin unter dem Namen <code>bs_cookie_settings</code> abgelegten Cookie zu lesen.</li>



<li>Wenn es ihn noch nicht gibt, hat unsere Leserin der Nutzung von Cookies noch nicht zugestimmt. Also dürfen wir noch keine schreiben.((Übrigens auch die technisch notwendigen nicht. Die dürfen wir zwar von gesetzeswegen ablegen, wir müssen unsere Leserin aber zuvor informieren, dass wir das tun. Und dass wir das getan haben, können wir wiederum anhand des Cookies  <code>bs_cookie_settings</code> ‘belegen’. ))</li>



<li>Sobald unsere Leserin den Cookie-Dialog in welchem Umfang auch immer ‘bestätigt’ hat, legt das bs-Cookie-Plugin den Cookie  <code>bs_cookie_settings</code> ab. Sein Wert enthält ein JSON-Objekt: </li>
</ul>



<pre class="wp-block-code"><code>{  "level": 
    [   "necessary",
        "analytics",
        "advertising"
    ],
    "revision":0,
    "data":null,
    "rfc_cookie":false
}</code></pre>



<ul class="wp-block-list">
<li>Das müssen wir also erst parsen lassen, bevor wir — auf JavaScript-Ebene — auf die Liste der erlaubten Cookie-Gruppen via <code>allowedCookies.level</code> zugreifen und über die Methode <code>includes</code> eines Listenobjektes abfragen können, welche der Cookie-Gruppen <em>necessary</em>, <em>analytics</em> und /oder <em>advertising</em> uns unsere Leserin zu schreiben erlaubt hat.</li>



<li>Und zu jeder zugelassen Gruppen schreiben wir dann die entsprechenden Cookies.((wobei wir uns bei den technisch notwendigen Cookies auf die gesetzliche Erlaubnis berufen.))</li>
</ul>



<p>Und ein letzter Tipp noch: JavaScript erzeugt Seiten dynamisch. Gecacht werden die Ergebnisse. Deshalb müssen wir gelengtlich den Cache löschen, um die Ergebnisse unserer Veränderungen sehen zu können. </p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="https://karsten-reincke.de/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, zuletzt muss die Web-Designerin 
  <a href="https://karsten-reincke.de/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> auch 
  rechtliche Vorgaben beachten, seien es die der
  <a href="https://karsten-reincke.de/datenschutz-dsgvo/">DSGVO</a>, die für eine
  <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Cookie-Zustimmung</a> und deren
  <a href="https://karsten-reincke.de/sauberes-cookie-management/">Beachtung</a> oder die zur 
  <a href="https://karsten-reincke.de//">Erstellungen</a> einer
  <a href="https://karsten-reincke.de/datenschutz/">Datenschutzerklärung</a>.
  In diesen Kontext gehören dann auch die Fragen nach dem 
  <a href="https://karsten-reincke.de/bilderverzeichnis/">Zweck</a> eines 
  <a href="https://karsten-reincke.de/bildnachweise/">Bildverzeichnisses</a>, nach einem
  <a href="https://karsten-reincke.de/impressum/">adäquaten Impressum</a> oder nach einer hinreichenden
  <a href="https://karsten-reincke.de/license-compliance/">Open-Source-Lizenzerfüllung</a>.
  Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/sauberes-cookie-management/">Ein sauberes Cookie-Management — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/sauberes-cookie-management/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ein sauberer Cookie-Dialog — mit bootScore</title>
		<link>https://karsten-reincke.de/saubere-cookie-nutzung/</link>
					<comments>https://karsten-reincke.de/saubere-cookie-nutzung/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Fri, 15 Sep 2023 11:44:35 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9887</guid>

					<description><![CDATA[<p>Wir dürfen Cookies nicht einfach so auf die Festplatte einer Leserin schreiben (lassen). Denn die gehört ihr, nicht uns. Für die Cookies, die technisch notwendig sind, hat sie mit dem Abruf unserer Seite zwar konkludent ihr Einverständnis gegeben. Denn sie wollte unseren Blogbeitrag ja lesen. Die anderen Cookies dürfen wir jedoch nur dann auf ihrem [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Ein sauberer Cookie-Dialog — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.e-recht24.de/tracking-cookies/8451-hinweispflicht-fuer-cookies.html">Wir dürfen Cookies nicht einfach so auf die Festplatte einer Leserin schreiben (lassen)</a>. Denn die gehört ihr, nicht uns. Für die Cookies, die technisch notwendig sind, hat sie mit dem Abruf unserer Seite zwar konkludent ihr Einverständnis gegeben. Denn sie wollte unseren Blogbeitrag ja lesen. Die anderen Cookies dürfen wir jedoch nur dann auf ihrem Rechner speichern, wenn unsere Leserin es uns explizit erlaubt hat. Und bevor sie das tut, muss sie abfragen können, was die Cookies tun. Dazu dient uns ein sauberer Cookie-Dialog.<span id="more-9887"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/properly-used-cookies">en</a> ]</div></div></div></div>



<p>Den brauchen wirt nicht selbst zu entwickeln . Denn <a href="https://bootscore.me/">bootScore</a> liefert uns mit seinem Plugin <a href="https://bootscore.me/#download">bsCookie</a> einen <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">konfigurierbaren Dialog</a> auf der Höhe der Zeit:</p>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Lösung</h2>



<ul class="wp-block-list">
<li>Lade <a href="https://bootscore.me/#download">bsCookie</a> herunter.</li>



<li>Installiere die Zip-Datei über das Plugin-Management Deines WordPress-Backends.</li>



<li>Ermittle die Cookies, die Du auf dem Rechner Deiner Leserin installieren willst.((Wir müssen dabei bedenken, dass auch unsere Plugins Cookies ablegen lassen können. Es reicht also nicht, nur nach den entsprechenden JavaScript-Befehlen in unseren eigenen Posts und Pages zu suchen.))</li>



<li>Ordne jeden dieser Cookies der Gruppe ’<em>necessary</em>’((Cookies, die wir dieser Gruppe zuordnen, werden zuletzt auch ohne explizite Zustimmung auf der Festplatte unserer Leserin abgelegt, eben weil sie technisch notwendig sind. So müssen wir notfalls auch beweisen können, dass diese Cookies tatsächlich technisch notwendig sind.)), ‘<em>advertising</em>’ oder ‘<em>analytics</em>’ zu.</li>



<li>Ziehe im Dialog ‘Appearance/Widgets’ ein Widget ‘Customer HTML’ in die Widget-Gruppe <em>Footer‑4</em></li>



<li>Trage dort die Scriptzeilen ein, wie sie die <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bsCookie-Dokumentation</a> offeriert.</li>



<li>Erzeuge für jedes Deiner Plugins in der entsprechenden Sektion einen Eintrag.</li>



<li>Verlinke Deine Datenschutzseite in den Dialog, indem Du <em>#yourprivacypolicy</em> entsprechend ersetzt.</li>



<li>Übersetze die Texte in die Sprache Deiner Site (bzw. erzeuge einen zusätzlichen Eintrag gemäß Deiner Mehrsprachigkeitsstrategie)</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Hintergrund</h2>



<p>Das Schreiben der Cookies über einen Dialog erlauben zu lassen, ist nur die eine Seite der Medaille. Denn Cookies können auch (personen-bezogene) (Wiedererkennungs-) Daten speichern, die auf Serverseite akkumuliert und an externe Stellen weitergereicht werden. Deshalb müssen wir solche Cookies außerdem in unserem <a href="https://karsten-reincke.de/datenschutz/">Datenschutzkonzept</a> erwähnen. Damit unsere Leserin dies auch direkt aus dem Cookie-Zustimmugsdialog heraus ausrufen kann, bietet der <em>bsCookie</em>-Dialogtext einen Link, dessen Wert <em>#yourprivacypolice</em> wir entsprechend (um)setzen dürfen.</p>



<p>Es ist mittlerweile gute Tradition, Cookies funktionsbezogen zu gruppieren und für die Gruppen als solche zu fragen, ob die ihr zugeordneten Cookies lokal abgelegt werden dürfen. Rechtlich notwendig ist so ein Clustern nicht. Wir könnten unsere Leserin die Nutzung von Cookies auch ganz generell erlauben oder ablehnen lassen.((Eine stärkere Granularität liegt aber in unserem Interesse. Denn möchte eine Leserin das eine nicht — z.B. Advertising -, könnte sie das andere — z.B. Analytics — immer noch erlauben. Damit würden wir wenigstens noch einen Teil dessen erfahren, was wir insgesamt zu erfahren hofften.)) Oder wir könnten  jeden einzelnen Cookie an- oder abwählbar machen — und den Dialog damit überfrachten.</p>



<p>Wie dem auch sei: Erstmal müssen wir natürlich wissen, welche Cookies unsere Site schreibt und was diese tatsächlich tun. Welche es sind, können wir uns über die Browser anzeigen lassen. Etwa mittels seines ‘Privacy and Security’-Dialoges. Oder mit Hilfe eines Browser-Plugins((z.B. mit dem <a href="https://cookie-editor.cgagnier.ca/">Cookie Editor</a>)), das direkt für jede aufgerufene Site/Seite anzeigt, welche Cookies von ihr geschrieben worden sind. Was unsere Cookies tun, müssen wir dagegen gesondert ermitteln.</p>



<p>Haben wir diese Cookies dann funktional sortiert, brauchen wir im bsCookie-Dialog nur noch die entsprechenden Gruppen als Sektionen anzulegen und in diese für jedes zugehörige Cookie einen Eintrag zu erzeugen. Für die drei gängigen Gruppen ’necessary’, ‘advertising’ und ‘analytics’ bringt <em>bsCookie</em> die nötigen Codegruppen immer schon mit. Hier reicht es mithin, die Cookies in und mit den Einzeleinträgen zu beschreiben. Gesetzt, wir wollten die drei Cookies <em>bsNec­es­saryCook­ie</em>, <em>bsAdver­tis­ing­Cook­ie</em>, und <em>bsAnal­iz­ing­BCook­ie</em> gesetzeskonform ablegen lassen, müsste der Code für den <em>bsCookie-Dialog</em> so aussehen:</p>



<pre class="wp-block-code"><code>&lt;script&gt;
  // Init
  window.addEventListener('load', function () {

    // obtain plugin
    var cc = initCookieConsent();

    // run plugin with your configuration
    cc.run({
      current_lang: 'de',
      autoclear_cookies: true,
      page_scripts: true,

      languages: {
        'de': {
          consent_modal: {
            title: 'Cookie-Zumstimmung:',
            description: 'Wir nutzen Cookies, um Deine Entscheidungen bei zukünftigen Besuche wiederzuverwenden. Wenn Du auf "Alle akzeptieren" klickst, dürfen wir alle Cookies verwenden, die technisch notwendigen und die funktionell hilfreichen. Wenn Du auf "nur notwendige" klickst, untersagst Du uns, die  funktionell hilfreichen Cookies zu verwenden. Eine feinere Auswahl bieten Dir unsere expliziten &lt;a data-bs-toggle="modal" href="#bs-cookie-modal"&gt;Cookie-Einstellungen&lt;/a&gt;.',
            primary_btn: {
              text: 'alle akzeptieren',
              role: 'accept_all'
            },
            secondary_btn: {
              text: 'nur notwendige',
              role: 'accept_necessary'
            }
          },

          settings_modal: {
            title: 'Cookie-Einstellungen',
            save_settings_btn: 'Auswahl sichern',
            accept_all_btn: 'alle akzeptieren',
            reject_all_btn: 'nur notwendige',
            close_btn_label: 'schließen',
            cookie_table_headers: [
              { col1: 'Name' },
              { col2: 'Domain' },
              { col3: 'Verfall' },
              { col4: 'Beschreibung' }
            ],
            blocks: [
              {
                title: 'Cookie-Nutzung',
                description: 
'Wir verwenden Cookies, um zentrale Funktionen unserer Website bereitzustellen und Dein Leseerlebnis zu verbessern. Du kannst für jede Cookie-Gruppe entscheiden, ob Du sie zulässt oder nicht. Weitere Einzelheiten zu Cookies und anderen sensiblen Daten findest Du in unserem &lt;a href="http://karsten-reincke.de/datenschutz"&gt;Datenschutzkonzept&lt;/a&gt;.'
              }, {
                title: 'Notwendige',
                description: 
'Diese Cookies sind essentiell für unsere Website. Ohne sie würde die Site nicht richtig funktionieren.',
                toggle: {
                  value: 'necessary',
                  enabled: true,
                  readonly: true          // cookie categories with readonly=true are all treated as "necessary cookies"
                },
                cookie_table: [
                  {
                    col1: 'bs_cookie_settings',
                    col2: 'bootScore.me',
                    col3: 'wird gelöscht wenn Deine Session beendet wird',
                    col4: 
'Darin speichert bootScore bzw. das Plugin "bsCookies" Deine Cookie-Einstellungen',
                    is_regex: false
                  },
                  {
                    col1: 'bsNec­es­saryCook­ie', 
                    col2: 'http://karsten-reincke.de/',
                    col3: 'nach 100 Tagen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  },                 
                ]
              }, {
                title: 'Analytics',
                description: 
'Diese Art der Cookies erlaubt es uns, Deine Entscheidungen beim nächsten Mal wiederzuverwenden.',
                toggle: {
                  value: 'analytics',     // your cookie category
                  enabled: false,
                  readonly: false
                },
                cookie_table: [           // list of all expected cookies
                  {
                    col1: 'bsAnal­iz­ing­Cook­ie',         
                    col2: 'http://karsten-reincke.de/',
                    col3: 'nach 10 Tagen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  }
                ]
              }, {
                title: 'Advertising',
                description: 
'Solche Cookies vermerken, wie Du unsere Website verwendest, welche Seiten Du besuchts und welche Links Du anklickst. Alle Informationen sind anonymiziert und können nicht benutzt werden, um Dich zu identifizieren.',
                toggle: {
                  value: 'advertising',
                  enabled: false,
                  readonly: false
                },
                cookie_table: [             // list of all expected cookies
                  {
                    col1: 'bsAdver­tis­ing­Cook­ie',
                    col2: 'http://karsten-reincke.de/',
                    col3: '2 Wochen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  }
                ]
              }, {
                title: 'Weitere Informationen',
                description: 
'Bei weiteren Fragen zu unserem Daten-Management, kontaktiere &lt;a href="http://karsten-reincke.de/impressum"&gt;uns&lt;/a&gt; einfach.',
              },

            ]
          }

        }
      }

    });
  });
&lt;/script&gt;</code></pre>



<p>Die Informationen in den Cookie-Zustimmungsdialogs einzubauen, ist das eine. Seinen Code zu aktivieren, das andere. Den angepassten <em><a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-cookie-settings</a></em>-JavaScript-Code tragen wir dazu in ein <em>Custom-HTML-Element</em> ein, das wir dem Widget <em>Footer 4</em> hinzugefügt haben. Prinzipiell könnten wir das <em>Custom-HTML-Element</em> auch in andere Widgets einbetten. <em>bsCookie</em> schlägt <em>Footer 4</em> vor, weil der JavaScript-Code so eher am Ende einer Seite eingebettet und damit direkt ausgeführt wird. Wie auch immer, der Cookie-Zustimmungsdialog wird dann beim Aufruf all der Seiten angezeigt, deren Templates den <em>Footer 4</em> verwenden. Das Problem der ‘Deep-Links’((Es reicht nicht aus, nur unsere Einstiegsseite den Zustimmungsdialog anzeigen zu lassen. Denn gelegentlich reichen unsere Leserinnen auch Links auf tiefer eingebettete Seiten herum. Unsere Site muss auch in deisen Fällen erst um Erlaubnis bitten, bevor sie die Cookies ablegt.)) ist also gelöst, wenn jede Seite ein Template verwendet, das den entsprechenden JavaScript-Code enthält.</p>



<p>Blieben uns noch drei letzte Aufgaben:</p>



<ul class="wp-block-list">
<li>Zum ersten werden wir unseren Zustimmungsdialog oft auch sprachlich anpassen wollen. Auch das geht über die ‘Umprogrammierung’ des erwähnten JavaScript-Codes.</li>



<li>Über <a href="https://karsten-reincke.de/farbkonzept/">das funktionalen Farbkonzept von Bootscore/bootStrap</a> ist der Cookie-Dialog auf ‘Warning’ eingestellt. Wer ihn dennoch anders gestalten will, kann das in ihrer Datei <code>_bscore_custom.scss</code> so tun: <pre class="wp-block-code"><code>// design the bsCookie-Dialog<br>#c-inr {<br>  border-color: darkblue;<br>  border-width: 2px;<br>  border-style: solid;<br>  background-color: #eef;<br>  color: blue($color: #000000);<br>  padding: 5px;<br>}<br><br>#c-p-bn {<br>  border-color: darkblue;<br>}<br><br>#c-s-bn {<br>  border-color: darkblue;<br>}<br></code></pre></li>



<li>Zum dritten müssen wir die <a href="https://karsten-reincke.de/ein-sauberes-cookiemanagement-mit-bootscore/">Semantik des Cookie-Zustimmungsdialoges implementieren</a>. Wenn wir mehr als nur reden wollen, müssen wir unseren ‘Schreibe-Cookie-JavaScript-Code’ so anlegen, dass er ohne Zustimmung nur die technischen notwendigen Cookies schreibt und dass er ansonsten nur die Cookies aus den Gruppen ablegt, für die eine Zustimmung vorliegt.</li>
</ul>



<p>Diesen letzten Punkt werde ich <a href="https://karsten-reincke.de/ein-sauberes-cookiemanagement-mit-bootscore/">in einem gesonderten Post aufgreifen</a> …</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="https://karsten-reincke.de/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, zuletzt muss die Web-Designerin 
  <a href="https://karsten-reincke.de/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> auch 
  rechtliche Vorgaben beachten, seien es die der
  <a href="https://karsten-reincke.de/datenschutz-dsgvo/">DSGVO</a>, die für eine
  <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Cookie-Zustimmung</a> und deren
  <a href="https://karsten-reincke.de/sauberes-cookie-management/">Beachtung</a> oder die zur 
  <a href="https://karsten-reincke.de//">Erstellungen</a> einer
  <a href="https://karsten-reincke.de/datenschutz/">Datenschutzerklärung</a>.
  In diesen Kontext gehören dann auch die Fragen nach dem 
  <a href="https://karsten-reincke.de/bilderverzeichnis/">Zweck</a> eines 
  <a href="https://karsten-reincke.de/bildnachweise/">Bildverzeichnisses</a>, nach einem
  <a href="https://karsten-reincke.de/impressum/">adäquaten Impressum</a> oder nach einer hinreichenden
  <a href="https://karsten-reincke.de/license-compliance/">Open-Source-Lizenzerfüllung</a>.
  Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Ein sauberer Cookie-Dialog — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/saubere-cookie-nutzung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CC-BY Bildertrolle</title>
		<link>https://karsten-reincke.de/cc-by-trolls/</link>
					<comments>https://karsten-reincke.de/cc-by-trolls/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sat, 26 Feb 2022 14:31:53 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Bilder]]></category>
		<category><![CDATA[FOSS]]></category>
		<guid isPermaLink="false">http://127.0.0.1/kr/?p=3987</guid>

					<description><![CDATA[<p>Präsentationen ohne Bilder nerven. Darum bedienen wir uns so gern aus dem Internet mit seinen vielen schönen Fotos. Nur ist es eben nicht einfach, fremde Bilder legal in die eigene Präsentation einzufügen. Und auf die Verletzung solcher Pflichten bei freien Bildern zielt ein neuer Typ von Troll, der Bildertroll. Wenn wir Bilder aus dem Internet [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/cc-by-trolls/">CC-BY Bildertrolle</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/06/troll-600x337-1.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/06/troll-600x337-1-300x169.png" alt="A Troll" width="120"></a></figure></div>



<p>Präsentationen ohne Bilder nerven. Darum bedienen wir uns so gern <a href="https://karsten-reincke.de/bilder-datenbanken/">aus dem Internet</a> mit seinen vielen schönen Fotos. Nur ist es eben nicht einfach, fremde Bilder legal in die eigene Präsentation einzufügen. Und auf die Verletzung solcher Pflichten bei freien Bildern zielt ein neuer Typ von Troll, der <em>Bildertroll</em>.<span id="more-3987"></span></p>


<div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/cc-by-trolls">en</a> ]</div></div></div></div>



<div style="height:17px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Wenn wir Bilder aus dem Internet nutzen, müssen wir die Urheberrechte der Malerinnen und Fotografinnen beachten. Genau, wie wir sonst Lizenzgebühren an die Patentinhaberinnen zahlen müssen, deren Erfindungen wir nutzen. Oder wie wir die in den Lizenzen genannten Bedingungen tatsächlich umsetzen müssen, wenn wir Open-Source-Software nutzen. Nun ist — nach den Patent- und Open-Source-Trollen — jüngst einer neuer Typ entstanden, der ‘copyleft-’ oder ‘Bildertroll’.[<a href="#FN147">1</a>] Es ist gut zu wissen, wie solche Trolls arbeiten und wie wir uns vor ihnen schützen können.</p>



<p>Oft werden freie Bilder unter einer <em>Creative-Commons-Lizenz</em> veröffentlicht. Diese ähneln den <em>Open-Source-Lizenzen</em>: Beide folgen dem Prinzip ‘Paying by Doing’. Anstatt Geld dafür zu bezahlen, die Nutzungsrechte zu bekommen, muss frau hier bestimmte Dinge tun. Welche Rechte sie bekommt und was genau sie dafür tun muss, hängt von der jeweiligen Lizenz ab. Im <em>Creative Commons</em> Bereich gibt es ein recht komplexes System verschiedener Lizenzen[<a href="#FN2">2</a>]. Aber nahezu jede davon hat eine ‘BY’-Klausel, die festlegt, dass die Nutzerin den Namen der Malerin oder Fotografin und die Lizenz angeben und einen Downloadlink zum Photo und zum Lizenztext mitliefern muss.[<a href="#FN3">3</a>]</p>



<p>Diese BY-Bedingungen seien — wie der Entdecker der <em>Bildertrolle</em> sagt — ein “set of administrative requirements that are easy to get wrong”.[<a href="#FN147">4</a>] Und genau das ist die erste Zutat, die ein gewinnbringender Troll benötigt: je leichter es ist, solche Bedingungen zu verfehlen, desto größer die Zahl potentieller Opfer.</p>



<p>Die zweite Zutat besteht darin, dass frühere Versionen der CC-Lizenzgebühren — wie etwa die <em>CC-BY 2.0</em>- oder die <em>CC-BY 3.0</em>-Lizenz — eine “Termination”-Klausel enthalten: “This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License.”[<a href="#FN5">5</a>] Das besagt, dass Du in dem Moment die Nutzungsrechte verlierst, wo Du eine der gestellten Bedingungen unzureichend erfüllst.</p>



<p>Man kann die Brisanz dieser Klausel schon daran erkennen, dass die <em>CC-BY 4.0</em>-Lizenz zwar auch eine solche “Termination”-Klausel enthält, dass sie aber zusätzlich die Möglichkeit eröffnet, Lizenzverletzungen innerhalb eines bestimmten Zeitraums auszubessern: Diese Lizenz sagt nämlich, dass die abgesprochenen Rechte “[…] reinstates automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation […]”.[<a href="#FN6">6</a>]</p>



<p>Als dritte Zutat für sein legales, aber unangenehmes Geschäft benötigt der ‘Bildertroll’ eine Methode, im großen Stil die Nutzerinnen seiner Bilder zu finden und deren missglückte Kennzeichnungen zu analysieren. Die automatisierte Bildersuche im Internet ist eine solche mittlerweile gut etablierte Technik.</p>



<p>Und als vierte Zutat benötigt der <em>Bildertroll</em> einen Rechtsraum, der ihm große Ausgleichszahlungen für die Verletzung von Nutzungsrechten garantiert — was wenigstens in den USA gang und gäbe ist.</p>





<p>Wie also nutzt ein <em>Bildertroll</em> diese Zutaten? Er muss eigentlich nur hübsche Bilder fotografieren und sie in einer gern genutzten Bilddatenbank unter einer CC-Lizenz mit ‘Termination’-Klausel veröffentlichen. Damit ist der “honeypot” angerichtet. Denn nun braucht der <em>Bildertroll</em> nur noch im Netz nach seinen eigenen Bildern zu crawlen und dort, wo er sie findet, zu analysieren, ob die Nutzerinnen die Nutzungsbedingung richtig erfüllt haben. Wenn nicht, kann er ein juristisches Verfahren gegen sie eröffnen. Und zumindest in den USA sprechen wir hier von einem gesetzlichen Schadenersatz (“statutory damages”) bis zu $150.000,–.[<a href="#FN147">7</a>]</p>





<p>Was können wir also tun, um uns vor Angriffen schützen, die zwar legal sind, aber irgendwie auch dem Geist freier Kultur und freier Software entgegenstehen?</p>



<ul class="wp-block-list">
<li>Der beste Weg zum gelungenen Selbstschutz ist zu wissen, unter welcher Lizenz ein Bild veröffentlicht ist, was sie als Gegenleistung erwartet, und diese Bedingungen dann gewissenhaft zu erfüllen.</li>



<li>Eine gute Strategie ist auch, sich auf CC0 lizenzierte Bilder[<a href="#FN8">8</a>] zu fokussieren, wie sie etwa unter pxhere.com[<a href="#FN9">9</a>] angeboten werden. Denn eine Lizenz, die expressis verbis nichts fordert, kann auch nicht dazu missbraucht werden, Dich juristisch zu bedrängen.</li>



<li>Eine etwas schwächere Absicherung bietet der Weg, vorrangig CC-BY-xyz 4.0 lizenzierte Bilder weiter zu verwerten.[<a href="#FNA">A</a>] Zwar muss frau die Bedingungen auch hier gründlich und vollständig erfüllen, aber sie hat doch wenigstens die Möglichkeit, nachzubessern, bevor sie in einen Rechtsstreit verwickelt wird.</li>



<li>Und wenn frau doch CC-BY-xyz 3.0 oder früher lizenzierte Bilder verwerten will — und es gibt viele gute so veröffentlichte Bilder -, dann muss sie die Forderungen der Lizenz selbst lesen und erfüllen, nicht nur die kondensierte Zusammenfassung, die die Creative Commons Organisation anbietet.</li>
</ul>



<p>Bildurheberrechte jedoch komplett zu ignorieren und etwas aus dem Internet einfach so zu abzugreifen, ist der sicherste Weg, in einen Rechtsstreit verwickelt zu werden — genauso wie die Verwendung von Open-Source-Software ohne Erfüllung der Lizenzanforderungen oder die Verwendung patentierter Techniken ohne Zahlung der Lizenzgebühren.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="https://karsten-reincke.de/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="https://karsten-reincke.de/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="https://karsten-reincke.de/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="https://karsten-reincke.de/jniz/">einzeln</a> oder <a href="https://karsten-reincke.de/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="https://karsten-reincke.de/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="https://karsten-reincke.de/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Software</a>, 
  <a href="https://karsten-reincke.de/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="https://karsten-reincke.de/cc-by-trolls/">Trends</a> benennen und <a href="https://karsten-reincke.de/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="https://karsten-reincke.de/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="https://karsten-reincke.de/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="https://karsten-reincke.de/oscad/">kleinere Tools</a> gießen und in <a href="https://karsten-reincke.de/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>



<ul class="wp-block-list">
<li><a name="FN147"></a>[1], [4], [7]:  cf. <a href="https://doctorow.medium.com/a-bug-in-early-creative-commons-licenses-has-enabled-a-new-breed-of-superpredator-5f6360713299">https://doctorow.medium.com/a‑bug-in-early-creative-commons-licenses-has-enabled-a-new-breed-of-superpredator-5f6360713299</a>. This article reports on aspects that <em>Cory Doctorow</em> has outlined first. He talks about ‘copyleft trolls’ probably for indicating, that other than pictures can be used to establish such an attack. But I think that using pictures inadequately is the most danger.</li>



<li><a name="FN2"></a>[2]: cf. <a href="https://creativecommons.org/about/cclicenses/">https://creativecommons.org/about/cclicenses/</a></li>



<li><a name="FN3"></a>[3]: cf. <a href="https://creativecommons.org/licenses/by/4.0/legalcode">https://creativecommons.org/licenses/by/4.0/legalcode</a>, Section 3 Attribution. It is worth to know the CC organization provide summaries that condense these conditions to the one sentence ‘Credit must be given to the creator’ (cf. <a href="https://creativecommons.org/licenses/by/3.0/">https://creativecommons.org/licenses/by/3.0/</a>). Hence, you are not free to acknowledge the author just as you want.</li>



<li><a name="FN5"></a>[5]: cf. <a href="https://creativecommons.org/licenses/by/2.0/legalcode">https://creativecommons.org/licenses/by/2.0/legalcode</a> or <a href="https://creativecommons.org/licenses/by/3.0/legalcode">https://creativecommons.org/licenses/by/3.0/legalcode</a></li>



<li><a name="FN6"></a>[6]: cf. <a href="https://creativecommons.org/licenses/by/4.0/legalcode">https://creativecommons.org/licenses/by/4.0/legalcode</a></li>



<li><a name="FN8"></a>[8]: cf. <a href="https://creativecommons.org/publicdomain/zero/1.0/">https://creativecommons.org/publicdomain/zero/1.0/</a></li>



<li><a name="FN9"></a>[9]: cf. <a href="https://pxhere.com/en/license">https://pxhere.com/en/license</a></li>



<li><a name="FNA"></a>[A]: cf. <a href="https://creativecommons.org/licenses/by/4.0">https://creativecommons.org/licenses/by/4.0</a></li>
</ul>
<p>The post <a href="https://karsten-reincke.de/cc-by-trolls/">CC-BY Bildertrolle</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/cc-by-trolls/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Die Corona Warn App als Open Source Software</title>
		<link>https://karsten-reincke.de/cwa/</link>
					<comments>https://karsten-reincke.de/cwa/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 11:00:00 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[FOSS]]></category>
		<guid isPermaLink="false">http://127.0.0.1/kr/?p=2767</guid>

					<description><![CDATA[<p>Heute zeigte sich die CWA — die Corona-Warn-App — der Öffentlichkeit. Sie gibt ein positives Bild. Das sagen selbst Spiegel und Welt. Die deutsche Regierung wollte sie als Open-Source-Software veröffentlichen, um die Akzeptanz bei der Bevölkerung zu erhöhen. Trotzdem gibt es noch einige Skepsis. Ich möchte ein paar spezielle Bedenken kommentieren: Zweitens sagen manche, das [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/cwa/">Die Corona Warn App als Open Source Software</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute zeigte sich die CWA — die Corona-Warn-App — der Öffentlichkeit. Sie gibt ein positives Bild. Das sagen selbst  <a href="https://www.spiegel.de/netzwelt/apps/coronavirus-was-sie-ueber-die-warn-app-wissen-sollten-a-b823e18d-d235-42d5-8516-47015cda6c8b">Spiegel</a> und <a href="ttps://www.welt.de/wirtschaft/webwelt/article209655419/Corona-Warn-App-im-Test-Funktion-Design-Leistung-was-kann-das-Programm.html">Welt</a>. Die deutsche Regierung wollte sie als Open-Source-Software veröffentlichen, um die Akzeptanz bei der Bevölkerung zu erhöhen. Trotzdem gibt es noch einige Skepsis. Ich möchte ein paar spezielle Bedenken kommentieren:<span id="more-2767"></span></p>


<div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/cwa">en</a> ]</div></div></div></div>



<div style="height:27px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><em>Gelegentlich höre ich, die Corona-Warn-App sei gar keine echte Open-Source-Software. Denn sie nutze ja die nativen Google-/Android- bzw. Apple-/iOS- Funktionen mit proprietären Anteilen. </em><strong>Das zu behaupten, ist formal und inhaltlich nicht adäquat:</strong>
<ul class="wp-block-list">
<li><a href="https://opensource.org/">Open-Source-Software</a> ist, was unter einer <a href="https://opensource.org/licenses/alphabetical">Open-Source-Lizenz </a>veröffentlicht ist. Und was eine Open Source Lizenz ist, ist <a href="https://opensource.org/osd">von der Open-Source-Initiative definiert</a>. Die Corona Warn App wird nachweislich unter der <a href="https://github.com/corona-warn-app/cwa-documentation/blob/master/LICENSE">Apache-v2 Lizenz </a>veröffentlicht.</li>



<li>Die ‚Open-Source-Haftigkeit‘ einer Software ist schon seit R. Stallmann völlig unabhängig davon, auf welchem (proprietären) Betriebssystem sie läuft. Zu seiner frühen Zeit ging es noch um die Unix-Derivate. Die kamen mit mehr oder minder geschlossenen Basisbibliotheken daher und führten die Open-Source-Software als Prozess aus. Wer Open-Source wirklich nur das nennen will, was in einem gänzlich freien Stack von Open-Source-Software genutzt wird, scheitert damit in der Regel schon am BIOS.</li>
</ul>
</li>
</ul>


<ul>
<li><em>Zweitens sagen manche, das System sei <span style="color: red;">nicht vertrauenswürdig</span> (weil eben doch Daten zur Regierung kommen).</em><strong> Dem stehen die <span style="color: #008800;">drei Prinzipien der Offenheit , Freiwilligkeit und der Wahrung der Anonymität</span> entgegen</strong>:
<ul>
<li>Ich selbst entscheide ja, ob ich die App installiere oder nicht. Wenn ich sie installiere, plottet die darunter liegende iOS-/Android-Funktionen per Bluetooth mit, welche anderen Handies ‚in der Nähe‘ sind. D.h. auf meinem Handy entsteht eine Liste der Identifikatoren der anderen Handys – aber eben nur auf meinem Handy. So, wie meine Handy-ID umgekehrt in den Listen der anderen Handys auftaucht.</li>
<li>Jeder kann anhand des offen gelegten Codes (Apps, Server, Verification System) alles überprüfen, insbesondere, dass keines der Programme diese Identifikatoren an Dritte z.B. einen Regierungsserver weitergibt. Sie bleiben auf dem entsprechenden Handy.</li>
<li>Ich selbst entscheide außerdem, ob ich, wenn ich erkranke, meine Erkrankung kundtue. Wenn ich das tue, wird über einen Scancode gewährleistet, dass ich nur als wirklich Getesteter mein Ergebnis in das System eingebe.</li>
<li>Wenn ich mich oute, steht jedoch nur mein Handyidentifier online zum Abruf bereit, nicht meine Daten.</li>
<li>Ferner entscheide ich selbst, ob ich mir mehr oder minder regelmäßig vom Server die Handy-Identifikatoren der Erkrankten abhole und LOKAL auf meinem Handy mit den Handy-Identifikatoren meiner ‚Begegnungen‘ vergleichen lasse.</li>
<li>Es gibt an keiner Stelle eine Verknüpfung meiner Personendaten mit meinem Handy-Identifier. Jeder kann im Code überprüfen, dass das System das NICHT tut. Und die einzigen, die das sonst noch tun könnten, wären Apple und Google. Dazu hätten sie aber böswillig Schadcode in ihre Basisbibliotheken einbauen müssen. Und mit der amerikanischen und/oder deutschen Regierung ein geheimes technisches Austauschsystem aufsetzen müssen. Liebe Verschwörungstheoretiker: Hätten die Firmen das tun wollen, gäbe es auf den Geräten einfachere, effektivere und kostengünstigere Möglichkeiten, so etwas umsetzen.</li>
</ul>
</li>
</ul>


<ul class="wp-block-list">
<li><em>Und schließlich vermuten einige, die Corona Warn App werde <font color="red">später heimlich</font> und unter der Hand doch noch <font color="red">in ein staatliches Trackingsystem umgebaut</font>.</em><strong><font color="#008800">Das wird aber nicht funktionieren</font></strong>:
<ul class="wp-block-list">
<li>Der Quellcode steht öffentlich zur Verfügung. Wollte man also später eine veränderte ‚Version‘ heimlich in Verkehr bringen, müssten die Apps zuletzt doch wieder in die offiziellen Stores eingepflegt werden – und zwar unter Wahrung der offiziellen Releasenummern. </li>



<li>Das wäre nicht geheim zu halten: Irgendjemand würde bestimmt einmal die Apps aus dem offiziellen Repo kompilieren und – wenigstens von der Größe her – mit den auf dem Handy installierten vergleichen. Gäbe es dort signifikante Abweichungen – und die wird es geben, wenn man in die gute Version heimlich geheimen Schadcode einpflegen würde – gäbe es einen Aufschrei.</li>
</ul>
</li>
</ul>



<p>Langer Rede kurzer Sinn: Wir dürfen dieser Arbeit vertrauen. Und wir sollten sie benutzen. Das schützt unser Gesundheitssystem vor einer Überlastung (während der 2. Welle).</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-heart-pulse"></i> Und in welchem größere Zusammenhang …</h5> 
  <p class="myPageContext">… steht dieser Text? Nun, <a href="https://karsten-reincke.de/kreincke/">mein Leben</a> 
  ist eingebettet in <a href="https://karsten-reincke.de/skills/">freie Software</a>, 
  <a href="https://karsten-reincke.de/category/lovlyak/">Natur</a> und <a href="https://karsten-reincke.de/workshops/">Musik</a>. 
  Manchmal finde ich da abseitigere Wege und <a href="https://karsten-reincke.de/cwa/">Tools</a>, die es trotzdem wert 
  sind, geteilt zu werden. Und sei es nur mit meinem vergesslichen zukünftigen ‘ich’. Dem ich gerne immer 
  wieder einmal <a href="https://karsten-reincke.de/strato-wordpress-per-ssh/">ein Strato über die Shell</a> ans Herz lege. 
  Oder <a href="https://karsten-reincke.de/atom-ubuntu/">passend</a> 
  <a href="https://karsten-reincke.de/atom-and-vim/">erweiterte</a> <a href="https://karsten-reincke.de/vscodium/">Editoren</a>. 
  Oder uralte <a href="https://karsten-reincke.de/gtgt/">Vorarbeiten</a>.
  Manchmal möchte ich dieses ‘ich’ aber auch nur an <a href="https://karsten-reincke.de/kippasolidaritaet/">Haltungen</a>, 
  <a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Standpunkte</a> und 
  <a href="https://karsten-reincke.de/genderismus/">Einstellungen</a> erinnern. 
  Damit ich nicht hinter mich zurückfalle. Denn gesagt ist gesagt. 
  Darum geht es auch in hier.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/cwa/">Die Corona Warn App als Open Source Software</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/cwa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GPL lizenzierte LilyPond-Snippets — und ihre Nebenwirkungen</title>
		<link>https://karsten-reincke.de/lilypond-gpl/</link>
					<comments>https://karsten-reincke.de/lilypond-gpl/#comments</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Tue, 29 Oct 2019 19:32:43 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Musikwissenschaft]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Lizenzierung]]></category>
		<guid isPermaLink="false">http://127.0.0.1/kr/?p=2405</guid>

					<description><![CDATA[<p>Dieser Artikel geht ungewollten Seiteneffekten nach: Er beschreibt, warum es suboptimal ist, GPL lizenzierte LilyPond-Snippets zu distribuieren, selbst wenn man — wie ich es tue — gerne Freie- und Open-Source-Software erstellt, verteilt und verwendet. Der Seiteneffekt ist überraschenderweise der Copyleft-Effekt der GPL: Beginnen wir mit einigen hoffentlich unbestrittenen Punkten: Das Programm ‘LilyPond’ ist unter der [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/lilypond-gpl/">GPL lizenzierte LilyPond-Snippets — und ihre Nebenwirkungen</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/05/harmonyli-ly-logo-160x160-1.png" alt class="wp-image-6811" width="122" height="122" srcset="https://karsten-reincke.de/wp-content/uploads/2023/05/harmonyli-ly-logo-160x160-1.png 160w, https://karsten-reincke.de/wp-content/uploads/2023/05/harmonyli-ly-logo-160x160-1-150x150.png 150w" sizes="(max-width: 122px) 100vw, 122px"></figure>
</div>


<p>Dieser Artikel geht ungewollten Seiteneffekten nach: Er beschreibt, warum es suboptimal ist, <a href="https://karsten-reincke.de/harmonyli-ly/">GPL lizenzierte LilyPond-Snippets</a> zu distribuieren, selbst wenn man — wie ich es tue — gerne Freie- und Open-Source-Software erstellt, verteilt und verwendet. Der Seiteneffekt ist überraschenderweise der Copyleft-Effekt der GPL:<span id="more-2405"></span></p>


<div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/lilypond-gpl">en</a> ]</div></div></div></div>



<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Beginnen wir mit einigen hoffentlich unbestrittenen Punkten: Das Programm ‘LilyPond’ ist unter der GPLv3 lizenziert [⇒ 1]. Es will “schöne Noten erstellen” [⇒ 2]. Zu diesem Zweck nimmt es eine Datei, die die darzustellenden Noten beschreibt, und zwar in einer LilyPond spezifischen Beschreibungssprache. Und es erzeugt daraus den eigentlichen Notentext — als PDF, PNG etc:</p>


<div class="wp-block-image"><figure class="aligncenter size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/05/tristan-chord.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/05/tristan-chord.png" alt="Tristan Chord" width="360"></a></figure></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>LilyPond is a compiled system: it is run on a text file describing the music. The resulting output is viewed on-screen or printed. In some ways, LilyPond is more similar to a programming language than graphical score editing software. [⇒ 3]</p>
</blockquote>



<p>Die LilyPond-Beschreibungssprache ist also eine Programmiersprache (ausgeführt und interpretiert vom Programm LilyPond). Das Schreiben von Musik für LilyPond ist Programmierung. LilyPond ist ein Programmiersystem wie PHP‑, PYTHON- oder BASH: Der Interpreter (die PHP‑, Python‑, Bash- oder eben die LilyPond-Engine) nimmt ihren Eingabecode und erzeugt daraus eine neue Ausgabe. Solche (Open Source-basierten) Engines werden häufig unter anderen Lizenzen freigegeben als der Programmiercode, den sie ausführen. Beispielsweise ist PHP unter der PHP-Lizenz lizenziert, es gibt jedoch viele PHP-Programme, die unter der MIT‑, der BSD- oder sogar der LGPL-Lizenz lizenziert sind.</p>



<p>Dass dem auch bei LilyPond so ist, zeigt das LilyPond-Repository  [⇒ 4]:</p>



<ul class="wp-block-list">
<li> Es enthält die Datei COPYING, die eine Kopie der GPLv3 ist.</li>



<li>Es enthält eine Datei mit dem Namen LICENSE, die besagt, dass LilyPond unter der GPLv3 lizenziert sei.</li>



<li>Es enthält eine Datei mit dem Namen LICENSE.Documentation, aus der hervorgeht, dass alle Dokumenteingaben unter die GNU Free Documentation License fallen, allerdings mit Ausnahme der Dateien im Verzeichnis ’snippets’, diese seien ‘Public Domain’.</li>
</ul>



<p>Daraus können wir Folgendes ableiten:</p>



<ol class="wp-block-list">
<li>LilyPond selbst ist unter den Bedingungen der GPL lizenziert: Sie dürfen es ausführen, untersuchen, modifizieren und weitergeben. Wenn Sie jedoch eine (geänderte) Instanz weitergeben, müssen Sie ihrem ‘Paket’ den Lizenztext, eine Liste der Urheberrechtsinhaber, den Quellcode und einige andere Compliance Artefakte hinzufügen.</li>



<li>Die GPLv2/v3 sagt nirgendwo, dass die Eingabedateien (in unserem Fall: die LilyPond encodierten Noten) oder die Ausgabedateien (in unserem Fall: pdf, png, …) ebenfalls unter den Bedingungen der GPLv3 verteilt werden müssen.</li>



<li>Außerdem verlangen die LilyPond-Urheberrechtsinhaber an keiner Stelle, dass die Eingabe- und Ausgabedateien auch unter der GPL freizugeben sind (was sie — dem Vorbild einiger Codegeneratoren folgend — hätten tun könnten).</li>



<li>Darüber hinaus wissen und akzeptieren die Urheberrechtsinhaber von LilyPond nachweisbar, dass die LilyPond-Eingabedateien nicht automatisch durch den “Starken Copyleft Effekt” der GPL erfasst werden. Andernfalls hätten sie keine Snippets in ihr Repository einbetten und zugleich sagen sagen können, dass diese Public Domain seien.</li>
</ol>



<p>So können wir allgemein folgern, dass die LilyPond-Eingabe- und Ausgabedateien aus der Sicht von LilyPond und seinen Entwicklern anders lizensiert werden dürfen, als LilyPond selbst.</p>



<p>Welche Lizenz sollte man also für seine LilyPond-Schnipsel wählen? Es gibt zwei Vorbilder:</p>



<ol class="wp-block-list">
<li>In  einem LilyPond Snippets Repository werden bereits wiederverwendbare Snippets gehostet. Laut LSR fallen all diese Snippets in die ‘Public Domain’ [⇒ 5] </li>



<li>Angeboten wird ferner eine ‘Open LilyPond Library’. [⇒ 6] Deren Homepage  ist größtenteils ein Website-Skelett. Es heißt dort nur, “openLilyLib” sei eine Erweiterungsbibliothek für die Musiknotationssoftware GNU LilyPond. [⇒ 7]  Unter der Github Organisation “openlilylib” findet man dann das zentrale Repository “oll-core”, das sich als “the heart of openLilyLib” vorstellt und allgemeine Funktionen anbietet, die jedes “openLilyLib”-Paket verwenden müsse. [⇒ 8]</li>
</ol>



<p>Obwohl dieses openLilyLib Repository keine Datei mit dem Namen COPYING (mit dem Text der GPL als Inhalt) und auch keine Datei LICENSE oder LICENSING enthält, sagt der Header der zentralen Quellcodedatei package.ily klar, dass “openLilyLib’ freie Software sei und unter den Bedingungen der GNU General Public License weitergegeben und / oder modifiziert werden könne [⇒ 9]. Dies drückt den Willen der Entwickler und der Copyright Owner aus, der von allen Benutzern der openLilyLib  respektiert werden muss.</p>



<p><strong>Leider hat das Model, GPLv3 lizensierte LilyPond-Schnipsel anzubieten, hat einige sehr unattraktive und schmerzhafte Folgen</strong>:</p>



<p>Wir wissen bereits, dass der LilyPond-Code selbst Software ist. Solche Schnipsel werden mit dem Befehl <code>include "ABC.ly"</code> in den Hauptcode eingebunden. Oder sie werden in den eigenen LilyPond-Musikcode hineinkopiert. Beides triggert den  Starken Copyleft-Effekt der GPL [⇒ A, §5]: Wenn ich einen Teil des GPL-lizenzierten Codes mittels eines Funktionsaufrufes von meinem Code aus verwende (anstatt diesen Code selbst zu schreiben) oder wenn meine Datei den Fremdcode gar selbst enthält, dann hängt meine Arbeit von dieser GPL-lizenzierten Vorarbeit ab und ich muss meinen Code auch unter den Bedingungen der GPL verbreiten, unabhängig davon, ob ich meine Arbeit als Quellcode [⇒ A, §5] oder in Form von kompilierten Ergebnissen [⇒ A, §6] verbreite.</p>



<p>Jetzt kann man die unangenehmen Konsequenzen geradezu riechen. Wenn ich meine Musiknoten mit der LilyPond-Sprache beschreibe und dabei ein GPL-lizenziertes Snippet verwende, muss ich meine Musiknoten auch unter den Bedingungen der GPL verbreiten, und zwar unabhängig davon, ob ich sie als Bilder / PDFs oder LilyPond-Code weitergebe. Durch die Verteilung unter der GPL gewähre ich dann konsequenterweise jedem, der meine Ergebnisse bekommt, das Recht, sie zu verwenden, zu studieren, zu modifizieren und neu zu verteilen. Und was bedeutet es, Musiknoten zu verwenden? Natürlich! Es bedeutet insbesondere auch, die Musik zu spielen.</p>



<p>Wenn Sie also ein GPL-lizenziertes LilyPond-Snippet zum Erstellen Ihrer eigenen LilyPond-Musikdatei verwenden — sei es als ‘inkludierte’ Datei, sei per Copy&amp;Past -, haben all diejenigen, die Ihre Noten erhalten — egal, in welcher Form -, das Recht, Ihre Musik zu spielen (oder sonst wie zu verwenden) — ohne weitere Nachfrage und zu jedem Zweck.</p>



<p>Um es klar zusagen: Natürlich hat jeder Autor das Recht, seine Arbeit unter eine beliebige Lizenz zu stellen. Und die Benutzer seiner Arbeit müssen die Anforderungen der gewählten Lizenz erfüllen. Das ist unstrittig und der Kern der ganzen <em>Free Software World.</em> Kein Zweifel.</p>



<p>Die Frage ist allerdings, was dann diejenigen tun können, die ihre Nutzer nicht solch radikale Konsequenzen aufbürden wollen?</p>



<ul class="wp-block-list">
<li>Sie könnten ihre Snippets / Libs zum ersten unter den Bedingungen der LGPL verbreiten. [⇒ B] Aufgrund des Schwachen Copyleft-Effekts der LGPL [⇒ B, §2/§4] dürfen die Benutzer dann ihren eigenen Code / ihre eigene Musik unter den ihnen gemäßen Bedingungen verbreiten.</li>
</ul>



<p>Das hat aber auch einen — wahrscheinlich unerwünschten — Nebeneffekt: Wenn ich ein Musikstück auf Basis eines LGPL-lizenzierten Snippets geschrieben habe, muss ich — auch wenn ich meinen Notentext nur als Bild oder PDF verteile- zusätzlich auch den Code, den Lizenztext selbst, eine Liste der Urheberrechtsinhaber [⇒ B, §4]  und einige andere Compliance-Artefakte verteilen — und zwar zusammen mit meinem Notentext . Eine einfache Verteilung meiner Arbeit ohne diese Compliance-Artefakte wäre schlicht ein Lizenzverstoß. Egal wie sinnig oder unsinnig man den Mehraufwand einschätzte!</p>



<ul class="wp-block-list">
<li>Alternativ könnten Sie in dem Dokument, mit dem Sie Ihr Snippet lizensieren, ausdrücklich darauf hinweisen, dass die Verbreitung der Musik in Form von Bildern / PDFs NICHT die Anforderungen der LGPL entsprechen müsse (also den Copyleft-Effekt nicht triggere). </li>
</ul>



<p>Die Lizenz durch Exzeptions ‘aufzuweichen’, ist mittlerweile üblich. Es ist jedoch immer besser, eine sprachlich passende Lizenz zu verwenden, als hinzuzufügen, dass der Lizenztext in gewisser Hinsicht nicht meine, wie er besage.</p>



<ul class="wp-block-list">
<li>Ferner könnten Sie den LilyPond-Code unter jeder anderen zulässigen Open Source-Lizenz verteilen. </li>
</ul>



<p>Aber auch diese Lizenzen zwingen uns, Compliance-Artefakte zusammen mit unserer Musik zu verbreiten (im Falle der Apache‑2.0‑Lizenz zum Beispiel wäre das z.B. der Lizenztext selbst und die NOTICE-Datei des Pakets [⇒ C §4].</p>



<ul class="wp-block-list">
<li>Schließlich könnten Sie die Snippets unter den Bedingungen einer der Creative Commons-Lizenzen verbreiten. [⇒ D]</li>
</ul>



<p>Je nach Wahl der Attribute würden Sie selbst festlegen, wie die Nutzer Ihnen Respekt zollen sollten (BY), welche Rechte er übernehmen muss (SA) oder ob er womöglich gar nichts tun muss (CC0).</p>



<ul class="wp-block-list">
<li>Schließlich könnten Sie Ihre Snippets zu ‘Public Domain Software erklären’. </li>
</ul>



<p>Dann gäben Sie aber Ihre Urheberrechte vollständig auf. Ihre Arbeit dürfte formal nicht einmal mehr auf Sie als Copyrightowner bzw. Autor verweisen. Diesen Weg wählt der LSR [⇒ 5]. Leider taugt dieses Verfahren nur im anglo-amerikanischen Rechtsraum, im europäischen gibt es keine “public domain”.</p>



<p>Was also sollen wir als Autoren tun, die wir mit unseren Snippets anderen die Arbeit mit LilyPond erleichtern wollen? Es gibt drei Wege:</p>



<ul class="wp-block-list">
<li>Ich denke, der beste Weg besteht darin, diese Snippets unter den Bedingungen der MIT-Lizenz zu verbreiten<strong>. </strong>Diese permissive Lizenz ist so klein, dass sie zusammen mit der Copyright-Zeile buchstäblich in den Quellcode integriert werden kann, sodass er literal bereits alle Compliance-Artefakte enthält: “The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.” [⇒ E]</li>



<li>Die zweite fast gleichwertige Methode bestünde darin, die Snippets unter einer Creative Commons Lizenz zu verteilen. Allerdings bürdet nur die CC0 dem Nutzer keine ‘lästigen’ Pflichten auf  [⇒ F].</li>



<li>Der dritte Weg ist der, den ich bei <a href="https://karsten-reincke.de/harmonyli-ly/">harmonyli.ly</a> verwendet habe: die Duallizenzierung</li>
</ul>



<p>Allerdings: wenn wir so vorgehen, können wir nicht mehr erzwingen, dass unsere Nutzer ihre Verbesserungen mit der Community teilen. Aber seien wir ehrlich: Sind unsere Snippets so wichtig, dass wir sie besonders schützen müssen? Ich denke, dass es manchmal besser ist, einfach so zu geben, ohne etwas zurückzufordern. Denn das kommt dann meist so, ganz von allein und freiwillig.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="https://karsten-reincke.de/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="https://karsten-reincke.de/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="https://karsten-reincke.de/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="https://karsten-reincke.de/jniz/">einzeln</a> oder <a href="https://karsten-reincke.de/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="https://karsten-reincke.de/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="https://karsten-reincke.de/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Software</a>, 
  <a href="https://karsten-reincke.de/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="https://karsten-reincke.de/cc-by-trolls/">Trends</a> benennen und <a href="https://karsten-reincke.de/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="https://karsten-reincke.de/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="https://karsten-reincke.de/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="https://karsten-reincke.de/oscad/">kleinere Tools</a> gießen und in <a href="https://karsten-reincke.de/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>



<ul class="wp-block-list">
<li>[1] <a href="http://LilyPond.org/gpl.html">http://LilyPond.org/gpl.html</a></li>



<li>[2] <a href="http://LilyPond.org/introduction.html">http://LilyPond.org/introduction.html</a></li>



<li>[3] <a href="http://LilyPond.org/text-input.html">http://LilyPond.org/text-input.html</a></li>



<li>[4] <a href="https://github.com/LilyPond/LilyPond">https://github.com/LilyPond/LilyPond</a></li>



<li>[5] <a href="http://lsr.di.unimi.it/LSR/html/whatsthis.html">http://lsr.di.unimi.it/LSR/html/whatsthis.html</a></li>



<li>[6] <a href="https://github.com/openlilylib/">https://github.com/openlilylib/</a> </li>



<li>[7] <a href="https://openlilylib.org/">https://openlilylib.org/</a></li>



<li>[8] <a href="https://github.com/openlilylib/oll-core">https://github.com/openlilylib/oll-core</a></li>



<li>[9] <a href="https://github.com/openlilylib/oll-core/blob/master/package.ily">https://github.com/openlilylib/oll-core/blob/master/package.ily</a></li>



<li>[A] <a href="https://opensource.org/licenses/GPL-3.0">https://opensource.org/licenses/GPL‑3.0</a></li>



<li>[B] <a href="https://opensource.org/licenses/LGPL-3.0">https://opensource.org/licenses/LGPL‑3.0</a></li>



<li>[C] <a href="https://opensource.org/licenses/Apache-2.0">https://opensource.org/licenses/Apache‑2.0</a></li>



<li>[D] <a href="https://creativecommons.org/share-your-work/licensing-types-examples/">https://creativecommons.org/share-your-work/licensing-types-examples/</a></li>



<li>[E] <a href="https://opensource.org/licenses/MIT">https://opensource.org/licenses/MIT</a></li>



<li>[F] <a href="https://creativecommons.org/publicdomain/zero/1.0/">https://creativecommons.org/publicdomain/zero/1.0/</a></li>
</ul>
<p>The post <a href="https://karsten-reincke.de/lilypond-gpl/">GPL lizenzierte LilyPond-Snippets — und ihre Nebenwirkungen</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/lilypond-gpl/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>YOCTO, IOT und die GPLv3</title>
		<link>https://karsten-reincke.de/yocto-iot-gplv3/</link>
					<comments>https://karsten-reincke.de/yocto-iot-gplv3/#comments</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sun, 30 Jun 2019 16:24:24 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Lizenzierung]]></category>
		<guid isPermaLink="false">http://127.0.0.1/kr/?p=2067</guid>

					<description><![CDATA[<p>IOT-Geräte bieten meist nur eingeschränkte Möglichkeiten, die darin verwendete Software zu untersuchen oder gar zu verändern. YOCTO möchte Software ganz spezifisch für IOT-Geräte zusammenstellen. Die GPLv3 erfordert aber, dass man so lizenzierte Software ersetzen können muss. Wie also stehen sie wirklich zueinander, YOCTO, IOT und die GPLv3? Das “open source collaboration project” YOCTO bewirbt sich [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/yocto-iot-gplv3/">YOCTO, IOT und die GPLv3</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>IOT-Geräte bieten meist nur eingeschränkte Möglichkeiten, die darin verwendete Software zu untersuchen oder gar zu verändern. YOCTO möchte Software ganz spezifisch für IOT-Geräte zusammenstellen. Die GPLv3 erfordert aber, dass man so lizenzierte Software ersetzen können muss. Wie also stehen sie wirklich zueinander, YOCTO, IOT und die GPLv3? <span id="more-2067"></span> </p>


<div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/yocto-iot-gplv3">en</a> ]</div></div></div></div>



<div style="height:22px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Das “open source collaboration project” YOCTO bewirbt sich mit dem Slogan “it’s not an embedded Linux Distribution, it creates a custom one for you” (→ [7]): Man sammelt und kompiliert genau die Software, die man benötigt. So  kann auch die ausführende IOT-Hardware  einfach gehalten werden. Das ist der YOCTO-Ansatz. Allerdings: die  technische Struktur der Geräte beeinflusst auch die Erfüllbarkeit der Lizenzen. Und da kann haarig werden!</p>



<p>Grundsätzlich weiß YOCTO um die Komplexität der FOSS Compliance und unterstützt die Produzenten schon während des Kompilationsprozesses. Es listet z.B. alle Pakete und alle in das Image eingeflossene Lizenzen auf (→ [8] 3.5). Außerdem erlaubt es, automatisiert auch die Lizenztexte in den Build zu integrieren (→ [8] 5.20.2). Und es bietet die Option, auch den korrespondierenden Quellcode als Paket zusammenzustellen (→ [8] 5.20.1). Das sind wichtige Vorarbeiten. [Nur der Vollständigkeit halber: diese Vorarbeiten sind notwendig, aber nicht hinreichend. Allerdings ist das jetzt nicht unser Thema.]</p>



<p>Nun fordert jede (A|L)GPLv lizenzierte Software mehr als nur die Mitgabe der Lizenz. Oder die Nennung der Copyright-Owner und die Mitgabe des Disclaimers und (auf Anfrage) die Übersendung des Codes. Zusätzlich muss dem Empfänger die Möglichkeit gegeben werden, selbst eine verbesserte oder verschlechterte Version auf der Hardware installieren zu können. (→ [1,2,3] §3) Wenn das IOT-Gerät den Zugriff auf die interne Platte erlaubt — sei es über ein USB-Interface oder sonst wie — ist das kein Problem: der Nutzer speichert seine Version der zu ersetzenden Software darauf ab und legt den Link um. Bingo. Was aber, wenn das Gerät kein solches Interface hat? Oder wenn der Hersteller nicht möchte, dass seine Kunden dieses Recht ausüben, sei es, um gesetzliche Sicherheitsstandards nicht zu unterlaufen, sei es um seinen Betreuungsaufwand gering zu halten?</p>



<p>Dann — so die einfache Antwort —  darf der Hersteller keine GPLv3, keine LGPLv3 und keine AGPLv3 lizenzierte Software in seinem Softwarestack verwenden. Denn über die Lizenz verspricht er, die Benutzung oder Modifikation der genutzten Software nicht zu beschränken (→ [1] §3):  Entweder man erfüllt die Lizenzen oder man verwendet die Software nicht. So einfach und binär ist das ganz generell mit der FOSS Compliance.</p>



<p>Glücklicherweise unterstützt YOCTO den Produktmanager auch bei der Einhaltung dieser Maxime. Man kann im “recipe” zur Erzeugung des Images die Variable INCOMPATIBLE_LICENSE mit Lizenzidentifikatoren belegen kann. (→ [9] Chapter 10) Der Kompilationsvorgang bricht dann ab, wenn Entwickler trotzdem so lizensierte Software einbauen. Allerdings hat das funktionelle Nebeneffekte: YOCTO warnt sogar mehrfach, dass mit dieser Option nur sehr rudimentäre Images erzeugt werden können, (→ [9] pars pro toto: Chapter 10), eben weil so viele gute Software mittlerweile unter der GNU Lizenzen V3 veröffentlicht werden. Aber immerhin, es geht in Grenzen.</p>



<p>So weit, so gut. Leider stößt man damit auf ein Kernproblem, das sich viel stärker auswirkt:</p>



<p>Einige Standardbibliotheken — wie eben die libstdc++ — stehen in akzeptabler Reife nur noch unter den Bedingungen der GPLv3 zur Verfügung. Wenn überhaupt ist es nur sehr schwer möglich, sie zu ersetzen. Und so integriert YOCTO die libstdc++ — fast, als wolle das Projekt dies unterstreichen — in sein Image, auch wenn die Belegung der Variable INCOMPATIBLE_LICENSE dies eigentlich verhindern müsste. Es scheint also, als würde YOCTO nicht-Lizenz-konforme Images erzeugen. Betrachtet man die Lage genauer, erkennt man, dass YOCTO dennoch auf dem richtigen Weg ist:</p>



<p>Standardbibliotheken haben eine besondere Stellung. Sie stellen die Basisfunktionen bereit, über die ein Programm mit dem ausführenden Kernel kommuniziert und über die es erst ausführbar gemacht wird. Sie sind unumgehbar. Wird eine Standardbibliothek unter einer Lizenz mit starkem Copyleft (AGPL|GPL) veröffentlicht, ergibt sich so unmittelbar, dass jede ‘höher liegende’ Bibliothek und jedes Programm unter derselben Lizenz veröffentlich werden müsste. Die “GNU Standard C++ Library v3” — kurz libstdc++ — ist eine solche Bibliothek: Sie sieht sich als ein “ongoing project to implement the ISO 14882” (→ [5] 1.1), sie versteht sich als Teil der “GNU compiler collection” (→ [5] 1.2) [4] und ist unter der GPLv3 lizensiert (→ [4]).</p>



<p>Trotzdem verneint die Libstdc++-FAQ die Frage ganz klar, ob jedes Programm, das die libstdc++ nutze, unter die GPL falle: “No. The special exception permits use of the library in proprietary applications. ” (→ [5] 2.2) Wie ist das möglich?</p>



<p>Die libstdc++ ist nicht nur unter der GPLv3 allein lizenziert: “The source code is distributed under the GNU General Public License version 3, with the addition under section 7 of an exception described in the ‘GCC Runtime Library Exception, version 3.1’ as follows” (→ [4]). Und diese GCC-Runtime Library Exception sagt unter §1:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent  with the licensing of the Independent Modules.</em> (→ [4] §1) </p>
</blockquote>



<p>Das klingt erst einmal kryptisch. Aber das Erratische löst sich auf, wenn man auch die unter §0 hinzugefügten Definitionen berücksichtigt:</p>



<p>Der “Target Code” bezeichnet jeden “[…] Output from any compiler for a real or virtual target processor architecture, in executable form or suitable for input to an assembler, loader, linker and/or execution phase”. Die “Runtime Library” meint eben die Bibliothek, für die Ausnahme gilt, hier also die libstdc++. Und “Independent Modules” sind die Dateien, zu deren Ausführung in kompilierter Form die Runtime Library notwendig ist. (→ [4] §0) Oder anders gesagt: Es sind die Dateien, die Funktionsaufrufe in die libstdc++ enthalten, die deren Objekt und Methoden nutzen oder deren Inline-Funktionen über libstdc++ aufgelöst werden.</p>



<p>Also erlaubt uns der Erste der oben zitierten Sätze, sein kompiliertes Programm auch unter Bedingungen zu verteilen, die die GPLv3 verletzten. Vorausgesetzt wird nur, man hat sein ganzes Produkt über einen <em>Eligible Compilation Process</em> generiert.</p>



<p>Ein<em> Compilation Process</em> wiederum ist jedes Verfahren, dass menschlich lesbaren Softwarecode oder JAVA-Byte-Code in den  <em>Target Code</em> überführt. Und <em>Eligble</em> ist ein solcher <em>Compilation Process</em> dann und nur dann, “[…] if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC.” (→ [4]) Entweder ganz GCC oder gar nicht — aber kein Mischmasch. Darum geht es.</p>



<p>Der erste Satz von §1 besagt also, dass man seine gegen die libstdc++ kompilierten eigenen Programme auch dann verteilen darf, wenn man durch die Art der Verteilung die GPLv3 verletzen würde, vorausgesetzt, man hat alle Teile komplett mit dem GCC kompiliert (oder keines). Der erste Satz hebt also den starken Copyleft-Effekt unter bestimmten Bedingungen auf.</p>



<p>In unserem Kontext von IoT-Geräten ohne Interface zum Ersetzen der Software ist das aber nicht genug! Die Frage bleibt ja, ob man die libstdc++ selbst unter Verletzung der GPLv3 vertreiben dürfte. Um diese Frage zu beantworten, benötigen wir den 2. Satz von §1. Er besagt, </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>You may then [= unter den zuvor genannten Bedingungen] convey [= propagate = distribute] such a combination under terms of your choice, consistent with the licensing of the Independent Modules.</em> (→ [4] §1) </p>
</blockquote>



<p>Die genannte Kombination kann dann nichts anderes sein als die libstdc++ plus die gegen sie kompilierten unabhängigen Module und Programme. Wir dürfen das ganze Konglomerat unter den Bedingungen vertreiben, die zu den Bedingungen der unabhängigen Module passen, also auch unter Verletzung der GPLv3 — eben mit Rückgriff auf die Runtime Exception selbst. Und das gilt mithin auch für die libstdc++.</p>



<p>Bingo! Wirklich? Leider noch nicht ganz.</p>



<p>Im Urheberrecht kommt es nicht nur darauf an, die wörtliche Bedeutung eines Vertragstextes, einer Lizenz zu ermitteln. Stattdessen muss man auch berücksichtigen, was die Urheber gemeint haben. Glücklicherweise kann man das in diesem Fall recht einfach ermitteln:</p>



<p>Der Copyright-Owner der GNU Compiler Collection ist die FSF. Und die hat in einer libstdc++-FAQ erläutert, wie sie die GCC Runtime Exception im Kontext der libstdc++ verstanden haben möchte (→ [5]) : </p>



<p>Einerseits fragt die FSF ob “[…] any program which uses libstdc++ falls under the GPL?”. Und antwortet kurz und knapp: “No. The special exception permits use of the library in proprietary applications.” (→ [5] 2.1) Auf der anderen Seite erläutert des FSF in dieser FAQ, dass die libstdc++ ganz generell nicht so einfach ersetzt werden könne, wie es bei anderen Bibliotheken möglich sei, weil “much of the library consists of inline functions and templates, which are expanded inside the code that uses the library” and replacing the library would also require to recompiling the using program. (→ [5] 2.3)</p>



<p>Also dürfen wir auch aus der FAQ schließen, dass die FSF nicht nur den starken Copylefteffekt unter den genannten Bedingungen aufgehoben sehen will, sondern auch die Bedingung der Ersetzbarkeit.</p>



<p>Unglücklicherweise gibt es ein drittes Dokument, was diesem Schluss zu widersprechen scheint. Die libstdc++ ist nicht die einzige Bibliothek, die unter der Runtime Library Exception veröffentlicht ist. Deshalb hat die FSF unter dem Titel “GCC Runtime Library Exception Rationale and FAQ” auch eine generelle Einführung veröffentlich. (→ [6])  Dieses Dokument erklärt zuerst, warum man diese Technik der Ausnahmeregelungen ab der Version 3 generell einführt. Im 2. Abschnitt erläutert es, wie die Technik funktioniert. Und endet hier in dem jetzt bereits bekannten Satz “As long as you use an Eligible Compilation Process, then you have permission to take the Target Code that GCC generates and propagate it ‘under terms of your choice.’” (→ [6]) </p>



<p>Die Frage, ob auch die libstdc++ unter den Ausnahmebedingungen der Runtime Library Exception vertrieben werden darf, stellt der Text jedoch nicht. Im Kontext einer Frage nach der Nutzung einer komplett proprietären Kompilerkette wird allerdings herausgehoben, dass man auch dann die Vorteile der Runtime Exception nutzen kann, allerdings müsse man die libstdc++ selbst unter den Bedingungen der GPLv3 weitergeben.</p>



<p>Diesen Zusatz könnte man generell sehen wollen. Allerdings gibt es zwei starke Gründe, die das verbieten. Zum ersten ist er im spezifischen Kontext dieser Frage eingefügt worden, also nicht generalisiert worden. Und zum zweiten würde eine generelle Geltung die Runtime Exception im durch die FSF dargestellten Sinne unterlaufen. Wenn auf der einen Seite der starke Copylefteffekt der GPLv3 für die eigenen Programme über die GCC Runtime Exception aufgehoben werden soll und wenn andererseits die Art der Bibliothek trotzdem die Offenlegung des nutzenden Codes erzwingen würde, damit man die Bedingung der Ersetzbarkeit überhaupt erfüllen kann, dann hätte die FSF etwas Selbst-widersprüchliches im Sinn gehabt. Und davon ist nicht auszugehen.</p>



<p>So liegt die Sache nunmehr klar auf dem Tisch:</p>



<p>YOCTO darf die libstdc++ Bibliothek auch dann in seine Images integrieren, wenn die Nutzung von GPLv3 Software eigentlich ausgeschlossen sein soll. Es entsteht auch damit ein lizenzkonformes Image. Denn der starke Copylefteffekt ist durch die Runtime Exception ebenso aufgehoben, wie die Forderung nach der Ersetzbarkeit der libstdc++.</p>



<p>Allerdings gilt dies nur für die libstdc++. Auf andere Libraries können wir es nicht so einfach übertragen. Die Möglichkeit, die libstdc++ auch — wie es in der GCC Runtime Library Exception heißt — unter Verletzung der GPLv3 zu vertreiben, hängt von der Lizenzierung der libstdcc unter der GPLv3 mit GCC Runtime Library Exception ebenso ab, wie von ihrer immanenten Natur als c++-Bibliothek.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="https://karsten-reincke.de/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="https://karsten-reincke.de/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="https://karsten-reincke.de/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="https://karsten-reincke.de/jniz/">einzeln</a> oder <a href="https://karsten-reincke.de/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="https://karsten-reincke.de/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="https://karsten-reincke.de/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Software</a>, 
  <a href="https://karsten-reincke.de/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="https://karsten-reincke.de/cc-by-trolls/">Trends</a> benennen und <a href="https://karsten-reincke.de/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="https://karsten-reincke.de/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="https://karsten-reincke.de/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="https://karsten-reincke.de/oscad/">kleinere Tools</a> gießen und in <a href="https://karsten-reincke.de/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>



<ul class="wp-block-list">
<li>[1] GPLv3 :- <a href="https://opensource.org/licenses/GPL-3.0">https://opensource.org/licenses/GPL‑3.0</a></li>



<li>[2] AGPLv3 :- <a href="https://opensource.org/licenses/AGPL-3.0">https://opensource.org/licenses/AGPL‑3.0</a></li>



<li>[3] LGPLv3 :- <a href="https://opensource.org/licenses/LGPL-3.0">https://opensource.org/licenses/LGPL‑3.0</a></li>



<li>[4] libstdc++ licensing document containing the libstdc++ GCC RUNTIME LIBRARY EXCEPTION :- <a href="https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html">https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html</a></li>



<li>[5] libstdc++ FAQ :- <a href="https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.any_program">https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.any_program</a></li>



<li>[6] General GCC Runtime Library Exception Rationale and FAQ :- <a href="https://www.gnu.org/licenses/gcc-exception-3.1-faq.en.html">https://www.gnu.org/licenses/gcc-exception‑3.1‑faq.en.html</a></li>



<li>[7] YOCTO project page :- <a href="https://www.yoctoproject.org/">https://www.yoctoproject.org/</a></li>



<li>[8] YOCTO project development manual :- <a href="https://www.yoctoproject.org/docs/1.6.1/dev-manual/dev-manual.html">https://www.yoctoproject.org/docs/1.6.1/dev-manual/dev-manual.html</a></li>



<li>[9] YOCTO project reference manual :- <a href="https://www.yoctoproject.org/docs/1.9/ref-manual/ref-manual.html">https://www.yoctoproject.org/docs/1.9/ref-manual/ref-manual.html</a></li>



<li>[A] YOCTO Howto :- <a href="https://wiki.yoctoproject.org/wiki/How_do_I">https://wiki.yoctoproject.org/wiki/How_do_I</a></li>
</ul>
<p>The post <a href="https://karsten-reincke.de/yocto-iot-gplv3/">YOCTO, IOT und die GPLv3</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/yocto-iot-gplv3/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Wie die eine JNIZ Lizenzierung schiefgeht:</title>
		<link>https://karsten-reincke.de/jniz/</link>
					<comments>https://karsten-reincke.de/jniz/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sun, 17 Feb 2019 11:28:34 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Lizenzierung]]></category>
		<guid isPermaLink="false">http://127.0.0.1/kr/?p=2002</guid>

					<description><![CDATA[<p>Aktuell sichte ich gerade freie Musiksoftware, darunter auch die jniz und seine spezielle Lizenzierung. Dieses Tool erlaube der Nutzerin “[…] to build and to harmonize several voices according to the rules of classical harmony.” Seine Lizenz aber ist ’strange’. Und am Ende verletzt der Autor damit die GPL — ein Paradebeispiel: Beginnen wir mit der [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/jniz/">Wie die eine JNIZ Lizenzierung schiefgeht:</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Aktuell sichte ich gerade freie Musiksoftware, darunter auch die jniz und seine spezielle Lizenzierung. Dieses Tool erlaube der Nutzerin <i><strong>“</strong>[…] to build and to harmonize several voices according to the rules of classical harmony.”</i> Seine Lizenz aber ist ’strange’. Und am Ende verletzt der Autor damit die GPL — ein Paradebeispiel:<span id="more-2002"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ de | <a href="https://fodina.de/jniz">en</a> ]</div></div></div></div>



<p>Beginnen wir mit der JNIZ Lizenz selbst. Sie besagte einmal<sup><a href="https://karsten-reincke.de/jniz/#footnote_1_2002" id="identifier_1_2002" class="footnote-link footnote-identifier-link" title="Früher waren alle Informationen unter `http://www.jniz.org` abrufbar. Heute existiert nur noch das Source-Forge-Repository.">1</a></sup> u.a.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><i>“Jniz is a free proprietary piece of software. It is forbidden to sell it. You do not have the right to sell, distribute Jniz or use its sources under penalty of law.&nbsp;You will infringes on the Jniz staff property rights.” </i></p>
</blockquote>



<p>Natürlich hat jede Copyrightownerin — hier <a href="https://sourceforge.net/u/jniz/profile/">Bruno Grandjean</a> — erst einmal das Recht, jedes ihre Werke unter <a href="http://www.jniz.org/index.php/en/license">genau die Lizenz</a> zu stellen, die ihr gemäß erscheint. Das Recht endet aber dort, wo der (starke) Copylefteffekt der GPL zu wirken beginnt:</p>



<p><a href="https://sourceforge.net/projects/jniz/files/">Lädt man sich das Package</a> runter und entpackt es, findet frau unter jniz/ressources/LilyPond/usr/bin [Achtung: ‘ressources’ ist Stand heute kein Typo!] einige LilyPond-Dateien, die explizit unter der GPL veröffentlicht sind — so z.B. die Datei ‘lilylib.py’.</p>



<p>Damit ist die Sachlage klar: JNIZ nutzt LilyPond-Funktionalität, es ist funktional vom LilyPond-Code abhängig und also ein ‘derivative work’. Damit muss auch JNIZ unter den Bedingungen der GPL veröffentlicht werden — was es nicht tut. In der gegenwärtigen Form ist die JNIZ-Lizensierung also illegal.</p>



<p>Ich habe heute das Sourceforge-Projekt entsprechend kommentiert und den Autor auch direkt auf seine fragliche JNIZ Lizenzierung angesprochen. Ich vermute, dass ihm das ganze Problem nicht klar ist und dass er sein Werk eigentlich richtig zu Open-Source-Software machen wollte. Daraus ergäben sich gute Lösungsmöglichkeiten. Schau’n wir mal.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="https://karsten-reincke.de/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="https://karsten-reincke.de/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="https://karsten-reincke.de/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="https://karsten-reincke.de/jniz/">einzeln</a> oder <a href="https://karsten-reincke.de/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="https://karsten-reincke.de/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="https://karsten-reincke.de/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Software</a>, 
  <a href="https://karsten-reincke.de/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="https://karsten-reincke.de/cc-by-trolls/">Trends</a> benennen und <a href="https://karsten-reincke.de/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="https://karsten-reincke.de/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="https://karsten-reincke.de/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="https://karsten-reincke.de/oscad/">kleinere Tools</a> gießen und in <a href="https://karsten-reincke.de/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_2002" class="footnote">Früher waren alle Informationen unter ‘http://www.jniz.org‘ abrufbar. Heute existiert nur noch das <a href="https://sourceforge.net/projects/jniz/">Source-Forge-Repository</a>.</li></ol><p>The post <a href="https://karsten-reincke.de/jniz/">Wie die eine JNIZ Lizenzierung schiefgeht:</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/jniz/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Die FOSSCon 2013</title>
		<link>https://karsten-reincke.de/foss-con-korea-2013/</link>
					<comments>https://karsten-reincke.de/foss-con-korea-2013/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Thu, 02 Jan 2014 13:46:07 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Lizenzierung]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=86</guid>

					<description><![CDATA[<p>Ein Besuch der Extraklasse! Im Dezember 2013 war ich als Speaker auf die FOSSCon 2013 eingeladen. Nach Seoul / Südkorea. Eine außergewöhnliche Ehre … und ein außergewöhnlicher Genuss, selbst wenn ich von Korea wenig, vom Hotel einiges und nur von der Konferenz viel gesehen habe: Es begann mit einer Keynote von Karsten Gerloff, Präsident der [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/foss-con-korea-2013/">Die FOSSCon 2013</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Ein Besuch der Extraklasse!</strong> Im Dezember 2013 war ich als Speaker auf die FOSSCon 2013 eingeladen. Nach Seoul / Südkorea. Eine außergewöhnliche Ehre … und ein außergewöhnlicher Genuss, selbst wenn ich von Korea wenig, vom Hotel einiges und nur von der Konferenz viel gesehen habe:<span id="more-86"></span></p>


<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-gerloff.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-gerloff-300x169.png" alt="Carsten Gerloff auf der FOSSCON 2013" width="240"></a></figure></div>


<div class="wp-block-image"><figure class="alignright size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-buddha.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-buddha-169x300.png" alt="Buddha auf der FOSSCON 2013" width="120"></a></figure></div>



<p>Es begann mit einer Keynote von Karsten Gerloff, Präsident der <a href="http://fsfe.org/">Free Software Foundation Europe</a>, der die politische Arbeit der FSFE erläuterte, insbesondere im Hinblick auf Orderprozesse der öffentlichen Verwaltung. Es wäre komisch gewesen, hätte er nicht über Komplexität gesprochen. </p>


<div class="wp-block-image"><figure class="alignright size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-wilson.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-wilson.png" alt="Andrew Wilson auf der FOSSCON 2013" width="120"></a></figure></div>



<p>Ähnlich Andrew Wilson: Intel, sein Arbeitgeber, besitze auch ein Open Source Review Board. Allerdings sei es in einer komplexeren Weise in die Produktionswelt der Firma eingebunden, als üblich. Jedes Projekt, das Open-Source-Software einsetze, müsse sich das Approval dieses Boards einholen. Nur geschehe das eben nicht eines Selbstzweckes wegen. Es gehe vielmehr darum, dass das Projekt die Open-Source-Software nicht in einer Weise verwendet, die der Community nicht gefällt. Der Ton sei halt rau da draußen in der Open Source Community. Und so sei es ein echter Vorteil für Intel, wenn ihre Projekte im geschützten Raum eines internen Reviews ’scheitern’ und zur ‘Nachbesserung’ geschickt werden können.</p>


<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-telekom.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-telekom-169x300.png" alt="DT auf der FOSSCON 2013" width="120"></a></figure></div>



<p>Unser eigenes Thema, der <a href="https://karsten-reincke.de/oscad/">(Telekom) Open Source Compliance Advisor</a> und sein Geschwister, das <a href="https://karsten-reincke.de/oslic/">(Telekom) Open Source License Compendium</a>, fügt sich da nahtlos in diesen Rahmen ein. Es ist schon ein tolles Gefühl, so willkommen geheißen zu werden und mitzukriegen, wie ehrlich das Auditorium verstehen will, wie und warum die Telekom die Tools <a href="https://github.com/telekom/oslic/">OSLiC</a> und <a href="https://github.com/telekom/oscad">OSCAd</a> entwickelt hat. Mehr noch: wie und warum wir die beiden selbst als Open-Source-Software freigegeben haben. Klar, dass ich den <a href="https://oscad.fodina.de/">OSCAd</a> erneut vorgeführt habe. Und ebenso klar, dass dieser Link in Südkorea jetzt herumgeht. Dass es zum OSLiC eine koreanische Übersetzung gibt, ist natürlich ein besonderes Schmankerl.</p>



<p>Ähnlich müssen die Erfahrung im Projekt <a href="http://www.genivi.org/">Genivi</a> sein. Klaus-Peter Wiedemann von Bearing Point stellte es vor. Allerdings arbeiten daran aber viele Firmen mit. Unter anderem auch T‑Systems. Geprägt ist das Projekt von einer komplexen Kooperation. Der Witz ist nur: Es funktioniert. Und zwar umso besser, je weiter der Weg zu einem Open-Source-Projekt zurückgelegt worden ist. Genivi ist ein Projekt, das einen ‘open source software stack’ für ‘Autoindustrie’ entwickelt. Denn — wie soll Dieter Zetsche gesagt haben — heute laufen Autos nicht mehr mit Benzin, sondern mit Software. </p>



<p>Das wiederum passte sehr gut zu dem hellsichtigen Vortrag von Prof. Kern Koh: Firmen transformieren sich in Softwarefirmen und dann in Open Source Softwarefirmen. Sonst scheitern sie. Seine Beispiele — beginnend bei Intel bis hin zu Kodak – waren schon beeindruckend. Für uns Telekom’er gilt das ja auch: selbst als reiner Carrier (der wir nicht sind und nicht sein wollen), wären wir heute trotzdem eine Softwarefirma und nicht mehr eine reine ‚Kabelfirma‘</p>


<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-lecture.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-lecture-300x169.png" alt="Korean lectures auf FOSSCON 2013" width="280"></a></figure></div>



<p>Besonders komplex für mich waren&nbsp; — Überraschung —&nbsp; alle koreanischen Vorträge. Und die Podiumsdiskussionen am zweiten Tag. Besonders als Teilnehmer. Denn einem koreanischen Beitrag mit koreanischen Folien zu folgen, selbst wenn er simultan übersetzt wird, ist wirklich eine Herausforderung. Aber wie heißt es so schön?</p>


<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-complexity.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/fosscon-complexity-300x169.png" alt="Korean Complexity auf FOSSCON 2013" width="300"></a></figure></div>


<div class="wp-block-image"><figure class="alignright size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/07/seoul-height-720x21280-1.png" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/07/seoul-height-720x21280-1-169x300.png" alt="Korean Height auf FOSSCON 2013" width="240"></a></figure></div>



<p class="has-text-align-center">Kein Angst vor Komplexität oder anderen Abgründen!</p>



<div style="height:19px" aria-hidden="true" class="wp-block-spacer"></div>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="https://karsten-reincke.de/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="https://karsten-reincke.de/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="https://karsten-reincke.de/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="https://karsten-reincke.de/jniz/">einzeln</a> oder <a href="https://karsten-reincke.de/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="https://karsten-reincke.de/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="https://karsten-reincke.de/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Software</a>, 
  <a href="https://karsten-reincke.de/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="https://karsten-reincke.de/cc-by-trolls/">Trends</a> benennen und <a href="https://karsten-reincke.de/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="https://karsten-reincke.de/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="https://karsten-reincke.de/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="https://karsten-reincke.de/oscad/">kleinere Tools</a> gießen und in <a href="https://karsten-reincke.de/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/foss-con-korea-2013/">Die FOSSCon 2013</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/foss-con-korea-2013/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
