Content

Lina Barbara Böcker, Elemente eines Computersystems in:

Lina Barbara Böcker

Computerprogramme zwischen Werk und Erfindung, page 40 - 49

Eine wettbewerbsorientierte Analyse des immaterialgüterrechtlichen Schutzes von Computerprogrammen unter besonderer Berücksichtigung von Open Source-Software

1. Edition 2009, ISBN print: 978-3-8329-4188-8, ISBN online: 978-3-8452-1950-9 https://doi.org/10.5771/9783845219509

Series: Wirtschaftsrecht und Wirtschaftspolitik, vol. 229

Bibliographic information
40 muss. In wirtschaftlicher Hinsicht hat diese erst sehr viel später, nämlich in den 1980er Jahren stattgefunden. Zuse wiederum ist auch der Erfinder der ersten höheren Programmiersprache „Plankalkül“, die bereits so funktionierte wie die meisten der heutigen Sprachen: Die durchzuführenden Rechenoperationen des Computers wurden in einer menschenlesbaren Sprache geschrieben und anschließend in eine maschinenlesbare Form übersetzt. Arbeitsspeicher enthielten die damaligen Rechner noch nicht. Der erste Rechner, der einen solchen besaß, war der auf John von Neumann zurückgehende EDVAC aus dem Jahre 1945.59 Er enthielt einen Quecksilberverzögerungsspeicher für 1024 Fest- und Gleitkommazahlen mit jeweils 44 Bit und geht seinerseits auf die sog. Turing-Maschine von Alan Turing zurück.60 Zusätzlich konnte bei diesem Rechner jede Speicherzelle statt einer Zahl auch einen Befehl aufnehmen. Erstmals war es so möglich, die notwendigen Befehle für den Ablauf des Rechners in einen Arbeitsspeicher zu übertragen und immer wieder abzurufen, ohne sie neu eingeben zu müssen. Erst Ende der 1950er Jahre gab es dann die ersten „Compiler“, die Quelltexte in Maschinenbefehle übersetzen konnten, welche anschließend in den Speicher geladen und abgearbeitet werden konnten. Zur gleichen Zeit entstanden auch die ersten standardisierten höheren Programmiersprachen, wie etwa Fortran, COBOL, ALGOL und LISP, die durch die entsprechenden Übersetzungsprogramme (Compiler) auch auf unterschiedlichen Rechnern angewendet werden konnten. Einige Programme von damals sind heute noch einsatzfähig. Moderne Rechner haben zwei Hauptbestandteile, die für das Ablaufen eines Computerprogramms notwendig sind: Ein Speicher für das Programm und die Daten, der auch ein gemeinsamer Speicher sein kann, und ein Schaltwerk – die sog. Zentraleinheit oder CPU – das Daten aus dem Speicher liest, modifiziert oder in den Speicher schreibt. Programme sind dabei in einer binären Darstellung, also im sog. Maschinencode, im Speicher abgelegt und die jeweiligen Symbole bestimmten Bitfolgen zugeordnet. Die Symbolfolge eines Programms ist prozessorspezifisch und steuert die Aktionen der Maschine.61 II. Elemente eines Computersystems Ein Computersystem besteht hauptsächlich aus zwei Komponenten: Der Hardware, also alldem, was man anfassen kann, und der Software. Diese kann wiederum in System- und Anwendungssoftware unterteilt werden.62 59 Vgl. John von Neumann, First Draft of a Report on the EDVAC, 1945, abrufbar unter http://www.virtualtravelog.net/entries/2003-08-TheFirstDraft.pdf. 60 Horns, GRUR 2001, 1, 6. 61 Ausführlich zum Ganzen Horns, GRUR 2001, 1, 6. 62 Vgl. a. Pres, Gestaltungsformen urheberrechtlicher Softwarelizenzverträge, 1994, S. 10. 41 1. Technische und wirtschaftliche Differenzierung Die sog. Systemsoftware steuert die Grundfunktionen eines Computersystems.63 Sie ist beispielsweise für die Hardwarefunktionen zuständig oder übersetzt Programme in den Maschinencode.64 Damit ist sie essentielle Voraussetzung für das Ablaufen der Anwenderprogramme, mit denen der Nutzer direkt in Kontakt tritt. Die Hardware, zu der zum Beispiel der Prozessor, der Hauptspeicher und Ein- und Ausgabegeräte gehören,65 kann nicht ohne die (System-)Software funktionieren. Umgekehrt ist aber auch ein Computerprogramm ohne Hardware nicht denkbar, da es funktionslos wäre. Technischer Fortschritt hat dazu geführt, dass immer mehr Hardwareaufgaben, d. h. mechanische Vorgänge, durch Software und Programme ersetzbar sind. Die heute praktizierte wirtschaftliche Trennung von Soft- und Hardware ist ein Ergebnis der Entwicklung in den 1970er Jahren. Im Gegensatz zur technischen Trennung zwischen Programm und Rechnenmaschine galten Soft- und Hardware wirtschaftlich gesehen lange als untrennbare Einheit. In den Anfängen der Computerindustrie waren Rechenmaschinen nur dazu konzipiert, bestimmte, vorher definierte Prozesse auszuführen, die spezifische Programme erforderten. Software war integraler Bestandteil der Funktionalität der jeweiligen Hardware und auf konnte auf anderen Systemen nicht verwendet werden. Daher wurde sie auch nur im Zusammenhang mit den zugehörigen physischen Bestandteilen verkauft. Erst nachdem IBM als eines der damals vorherrschenden Unternehmen 1969 im Rahmen eines Kartellverfahrens dazu gezwungen wurde,66 beides getrennt zu verkaufen,67 entstanden Anfang der 1970er Jahre die ersten kleineren reinen Softwarefirmen. Sie waren meist Tochterfirmen der dominierenden Hardwarefirmen DEC, Hewlett-Packard und Data General. 1981, also nur gute zehn Jahre später, brachte IBM den ersten Personal Computer68 auf den Markt. Rechenanlagen waren damit nicht mehr maßgeschneiderte Maschinen zur Lösung eines bestimmten Problems, sondern Universalmaschinen, die mit Hilfe von Programmen mit unterschiedlichen Funktionalitäten auf individuelle Bedürfnisse zugeschnitten werden konnten. Weil IBM den „Fehler“ machte, seine Hardwareschnittstellen freiwillig zu veröffentli- 63 Deutlichstes Beispiel für Systemsoftware ist das sog. Betriebssystem. 64 Siehe dazu unten 4. b). 65 Den Aufbau der Hardware gemeinsam mit der Organisation der Arbeitsabläufe bezeichnet man als sog. Rechnerarchitektur. Vgl. dazu Hennessy/Patterson, Computer Architecture, 2003, S. 90ff.; Haberstumpf, in: Lehmann, Rechtsschutz und Verwertung von Computerprogrammen, 1993, Kap. II RdNr. 11ff. 66 Dazu Fisher/McGowan/Greenwood, Der Anti-Trust-Fall gegen IBM, 1985. 67 IBM hielt damals allerdings einen großen Teil seiner Programme für gemeinfrei und stellte sie in die so genannte Public Domain und verzichtete auf seine Urheberrechte, was im amerikanischen Copyright-System problemlos möglich ist. Vgl. zur Public Domain unten unter B. IV. 68 Als Antwort auf den Apple I der Firma Macintosh. 42 chen, wurden von Konkurrenzunternehmen rasch kompatible Programme angeboten, was schließlich zur eigenständigen Softwareindustrie führte.69 Eine wirtschaftliche und funktionale Differenzierung zwischen Hard- und Software im Sinne zweier eigenständiger Märkte ergab sich daraus von selbst. Heute sind jedoch die Funktionen zwischen Hard- und Software nicht mehr so eindeutig abgrenzbar wie damals. Es gibt immer mehr Programme, die Hardwareaufgaben erfüllen können, indem sie bestimmte Schaltungsprozesse im Computer bewirken. Umgekehrt können auch Softwarefunktionen ohne Weiteres durch technische Schaltungen ersetzt werden.70 Eine eindeutige Grenzlinie zwischen Soft- und Hardware ist daher heute kaum noch erkennbar71 und unterliegt zudem dynamischen Prozessen. Darüber hinaus gehen Soft- und Hardware häufig physikalische Verbindungen ein (z. B. sog. „embedded programs“), die kaum wieder getrennt werden können. Gleiches gilt für die sog. Firmware, d. h. logische Schaltungen, die auf Halbleitermaterial (sog. ROM-Speichern)72 fixiert sind. Deren Speichermaterial bleibt permanent erhalten, auch wenn der Rechner ausgeschaltet wird.73 Dieser Aspekt zeigt bereits, dass eine Trennung zwischen „körperlichen“ und „geistigen“ Bestandteilen einer Rechenmaschine nicht eindeutig vollzogen werden kann. Bei der Feststellung von Technizität im patentrechtlichen Sinne ist das zu berücksichtigen.74 2. Computerprogramm und Software Wenngleich die Begriffe „Computerprogramm“ und „Software“ in der Regel synonym verwendet werden, beschreiben sie eigentlich nicht ein und dasselbe.75 Das Computerprogramm an sich ist nur ein – wenn auch wesentlicher – Bestandteil der Software. Es enthält die Steuerungsbefehle an den Rechner und veranlasst die Maschine in einer bestimmten Weise zu funktionieren.76 „Software“ dagegen bezeich- 69 Diese Tatsache hat auch erheblich zur Entwicklung der freien Programme beigetragen. 70 Pres, Gestaltungsformen urheberrechtlicher Softwarelizenzverträge, 1994, S. 11. Zur rechtlichen Qualifikation solcher Programme Lehmann, NJW 1988, 2419, 2421. 71 Das Problem der Austauschbarkeit von Hard- und Software und die daraus resultierenden Abgrenzungsschwierigkeiten wurden bereits sehr früh erkannt, vgl. Schneider, Softwarenutzungsverträge im Spannungsfeld von Urheber- und Kartellrecht, 1988, S. 5 m. w. N.; Haberstumpf, in: Lehmann, Rechtsschutz und Verwertung von Computerprogrammen, 1993, Kap. II, RdNr. 14. 72 ROM = Read Only Memory. 73 Schneider, Softwarenutzungsverträge im Spannungsfeld von Urheber- und Kartellrecht, 1989, S. 4. 74 S. dazu im Dritten Kapitel, D. III. 4. 75 So auch König, Das Computerprogramm im Recht, 1991, RdNr. 222, der sich ausführlich mit der Abgrenzung beschäftigt, die beiden Begriffe dann aber ebenfalls synonym verwendet. Auch Horns, GRUR 2001, 1ff., verwendet die beiden Begriffe synonym. Vgl. a. Sommerville, Software-Engineering, 2007, S. 31. 76 Unter „direkt“ ist hier auch die „mittelbare“ Anweisung in Form des Quellcodes zu verstehen. OLG Hamburg CR 1998, 332, 333 – Computerspielergänzung; § 1 (i) WIPO-Mustervor- 43 net als Oberbegriff alle nicht-physischen Bestandteile des Computers.77 Auch Handbücher, Dokumentationen und andere sich primär an den Nutzer richtende Medien fallen darunter. Trotz dieses Unterschiedes schließe ich mich den allgemeinen Sprachgebrauch an und verwende beide Begriffe synonym. 3. Überblick: Der Entwicklungsprozess Der Entstehungsprozess eines Computerprogramms spielt eine große Rolle bei der Einordnung der Computerprogramme in das System des Immaterialgüterrechts. In Wissenschaft und Rechtsprechung haben sich verschiedene Theorien herausgebildet, die die Entwicklung in einzelne „Stufen“, „Schritte“ oder „Phasen“ einteilen.78 Zwar sind die meisten dieser Theorien mittlerweile ihrem Namen gerecht geworden und weitgehend akademische Modelle der Programmiertechnik, die nicht strikt angewendet werden,79 weil die Einteilung keine technische Notwendigkeit, sondern lediglich um eine vereinfachte Darstellung des Entwicklungsprozesses ist. Nach wie vor zutreffend ist aber die Annahme eines Prozess, der sich vom Allgemeinen (notwendige Lösungsschritte=Algorithmus) zum Besonderen (Quellcode) entwickelt.80 Daher veranschaulichen die Theorien die grundsätzliche Vorgehensweise eines Programmierers. Praktisch wächst die Anzahl unterschiedlicher Ansätze beim Programmieren ins Unüberschaubare. Das Internet etwa hat neben den „klassischen“ Programmiersprachen zahllose weitere linguistische Konzepte zu Tage gefördert, wie beispielsweise die so genannten Mark-Up-Languages,81 d. h. Computersprachen, in denen sich formale und natursprachliche Bestandteile mischen.82 Die gängigste theoretische Gliederung des Entwicklungsprozesses umfasst vier Schritte,83 manche Autoren gehen aber auch von mehr oder weniger Entwicklungsschriften, abgedruckt in GRUR Int. 1978, 286, 290ff.; Grützmacher, in: Wandtke/Bullinger, UrhG, 3. Aufl. 2009, § 69a RdNr. 3; Hoeren, in: Möhring/Nicolini, UrhG, 2. Aufl. 2000, § 69a RdNr. 2. 77 Der Begriff Software ist allerdings nicht notwendigerweise beschränkt auf Computer, sondern meint auch nichtphysische Funktionsbestandteile anderer technischer Gegenstände, die mindestens einen Mikroprozessor enthalten. 78 V. Gamm, WRP 1969, 96ff. will auch den rechtlichen Schutz nach diesen Stufen aufteilen. Dem kann im Ansatz auch zugestimmt werden, da die geistige Leistung des Entwicklers in den einzelnen Stufen variiert. 79 Ähnlich Ohst, Computerprogramm und Datenbank, 2003, S. 33, die die Erstellungstheorien als „rein akademisch“ bezeichnet. 80 S. dazu auch sogleich 4. 81 Markup-Languages oder Auszeichnungssprachen sind formale Sprachen, die zur Darstellung metasprachlicher Aussagen über andere Objekte (Texte) dienen, so wie etwa LATEX oder SGML, HTML und XML. Ein Großteil der Inhalte im www. ist in HTML codiert. Zu den Markup-Languages als Computerprogramm unten III. 3. c). 82 Horns, GRUR 2001, 1, 2. 83 Währenddessen spricht zum Beispiel Marly von einem einheitlichen „Ideenentwicklungsprozess“. Vgl. Marly, Urheberrechtsschutz, 1995, S. 130. 44 stufen aus.84 Der tatsächliche Umfang hängt stets von der Komplexität und Schwierigkeit des zu erstellenden Programms und der Anzahl der an der Entwicklung beteiligten Personen ab.85 Die vierstufige Gliederung des Entwicklungsprozesses sieht wie folgt aus:  Zunächst wird die zu lösende Aufgabe genau definiert, d. h. im Rahmen einer sog. „Systemanalyse“ beschrieben, was das fertige Programm leisten soll.  Im Anschluss wird diese Systemanalyse in grafischer Form dargestellt, sog. „Datenflussplan“. Hierzu gehört eine Auflistung, welche Daten an welcher Stelle eingegeben werden müssen und wie diese Daten weiterverarbeitet werden, ebenso wie eine Aufstellung der zu verwendenden Hardware. Es handelt sich um die abstrakteste Form des sog. Algorithmus, der sogleich eingehender beschrieben wird.  Aus diesem Plan entsteht der Programmablaufplan, auf dem schon die konkrete Gestalt des zukünftigen Programms erkennbar ist. Er enthält bereits Teile des Quellcodes.86 Trotzdem handelt es sich noch nicht um das fertige Programm, sondern eine konkretere Form des Algorithmus.  Erst wenn dieser Programmablaufplan hinreichend konkret ist, erfolgt die eigentliche Codierung in einer dem Computer mittelbar oder unmittelbar verständlichen Sprache, d. h. das Programm wird ausformuliert. Das Ergebnis ist der Quelltext, der entweder in den Maschinencode übersetzt werden muss oder direkt im Rechner mittels eines Interpreters abgearbeitet wird.87 Der allmähliche Konkretisierungsprozess wird in diesem Modell sehr deutlich. Neben diesem Stufenmodell kann zwischen den sog. Top-Down- und den Bottom-Up-Modellen differenziert werden. Sie unterscheiden sich im Wesentlichen hinsichtlich ihrer Herangehensweise. Während beim Top-Down-Verfahren „von oben“ begonnen wird, indem der Programmierer sich von der höchsten Programmierebene zur niedersten „herunterarbeitet“, funktioniert die Bottom-Up-Methode genau anders herum. Keine dieser Methoden wird im Rahmen moderner Programmierung isoliert angewendet, sondern zur optimalen Ergebnisfindung werden diese häufig vermischt.88 84 Zahn, GRUR 1978, 207, 209 sprach beispielsweise von sechs Entwicklungsstufen, während der BGH in der Inkassoprogramm-Entscheidung von nur drei Phasen ausging, vgl. BGHZ 94, 276, 285 – Inkassoprogramm. 85 Waltl, Geschützte und ungeschützte Computerprogramme, 1990, S. 6. 86 Zum Quellcode siehe sogleich 4. a). 87 Programmierungen im Maschinencode sind sehr selten. 88 Es gibt noch weitere Bezeichnungen für Entwicklungsmodelle, wie zum Beispiel die Wasserfall-Methode oder die evolutionäre Entwicklung. Für diese Formen gilt aber ebenfalls, dass keine von ihnen allein Gültigkeit beanspruchen kann. Vgl. dazu Sommerville, Software- Engineering, 2007, S. 95ff. 45 4. Abstraktionsstufen des Programms Aus dem Entwicklungsprozess ergibt sich, dass das Computerprogramm verschiedene Abstraktionsstufen durchläuft. Sie spielen beim immaterialgüterrechtlichen Schutz der Computerprogramme eine große Rolle.89 Die Funktionsweise dieser Formen im Hinblick auf die schöpferische Leistung des Programmierers auseinanderzuhalten ist daher wichtiger Bestandteil eines effektiven Programmschutzes, wenngleich sie erst alle gemeinsam das fertige Programm ausmachen. a) Quellcode Der Quellcode oder Quelltext, der auf Englisch sourcecode heißt und der Open Source-Software ihren Namen gegeben hat, ist der menschenlesbare Text eines Programms, in dem die notwendigen Befehle formuliert sind. Es handelt sich um die Ursprungsfassung des Programms.90 In der Quellcodefassung des Programms können Änderungen im Ablauf vorgenommen und Fehler beseitigt werden. Sie enthält vier wesentliche Arten von Informationen, die nicht alle zwingend für den Programmablauf benötigt werden:91  Eine Beschreibung und Anordnung derjenigen Daten, die verwendet werden sollen,  Eine Beschreibung der Verarbeitungsprozeduren,  Informationen in normal lesbarem Text für den Anwender, etwa um diesen auf mögliche Fehlerquellen hinzuweisen und/oder ihm die Anwendung des Programms zu erklären und  Informationen für andere Entwickler/Programmierer, die sich mit dem Programm beschäftigen. Geschrieben wird der Quellcode in einer sog. Programmiersprache wie etwa BA- SIC, C++, Java und PHP (um nur einige der bekanntesten zu nennen).92 Diese Programmiersprachen sind vom Rechner zunächst nicht lesbar, sondern müssen von einem Compiler, Assembler oder Interpreter in den sog. Maschinencode93 übersetzt werden. Dieser besteht aus Zahlenfolgen von Einsen und Nullen und ist für den Menschen schlecht bzw. gar nicht lesbar.94 Diese Übersetzung kann entweder „offli- 89 Dies gilt insbesondere für die Schutzfähigkeit der sog. Algorithmen, vgl. dazu unten Drittes Kapitel, C. IV. a). 90 Ernst, MMR 2001, 208. 91 Haberstumpf in: Lehmann, Rechtsschutz und Verwertung von Computerprogrammen, 1993, Kap. II, RdNr. 17; König, GRUR 1989, 559, 564. 92 Vertiefend dazu Henning/Vogelsang, Taschenbuch Programmiersprachen, 2007. 93 Zum Maschinencode unten b). 94 Der Interpreter übersetzt das Programm nicht im eigentlichen Sinne, sondern arbeitet es direkt ab, in dem er es für den Rechner „interpretiert“, vgl. König, NJW 1992, 1731. 46 ne“, also außerhalb der Betriebszeit des Programms, erfolgen, oder aber während der Laufzeit. Der Quelltext eines Programms wird traditionell von Hand, d. h. durch den Programmierer selbst eingegeben. Er ist dabei durch technische Vorgaben im Algorithmus, den er formuliert, und die funktionalen Vorgaben der jeweiligen Programmiersprache gebunden. Mittlerweile gibt es aber auch sog. Codegeneratoren, die in der Lage sind, aus Grobentwürfen (z. B. Struktogrammen) selbständig vollständige Quelltexte zu generieren. Der Programmierer muss dabei nicht mehr im eigentlichen Sinne programmieren, sondern gibt nur noch eine grobe Struktur oder Makroaufrufe vor, die der Generator in Code in der gewünschten Programmiersprache umsetzt. Derartige maschinelle Programmierverfahren gewinnen zunehmend an Bedeutung. Da der Quellcode die meisten Informationen über das Programm und den Programmierer und dessen Know How enthält, werden Programme zumindest beim „herkömmlichen“ Vertrieb95 üblicherweise nur im Maschinencode weitergegeben, der Quelltext bleibt unter Verschluss. Das Urheberrecht ermöglicht dies durch umfangreiche Verbotsrechte des Urhebers.96 Folge dessen ist es, dass die dem Programm zugrundeliegenden Ideen und auch seine Schnittstellen zu anderen Programmen geheim gehalten werden können. b) Maschinencode Als Maschinencode (Binärcode) wird der Quellcode in seiner maschinenlesbaren Gestalt bezeichnet. Der Binärcode ist das Endprodukt im Entwicklungsprozess, das unmittelbar auf dem Rechner laufen kann. Er besteht aus einem System von Instruktionen und Daten, die in binären Spannungszuständen (Nullen und Einsen) dargestellt werden. Der Prozessor kann diese Zahlenreihen in Arbeitsschritte umsetzen. Theoretisch ist Maschinencode menschenlesbar. Allerdings ist die manuelle Übersetzung vom Maschinen- in den Quellcode sehr aufwändig. Genauso ist es grundsätzlich möglich, Programme direkt im Binärcode zu schreiben. Auch das bedeutet jedoch erheblichen Aufwand und geschieht daher so gut wie nie. Programmieren im Maschinencode ist nur dann erforderlich, wenn kein Assembler oder Compiler für den Zielprozessor zur Verfügung steht.97 Abzugrenzen, wenn auch oft fälschlicherweise synonym verwendet, ist der Maschinencode von der so genannten Assemblersprache, die zulässige Bitfolgen mit einem oder mehreren Namen (den sog. Mnemoniks) und evtl. Zahlen darstellt. Diese Vereinfachungen werden anschließend vom sog. Assembler direkt in den maschinenverständlichen Binärcode übersetzt, so dass 95 Dazu mehr siehe unten B. I. 96 Vgl. zu einer Offenlegungspflicht hinsichtlich des Quellcodes u. a. Ernst, MMR 2001, 208, und unten Drittes Kapitel, C. IV. 2. b). 97 Aufgrund der Langwierigkeit und Komplexität dieses Verfahrens kommt diese Form der Programmierung aber sehr selten vor. 47 die Assemblersprache eine Zwitterform darstellt, die eher auf der Ebene der Programmiersprachen einzuordnen ist als beim Maschinencode. c) Der Algorithmus Der am wenigsten greifbare und dennoch zentrale Begriff im Bereich der Programmierung ist der des Algorithmus, mit dem nahezu alle Erscheinungsformen des Computerprogramms bezeichnet werden, die nicht unmittelbar Code sind. aa) Begriff Allgemein gesehen sind Algorithmen Handlungsvorschriften zur Lösung eines Problems bzw. einer bestimmten Art von Problemen in endlich vielen Schritten, so wie etwa Kochrezepte oder Bedienungsanleitungen.98 Eine allgemeingültige Definition gibt es nicht.99 Mittlerweile wird zumeist von einer Bedeutung ausgegangen, die sich aus vier Komponenten zusammensetzt:  Das Verfahren, welches der Algorithmus beschreibt, muss in einem endlichen Text eindeutig beschreibbar sein (Finitheit).  Jeder Schritt muss tatsächlich ausführbar sein (Ausführbarkeit).  Das Verfahren darf zu jedem Zeitpunkt nur endlich viel Speicherplatz benötigen (Dynamische Finitheit).  Das Verfahren darf nur endlich viele Schritte benötigen. Bezogen auf Computerprogramme bedeutet das Folgendes: Der Algorithmus ist das „Gerüst“ des Programms und gibt unabhängig von einer realen Implementierung, d. h. unabhängig von der Umsetzung dieses Algorithmus in eine konkrete programmiersprachliche Formulierung (den Code), seinen Ablauf vor. Er setzt sich zusammen aus einer Folge von Schritten, deren konkrete Abarbeitung die gestellte Aufgabe schließlich löst und die durch den Quellcode im Einzelnen beschrieben wird, ist selbst in seiner Existenz aber unabhängig von dieser Beschreibung. Ein einziger Algorithmus kann also auch in mehreren verschiedenen Programmiersprachen umgesetzt werden. Er beruht in der Regel auf einer Problemanalyse des Programmierers, der nach dem günstigsten Weg zur Lösung des Problems sucht und daraus zunächst die notwendigen Arbeitsschritte entwickelt, die er so lange weiter verfeinert, bis sie in Code umsetzbar sind.100 Damit ist der Algorithmus das Gegenstück 98 Sie können also in vielen Lebensbereichen auftreten, vgl. Keukenschrijver, in: Busse, PatG, 6. Aufl. 2003, § 1 RdNr. 48; Bacher/Melullis, in: Benkard, PatG, 10. Aufl. 2006, § 1 RdNr. 98c ff. Vgl. a. Ensthaler/Möllenkamp, GRUR 1994, 151ff. 99 Es ist auch fraglich, ob es eine solche angesichts der großen Spannbreite des Begriffs überhaupt geben kann. 100 Weber-Steinhaus, Computerprogramme im deutschen Urheberrechtssystem, 1993, S. 16 48 zum Quellcode und beschreibt die technische Interaktion zwischen Prozessor und sprachlicher Darstellung des Programms unabhängig von den spezifischen Eigenschaften dieser beiden Komponenten.101 In ihm ist die Hauptleistung des Programmierers zu sehen. Der Algorithmus kann in verschiedenen Abstraktionsformen auftreten, vom allgemeinen, zu unterschiedlichen Zwecken einsetzbaren Basisalgorithmus bis zur sehr konkreten Anweisung für den Codierer, der alle notwendigen Schritte des Programms zu entnehmen sind.102 Die grundsätzliche Allgemeingültigkeit hat dazu geführt, dass neue Algorithmen heutzutage nur sehr selten und mit hohem Arbeitsaufwand geschrieben werden. Häufiger werden bereits „fertige“ Algorithmen in neuem Zusammenhang oder in einer neuen Kombination verwendet und umgesetzt.103 bb) Abgrenzung zum Quellcode Algorithmen sind nicht an eine bestimmte Form gebunden. Sie können in den unterschiedlichsten Darstellungsformen in Erscheinung treten, als Formel, als Grafik, als Diagramm o. ä.104 und werden stets durch den Quellcode, d. h. das Computerprogramm in seiner menschenlesbaren Gestalt, genauer beschrieben und implementiert, allerdings ohne dass der Quellcode von der vorgegebenen Abfolge abweichen kann. Daraus wird zum Teil geschlossen, dass auch das, was gemeinhin als Computerprogramm verstanden wird, dem Inhalt nach ein Algorithmus sei,105 der lediglich in der Computersprache wiedergegeben werde. Der Unterschied liegt nach dieser Ansicht lediglich darin, dass die Mehrdeutigkeiten des Algorithmus in der ausformulierten Version nicht mehr vorliegen.106 Dem kann nur in Ansätzen zugestimmt werden. Das Computerprogramm enthält zwar stets die ihm zugrundeliegenden Algorithmen, die daher als notwendiger Bestandteil anzusehen sind. Darüber hinaus gehört zum Programm aber die sprachliche Umsetzung des Algorithmus, der Quellcode. Dieser enthält zusätzlich die weiter oben unter a) beschriebenen, nichttechnischen Hinweise für Nutzer und andere Programmierer. Der Algorithmus ist also als Vorstufe des Quellcodes anzusehen, und verschiedene Codes können ein- und denselben Algorithmus auf verschiedene Weise umsetzen.107 Die Übergänge sind allerdings fließend, und zwar vom Algorithmus 101 Horns, GRUR 2001, 1, 7; ähnlich van Raden, GRUR 1995, 451, 455 102 Sog. Komplexalgorithmus. Dazu unten S. 158. 103 Vgl. z. B. Dreier, in: Dreier/Schulze, UrhG, 3. Aufl. 2008, § 69a RdNr. 22. Haberstumpf, in: Lehmann, Rechtsschutz und Verwertung von Computerprogrammen, 1993, Kap. II RdNr. 23ff. 104 Vgl. Horns GRUR 2001, 1, 7. 105 Haberstumpf, in: Lehmann, Rechtsschutz und Verwertung von Computerprogrammen, 1993, Kap. II RdNr. 24f. Rauber, Der urheberrechtliche Schutz von Computerprogrammen, 1988, S. 20; in Ansätzen auch Weber-Steinhaus, Computerprogramme im deutschen Urheberrechtssystem, 1993, S. 19. 106 Weber-Steinhaus, Computerprogramme im deutschen Urheberrechtssystem, 1993, S. 19. 107 Ein Programm kann außerdem mehrere Algorithmen beinhalten. 49 in seiner allgemeinsten Form bis zum ausformulierten Computerprogramm. Eine saubere Trennung im Sinne einer isolierten Betrachtung sprachlicher und funktioneller Bestandteile des Codes ist so gut wie nicht möglich, schon weil jede einzelne Formulierung unmittelbar mit einer Funktionalität verknüpft ist. Algorithmus und Code bilden mithin eine technische Einheit. Kienzle108 bezeichnet beide unter Berücksichtigung dieser Abgrenzungsschwierigkeiten treffend als „die zwei Aspekte des Computerprogramms“.109 Einerseits verkörpert das Computerprogramm eine Musterlösung des jeweiligen technischen Problems, nämlich den Algorithmus, andererseits enthält es Befehle in sprachlicher Ausgestaltung, die konkret genug sind, um die Durchführung der Operation zu veranlassen. Erst durch diese sprachliche Formulierung wird der Rechner veranlasst, die vom Algorithmus vorgegebenen Organisationsschritte auszuführen. Codebestandteile, die völlig losgelöst vom Algorithmus als sprachliche Konstrukte betrachtet werden können, können daher allenfalls Kommentarzeilen sein, die mit der eigentlichen, durch den Algorithmus vorgegebenen Befehlsabfolge nichts zu tun haben. Dies ist bei der Untersuchung des urheberrechtlichen Schutzes zu beachten. III. Allgemeingültige Definition des Computerprogramms Eine ungefähre Vorstellung davon, was ein Computerprogramm ausmacht, hat wohl fast jeder. Eine allgemeingültige Legaldefinition fehlt währenddessen im deutschen und auch im europäischen Recht.110 Diese Lücke ist darauf zurückzuführen, dass der Gesetzgeber bei der Formulierung der urheberrechtlichen Regelungen den Begriff für den technischen Fortschritt offen halten wollte.111 Bemerkenswerter Weise hat es vergleichbare Erwägungen im Patentrecht soweit ersichtlich nicht gegeben, wenngleich dieses sowohl auf deutscher als auch auf europäischer Ebene „Computerprogramme als solche“ vom Schutz ausnimmt und es hier gleichermaßen an einer Definition fehlt. Die Überlegung des Gesetzgebers hat dazu geführt, dass mit jeder Untersuchung des Themas stets aufs Neue versucht wird, eine Definition zu finden, die zur jeweiligen Schwerpunktsetzung passt. Daraus entsteht eine Vielfalt an rechtlichen Deutungsmöglichkeiten, die insbesondere im Hinblick auf das Patentrecht Rechtsunsi- 108 Kienzle, Die Patentierbarkeit von Computerprogrammen, 1975, S. 40. 109 Zum Begriff des Algorithmus auch schon Ulmer/Kolle, GRUR Int 1982, 489, 497; Erdmann, CR 1986, 249, 253. 110 Das US-amerikanische Urheberrecht enthält demgegenüber in 17 U.S.C. §101 eine Definition. Zum europäischen Recht: Ohst, Computerprogramm und Datenbank, 2003, S. 5. Das Fehlen einer Definition wurde vor allem im Patentrecht auch schon als eine der Hauptschwierigkeiten im Zusammenhang mit Softwarepatenten bezeichnet, vgl. Laub, GRUR Int. 2006, 629, 630. 111 BT-Drs. 12/4022, S. 9. Einige Autoren gehen bis heute davon aus, dass eine rein juristische Definition des Begriffs nicht gefunden werden kann, sondern dieser stets von der Technik beeinflusst sein muss, vgl. Koch, GRUR 2000, 191ff.

Chapter Preview

References

Zusammenfassung

Die vorliegende Arbeit will langjährige Missverständnisse und Schwierigkeiten des immaterialgüterrechtlichen Schutzes von Computerprogrammen endgültig ausräumen. Die Betrachtung aus wettbewerbsorientiertem Blickwinkel auf der Grundlage der technischen und ökonomischen Besonderheiten ist – soweit ersichtlich – die erste Untersuchung, die sowohl das Urheber- als auch das Patentrecht einbezieht und dabei eine umfassende Neuregelung vorschlägt.

Dr. Lina Barbara Böcker befasst sich im Rahmen ihrer Tätigkeit am Institut für Wirtschafts-, Wettbewerbs- und Regulierungsrecht an der Freien Universität Berlin in erster Linie mit wettbewerbsrechtlichen Problemen des Immaterialgüterrechtsschutzes und allgemeinem Zivilrecht.