Jusletter IT

Was ist ein «Computerprogramm» im Urheberrecht?

  • Author: Michael Sonntag
  • Category: Articles
  • Region: Austria
  • Field of law: IP Law
  • Collection: Tagungsband-IRIS-2013
  • Citation: Michael Sonntag, Was ist ein «Computerprogramm» im Urheberrecht?, in: Jusletter IT 20 February 2013
Das Urheberrecht schützt Computerprogramme, doch lässt es eine Definition derselben vermissen. Dieser Beitrag versucht näher abzugrenzen, welche Arten von Computerdaten per Urheberrecht als «Programm» geschützt sind und welche nicht. Der Kernbereich ist zwar eindeutig, doch im Randbereich bestehen Unschärfen. Abhilfe wird durch Rückgriff auf den Terminus «Programmiersprache» vorgeschlagen, welcher eine deutlich klarere Beurteilung ermöglicht. Besprochen werden uA Webseiten, Konfigurationsdateien, Modellierungssprachen, Datenbankdefinitionen, Klassenbibliotheken sowie Schnittstellendefinitionen.

Inhaltsverzeichnis

  • 1. Einleitung
  • 2. Definition
  • 3. Einzelne Anwendungsbeispiele
  • 3.1. Webseiten
  • 3.2. Konfigurationsdateien
  • 3.3. Datenbankdefinitionen
  • 3.4. Schnittstellendefinitionen
  • 3.5. Klassenbibliotheken
  • 3.6. VHDL
  • 4. Zusammenfassung

1.

Einleitung ^

[1]

Das Urheberrecht schützt uA als Literatur auch Computerprogramme (§ 40a-e UrhG1). Doch leider fehlt es an einer Definition, was ein Computerprogramm ist. Eine solche ist auch in der Computerprogramm-RL2 der EU nicht vorhanden. Daher entstanden im Laufe der Zeit immer wieder Zweifel, ob eine bestimmte Art von Computerdaten nun als Programm (=geschützt als Computerprogramm) oder nicht (=ev als andere Werkart geschützt, oder auch lediglich zB über das Wettbewerbsrecht3) anzusehen sei. In der RL und/oder dem UrhG wird jedoch festgelegt:

  • Ein Computerprogramm umfasst auch das Entwurfsmaterial zu seiner Entwicklung (RL: sofern die Art der vorbereitenden Arbeit die spätere Entstehung eines Computerprogramms zulässt).
  • Die Form der Wiedergabe ist unerheblich, dh ob es sich um Quellcode/Maschinencode handelt sowie ob es Magnetdaten auf einem Datenträger, Elektronen in einem Flash-Speicher oder Tinte auf Papier sind spielt keine Rolle. Dies inkludiert daher auch Programme, die in die Hardware integriert sind (zB ROMs).
  • Mindestansprüche an die Qualität oder ästhetische Kriterien sind nicht anzuwenden. Also auch fehlerhafte sowie unübersichtliche oder ineffiziente Programme sind geschützt.
[2]

Daraus ergeben sich jedoch sofort einige Fragen:

  • Was ist mit Computerprogrammen die so fehlerhaft sind, dass sie überhaupt nicht ausgeführt werden können, dh die nicht nur logische sondern auch viele/schwere Syntax-Fehler enthalten?
  • Wenn in die Hardware integrierte Programme immer noch Programme sind, ist dann zB eine VHDL-Beschreibung (=Hardware-Beschreibungssprache) ein Programm? Dies würde ev bedeuten, dass ein Großteil existierender Chips (als in Hardware integriertes Programm) Computerprogrammschutz beanspruchen könnten. Oder kommt es darauf an, ob der Code synthesefähig ist (=Übersetzung in Hardware automatisch möglich) oder nicht (nur Simulation möglich)?
  • Was sind Klassenbibliotheken, die kein alleinstehendes Programm darstellen und ohne weitere Elemente auch nie ausgeführt werden können? Ähnliches gilt für Templates (Vorlagen für Programmcode; wurden früher zuerst in Quellcode übersetzt) oder Schnittstellendefinitionen.
  • Sind Konfigurationsdateien Computerprogramme? Von der Konstantenfestlegung bis hin zu komplexen Verfahrensabläufen mit Schleifen und Verzweigungen (Business-Rules) kann alles Mögliche enthalten sein.
[3]
Im Folgenden soll versucht werden, sowohl eine allgemeine Abgrenzung zu finden, als auch dieses Ergebnis auf ausgewählte Fragestellungen konkret anzuwenden.

2.

Definition ^

[4]

Definitionen für «Computerprogramm» sind in div Quellen zu finden, daher wird hier nur eine Auswahl dargestellt:

  • [...] Darstellung eines Problemlösungsverfahrens in einer für den Computer verständlichen Form. Programme werden in einer Programmiersprache formuliert4.
  • Ein Programm stellt einen Algorithmus einschließlich erforderlicher Datenobjekte in einer dem Computer verständlichen Form einer Programmiersprache dar. Er ist auf einem Computer ausführbar. Programmiersprachen ermöglichen die Formulierung des Lösungsalgorithmus in einer formalen Form.5
  • (Computer-)Programme sind Verfahren, die gegebene Daten durch Algorithmen in einem Computer manipulieren, um ein gewünschtes Endergebnis [...] zu erhalten. Die Formulierung eines Algorithmus erfolgt in einer Sprache, die der Computer verstehen und abarbeiten kann. Programmiersprachen sind ein Hilfsmittel zur Abbildung der Daten- und Kontrollstrukturen des Algorithmus in die Sprachkonstrukte der betreffenden Programmiersprache.6
  • Eine Programmiersprache ist eine künstliche Sprache zur präzisen Formulierung von Algorithmen. Ein Programm ist die Codierung eines Algorithmus in einer Programmiersprache.7
  • [...] eine Folge von den Regeln der jeweiligen Programmiersprache genügenden Anweisungen, die auf einem Computer ausgeführt werden können, um damit eine bestimmte Funktionalität zur Verfügung zu stellen8. Eine Programmiersprache ist eine formale Sprache zur Formulierung von Datenstrukturen und Algorithmen, d.h. von Rechenvorschriften, die von einem Computer ausgeführt werden können9.
  • Nach der Deutschen Industrie-Norm (DIN) 44300, Teil 4 versteht man unter einer Programmiersprache eine zum Abfassen von Computerprogrammen geschaffene Sprache. Computerprogramme sind eine nach Regeln der verwendeten Sprache festgelegte syntaktische Einheit aus Anweisungen und Vereinbarungen, welche die zur Lösung einer Aufgabe (mittels einer digitalen Rechenanlage) notwendigen Elemente umfasst.
[5]
Gemeinsam ist diesen Definitionen, dass sie auf dem Begriff «Programmiersprache» basieren, was auf die Ausführbarkeit auf einem Computer verweist. Als gemeinsame Elemente lassen sich Ablauffähigkeit (kann [unmittelbar] auf einem Computer ausgeführt werden; wenn nicht könnten es Entwurfsmaterialien sein), Formalisierung (exakte Definition von Syntax und Semantik; der Computer darf nicht raten müssen oder einen Menschen zur Interpretation benötigen) und Universalität herauslösen. Diese eher technischen Definitionen widersprechen zumindest teilweise jenen aus rechtlichen Bereichen, zB jener des Europäischen Parlaments10: Computerprogramm wäre jede Abfolge von Befehlen, die direkt oder indirekt in einem Computersystem verwendet werden, um eine Funktion zu realisieren oder ein bestimmtes Ergebnis zu erzielen. Dies würde jedoch auch Webseiten (Ergebnis: Bildschirmdarstellung11), Algorithmen (indirekte Verwendung) und Benutzer-Interaktion (Klicken auf Icons ist auch eine Abfolge von Befehlen) beinhalten, welche allgemein nicht als Computerprogramme angesehen werden. Eine Abgrenzung wäre nur durch eine restriktive Interpretation von «Befehl» möglich, zB im Kontext einer Programmiersprache, wie hier vertreten.
[6]
Der letzte Punkt, Universalität, ist nicht direkt ersichtlich, erschließt sich aber aus der allgemeinen Sichtweise und dem Ziel der Definitionen: Formale Sprachen die nur ein kleinen Teil aller möglichen Algorithmen oder keine Datenstrukturen abbilden können, sind keine Programmiersprachen, da sie nur einen unbedeutenden Teil der Praxis abdecken könnten. Dies bedeutet, dass zwei Elemente für eine Programmiersprache erforderlich sind: Ein statischer Teil muss es erlauben, Daten zu strukturieren, und ein dynamischer Teil muss es ermöglichen, mit diesen Daten beliebige Berechnungen (im weitesten Sinne) durchzuführen. Für letzteres sind, neben mathematischen Funktionen, Benutzerein-/ausgabe etc. folgende Grundstrukturen erforderlich: Sequenz, Verzweigung und (potentiell unendliche) Schleifen12. Fehlen einzelne dieser Elemente, kann nicht von einem allgemeinen Problemlösungsverfahren bzw. der Formulierung von (beliebigen) Algorithmen mit dieser Sprache gesprochen werden. Zu berücksichtigen ist, dass diese Grundstrukturen nicht direkt abgebildet sein müssen: Bei Imperativen Programmiersprachen existieren explizite «Schleifen», die es etwa bei funktionalen Programmiersprachen nicht gibt. Dort existiert jedoch das Äquivalent der Rekursion: Ebenfalls eine potentiell unendliche Schleife, wenn auch in anderer Darstellungs- und Beschreibungsweise.
[7]

Durch Rückgriff auf die Programmiersprache löst sich auch das Problem einer ev. Selbstbeschränkung: Wenn ein «Programm» keine Datenstrukturen sondern nur Grund-Datentypen verwendet und auf Schleifen vollständig verzichtet, so kann es zB als Entscheidungstabelle repräsentiert werden. Ist dies noch als Programm anzusehen? Ja, denn es kommt nicht darauf an, welche Funktion die konkreten Anweisungen ausführen13 (bzw ob diese «sinnvoll», kommerziell erfolgreich etc. sind; vgl abstrakte Kunst...), sondern welche Möglichkeiten die Programmiersprache bietet. Dies beruht weiters darauf, dass ein Programm ebenso aus einem einzigen Befehl bestehen kann, welcher eine sehr komplexe Funktion ausführt (vergleiche CISC- vs. RISC-Rechner sowie den Einsatz von Bibliotheken). Damit ergeben sich zwanglos auch Programme, welche das (ohnehin niedrige) erforderliche Kreativitätsniveau eben nicht erreichen und damit zwar Computerprogramme sind, aber nicht vom UrhG geschützt werden.

[8]
Im Hinblick auf die Ausführbarkeit ist es kein Mangel, wenn hierzu weitere Programme erforderlich sind: Fast jedes moderne Programm setzt irgendein Betriebssystem voraus und kann nicht direkt auf «nackter» Hardware ausgeführt werden. Wenn einzelne Programme noch zusätzliche Elemente benötigen, wie zB Laufzeitumgebungen, (Klassen-)Bibliotheken oder Interpreter, so kann dies daher keinen Unterschied machen (diese könnten genauso in Form von Hardware vorliegen!). Dies ist wichtig im Hinblick auf vorgefertigte Bausteine wie Bibliotheken: Auch wenn eine Bibliothek an Funktionen nicht für ein konkretes einzelnes Programm entworfen wurde und alleine nicht ausführbar ist, so ist sie dennoch als Entwurfsmaterial für ein Computerprogramm einzustufen. Denn auch ein «normales» ausführbares Programm stellt nur eine besondere «Bibliothek» dar, in der vom Betriebssystem die Prozedur «Hauptprogramm ausführen» aufgerufen wird. Dies wird dadurch verstärkt, dass viele allein ausführbare Programme selbst vielfach Einsatz als Teil eines größeren «Programms» finden, zB durch Ein-/Ausgabeumleitung auf Shells14, Teil einer Prozesskette oder durch Aufruf von anderen Programmen aus15. Die Art der späteren Verwendung eines Programms kann daher nicht über seinen Schutz bestimmen. Dies gilt auch für Klassenbibliotheken - im Hinblick auf den enthaltenen Code! - da auch dieser direkt ausführbar ist, sofern er in eine passende Umgebung eingebettet wird. Die Abgrenzung Programm zu Entwurfsmaterial besteht darin, ob die benötigte Laufzeitumgebung allgemein ist oder erst speziell für dieses «Programm» angepasst bzw geschrieben werden muss. Auch sehr fehlerhafte Programme unterliegen damit dem Schutz zumindest als Entwurfsmaterial, da auch sie in einer Programmiersprache geschrieben sind. Weiters müssen diese nur die spätere Entstehung eines (ablauffähigen) Computerprogramms zulassen (vgl ErwG 7 der Computerprogramm-RL), aber nicht bereits ein solches darstellen.

3.

Einzelne Anwendungsbeispiele ^

[9]
In diesem Abschnitt werden einige Beispiele formaler Daten untersucht, die in einem Computersystem Einsatz finden. Anhand dieser Praxisbeispiele wird die Praktikabilität der Definition überprüft und dargestellt.

3.1.

Webseiten ^

[10]
Das Zurückführen der Definition auf Programmiersprachen erlaubt es auch, bisherige Probleme elegant zu lösen: So war früher stark umstritten, ob Webseiten ein Computerprogramm sind oder nicht. Da es sich bei HTML nicht um eine Programmiersprache handelt, ist mit dieser Definition die Einstufung ganz einfach (und entspricht der final erreichten hM16): Es sind keine Programme. Dies beruht uA darauf, dass mit HTML (nicht: Eingebettetes JavaScript, das sehr wohl eine Programmiersprache ist!) nicht beliebige Berechnungen angestellt werden können (2+2=4 kann zwar angezeigt, aber nicht berechnet werden!) und auch keine Schleifen möglich sind. Bedingungen bestehen eingeschränkt (CSS), doch reicht dies, trotz aller Formalisierung, nicht für eine Programmiersprache aus17. Mit anderen Worten, der statische Teil einer Programmiersprache, die Strukturierung von Daten, kann vielfältig erfolgen, doch die dynamischen Aspekte einer solchen fehlen – und zwar nicht konkret auf einzelnen Webseiten sondern grundsätzlich mangels der Möglichkeiten von HTML. Dies kann nicht dadurch umgangen werden, dass der Browser als Laufzeitumgebung aufgefasst wird: Was dieser macht ist separat zu beurteilen, und auch durch einen Browser werden die HTML-Codes nicht «ausführbar». In gleicher Weise kann aus einer endlichen Webseite keine unendliche Darstellung erfolgen (=Fehlen von potentiell unendlichen Schleifen).

3.2.

Konfigurationsdateien ^

[11]
Konfigurationsdateien sind ähnlich wie Webseiten zu sehen: Es besteht eine exakte Syntax und Semantik, sodass es sich um eine formale Sprache handelt (unabhängig davon ob es sich um Text, INI-Dateien, XML oder ein sonstiges Format handelt). Im Gegensatz zu HTML fehlt hier jedoch oft zusätzlich der statische Aspekt, da nur feste Felder mit Werten belegt, aber keine beliebigen Daten modelliert werden können. Dynamische Aspekte fehlen meistens, abgesehen von häufigen Möglichkeiten von «Schleifen»: Bestimmte Felder können mehrfach vorkommen. Selbst wenn für diese Liste keine Längenbegrenzung besteht, so kann sie doch nicht als potentiell unendlich angesehen werden, da bei endlicher Liste niemals eine unendliche Anzahl an Einträgen möglich ist. Das Fehlen dynamischer Aspekte wird dadurch deutlich, dass Konfigurationsdateien zwar enthalten ob etwas Spezifisches zu tun (oder zu unterlassen) ist, aber nicht was. Dies muss in dem sie verwendenden Programm umgesetzt werden. Dies ist auch der Unterschied zu logischen Programmiersprachen (zB Prolog): Dort sind zusätzlich allgemeine Regeln definiert die für eine Vielzahl an Fällen gelten («Wenn A Dann B») und durch den «Interpreter» ausgewertet werden, während in Konfigurationsdateien in jeder Option jeweils nur ein konkreter Einzelfall (Faktum) definiert wird (A, Nicht-A oder B/C/D). Dies bedeutet, der eigentliche Algorithmus kann nicht in der Konfigurationsdatei gefunden werden, sondern muss sich woanders, im Computerprogramm, befinden.
[12]
Zu beachten ist jedoch, dass in einer Konfiguration natürlich auch Programme (oder zumindest Schnipsel an Programmcode) enthalten sein können, etwa bei der Konfiguration eines Workflows. Ist die Mächtigkeit dieser enthaltenen Sprache groß genug, handelt es sich um eine Programmiersprache (ev sehr ungewöhnlich, nicht standardisiert etc., aber das ist kein Problem), und diese eingebetteten Teile sind selbst Computerprogramme (analog JavaScript innerhalb einer Webseite).

3.3.

Datenbankdefinitionen ^

[13]

Die Erstellung der Struktur, wie Daten abzuspeichern sind, beruht einerseits auf etablierten Regeln (zB Normalisierung), andererseits auf viel Kreativität und Arbeit. Daher besteht das Bedürfnis, das Ergebnis vor einfach möglichem Kopieren zu schützen. Dies kann jedoch, im Gegensatz zum Datenbankverwaltungssystem, nicht als Computerprogramm erfolgen, da hier zwar der statische Teil umfangreichst ausgeführt ist (oft mehr als in Programmiersprachen), jedoch dynamische Aspekte fehlen. So können zwar Trigger definiert werden, doch lösen diese nur den Aufruf von (externen) Computerprogrammen aus, ähnlich wie bei Konfigurationsdateien. SQL (um nur die häufigste Form zu nennen) wird auch nicht als Programmiersprache angesehen18.

[14]
Als Gegenargument kann man anführen, dass viele Datenbanksysteme eine eigene (als solche unumstrittene) Programmiersprache eingebaut haben, zB PL/SQL, und diese nicht von der Datenstruktur getrennt werden kann. Dies ist jedoch mM nach falsch, da viele sehr häufig eingesetzte Datenbanken existieren, welche keine solchen Programmiersprachen besitzen oder bei denen das Datenbanksystem dies überhaupt nicht unterstützt. Umgekehrt sind diese Programmiersprachen auch geeignet, ohne relevante Datenbankstrukturen Algorithmen auszuführen. Daher sind sie als separat von den Datenstrukturen anzusehen. Eine Analogie verstärkt diese Sicht noch: Wird statt der Datenbank eine einfache Datei eingesetzt, so wird das darauf zugreifende Programm auch als separat angesehen und die Datei (ausschließlich geordnete Datensätze), wird nicht als (Teil des) Computerprogramm behandelt, sondern als Ein-/Ausgabedaten des Programms. Und in der Essenz handelt es sich bei der Datenbank um nichts anderes als um eine Datendatei mit komplexer innerer Struktur und Zugriff über eine Programmbibliothek, die jedoch ausschließlich passiv bleibt.

3.4.

Schnittstellendefinitionen ^

[15]
Schnittstellen sind zwar in einer Programmiersprache formuliert bzw vielfach sogar nur ein «Extrakt» des eigentlichen Programmcodes, müssen jedoch von diesem unterschieden werden. Dies ist analog zu Konstanten oder sonstigen Daten (zB Text), die zwar ebenfalls physikalisch in einem Computerprogramm enthalten und Teil dessen Syntax sind, aber nicht dessen urheberrechtlichen Schutz genießen19. Schnittstellendefinitionen beschreiben lediglich eine statische Aufteilung von Daten, bzw informell (in Ausnahmefällen sogar formell20), wie Methoden aufzurufen sind (zB Reihenfolge/Art). Sie geben jedoch keine Anweisungen, wie eine Aufgabe zu lösen ist: Weder unmittelbar als Befehl (wie bei imperativen Programmiersprachen), noch als «Rezept» (analog funktionalen Programmiersprachen). Sie beschreiben nur, welche Vorgehensweises möglich (uU auch welche erlaubt) sind und welche nicht. Es liegt auch keine Selbstbeschränkung vor, da in einer Schnittstelle niemals die eigentliche Umsetzung enthalten ist (wenn auch im Quellcode ev vermischt, ist dennoch strikt zwischen der «Beschreibung» und der «Realisierung» derselben zu unterscheiden).
[16]
Die statischen Elemente sind daher in ausreichendem Maße vorhanden, die dynamischen fehlen hingegen. So kann eine Schnittstelle etwa vorschreiben, welche Methode aufzurufen ist, bevor (wiederholt) eine andere Methode aufgerufen werden darf, doch unterscheidet sich dies grundlegend davon, zu spezifizieren, wann und wie dies exakt tatsächlich durchgeführt werden soll. Mit anderen Worten, eine Schnittstelle ist eher damit zu vergleichen, mit welchen «Worten» (Syntax) eine Schleife geschrieben werden kann, als tatsächlich eine konkrete Schleife darzustellen. Sie entspricht daher mehr einer Programmiersprache als einem Computerprogramm. Tatsächlich können auch viele Schnittstellendefinitionen als Beschreibung einer «höheren» Programmiersprache angesehen werden. So ist der Befehl «printf» in der Programmiersprache C (Formatierte Textausgabe auf die Konsole) «lediglich» eine etwas komplexere Variante des Maschinenbefehls (=wird direkt von der Hardware ausgeführt) «mov» (verschieben von Daten, typ 1-4 Bytes, an eine andere Stelle). Beide beschreiben eine bestimmte Funktionalität, sind jedoch nicht die Funktionalität selbst. «printf» wird durch eine Bibliothek umgesetzt, «mov» durch eine bestimmte Hardware innerhalb der CPU. Computerprogramm ist jedoch nur eine konkrete Realisierung einer Funktionalität (das «wie» im weitesten Sinne), nicht jedoch die Beschreibung derselben (das «was»).
[17]
Schnittstellen können dennoch potentiell Schutz als Sammelwerk genießen. Von einer konkreten Schnittstellendefinition jedoch wiederum zu unterscheiden ist ihre grundlegende Struktur und Organisation, dh die Prinzipien und Ideen, die beim Entwurf der Schnittstelle Anwendung fanden. Diese unterliegen keinesfalls einem urheberrechtlichen Schutz (vergleiche auch ErwG 11 bzw Art 1 Abs 2 der Computerprogramm-RL).

3.5.

Klassenbibliotheken ^

[18]
Klassenbibliotheken sind im Hinblick auf den enthaltenen Programmcode eindeutig Entwurfsmaterial für Computerprogramme: Es wird in einer Programmiersprache eine Funktionalität definiert, die ausführbar ist, selbst wenn es dazu eines kleinen Rahmenprogramms bedarf. Dieses ist jedoch nicht universell, also nicht für beliebige Klassen(-bibliotheken) identisch (während ein einziger Interpreter/Betriebssystem beliebige Programme ausführt). Dies ist auch der Grund, warum es sich nur um Entwurfsmaterial, aber nicht um Computerprogramme selbst handelt (siehe auch oben für fehlerhafte Programme, was wohl auf «unvollständige» wie hier übertragen werden kann!). Es handelt sich um eine unmittelbare Vorstufe im Hinblick auf die konkrete Ausgestaltung eines oder mehrerer Programme21. Eine weitere Basis dafür ist, dass ein «normales» Computerprogramm, dessen genauer Zweck/Ausrichtung sich während des Entwurfs ändert, ansonsten die vorherigen Teile des Entwurfs ungeschützt ließe (sie sind nicht fertig zu einem Programm entwickelt worden bzw werden es auch in Zukunft nicht – könnten es aber). Dies entspricht einer Klassenbibliothek, deren konkreter Einsatz (derzeit) noch unbekannt ist, und von der Teile ev. nie (oder zumindest in einem bestimmten Ziel-Programm nicht) verwendet werden. Unterstützt wird dies dadurch, dass für die Frage des Schutzes eines Programms sein Einsatzzweck – wofür es verwendet werden soll – unerheblich ist22. Der Ansicht Kochs23, ein Schutz käme nicht in Frage, weil Klassenbibliotheken nicht in Bezug auf ein konkretes Programm entworfen wurden (sondern für eine Vielzahl derzeit noch unbekannter) ist aus genau diesem Grunde entschieden entgegenzutreten.
[19]
Zusätzlich ist bei Objektorientierung zu beachten, dass sich die Neuimplementierung (nicht: Implementierung von zB Interfaces) der gleichen Klassen (im Gegensatz zu Schnittstellen keine vorgesehene Nutzung!) von der Verwendung zu Ableitung weiterer Klassen (analog der Implementation einer Schnittstelle) unterscheidet: Letzteres ist explizit Teil des objektorientierten Konzepts und vorgesehen und daher Teil der bestimmungsgemäßen Nutzung eines solchen Computerprogramms (ErwG 13 letzter Satz der Computerprogramm-RL), womit die Werkbearbeitung, insofern dadurch eine stattfindet, eindeutig legitimiert ist.
[20]

Hier stellt sich jedoch eine zweite Frage: Wird der gesamte Programmcode entfernt und lediglich die Klassenaufteilung (inkl. Methoden, Attribute etc. und deren Benennung und Schnittstelle) übernommen, ist dies dann eine Verletzung des Urheberrechts am Computerprogramm? Diesfalls bleibt lediglich eine (etwas anders formulierte) Schnittstellenbeschreibung über, die daher wie eine solche (siehe oben) zu beurteilen ist. Als Beispiel für die Abgrenzung kann dienen:

  • Daten in Objekten mit bestimmter Schnittstelle (Interface) zu kapseln, hierfür allgemeine Strukturen (Listen, Mengen etc.) bereitzustellen und diese bearbeiten zu können (etwa mittels Iteratoren) ist eine allgemeine Idee bzw eine Vorgehensmethode sowie bei genauer Detaillierung eine bloße Schnittstelle und nicht geschützt. Analoge Klassenbibliotheken dürfen jederzeit entwickelt werden. Vergleiche hierzu auch «design patterns».
  • Die konkrete Zusammenstellung von Funktionalität in Klassen (was macht alles Klasse A, was übernimmt Klasse B bzw C) sowie deren spezifische Benutzung (ein Iterator muss erzeugt und dann mit einer Datenstruktur verbunden werden, wird von der Datenstruktur auf Anfrage geliefert, oder es existiert eine eigene Erzeugungsklasse) ist potentiell vom urheberrechtlichen Schutz umfasst: Es könnte sich um ein Sammelwerk handeln (Auswahl und Anordnung der Daten/Methoden). Die Auswahl enthält jedoch keine dynamischen Aspekte, somit handelt es sich nicht um ein Computerprogramm.
  • Die konkrete Implementierung der einzelnen Methoden (zB wie ein Element in eine Liste eingefügt wird) ist ein Computerprogramm und als solche geschützt – insoweit ein Gestaltungsspielraum besteht und ausgenützt wurde.

3.6.

VHDL ^

[21]
Mit VHDL kann eine komplette CPU beschrieben werden, inkl eines Speichers und eines etwaigen Speicherinhalts. Zusätzlich ist auch eine Simulation möglich. Der hierfür notwendige Simulator kann als Laufzeitsystem gesehen werden. Auch sonst erfüllt VHDL die Anforderungen einer Programmiersprache (diverse Datentypen sowie alle üblichen Kontrollstrukturen + zusätzliches Hardware-spezifisches) und wird auch oft als solche bezeichnet. Sie basiert weiters auf der (eindeutig solchen) Programmiersprache Ada. Allerdings besteht der Hauptzweck immer noch darin, eine konkrete Hardware zu beschreiben (ähnlich einer Webseite) und sie wird ebenso oft auch als (Hardware-)Beschreibungssprache bezeichnet. Allerdings wird typischerweise eben gerade nicht die Hardware selbst beschrieben (die daraus uU vollautomatisch abgeleitet werden kann – Selbstbeschränkungen sind erforderlich!), sondern das Verhalten dieser Hardware oder der Datenfluss. Dh, ein VHDL-Programm beschreibt Vorgänge, dies jedoch auf eine solche Art, dass daraus nicht nur ein Ergebnis berechnet, sondern ev auch Hardware generiert werden kann. Da Computerprogramme geschützt sind, unabhängig davon ob sie in Hardware implementiert sind oder nicht, spricht dies eher für eine Anerkennung als Programmiersprache und damit urheberrechtlichen Schutz als Computerprogramm. Das Ergebnis, die Hardware, ist jedoch nicht mehr als Computerprogramm formuliert und fällt deshalb aus diesem einen urheberrechtlichen Schutz heraus.
[22]
Da die Synthesefähigkeit ein Subset der simulationsfähigen Beschreibung ist, kann hier ebenso die Selbstbeschränkung angeführt werden: Werden aus bestimmten Gründen (zB Effizienz) nicht alle Möglichkeiten einer Programmiersprache verwendet, so handelt es sich dennoch um ein Computerprogramm.

4.

Zusammenfassung ^

[23]
Wie sich an den diskutierten Beispielen zeigt, ermöglicht es der Rückgriff auf den Begriff «Programmiersprache» deutlich leichter, fragliche Strukturen als Computerprogramm oder nicht einzustufen. Kernelemente hierfür sind, dass sowohl statische (Datenstrukturen) als auch dynamische Aspekte (Ablaufstrukturen) modelliert und damit potentiell beliebige Algorithmen implementiert werden können. Hierbei ist eine Programmiersprache immer als ganzes zu sehen: Verwendet ein konkretes Programm nur einen Teil davon, so ist dies für die Klassifizierung unerheblich, jedoch beim erforderlichen Mindestniveau zu berücksichtigen.

 


 

Michael Sonntag, Institut für Informationsverarbeitung und Mikroprozessortechnik (FIM), Johannes Kepler Universität Linz.

 


 

  1. 1 Bundesgesetz über das Urheberrecht an Werken der Literatur und der Kunst und über verwandte Schutzrechte (Urheberrechtsgesetz), idF BGBl. I Nr. 58/2010.
  2. 2 Richtlinie 2009/24/EG des Europäischen Parlaments und des Rates vom 23. April 2009 über den Rechtsschutz von Computerprogrammen, ABl. L 111 vom 5.5.2009, 16.
  3. 3 Siehe zB OGH 16.1.2007, 4 Ob 198/06f.
  4. 4 Meckel, Computerprogramm, Gabler Wirtschaftslexikon, Springer: http://wirtschaftslexikon.gabler.de/Definition/computerprogramm.html (9.11.2012).
  5. 5 Werner et al., Taschenbuch der Informatik, Leipzig: Fachbuchverlag 1995, 324f.
  6. 6 Herold/Lurz/Wohlrab, Grundlagen der Informatik, München: Pearson 2006, 151.
  7. 7 Horn/Kerner, Lehr- und Übungsbuch Informatik. Band 1: Grundlagen und Überblick, Leipzig: Fachbuchverlag 1995, 223.
  8. 8 Wikipedia, http://de.wikipedia.org/wiki/Computerprogramm (9.11.2012), dort ein Zitat nach ISO/IEC 2382-1:1993 «A syntactic unit that conforms to the rules of a particular programming language and that is composed of declarations and statements or instructions needed to solve a certain function, task, or problem.» Siehe dazu auch die DIN-Definition im folgenden Punkt!
  9. 9 Wikipedia, http://de.wikipedia.org/wiki/Programmiersprache (9.11.2012) dort ein Zitat nach dem Informatik Duden.
  10. 10 Zitiert nach Walter in Walter, Europäisches Urheberrecht Art 1 RZ 19 SoftwareRL. Vergleiche die Mustervorschriften für den Schutz von Computersoftware der WIPO (GRUR Int 1978, 586, zitiert nach Koch, Handbuch Software- und Datenbank-Recht, 560), bei denen ebenfalls bereits die Anzeige eines bestimmten Ergebnisses ausreichen würde. Ebenfalls problematisch ist dort das Abstellen auf eine «prozedurale Darstellung» (§ 1 Abs 2: Programmbeschreibung), da viele andere Formen existieren.
  11. 11 So auch Ott, Urheberrecht im Internet und Computerprogramme, http://www.linksandlaw.de/linkingundframing6.htm (21.11.2012). Die Meinung, dass bei der Umsetzung in HTML kein Spielraum mehr verbleibe, wenn die Anordnung der Elemente einmal bestimmt ist, muss als eindeutig falsch angesehen werden: Sowohl in reinem HTML wie auch in CSS kann ein optisch identisches Ergebnis auf eine Vielzahl an Arten erreicht werden.
  12. 12 Dies könnte ev formal mit der «Turing-Vollständigkeit» beschrieben werden. Diese ist jedoch nach den meisten Definitionen nicht erforderlich, um eine Sprache als Programmiersprache zu qualifizieren.
  13. 13 Der Schutzbereich eines solchen Programms wird jedoch sehr eng sein, da die darin verkörperte Funktion nicht vom Urheberrechtsschutz umfasst ist, sondern lediglich die konkrete Form der Umsetzung in dieser Programmiersprache!
  14. 14 Beispiel: Der Befehl «ls -R / | grep -i ‘\.png‘| sort» findet alle PNG-Dateien im Dateisystem und gibt diese sortiert aus. Das Kommando (=eine Anweisung, kann aber auch als Programm angesehen werden) besteht aus drei unabhängigen Programmen, die ebenso alleine sinnvoll ausführbar sind.
  15. 15 Ein Webserver ruft zB basierend auf Benutzereingaben in einem Formular diverse Programme auf, um Aktionen zu initiieren oder Daten abzufragen.
  16. 16 OLG Düsseldorf, 29.6.1999, 20 U 85/98; Nicht ganz so klar OGH 16.1.2007, 4 Ob 198/06f.
  17. 17 HTML zusammen mit CSS ist Turing-Vollständig (umstritten!), denn ein, allerdings interaktiver, «Rule 110» Automat kann darin programmiert werden (zB https://gist.github.com/3370826#file_rule110_full.html; 21.11.2012). Von diesem ist bekannt, dass er Turing-vollständig ist: Cook, Universality in Elementary Cellular Automata, http://www.complex-systems.com/pdf/15-1-1.pdf (21.11.2012). Allerdings wird gewisse Benutzerinteraktion benötigt.
  18. 18 SQL nach Standard SQL92 ist nicht Turing-Vollständig, mit der Erweiterung CTE (Common Table Expressions) und Windowing jedoch schon (Fetter, High Performance SQL with PostgreSQL 8.4, http://assets.en.oreilly.com/1/event/27/
  19. 19 Beispiel: Ein Computerprogramm, das den Text eines Romans enthält und diesen beim Ausführen ausgibt. Das Computerprogramm selbst ist an sich als solches geschützt, jedoch trivial und fällt daher aus dem Schutzbereich heraus. Der darin enthaltene Text ist jedoch nicht Teil des Computerprogramms sondern ein separates Werk der Literatur. Siehe auch Fina, Urheberrechtsschutz von Computerprogrammen, 5.
  20. 20 ZB auch: Handelt es sich um eine «Programm-Methode» oder eine «Web-Methode», wird sie übergebene Daten verändern, verändert sie den globalen/lokalen Zustand, etc.
  21. 21 Wie von Walter in Walter, Europäisches Urheberrecht Art 1 RZ 21 SoftwareRL gefordert.
  22. 22 Wiebe in Kucsko, urheber.recht § 40a 2.1 Abs 2.
  23. 23 Koch, Handbuch Software- und Datenbank-Recht, 622 RZ 166.