In den letzten Jahren erfuhr die Softwareentwicklung im Kontext von Open Source eine zunehmende Verbreitung und Popularität und hat sich in den verschiedensten Anwendungsdomänen konstituiert. Die einzelnen Prozesse bzw. Methoden, die sich im Bereich der Open Source Softwareentwicklung evolutionär herausgebildet haben, weisen in den zahlreichen Open Source Softwareprojekten zum Teil ähnliche Strukturen und Eigenschaften auf. Die an ihnen beteiligten Personen mit ihren spezifischen Rollen sind überwiegend miteinander vergleichbar.
Dies rechtfertigt den Gedanken, sowohl bereits existierende Open Source Entwicklungsmodelle identifizieren zu wollen, als auch neue Modelle entwickeln zu können. Im Bereich des Software Engineering wurde längst erkannt, dass sich das allgemeine Open Source Softwareentwicklungskonzept in verschiedenen Aspekten erheblich von dem der proprietären Softwareentwicklung unterscheidet. Daher bedürfen diese Open Source Entwicklungsmodelle einer eigenen wissenschaftlichen Betrachtung. In unterschiedlichen Veröffentlichungen wurden zwar bereits einzelne Aspekte der Open Source Softwareentwicklung analysiert und vage Theorien über zugrunde liegende Entwicklungsmodelle verfasst; dennoch existiert bislang noch keine umfassende Beschreibung der typischen Modelle der Open Source Softwareentwicklung. Da dies eine Voraussetzung für die weitere wissenschaftliche Auseinandersetzung mit Open Source Softwareentwicklungen darstellt, wurde im Rahmen dieser Arbeit eine Vorgehensweise erarbeitet, die dabei hilft, solche Entwicklungsmodelle im Bereich der Open Source Software analysieren zu können, d.h. sie zu identifizieren bzw. sie zu erfassen und sie damit schließlich vergleichbar zu machen. Die Analyse wurde mit Hilfe einer morphologischen Methode vollzogen. Dies wurde unter Verwendung von bereits untersuchten Open Source Entwicklungsmustern und Einteilungen von Open Source Softwareentwicklungen in verschiedene Kategorien durchgeführt. Da diese Entwicklungsmuster und Kategorisierungen von Open Source Softwareentwicklungen Ergebnisse einer Studie sind und an konkreten Open Source Beispielen ausgerichtet sind, wurden sie im Rahmen dieser Arbeit verallgemeinert, um sie in der Analyse anwenden zu können.
Inhaltsverzeichnis
Abbildungsverzeichnis
Tabellenverzeichnis
Abkürzungsverzeichnis
1 Einleitung
1.1 Ausgangssituation
1.2 Zielsetzung
1.3 Vorgehensweise
2 Grundlagen
2.1 Begriffsdefinitionen
2.1.1 Open Source Software
2.1.2 Freie Software
2.1.3 Gemeinsamkeiten und Unterschiede
2.1.4 Modelle
2.2 Open Source als Konzept für die Softwareentwicklung
2.2.1 Proprietäre Softwareentwicklung
2.2.2 Open Source Softwareentwicklung
3 Open Source Modelle
3.1 Internet als Kommunikationsplattform
3.2 Open Source Communities
3.2.1 Struktur und Organisation
3.2.2 Mitglieder und ihre Rollen
3.3 Entwicklungsmodelle im Kontext von Open Source
3.3.1 Entwicklungsmuster
3.3.2 Klassifikationen von Open Source Softwareentwicklungen
3.4 Analyse und Vergleich der dargestellten Modelle
3.4.1 Morphologische Methode
3.4.2 Open Source Softwarebeispiel
3.4.3 Vergleich von Open Source Modellen
4 Zusammenfassung und Ausblick
Literaturverzeichnis
Abbildungsverzeichnis
Abbildung 1: Vorgehensweise
Abbildung 2: Allgemeine Struktur einer Open Source Community vgl [Koch 2004, Nakakoji 2002]
Abbildung 3: Klassifizierung der am Open Source Softwareentwicklungsprozess beteiligten Personen und ihren Aufgaben
Abbildung 4: Einfacher Entwicklungsstrang vgl. [Nakakoji 2002]
Abbildung 5: Einfacher Entwicklungsstrang mit Testversionen vgl. [Nakakoji 2002]
Abbildung 6: Mehrfacher Entwicklungsstrang vgl. [Nakakoji 2002]
Abbildung 7: Mehrfacher Entwicklungsstrang nach Anforderung vgl. [Nakakoji 2002]
Abbildung 8: Möglicher evolutionärer Prozess von Open Source Softwareentwicklungen vgl. [Nakakoji 2002]
Tabellenverzeichnis
Tabelle 1: Hochgerechnete Größen von Open Source Communities [Johnson 2007]
Tabelle 2: Verwendete Symbole und ihre Erläuterung
Tabelle 3: Morphologische Matrix
Tabelle 4: Kombination von Ausprägungen für das Apache Webserver Entwicklungsmodell
Abkürzungsverzeichnis
Abbildung in dieser Leseprobe nicht enthalten
1 Einleitung
Als das Computerzeitalter in der Mitte des 20. Jahrhunderts begann, gab es noch keine Softwarefirmen im heutigen Sinne. Die Software war Bestandteil der von den Hardwareherstellern angebotenen Computersysteme. Zu diesem Zeitpunkt wurden zusätzliche Softwareprogramme von Anwendern lediglich für ihre eigenen Bedürfnisse geschrieben. Diese zusätzliche Software wurde häufig öffentlich zur Verfügung gestellt, z.B. für das Betriebssystem Unix1. In den siebziger Jahren wurde dem entgegengewirkt und der Weg hin zu kommerziell vertriebener Software geebnet, die besonders durch Bill Gates in seinem öffentlichen Brief „An Open Letter to Hobbyists“ verlangt wurde [Microsoft 1976].
Im Gegensatz dazu entstand mit der Gründung der Free Software Foundation2 (FSF) eine organisierte Gegenbewegung, die freie Software propagierte. Hier haben das GNU-Projekt3 und die GNU General Public License (GPL) ihren Ursprung. 1998 wurde mit der Gründung der Open Source Initiative4 (OSI) die erste Version der Open Source Definition5 (OSD) veröffentlicht. Begründer dieser Bewegung waren Eric S. Raymond und Bruce Perens. Die auf den Debian Free Software Guidelines6 beruhende Open Source Definition ist eine zehn Kriterien umfassende Bedingung. Die Lizenz, unter der die entsprechende Software veröffentlicht wird, muss alle in der Open Source Definition beschriebenen Forderungen erfüllen. Erst dann kann Software als Open Source (deutsch: quelloffen) bezeichnet werden. Im Vordergrund stehen hier die freie und unbeschränkte Verfügbarkeit sowie Weitergabe der Software und des mit ihr verbundenen Quellcodes. Des Weiteren sind Veränderungen an Quellcode und die Weitergabe dieser Veränderungen ohne Beschränkung erlaubt [Perens 2007].
Die beiden Bewegungen „Free Software Foundation“ und „Open Source Initiative“ haben unterschiedliche Betrachtungsweisen: Die Open Source Initiative sieht die Tatsache, dass eine Software quelloffen sein sollte als rein praktisch an und stellt sie ethisch nicht in Frage. Im Vordergrund für die Open Source Initiative steht die Verwaltung und das Marketing der Open Source Definition. Im Gegensatz dazu sieht die Free Software Foundation Open Source Software als soziales Problem. Trotz dieser unterschiedlichen Sichtweisen, verfolgen beide Bewegungen grundsätzlich dieselben Ziele.
Aus diesem Grund treiben beide Bewegungen die Open Source Entwicklung voran. Dadurch ist ein Trend hin zum Einsatz von Open Source Lösungen sowohl im privaten als auch im öffentlichen bzw. kommerziellen Bereich zu verspüren. Dieser Trend zu Open Source bezieht sich schon lange nicht mehr nur auf die entstehenden Softwareprodukte, sondern auch die für die Open Source Software typischen Entwicklungsmodelle bzw. -methoden rücken immer mehr in das Interesse von Privatleuten und kommerzieller Herstellern von proprietärer7 Software.
Im Gegensatz zu proprietärer Software ist das Neue an der Open Source Bewegung die Bereitstellung quelloffener und selbst geschriebener Software. Diese kann beliebig genutzt und verändert werden. Die dabei entstehenden Programme können von ihren Anwendern weiterentwickelt und für eigene, spezielle Aufgaben modifiziert bzw. optimiert werden. So entstehen schnell fehlerfreie und stabile Programmversionen. Oft geschieht diese Art der Softwareentwicklung kollaborativ, d.h., dass mehrere Entwickler mit Hilfe von Vereinbarungen, Probleme koordinieren und lösen, so z.B. Softwareinhalte (Quellcode) gemeinsam verändern und diskutieren. Dieser Ansatz der Softwareentwicklung umfasst die Aspekte Kommunikation, Koordination und Kooperation zwischen den einzelnen Beteiligten. Durch die so genannten Open Source Communities8 wird dieser Ansatz um die Einbeziehung des organisationsbedingten (technisches, soziales und organisatorisches Umfeld) und persönlichen Kontexts (Motivation, Kompetenz) des einzelnen Beteiligten erweitert.
Der Erfolg von Open Source Software wird durch die folgenden Faktoren bestimmt: leichte Bedienbarkeit, der modulare Aufbau und die Wiederverwendbarkeit von Open Source Softwarekomponenten [Koch 2004].
Durch die leichte Bedienbarkeit können potentielle Anwender in ein Open Source Softwareprojekt als Programmierer einbezogen werden. Dadurch entsteht auf der einen Seite ein anwachsendes Interesse für das Endprodukt am Markt und auf der anderen Seite fließen zusätzlich zu den bestehenden Ideen seitens der Projektinitiatoren weitere Anforderungen bzw. Lösungsvorschläge von der Anwender-/Entwicklerseite mit ein.
Der modulare Aufbau von Open Source Software ermöglicht die dezentrale, zeitlich und räumlich verteilte Entwicklung von Komponenten, die dann zu komplexen Systemen zusammengeführt werden können. Zudem können sich die am Projekt Beteiligten, ohne einen Gesamtüberblick über das komplette System zu haben, schneller in die Programmierung einarbeiten. Durch Parallelisierung der Programmierung und durch Bereitstellung standardisierter Schnittstellendefinitionen wird einerseits der Softwareentwicklungsprozess erheblich verkürzt und andererseits die reibungslose Zusammenarbeit von Softwaremodulen sichergestellt.
Die Wiederverwendbarkeit wird durch die freie Verfügbarkeit des Quellcodes und durch den modularen Aufbau der Software gewährleistet. Dies kann zur Ersparnis von Entwicklungsaufwand und somit -kosten beitragen.
Um der Open Source Softwareentwicklung Herr zu werden, braucht es gewisse Modelle bzw. Methodiken, nach denen im Entwicklungsprozess verfahren wird. Nur so kann sichergestellt werden, dass die Entwicklung eines Open Source Softwareprodukts erfolgreich durchgeführt werden kann. Die richtigen Open Source Entwicklungsmodelle bzw. -methoden sind der Garant für den Erfolg des daraus resultierenden Softwareprodukts.
1.1 Ausgangssituation
Durch das Internet als weltweites Kommunikationsmedium hat das Konzept der Open Source Softwareentwicklung eine hohe Verbreitung und Allgegenwärtigkeit erreicht. Dies wird auch verdeutlicht durch die auf zahlreicher Open Source Software basierende Internetinfrastruktur. Beispielsweise ist Sendmail9 das führende Mail-Transfer-System und BIND10 die am weitesten verbreitete Implementierung eines Internet Domain Name Systems des Internets [Johnson 2007].
Der Erfolg von Open Source ist verbunden mit dem schnellen Wachstum des Internets. Das Internet ermöglicht ein leichteres Zusammenarbeiten zwischen Programmierern in größerem Umfang. So ist es nicht verwunderlich, dass Open Source Projekte, wie Linux oder Apache erfolgreich eingeführt wurden und weiterhin betrieben werden. Dies verdanken Open Source Lösungen der zahlreichen, stetig wachsenden Anzahl an Communities. Zur Verdeutlichung zeigt die Tabelle 1 eine Zusammenstellung der hochgerechneten Community-Größe der an den verschiedenen Open Source Projekten beteiligten Personen.
Abbildung in dieser Leseprobe nicht enthalten
Tabelle 1: Hochgerechnete Größen von Open Source Communities [Johnson 2007]
Die in der Tabelle aufgeführten Zahlen verdeutlichen die Entwicklung und das andauernde Interesse an Open Source. Die Open Source Entwicklung ist eine wettbewerbsfähige Alternative zu konventionellen Softwareentwicklungsmethoden. Die Anzahl an Open Source Entwicklungen steigt stetig. Es werden zahlreiche Open Source Betriebssystemdistributionen (z.B. das Betriebssystem Linux), Programmbibliotheken für Programmiersprachen, Server- und Anwendungssoftware etc. entwickelt und vertrieben. Wie eingangs beschrieben, erfüllt das Internet eine wichtige Rolle für das Open Source Konzept. Nicht nur die Entwicklung, auch die Art der Entwicklungen ist stark durch das Internet geprägt.
Aus diesem Grund ist es essentiell wichtig, Modelle bzw. Entwicklungsmodelle bereitzustellen, die es ermöglichen, die Entwicklung von Open Source Software innerhalb eines Projekts zu planen und zu organisieren. Erschwerend ist hierbei, dass es bisher keine einschlägige Literatur zu Open Source Softwareentwicklungen gibt.
1.2 Zielsetzung
Das Ziel der Arbeit ist die Identifikation und der Vergleich von Open Source Modellen. Im engeren Sinne sind hiermit Entwicklungsmodelle gemeint. Hierbei wird der Schwerpunkt auf Open Source Softwareprojekte gelegt, die von Communities, die das Internet als Kommunikationsplattform nutzen, vorangetrieben werden.
Durch die Vielzahl an Open Source Softwareprojekten und aufgrund mangelnder Informationen über diese, ist es schwierig, die einzelnen Entwicklungsmodelle herauszufiltern. Es wird daher ein Verfahren entwickelt, anhand dessen spezifische Entwicklungsmodelle mit ihren verschiedenen Merkmalen und Ausprägungen identifiziert und anschließend verglichen werden können.
1.3 Vorgehensweise
Nach dieser Einleitung werden die Grundlagen bezüglich Open Source und der Entwicklungsstrategie von Open Source Software beschrieben. Hierbei werden grundlegende Begriffe kurz erläutert. Daraufhin werden die Idee und die Organisation von Open Source Entwicklungen mit ihren Prozessen und Rollen innerhalb dieser aufgezeigt und mit klassischen, konventionellen Softwareentwicklungsprozessen verglichen.
Daraufhin wird im dritten Kapitel auf die Open Source Modelle bzw. Entwicklungsmodelle eingegangen. Nachdem der generelle Aufbau von Open Source Communities erläutert worden ist, wird ein Einblick in die von Open Source Projekten benutzten so genannten Evolutionsmuster (engl.: evolution pattern) gegeben. Im Folgenden werden Klassifizierungen von Open Source Softwareentwicklungen vorgenommen. Diese Muster und Klassifizierungen sind ein wichtiger Bestandteil zur möglichen Definition von Entwicklungsmodellen von Open Source Software. Mit Hilfe einer morphologischen Methode11 in Form einer Matrix, mit der Entwicklungsmodelle identifiziert werden können, wird ein Entwicklungsmodell anhand eines Fallbeispiels aus dem Bereich Open Source definiert. Erst mit dieser morphologischen Matrix mit spezifischen Merkmalen von Open Source Softwareprojekten und deren Ausprägungen wird es möglich, solche Entwicklungsmodelle zu vergleichen. Danach können eine Zusammenfassung und ein Ausblick erfolgen. Die Abbildung 1 visualisiert diese Vorgehensweise.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 1: Vorgehensweise
2 Grundlagen
Dieses Kapitel behandelt zunächst die Begriffsdefinitionen, die im Rahmen dieser Arbeit benutzt werden. Des Weiteren wird auf Open Source als Konzept für die Softwareentwicklung eingegangen und dabei eine Gegenüberstellung von proprietärer und Open Source Softwareentwicklung vollzogen.
2.1 Begriffsdefinitionen
Oft wird der Begriff „Open Source Software“ mit dem Begriff der „Freien Software“ gleich gestellt. Tatsächlich ist es aber – wie eingangs erwähnt – so, dass die Grundgedanken von Open Source Software denen von Freier Software widersprechen. Open Source Software verzichtet zugunsten der Kommerzialisierung auf sämtliche langfristige Überlegungen, wie Philosophie, Ethik oder gesellschaftliche Effekte und konzentriert sich auf den technischen Vorteil. Freie Software hingegen stellt die oben genannten tief gehenden und grundsätzlichen Überlegungen in den Vordergrund [FSF 2007].
Im Folgenden dieser Arbeit wird zwar der Terminus Open Source Software benutzt, gleichzeitig wird jedoch auch die Abgrenzung der beiden Begrifflichkeiten aufgezeigt. Es werden also sowohl die Gemeinsamkeiten als auch die Unterschiede beider Begriffe verdeutlicht.
2.1.1 Open Source Software
Entwickelt wurde der Begriff „Open Source Software“ von der Open Source Initiative. Zum einen sollte mit ihm eine Variante des vergleichsweise eher eingegrenzten Begriffs der „Freien Software“, der von der Free Software Foundation entwickelt wurde, festgelegt werden. Zum anderen sollte eine möglichst weit reichende Akzeptanz und Verbreitung von Open Source Software erreicht und gewährleistet werden. Hierzu schuf die Open Source Initiative unter Bruce Perens und Eric S. Raymond die so genannte Open Source Definition, die verschiedene Kriterien definiert. Diese müssen in den Lizenzbestimmungen der jeweiligen betrachteten Software enthalten und von dieser erfüllt sein, damit sie als Open Source Software angesehen werden kann. [Perens 2007].
Zu den zentralen Kriterien der Open Source Definition gehören der freie Zugang zum Quellcode, die Möglichkeit zur freien Weitergabe und zur Modifikation dieses Quellcodes sowie der uneingeschränkte Anwender- und Einsatzbereich der betrachteten Software. [OSI 2006, FSF 2007]. Folgt also eine Software der Open Source Definition, hat jeder beliebige das Recht, die Software frei zu verteilen und Modifikationen an ihrem Quellcode vorzunehmen. Dabei wird der Quellcode als integraler Bestandteil der betrachteten Software angesehen. Ein weiteres Kriterium ist, dass Software-Derivate12, die durch etwaige Modifikationen des Quellcodes entstanden sind, unter denselben (Lizenz-) Bestimmungen weiter vertrieben werden.
2.1.2 Freie Software
Die Bedeutung des Wortes „frei“ in dem Term „Freie Software“ von Richard M. Stallman ist im Kontext zu der Definition zu verstehen, damit die Definition des Terms verstanden werden kann. Im Sinne der Free Software Foundation bedeutet der Begriff „frei“ in diesem Kontext nicht „kostenlos“, sondern ist im Sinne von „freiheitlich“, „free as in speech, not as in beer“, zu verstehen [FSF 2007].
Eine Software muss dem Anwender demnach laut der Free Software Foundation bestimmte Freiheiten gewähren, um als freie Software bezeichnet werden zu können. Zu diesen Freiheiten gehören unter anderem die Unabhängigkeit vom Einsatzgebiet, das Studieren und Adaptieren, die Weiterverbreitung und Modifikation sowie die anschließende Verteilung der Software. Die freie Verfügbarkeit des Quelltextes einer Software ist bei dieser Definition also keine direkte, sondern nur eine indirekte Bedingung, da diese für das Studieren bzw. Adaptieren sowie für die Modifikation der Software benötigt wird.
2.1.3 Gemeinsamkeiten und Unterschiede
Tatsächlich wird den Unterschieden der Definitionen von Open Source Software und Freier Software in der Praxis wenig Bedeutung zugemessen. Auch wenn sie unterschiedlich formuliert sind, enthalten doch beide Termini im Prinzip die gleichen Kriterien. Die meisten einschlägigen Software-Lizenzen decken beide Definitionen ab, so dass auch die meiste Software, die in der freien Entwicklergemeinschaft entwickelt wird, sowohl Open Source als auch Freie Software darstellt.
Die Open Source Initiative legt den Fokus auf die praktischen Aspekte. Der ethische Teil der Definition wird erst später genannt. Dies ist vor allem darin begründet, dass die Open Source Initiative mit ihrer Terminologie vor allem Unternehmen von den praktischen Vorteilen der Open Source Softwarentwicklungsmodellen überzeugen will.
Die Free Software Foundation hingegen spricht in ihrer Definition zwar von Freiheiten, legt den Fokus aber vor allem auf die ethischen Aspekte. Im Vordergrund steht hier, dass eine Software, die ja heute oftmals die Gemeinschaft, sprich Community, kontrolliert, ebenso von der Gemeinschaft kontrolliert werden sollte. Praktische Überlegungen, wie die Verfügbarkeit des Quelltextes, sind nur indirekte Bedingungen und nicht Teil der eigentlichen Definition.
Es ist daher heute vor allem eine politische Entscheidung, ob Entwickler von ihrer geschriebenen Software als freie Software oder als Open Source Software sprechen [Feller 2005].
2.1.4 Modelle
In dieser Arbeit werden Open Source Modelle thematisiert. Im Folgenden wird daher eine Beschreibung und eine Kontexteinstufung des Begriffs „Modell“ gegeben, wie er in dieser Arbeit gemeint und benutzt wird.
Modelle sind in dieser Arbeit als so genannte Entwicklungsmodelle zu verstehen, die in den Kontext der Softwareentwicklung einzuordnen sind. Anhand von Entwicklungsmodellen ist es möglich, Prozesse zu beschreiben, bei denen sich einzelne Phasen bzw. Stufen identifizieren lassen. Bezogen auf die Softwareentwicklung bedeutet das, dass mit einem solchen Entwicklungsmodell die verschiedenen Phasen eines Softwareprodukts von seiner Entstehung bis zum Ende seiner Verwendung vorgegeben werden [Claus 2006]. Das Entwicklungsmodell hilft den an der Softwareentwicklung beteiligten Personen den gesamten Prozess der Entwicklung so aufzuteilen, dass die Produktentwicklung überschaubar und somit beherrschbar wird. Bei der Aufteilung in die einzelnen Phasen, die wiederum aufgegliedert werden können, stehen je nach Entwicklungsmodell verschiedene Aspekte wie Qualitätssicherung, Nebenläufigkeit etc. im Vordergrund.
2.2 Open Source als Konzept für die Softwareentwicklung
Bei der Behandlung des Themas Softwareentwicklung wird häufig auch von dem Begriff des „Software Engineering“ gesprochen. Hierbei werden Konzepte, Methoden und Werkzeuge bereitgestellt, mit denen die Entwicklung von Software durchgeführt wird.
Um sich nun ein Bild von Open Source als Modell für die Softwareentwicklung machen zu können, werden zunächst einige Aspekte der Entwicklung von proprietärer Software betrachtet und beschrieben. Danach wird auf die Softwareentwicklung im Kontext von Open Source eingegangen. So werden die Unterschiede dieser beiden Entwicklungsstrategien von Software herausgearbeitet und verdeutlicht.
[...]
1 Darstellung der Geschichte von Unix unter http://crackmonkey.org/unix.html, online am 18.12.07
2 Der größte Non-Profit-Sponsor des GNU-Projekts (http://www.gnu.org/home.de.html, online am 18.12.07)
3 1984 gegründet, um ein vollständiges, unixartiges Betriebssystem auf Basis von Freier Software zu entwickeln (http://www.gnu.org/home.de.html, online am 18.12.07)
4 Organisation, die sich der Förderung von Open Source Software widmet (http://www.opensource.org/, online am 18.12.07)
5 Die Aktuelle Version der Open Source Definition ist Version 1.9 (http://opensource.org/docs/osd, online am 18.12.07)
6 Vgl. http://www.debian.org/social_contract, online am 18.12.07
7 Vgl. http://www.gnu.org/philosophy/categories.de.html#ProprietarySoftware, online am 18.12.07
8 Von community (deutsch: Gemeinde, Gemeinschaft); Es wird in der vorliegenden Arbeit weiterhin der englische Begriff „Community“ genutzt
9 Vgl. http://www.sendmail.org/, online am 18.12.07
10 Vgl. http://www.isc.org/index.pl?/sw/bind/index.php, online am 18.12.07
11 vgl. [Ritchey 2006]
12 Sozusagen „Software-Abkömmlinge“
- Quote paper
- Jan Nicolai Arsenijevic (Author), 2008, Identifikation und Vergleich von Open Source Modellen, Munich, GRIN Verlag, https://www.grin.com/document/122923
-
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X. -
Upload your own papers! Earn money and win an iPhone X.