ΕΠΑΝΑΧΡΗΣΙΜΟΠΟΙΗΣΗ ΣΥΣΤΑΤΙΚΩΝ ΛΟΓΙΣΜΙΚΟΥ ΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Φανή Α. Ορεστιάδου. Αναπληρωτής Καθηγητής Πληροφορικής



Σχετικά έγγραφα
«Επαναχρησιμοποίηση συστατικών λογισμικού εφαρμογών ήχου»

Ελεύθερο Λογισμικό. Η αρχή της ιστορίας Κιαγιαδάκης Γιώργος (το labάκι)

Ένωση Ελλήνων Χρηστών και Φίλων ΕΛ/ΛΑΚ

Τεχνολογίες Ανάπτυξης Ηλεκτρονικού Καταστήματος Μικρομεσαίας Επιχείρησης. Μικρομεσαίες Επιχειρήσεις και Καινοτομία

Μπορούμε και χωρίς Πατέντες

Ελεύθερο Λογισμικό. Ερευνητική Εργασία Τμήμα Α2-3 ου ΓΕΛ Κομοτηνής Ιανουάριος 2014

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

Ενότητα 2. Πηγές Λογισμικού. Πληροφοριακά Συστήματα Διοίκησης ΙI Νίκος Καρακαπιλίδης 2-1

Σταύρος Καουκάκης Ευτύχιος Βαβουράκης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Βασικές Έννοιες Διαδικτύου, Wordpress και BuddyPress

Ανάπτυξη πλήρους διαδικτυακής e-commerce εφαρμογής με χρήση του CMS WordPress

Επιτελική σύνοψη κάθε παραγόµενο λογισµικό µπορεί να χρησιµοποιηθεί, να αντιγραφεί και να διανεµηθεί ελεύθερα

Εισαγωγή στην Πληροφορική

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

ΚΕΦΑΛΑΙΟ 2 - ΛΟΓΙΣΜΙΚΟ

Σεμινάριο Wordpress CMS (Δημιουργία Δυναμικών Ιστοσελίδων)

Αντικειμενοστρεφής Προγραμματισμός

ΟΙ ΝΕΕΣ ΤΕΧΝΟΛΟΓΙΕΣ ΩΣ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟ ΕΡΓΑΛΕΙΟ

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

ΠΑΡΟΥΣΙΑΣΗ ΕΕΛ/ΛΑΚ

ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΣΥΜΦΩΝΙΑ ΠΛΑΙΣΙΟ ΣΥΝΕΡΓΑΣΙΑΣ

Ελεύθερο Ανοικτό Λογισμικό

Λειτουργικό Σύστημα Linux ~ Μια σύντομη εισαγωγή

Μονάδες Αριστείας ΕΛ/ΛΑΚ. 28/9/2014 Μονάδες Αριστείας ΕΛ/ΛΑΚ 1

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ «Εκμάθηση, δοκιμή και εφαρμογή των εργαλείων της πλατφόρμας OPEN-SME για επαναχρησιμοποίηση κώδικα»

ΜΟΝΑΔΕΣ ΑΡΙΣΤΕΙΑΣ ΑΝΟΙΧΤΟΥ ΛΟΓΙΣΜΙΚΟΥ

ΤΕΧΝΙΚΗ ΝΟΜΟΘΕΣΙΑ ΕΛΕΥΘΕΡΟ ΛΟΓΙΣΜΙΚΟ-ΛΟΓΙΣΜΙΚΟ ΑΝΟΙΧΤΟΥ ΚΩΔΙΚΑ(ΕΛ-ΛΑΚ)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

Οι Ανοικτοί Εκπαιδευτικοί Πόροι του Αποθετηρίου «Κάλλιπος» του ΣEAB: Οφέλη χρήσης και προοπτικές βιώσιμης ανάπτυξης

Ένωση Μηχανικών Πληροφορικής και Επικοινωνιών Ελλάδας (ΕΜηΠΕΕ) συνοπτικά

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. 4o Εργαστήριο Σ.Α.Ε

Ελεύθερο Λογισμικό και GNU/Linux

Από την Διακίνηση της Πληροφορίας ως τα Creative Commons

Μηχανική Λογισμικού με Ανοιχτό Λογισμικό Δρ. Γεώργιος Κακαρόντζας Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Α.Τ.Ε.Ι. Θεσσαλίας

Αξιοποίηση της Τεχνολογίας των Εικονικών Μηχανών στην Επαγγελματική Εκπαίδευση και την Κατάρτιση Πληροφορικής. Βασιλάκης Βασίλειος Τζανάκης Δημήτριος

Κεφάλαιο 4: Λογισμικό Συστήματος

Ενσωματωμένα controls τα οποία προσαρμόζονται και χρησιμοποιούνται σε οποιαδήποτε ιστοσελίδα επιλέγει ο φορέας.

Στρατηγική Επιλογή Capital B.O.S. Capital B.O.S.

Θέματα Ατομικής Διπλωματικής Εργασίας - DRAFT Ακαδημαϊκό Έτος 2015/2016. Γεωργία Καπιτσάκη (Λέκτορας)

ΠΟΛΙΤΙΚΗ ΔΙΑΧΕΙΡΙΣΗΣ ΤΟΥ ΕΡΕΥΝΗΤΙΚΟΥ ΑΠΟΘΕΤΗΡΙΟΥ CRIS (CURRENT RESEARCH INFORMATION SYSTEMS) ΤΟΥ ΤΕΙ ΗΠΕΙΡΟΥ

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Εργαλεία CASE. Computer Assisted Systems Engineering. Δρ Βαγγελιώ Καβακλή. Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας Πανεπιστήμιο Αιγαίου

Εισαγωγή στην Πληροφορική

ΚΕΦΑΛΑΙΟ 2 ΛΟΓΙΣΜΙΚΟ

ΕΝΙΑΙΟ ΠΛΑΙΣΙΟ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΠΟΥΔΩΝ

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος

Μαλούτα Θεανώ Σελίδα 1

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α

ΕΛΛΑΚ και Τοπική Αυτοδιοίκηση

Ελεύθερο Λογισμικό / Λογισμικό Ανοικτού Κώδικα

Κωνσταντίνος Παρασκευόπουλος Καθηγητής Πληροφορικής (ΠΕ19 MSc) Ελληνικό Κολλέγιο Θεσσαλονίκης

Ελεύθερο Λογισμικό και GNU/Linux

Επικοινωνία Ανθρώπου- Υπολογιστή Σχεδίαση Αλληλεπίδρασης Ενότητα: 8 η

Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ»

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

Linux με τη χρήση κονσόλας

Αρχιτεκτονική Υπολογιστών

ΚΕΦΑΛΑΙΟ 1. Εισαγωγή στην Python. 1.1 Εισαγωγή

Η χρήση των wikis στις βιβλιοθήκες: δημιουργία "διαδραστικών" συλλογώναποθετηρίων. Το wiki της Βιβλιοθήκης του Μουσείου Μπενάκη.

Αρχιτεκτονική Υπολογιστών

Χρήση, προώθηση και συνεισφορά ΕΛ/ΛΑΚ από το ΕΚΤ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΤΕΡΕΑΣ ΕΛΛΑΔΑΣ- ΤΜΗΜΑ ΠΕΡΙΦΕΡΕΙΑΚΗΣ ΟΙΚΟΝΟΜΙΚΗΣ ΑΝΑΠΤΥΞΗΣ, ΜΑΘΗΜΑ: ΔΙΑΧΕΙΡΙΣΗ ΑΝΘΡΩΠΙΝΩΝ ΚΑΙ ΦΥΣΙΚΩΝ ΠΟΡΩΝ- ΧΡΙΣΤΟΣ ΑΠ.

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018. Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια)

Ηλεκτρονικό Επιχειρείν & Νέες Τεχνολογίες για Επιχειρηματικότητα ΔΕΟ45

Πληροφορική 2. Τεχνολογία Λογισμικού

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΣΥΜΒΑΣΗ στο πλαίσιο του έργου: «Δράσεις ανοιχτού ψηφιακού περιεχομένου, λογισμικού και υποδομών»

Τα πλεονεκτήματα της χρήσης των αρχών των digital humanities σε διαθεματικά σχολικά project

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΕΙΣΑΓΩΓΗ ΣΤOΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ - Π.Μ.Σ. ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Γιατί OpenOffice;;; (2)

ΠΟΛΙΤΙΚΗ ΔΙΑΧΕΙΡΙΣΗΣ ΤΟΥ ΙΔΡΥΜΑΤΙΚΟΥ ΑΠΟΘΕΤΗΡΙΟΥ ΤΟΥ ΤΕΙ ΗΠΕΙΡΟΥ

Τεχνολογία Πολυμέσων. Ενότητα4: Επεξεργασία Βίντεο - Avidemux. Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

ΜΟΝΑΔΕΣ ΑΡΙΣΤΕΙΑΣ ΑΝΟΙΧΤΟΥ ΛΟΓΙΣΜΙΚΟΥ

οικονομικές τάσεις Εκτεταμένη συνεργασία της εφοδιαστικής αλυσίδας. έργου FLUID-WIN το οποίο χρηματοδοτήθηκε από το 6ο Πρόγραμμα Πλαίσιο Παγκόσμιες

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

E-LIS: E-prints για τη Βιβλιοθηκονομία και την Επιστήμη της Πληροφόρησης (ΒΕΠ)

Πως μπορούν τα μέρη του υλικού ενός υπολογιστή να επικοινωνούν και να συνεργάζονται μεταξύ τους; Επειδή ακολουθούν συγκεκριμένες οδηγίες (εντολές).

Επιµέλεια Θοδωρής Πιερράτος

Εισαγωγή στην Python. Διάλεξη 0

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Μια καλή επιλογή θα ήταν (χωρίζοντας τις λέξεις με παύλα -) ή

Ημερίδα «Δείκτες ερευνητικής δραστηριότητας και σχεδιασμός πολιτικών για έρευνα, Τεχνολογική Ανάπτυξη και Καινοτομία

Wikis: Ανάπτυξη συνεργατικότητας με αξιοποίηση εφαρμογών και υπηρεσιών διαδικτύου

web mobile multimedia ανάπτυξη εφαρμογών

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

Βασίλειος Κοντογιάννης ΠΕ19

Υποέργο: 2 Τίτλος: «Δημιουργία και Αξιολόγηση Εικονικού Χώρου Εργαστηριών Ηλεκτρονικής» Επιστημονικός Υπεύθυνος: ΠΑΝΕΤΣΟΣ ΣΠΥΡΟΣ

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος Κεφάλαιο 1 ο Αρχές Διαχείρισης πληροφορίας στον Παγκόσμιο Ιστό... 15

Αρχιτεκτονική Λογισμικού

Προσφερόμενα Διπλώματα (Προσφερόμενοι Τίτλοι)

Transcript:

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΑΝΑΧΡΗΣΙΜΟΠΟΙΗΣΗ ΣΥΣΤΑΤΙΚΩΝ ΛΟΓΙΣΜΙΚΟΥ ΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Φανή Α. Ορεστιάδου Επιβλέπων : Ιωάννης Σταμέλος Αναπληρωτής Καθηγητής Πληροφορικής Θεσσαλονίκη, Οκτώβριος 2012 1

Πίνακας περιεχομένων Περίληψη...5 Ευχαριστίες...6 1. Εισαγωγή...9 1.1 Λογισμικό...9 1.2 ΕΛ/ΛΑΚ...12 1.2.1 Ιστορική Αναδρομή...12 1.2.2 Άδειες του Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα.15 1.2.3 Πλεονεκτήματα ΕΛ/ΛΑΚ...19 1.2.4 Κοινότητες και Απωθετήρια κώδικα των έργων ΕΛ/ΛΑΚ...23 1.3 Η Εταιρία του Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα (ΕΕΛ/ΛΑΚ)....27 1.3.1 Στόχοι ΕΕΛ/ΛΑΚ...27 1.4 Επαναχρησιμοποίηση του κώδικα...29 1.5 Η γλώσσα προγραμματισμού Java.. 30 1.5.1 Χαρακτηριστικά της Java 31 2. Eπαναχρησιμοποίηση Κώδικα.35 2.1 Τι είναι το Software Reuse.35 2.2 Πλεονεκτήματα και Μειονεκτήματα του Software Reuse..36 2.3 H ανάπτυξη του λογισμικού με βάση την επαναχρησιμοποίηση του κώδικα......37 2.4 Απαιτήσεις για την επαναχρησιμοποίηση του λογισμικού...38 2.5 Επίπεδα και τύπου του Software Reuse...39 2.6 Παραδείγματα από Software Reuse..41 3. OPEN- SME / Cope...44 3.1 Tι είναι το OPEN- SME 44 3.2 Eργαλεία του project OPEN- SME..45 3.3 Cope...46 3.3.1 Χρησιμοποιώντας το Cope 38 3.4 Συστατικά Λογισμικού.. 51 4. Συστατικά Λογισμικού 52 2

4.1 Έργα προς μελέτη....52 4.2 Συστατικά ανά έργο...54 4.2.1 atunes....55 4.2.2 XTreme Media Player 60 4.2.3 Frost.. 65 4.2.4 Java Msn Messanger..69 4.2.5 Makagiga.74 4.2.6 Morar char.75 5. Επισκόπηση της διαδικασίας εξαγωγής συστατικών..83 5.1 Βήματα της διαδικασίας εξαγωγής συστατικών.83 5.2 Γενικά Συμπεράσματα..94 6. Επίλογος..96 7.Αναφορές.97 8.Ευρετήριο.98 3

4

Περίληψη Σε μία ψηφιακή εποχή όπως η σημερινή, η έννοια του ελεύθερου λογισμικού έχει γνωρίσει ιδιαίτερη διάδοση ως προϊόν αλλά και ως ιδέα. Μια ιδέα που αναπτύσσεται ομαδικά από την παγκόσμια προγραμματιστική κοινότητα και παρέχει στους χρήστες την ελευθερία για μελέτη, αντιγραφή ακόμα και τροποποίηση του ελεύθερου λογισμικού. Πρόκειται για το τεχνολογικό μέλλον το οποίο δεν επηρεάζει αρνητικά τις βασικές ελευθερίες του ανθρώπου, ενώ συντηρείται από διαφανή συστήματα (όπως το ελεύθερο και ανοικτού κώδικα λογισμικό), τα οποία είναι βασισμένα σε ανοικτά και ασφαλή πρότυπα. Η παρούσα διπλωματική εργασία έχει ως στόχο την γνωριμία του φοιτητή με συγκεκριμένα εργαλεία που αποτελούν μέρος της πλατφόρμας OPEN- SME. Εφόσον εκπαιδευτεί σωστά καλείται να εφαρμόσει τα εργαλεία αυτά σε έργα Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα (ΕΛ/ΛΑΚ), με βασική προϋπόθεση ο πηγαίος κώδικας των έργων να είναι γραμμένος στην αντικειμενοστραφή γλώσσα προγραμματισμού Java, ενώ απαραίτητο είναι επίσης τα έργα να είναι επιλεγμένα από ένα συγκεκριμένο πεδίο εφαρμογής (domain). Το πεδίο το οποίο επιλέχτηκε για τη συγκεκριμένη εργασία είναι Communications. Στόχος, λοιπόν, της εφαρμογής των εργαλείων στα έργα αυτά είναι η εξαγωγή συστατικών λογισμικού (software components), τα οποία είναι ικάνα να θεωρηθούν ως ξεχωριστές εφαρμογές και να χρησιμοποιηθούν μετέπειτα από άλλους προγραμματιστές. Για να μπορέσει η διαδικασία αυτή να είναι εφικτή, απαραίτητη είναι και η τεκμηρίωση των συστατικών ως προς τη λειτουργηκότητά τους, με αποτέλεσμα να διευκολυνθεί η επαναχρησιμοποίησή τους ως ξεχωριστό κομμάτι του κώδικα. 5

Ευχαριστίες Η διπλωματική αυτή εργασία πραγματοποιήθηκε κατά τη διάρκεια του 8 ου εξαμήνου φοιτήσής μου στο τμήμα Πληροφορικής της Σχολής Θετικών Επιστημών του Αριστοτελείου Πανεπιστημίου Θεσσαλονίκης. Λόγω του μεγάλου επιστημονικού ενδιαφέροντος που υπάρχει στο ελεύθερο λογισμικό ανοιχτού κώδικα αλλά και των εργαλείων της πλατφόρμας OPEN- SME, η εργασία αυτή αποτέλεσε ένα από τα σημαντικότερα κομμάτια των σπουδών μου, ανοίγοντας μου νέους ορίζοντες και προοπτικές για το μέλλον μου ως επιστήμων. Αρχικά, θα ήθελα να ευχαριστήσω τον καθηγητή κ. Ιωάννη Σταμέλο επιβλέποντα της παρούσας διπλωματικής, για την ευκαιρία που μου παρείχε μέσω της εργασίας αυτής να ασχοληθώ με ένα θέμα που βρίσκεται στην αιχμή της Τεχνολογίας, καθώς και για την πολύτιμη καθοδήγηση που μου παρείχε κατά την διάρκεια της συνεργασίας μας. Επίσης θα ήθελα να ευχαριστήσω τον υποψήφιο διδάκτορα του κύριου Σταμέλου κ. Απόστολο Κρητικό για την πολύτιμη βοήθεια που μου προσέφερε πριν και κατά τη διάρκεια της υλοποίησης της συγκεκριμένης διπλωματικής εργασίας. Φανή Α. Ορεστιάδου Θεσσαλονίκη, Οκτώβριος 2012 6

7

8

Κεφάλαιο 1 : Εισαγωγή Στο πρώτο κεφάλαιο περιγράφεται αρχικά η έννοια του λογισμικού η οποία είναι αρκετά σημαντική για το κλάδο της πληροφορικής, και βοηθά στην καλύτερη κατανόηση των επόμενων παραγράφων που αναπτύσσονται. Στη συνέχεια ορίζεται η έννοια του Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα (ΕΛ/ΛΑΚ), και παρουσιάζονται οι άδειες του ΕΛ/ΛΑΚ, κάποια από τα οφέλη του, και κοινότητες που υποστηρίζουν έργα του ΕΛ/ΛΑΚ. Τέλος γίνεται αναφορά για την Εταιρία του Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού κώδικα (ΕΕΛ/ΛΑΚ), ποιοι ακριβώς είναι οι στόχοι της και ποια είναι τα μέλη της. 1.1 Λογισμικό Ορισμός : Με τον όρο Λογισμικό (Software) ορίζεται η συλλογή από προγράμματα υπολογιστών, διαδικασίες και οδηγίες χρήσης που εκτελούνται ορισμένες εργασίες σε ένα υπολογιστικό σύστημα. Οι βασικές λειτουργίες που επιτελούνται και καθορίζουν το περιεχόμενο ενός λογισμικού αλλά και η χρηστικότητά του είναι παράγοντες που μας βοηθούν να διακρίνουμε κάποιες κατηγορίες. Πιο συγκεκριμένα 1) Λογισμικό εφαρμογών το οποίο αποτελείται από όλα εκείνα τα προγράμματα που καθορίζουν τον τρόπο με τον οποίο θα λειτουργήσει το υλικό, ώστε να μπορέσει ο χρήστης να ικανοποιήσει συγκεκριμένες απαιτήσεις του. Παράδειγματα του λογισμικού εφαρμογών αποτελούν οι επεξεργαστές κειμένου, η διαχείρηση μια βάσης δεδομένων κ.τ.λ. 2) Λογισμικό συστήματος το οποίο αποτελείται από όλα τα προγράμματα εκείνα που έχουν σκοπό να βοηθούν και να υποστηρίζουν τις εφαρμογές λογισμικού, αλλά και την επικοινωνία του χρήστη τόσο με τις εφαρμογές 9

όσο και με τις συσκευές του υπολογιστή. Παράδειγμα του λογισμικού συστήματος αποτελεί το λειτουργικό σύστημα που παρέχει τις αναγκαίες υπηρεσίες του υλικού στο λογισμικό εφαρμογών. 3) Το ενδιάμεσο λογισμικό (Middleware) που επιλέγει και συντονίζει τα κατανεμημένα συστήματα Το λογισμικό περιλαμβάνει ιστότοπους, προγράμματα, βιντεοπαιχνίδια και άλλα τα οποία έχουν αναπτυχθεί σε μια γλώσσα όπως για παράδειγμα C ή C++, ενώ είναι κωδικοποιημένο με τη βοήθεια δυαδικού ψηφιακού συστήματος, ώστε να είναι κατανοητό από το υλικό. Ως λογισμικό υπολογιστών θεωρείται ότι δεν ανήκει στο υλικό, hardware, του υπολογιστή. Στο υλικό περιλαμβάνονται τα αντικείμενα που έχουν υλική υπόσταση, ενώ στο λογισμικό περιλαμβάνονται τα άυλα προγράμματα και οι εφαρμογές που υπάρχουν στο εσωτερικό του υπολογιστή. Το λογισμικό καλύπτει ένα ευρύτατο φάσμα προϊόντων και τεχνολογιών που αναπτύσσονται με χρήση διαφορετικών τεχνικών όπως οι γλώσσες προγραμματισμού, οι γλώσσες μορφοποίησης κλπ. Οι διαφορετικοί τύποι λογισμικού περιλαμβάνουν ιστοσελίδες που αναπτύχθηκαν από τις γλώσσες HTML, PHP, Perl, JSP, ASP.NET, XML, και desktop εφαρμογές όπως το Microsoft Word και το OpenOffice που αναπτύχθηκαν από τις γλώσσες C, C++, Java, C #, κλπ. Το λογισμικό εκτελείται συνήθως μέσα από ένα λειτουργικό σύστημα (που είναι επίσης λογισμικό) όπως τα Microsoft Windows, το Linux (με περιβάλλον GNOME ή KDE), το Solaris της Sun κ.α. Ως λογισμικό επίσης, θεωρούνται και τα βιντεοπαιχνίδια όπως το Super Mario και το Grand Theft Auto για προσωπικούς υπολογιστές ή κονσόλες βιντεοπαιχνιδιών. Αυτά τα παιχνίδια αναπτύσσονται από εφαρμογές CGI (computer generated imagery) αφού έχουν σχεδιαστεί πρώτα τα γραφικά τους από εφαρμογές όπως το Maya, το 3ds Max κ.α. Επίσης, ένα λογισμικό συνήθως λειτουργεί πάνω σε μια πλατφόρμα λογισμικού που παρέχεται είτε από λειτουργικό σύστημα ή από ανεξάρτητες πλατφόρμες όπως η Java και η.νετ. Λογισμικό γραμμένο για μία πλατφόρμα συνήθως δεν μπορεί να λειτουργεί και σε άλλες πλατφόρμες, για παράδειγμα, οι εφαρμογές των Microsoft Windows δεν θα είναι σε θέση να λειτουργήσουν σε Mac OS λόγω των διαφορών που σχετίζονται με τις πλατφόρμες και τα πρότυπά τους. Οι 10

εφαρμογές αυτές μπορούν να λειτουργήσουν μόνο εάν μεταφερθούν, χρησιμοποιώντας ένα διερμηνέα ή εκ νέου ανάπτυξη του πηγαίου κώδικα για την εν λόγω πλατφόρμα. Το λογισμικό υπολογιστών καλείται έτσι ώστε να διακρίνεται από το υλικό του υπολογιστή, που εποπτεύει τις φυσικές διασυνδέσεις και διατάξεις που απαιτούνται για να αποθηκευτεί και να εκτελεστεί το λογισμικό. Σε χαμηλότερο επίπεδο, το λογισμικό αποκωδικοποιείται σε γλώσσα μηχανής ειδικά προσαρμοσμένη για έναν συγκεκριμένο τύπο επεξεργαστή. Μια γλώσσα μηχανής είναι στην ουσία δυαδική αναπαράσταση των οδηγιών που στέλνονται στον επεξεργαστή ώστε να αλλάξει την κατάσταση του υπολογιστή από την προηγούμενη κατάσταση. Λογισμικό είναι η διατεταγμένη ακολουθία οδηγιών για την αλλαγή της κατάστασης του υλικού του υπολογιστή σε μια συγκεκριμένη επιθυμητή κατάσταση. Είναι συνήθως γραμμένο σε υψηλού επιπέδου γλώσσες προγραμματισμού που είναι ευκολότερες στη χρήση για τους ανθρώπους (πιο κοντά στη φυσική γλώσσα) και πιο αποτελεσματικές από την γλώσσα μηχανής. Οι υψηλού επιπέδου γλώσσες μεταγλωττίζονται σε γλώσσα μηχανής. Το λογισμικό μπορεί επίσης να είναι γραμμένο σε γλώσσα assembly, μια μνημονική αναπαράσταση της γλώσσας μηχανής που χρησιμοποιεί αλφάβητο φυσικής γλώσσας. Η γλώσσα assembly μεταγλωττίζεται σε γλώσσα μηχανής μέσω ενός assembler. Ο όρος "λογισμικό" χρησιμοποιήθηκε για πρώτη φορά με αυτή την έννοια από τον John W. Tukey το 1958. Στην επιστήμη των υπολογιστών και του λογισμικού, λογισμικό υπολογιστών είναι όλα τα προγράμματα για ηλεκτρονικούς υπολογιστές. Αυτή η θεωρία είναι η βάση του σύγχρονου λογισμικού και προτάθηκε για πρώτη φορά από τον Alan Turing το 1935 στο δοκίμιο του Υπολογίσιμοι αριθμοί με μια εφαρμογή στο Entscheidungsproblem. 11

1.2 ΕΛΛΑΚ Οι όροι «Ελεύθερο Λογισμικό» (Free Software) και «Λογισμικό Ανοιχτού Κώδικα» (Open Source Software) περιγράφουν το λογισμικό το οποίο διατίθεται με ειδικές άδειες που επιτρέπουν στους χρήστες να μελετούν, να τροποποιούν και να βελτιώνουν το λογισμικό. Ο τεχνικός τρόπος με τον οποίο επιτυγχάνεται η διαδικασία αυτή είναι η διαθεσιμότητα του πηγαίου κώδικα (source code) στους απλούς χρήστες. Η λέξη ελεύθερο αναφέρεται στην ελευθερία του λογισμικού, κι όχι στην αγοραστική τιμή του, καθώς το ελεύθερο λογισμικό/ λογισμικό ανοιχτού κώδικα μπορεί να έχει τιμή πώλησης, η οποία τις περισσότερες φορές είναι μεγάλη, ενώ αντίθετα υπάρχουν πακέτα δωρεάν λογισμικού που δεν διαθέτουν τον πηγαίο κώδικά τους σε άτομα εκτός της εταιρίας παραγωγής. Ο Richard Stallman και το FSF (Free Software Foundation) εισήγαγαν τον όρο ελεύθερο λογισμικό (free software). Αργότερα, ο οργανισμός Open Source Initiative πρότεινε τον όρο λογισμικό ανοιχτού κώδικα (open source software), πιθανότατα προκειμένου να αποφευχθεί η παρερμηνεία του αγγλικού όρου free, ο οποίος χρησιμοποιήθηκε από τον FSF για την απόδοση της έννοιας της ελευθερίας. Επίσης χρησιμοποιήθηκε και ο όρος libre για την απόδοση της έννοιας της ελευθερίας ο οποίος χρησιμοποιήθηκε κυρίως στην Ευρώπη. Ο όρος ΕΛ/ΛΑΚ εισήχθη από τον Rishab Gosh στο πλαίσιο ενός προγράμματος που χρηματοδοτούταν από την Ευρωπαϊκή Ένωση με την ονομασία Ελεύθερο Λογισμικό/Λογισμικό Ανοιχτού Κώδικα: έρευνα και μελέτη και έχει καθιερωθεί ευρέως από το 2002. 1.2.1 Ιστορική αναδρομή Από τις δεκαετίες του 1950 εως και 1960 σχεδόν όλο το λογισμικό παράγεται από τη συνεργασία ακαδημαϊκών και ερευνητών ενώ το κόστος 12

παραγωγής περιλαμβάνεται στην τιμή του υλικού. Τα λειτουργικά συστήματα διανέμονται ελεύθερα και συντηρούνται από τη κοινότητα των χρηστών τους, ενώ ο πηγαίος κώδικας συμπεριλαμβάνεται μαζί με το λογισμικό καθώς οι χρήστες πραγματοποιούν συχνά παρεμβάσεις και διορθώσεις. Έτσι δημιουργούνται ομάδες χρηστών όπως η SHARE (Society to Help Avoid Redundant Efforts), η οποία ιδρύθηκε το 1955 και επικεντρώθηκε σε συστήματα IBM και η DECUS (Digital Equipment Computer User Society), οι οποίες έχουν ως στόχο την ανταλλαγή και βελτίωση του λογισμικού. Από τα τέλη του 1960 όμως, το κόστος παραγωγής αλλά και συντήρησης του λογισμικού συνεχώς αυξάνεται, κι έτσι αρχίζει να αναπτύσσεται μια βιομηχανία παραγωγής λογισμικού προς πώληση ανεξάρτητα πλέον από το υλικό. Η αποκλειστική διάθεση του λογισμικού μαζί με το υλικό κρίνεται απο τη κυβέρνηση των ΗΠΑ ως βλαβερό για τον ανταγωνισμό. Το 1970 η AT&T (American Telephone and Telegraph Company) διαθέτει πρώιμες εκδόσεις του λειτουργικού συστήματος UNIX δωρεάν στην κυβέρνηση και στην ακαδημαϊκή κοινότητα, χωρίς όμως την άδεια αναδιαμονής. Το 1979 όμως αρχίζει και θέτει περιοριστικές άδειες χρήσης εφόσον αντιλαμβάνεται ότι η πώληση του λειτουργικού συστήματος μπορεί να αποφέρει πολλά κέρδη. Στις αρχές του 1980 η βιομηχανία λογισμικού ξεκινά να εφορμάζει μέτρα, όπως η διάθεση μόνο των εκτελέσιμων μορφών προγραμμάτων και ο νόμος περί πνευμάτικής ιδιοκτησίας (copyright) επεκτείνεται και στο λογισμικό. Το 1983 ο Richard Stallman ανακοινώνει το έργο GNU για την παραγωγή ενός πλήρους λειτουργικού συστήματος απαλλαγμένου από περιορισμούς στη διανομή και χρήση του πηγαίου κώδικα, μέσα στο πλαίσιο του πνεύματος που διέπει την κοινότητα των hackers και αφορά την απρόσκοπτη διάχυση των πληροφοριών. Στόχος του FSF ήταν η δημιουργία μιας ολοκληρωμένης νέας υλοποίησης του λειτουργικού συστήματος UNIX, το οποίο την τότε εποχή αποτελούσε σημαντικό σημείο αναφοράς για τις περισσότερες μεγάλες επιχειρήσεις και τα ερευνητικά κέντρα. Έτσι, ο Stallman και αρκετοί άλλοι προγραμματιστές δημιούργησαν ένα πλήρες περιβάλλον ανάπτυξης και εκτέλεσης, από το οποίο στα τέλη της δεκαετίας του 1980 έλειπε μόνο ο πυρήνας (το κεντρικό τμήμα ενός λειτουργικού συστήματος). Το 1985 ιδρύει το 13

ίδρυμα του ελεύθερου λογισμικού (Free Software Foundation). To Φεβρουάριου του 1986 δημοσιεύεται και ο πρώτος τεκμηριωμένος και σαφής ορισμός του ελεύθερου λογισμικού στο GNU s Bulletin, και πλέον το 1991 έχει ολοκληρωθεί η ανάπτυξη πολλών εργαλείων και εφαρμογών. Το κενό του πυρήνα που υπήρχε καλύφτηκε τελικά την ίδια χρονία, από δύο διαφορετικές ομάδες: η ομάδα της οποίας επικεφαλής ήταν ο Linus Torvalds ανέπτυξε τον πυρήνα του Linux, ενώ η ομάδα των William και Lynne Jolitz δημοσίευσαν σειρά άρθρων στο περιοδικό Dr. Dobbs περιγράφοντας τον τρόπο με τον οποίο μπορούσε κανείς να μεταφέρει το BSD Unix σε PCs αρχιτεκτονικής i386, δημιουργώντας με τον τρόπο αυτό τη βάση για ένα ολοκληρωμένο, ελεύθερο λειτουργικό σύστημα για σύγχρονους προσωπικούς υπολογιστές. Το FSF δίνει έμφαση σε τέσσερις ελευθερίες του λογισμικού : 1. Ελευθερία εκτέλεσης του προγράμματος για οποιοδήποτε σκοπό (ελευθερία 0) 2. Ελευθερία μελέτης των μηχανισμών λειτουργιας του λογισμικού και προσαρμογής του (ελευθερία 1) 3. Ελευθερία αναδιανομής αντιγράφων (ελευθερία 2) 4. Ελευθερία βελτίωσης του λογισμικού και κοινοποίησης των βελτιώσεων αυτών στο ευρύ κοινό, έτσι ώστε να επωφεληθεί ολόκληρη η κοινότητα (ελευθερία 3). Τα προγράμματα τα οποία προσφέρουν και τις τέσσερις ελευθερίες ανήκουν στο ελεύθερο λογισμικό. Οι άδειες των προγραμμάτων ενός κλειστού κώδικα προσφέρουν μόνο την πρώτη ελευθερία (ελευθερία 0), και θεωρούν ποινικό αδίκημα κατά της πνευματικής ιδιοκτησίας τις υπόλοιπες τρεις. Θεωρητικά, οποιοδήποτε άλλο πρόγραμμα προσφέρει την ελευθερία 1, θεωρείται ότι ανήκει στη κατηγορία του λογισμικού ανοιχτού κώδικα, ανεξάρτητα από το αν προσφέρει τις υπόλοιπες. Η πλειοψηφία των προγραμμάτων ενός ανοιχτού 14

κώδικα, είναι και ελεύθερα, δηλαδή προσφέρουν τον κώδικά τους για τροποποίηση από τους χρήστες, ενώ είναι λίγα εκείνα που έχουν τον πηγαίο τους κώδικα ανοιχτό, αλλά απαγορεύουν την τροποποίηση του. Για αυτό τον λόγο οι έννοιες «ελεύθερο» και «ανοιχτό» είναι για αρκετούς συνώνυμοι, χωρίς βέβαια αυτό να σημαίνει ότι είναι και σωστό. 1.2.2 Άδειες του Ελεύθερου Λογισμικού Σύμφωνα με τη νομοθεσία περί πνευματικής ιδιοκτησίας, η ελεύθερη αντιγραφή, διανομή και τροποποίηση ενός λογισμικού δεν επιτρέπεται. Για τον λόγο αυτό, οι εκδόσεις του ελεύθερου λογισμικού κάνουν χρήση ειδικών αδειών (free software licence), σύμφωνα με τις οποίες παραχωρούνται τα δικαιώματα αντιγραφής, τροποποίησης και αναδιανομής του λογισμικού στους χρήστες. Φυσικά οι άδειες αυτές του ελεύθερου λογιμικού θα πρέπει να πληρούν τις τέσσερις ελευθερίες, οι οποίες αναφέρθηκαν στην προηγούμενη παράγραφο. Συγκεκριμένα, οι κυριότερες άδειες του ανοικτού λογισμικού είναι οι εξής : Apache Licence Δημιουργήθηκε από το Apache Foundation και είναι η άδεια υπό την οποία διανέμεται ο εξυπηρετητής HTTP Apache. Είναι μια πολύ αναλυτικά διατυπωμένη άδεια, που ενώ επιτρέπει την αναδιανομή και τροποποίηση του λογισμικού, απαιτεί αυτή να γίνεται υπό την ίδια άδεια, να δείχνονται αναλυτικά ποια αρχεία του πηγαίου κώδικα πείραξε ο χρήστης και απαγορεύει τη χρήση υλικού που σχετίζεται με πατέντες λογισμικού καθώς και τη χρήση ονομάτων και συμβόλων του αρχικού συγγραφέα για διαφημιστικούς σκοπούς. Τέλος, απαλλάσει το δημιουργό από κάθε ευθύνη σχετική με τη χρήση του προγράμματος. 15

Apache Licences: http://www.apache.org/licenses/ Artistic Licence Την συνέταξε ο συγγραφέας της perl, Larry Wall. Η πρώτη της έκδοση ήταν τόσο περίπλοκα διατυπωμένη που πολλοί την κατηγόρησαν ότι δεν είναι άδεια ελεύθερου λογισμικού. Η δεύτερη έκδοση είναι πιο σαφώς διατυπωμένη, και δίδει το δικαίωμα ανάγνωσης, τροποποίησης και αναδιανομής του πηγαίου κώδικα/προγράμματος (υπό οποιαδήποτε άδεια), εφ'όσον διατηρείται η αναφορά στον αρχικό συγγραφέα του προγράμματος, σε περίπτωση που δεν υπάρξει τροποποίηση. Επιπλέον, απαλλάσει το συγγραφέα από κάθε ευθύνη σχετική με τη χρήση του προγράμματος. Αρχική Artistic Licence: http://www.perl.com/language/misc/artistic.html Artistic Licence, 2nd Edition: http://dev.perl.org/rfc/346.html BSD Licence Η άδεια αυτή αφορά λογισμικό που αναπτύχθηκε αρχικά στο πανεπιστήμιο Berkeley στην Καλιφόρνια των ΗΠΑ. Είναι μια από τις πιο ελεύθερες άδειες, εφόσον επιτρέπει την ανάγνωση, την τροποποίηση και την αναδημοσίευση του προγράμματος υπό οποιαδήποτε άδεια, με ή χωρίς τον πηγαίο κώδικα, σε εμπορικά ή μη εμπορικά πακέτα. Επιπλέον, υπάρχουν τροποποιήσεις της άδειας, που αφορούν όμως μόνο το θέμα της χρήσης του ονόματος του αρχικού συγγραφέα για διαφημιστικούς σκοπούς. Ως αποτέλεσμα της ελευθερίας που δίδει η άδεια για χρήση κώδικα ελεύθερων προγραμμάτων σε προγράμματα κλειστού κώδικα, πολλά κλειστά λειτουργικά συστήματα έχουν κομμάτια βασισμένα στο BSD. 16

Η BSD Licence: http://www.opensource.org/licenses/bsd- license.php GNU General Public Licence (GPL) Γράφτηκε αρχικά από τον Richard Stallman για το GNU project. Επιτρέπει την ανάγνωση, τροποποίηση και αναδιανομή του λογισμικού, μαζί με τον πηγαίο κώδικα του, με τον όρο ότι τροποποιημένες ή μη εκδόσεις του θα αναδιανείμονται υπό την ίδια άδεια. Εν ολίγοις, διασφαλίζει ότι οι χρήστες του τροποποιημένου λογισμικού θα απολαμβάνουν τις ίδιες ελευθερίες με το χρήστη του αρχικού λογισμικού. Συνεπώς απαγορεύει την χρήση (ολόκληρου ή τμήματος) του πηγαίου κώδικα του προγράμματος σε κλειστά πακέτα λογισμικού. Αυτό εξασφαλίζεται δίνοντας το copyright του προγράμματος στον αρχικό δημιουργό, οπότε σε περίπτωση που κάποιος δε σεβαστεί την GPL μπορεί να μηνυθεί για καταπάτηση πνευματικών δικαιωμάτων. Η GNU GPL έχει κατηγορηθεί από πολλούς ως "ιός" (επειδή θα πρέπει κάθε πρόγραμμα που έχει σχέση με το αρχικό να τη φέρει) και ότι στερεί τη δημιουργία άμεσου κέρδους στον προγραμματιστή. Παρά τις κριτικές αποτελεί τη σημαντικότερη και πιο διαδεδομένη άδεια ελεύθερου λογισμικού. Σημαντικά προγράμματα που τη χρησιμοποιούν είναι ο πυρήνας του Linux, o μεταγλωττιστής gcc, ο επεξεργαστής κειμένου Emacs, ο διερμηνέας της Perl, o Mozilla Firefox, η ΜySQL, το Cygwin, το σύστημα αρχείων ReiserFS και πλέον και η βιβλιοθήκη Qt. Μια πιο ελαστική έκδοση της GPL είναι η GNU Lesser General Public Licence (LGPL). Το 2005 άρχισαν συζητήσεις για την τρίτη έκδοση της άδειας, η οποία δίνει ιδιαίτερη έμφαση σε θέματα πατεντών λογισμικού και DRM. H GNU GPLv3 εκδόθηκε στις 27 Ιουνίου 2007. GNU GPL, v3.0: http://www.gnu.org/licenses/gpl.html GNU LGPL, v3.0: http://www.gnu.org/copyleft/lesser.html 17

MIT Licence H άδεια αυτή επιτρέπει την τροποποίηση και την αναδιανομή του προγράμματος με οποιονδήποτε τρόπο, υπό οποιαδήποτε άδεια, για οποιονδήποτε σκοπό. Το πιο γνωστό πρόγραμμα που τη χρησιμοιποιεί είναι ο X Window System (X11) που χρησιμοποιείται για το παραθυρικό περιβάλλον στις περισσότερες διανομές Linux, και γι'αυτό η άδεια αυτή ονομάζεται πολλές φορές και X Licence ή X11 Licence. MIT Licence Template: http://www.opensource.org/licenses/mit- license.php Open Software Licence Ουσιαστικά δίνει τις ίδιες ελευθερίες και τους ίδιους περιορισμούς με την GNU GPL με σημαντική διαφορά τον όρο που αφορά τις πατέντες λογισμικού. Ο όρος αυτός τερματίζει αυτόματα την άδεια και στερεί τον χρήστη από τις ελευθερίες της στην περίπτωση που ο χρήστης μηνύσει οποιοδήποτε λογισμικό που τη χρησιμοποιεί για καταπάτηση πατεντών λογισμικού. Open Software Licence: http://www.opensource.org/licenses/osl.php Κάποιες γενικές αρχές των αδειών χρήσης Μια άδεια χρήσης πρέπει να επιτρέπει τροποποιήσεις ενός προγράμματος καθώς και για τα πιθανά παραγόμενα έργα, τα οποία θα πρέπει να διανέμονται με τους ίδιους όρους που διέπουν το αρχικό λογισμικό. 18

Μια άδεια χρήσης έχει τη δυνατότητα να απαγορεύει τη διανομή του κώδικα όταν αυτός έχει τροποποιηθεί, μόνο αν επιτρέπεται η διανομή βελτιωμένων αρχείων μαζί με τον πηγαίο κώδικα. Επίσης μπορεί να απαιτεί από τα παραγόμενα έργα την αλλαγή ονόματος, ή μια διαφορετική έκδοση από το αρχικό λογισμικό. Δεν θα πρέπει να περιλαμβάνει διακρίσεις ενάντιας ατόμων ή ομάδας ατόμων Δεν θα πρέπει να περιορίζει κανέναν από του προγράμματος σε κάποιο συγκεκριμένο πεδίο δραστηριοποίησης. Μια άδεια χρήσης δεν θα πρέπει να θέτει περιορισμούς σε άλλα λογισμικά τα οποία διανέμονται μαζί με αυτό. Κανένας όρος της άδειας χρήσης δεν θα πρέπει να επιβάλλει τη χρήση συγκεκριμένων τεχνολογιών ή διεπαφών. 1.2.3 Πλεονεκτήματα του ΕΛΛΑΚ Αρκετοί είναι εκείνοι οι φορείς, ιδιωτικοί ή δημόσιοι, αλλά και οργανισμοί οι οποίοι προχωρούν στην υιοθέτηση και στην χρήση ΕΛ/ΛΑΚ, καθώς τα σχετικά πλεονεκτήματα που προκύπτουν υπερτερούν από το κόστος της αλλαγής. Η αλήθεια βέβαια είναι ότι χρειάστηκαν αρκετά χρόνια προκειμένου να εγκαταληφθούν οι προκαταλήψεις που αφορούσαν το ΕΛ/ΛΑΚ, έτσι ώστε σήμερα να θεωρείται ισότιμο, αν όχι προνομοιακό, με το εμπορικό λογισμικό του κλειστού κώδικα. Εκτός, λοιπόν, από το χαμηλό κόστος υπάρχουν και άλλοι πολλοί λόγοι που οδηγούν στη χρησιμοποίηση ΕΛ/ΛΑΚ. Αυτοί συνοπτικά είναι 1)Μειωμένες απαιτήσεις σε υλικό, 2) Ασφάλεια, 3) Αξιοπιστία, 4)Ανοικτά πρότυπα κι ανεξαρτησία πωλήσεων, 5)Δυνατότητα προσαρμογής των έργων, 6)Ανάπτυξη τοπικού λογισμικού, 7)Πειρατεία και δικαιώματα πνευματικής ιδιοκτησίας, 8)Τεχνογνωσία. 19

Αναλυτικότερα : 1) Μειωμένες απαιτήσεις σε υλικό Ένα έργο ελεύθερου λογισμικού και λογισμικού ανοικτού κώδικα διαθέτει πληθώρα διαφορετικών εναλλακτικών συστημάτων τα οποία μπορούν να χρησιμοποιηθούν ακόμα και σε ασθενής υπολογιστικές πλατφόρμες, όπως για παράδειγμα το OLPC. 2) Ασφάλεια Από τη στιγμή που κανένα λειτουργικό σύστημα ή πλατφόρμα δεν είναι ασφαλής, η αρχιτεκτονική ενός προγράμματος αλλά ακόμα και οι στόχοι της αγοράς μπορούν να επηρεάσουν την ασφάλεια του συστήματος και κατ επέκταση να καταστήσουν πιο δύσκολη ή πιο εύκολη την παραβίαση του λογισμικού. Υπάρχουν αρκετές ενδείξεις οι οποίες αποδεικνύουν πως τα συστήματα ΕΛ/ΛΑΚ υπερέχουν των ιδιόκτητων συστημάτων στο συγκεκριμένο θέμα. Συγκεκριμένα : Η Gartner Group προτείνει στις επιχειρήσεις να μεταβούν από τον Internet Information Server της Microsoft στον Apache (ΕΛΛΑΚ), ή σε κάποιον άλλο διακομιστή. Επίσης το Hacker Insurance τονίζει ότι η χρήση του Windows λειτουργικού συστήματος σε μια επιχείρηση μπορεί να επιφέρει παραπάνω έξοδα από ότι αν χρησιμοποιούσε GNU/Linux ή Unix. Οι κυριότεροι λόγοι οι οποίοι περιγράφουν την ασφάλεια του ΕΛ/ΛΑΚ είναι : Η διαθεσιμότητα του πηγαίου κώδικα επιτρέπει στον κάθε ενδιαφερόμενο να μελετήσει και να ανιχνεύσει τυχόν ελαττώματα. Στα δημοφιλή έργα του ΕΛ/ΛΑΚ τα σφάλματα εντοπίζονται σε ελάχιστο χρονικό διάστημα διανέμοντας τον διορθωτικό κώδικα. Προτού προστεθούν τα χαρακτηριστικά ενός έργου ΕΛ/ΛΑΚ λαμβάνονται υπόψιν οι εκτιμήσεις ασφαλείας τους, και προστίθονται μόνο όταν διαπιστωθεί ότι δεν θα επηρεάσει την ασφάλεια του συστήματος. Τελος, τα περισσότερα ΕΛ/ΛΑΚ συστήματα βασίζονται στο μοντέλο Unix, και για αυτό διαθέτουν ισχυρή ασφάλεια. 20

3) Αξιοπιστία Τα έργα ΕΛ/ΛΑΚ είναι γνωστά για την σταθερότητα και την αξιοπιστία τους. Δεν είναι τυχαίο το ότι οι περισσότεροι εξυπηρετητές- διακομιστές εκτελούν ΕΛ/ΛΑΚ, οι οποίοι από τη φύση τους εκτελούν κρίσιμες υπηρεσίες. Ενδεικτικά μπορούν να αναφερθούν εταιρίες και φορείς όπως η Amazon ή η Google, οι οποίες χρησιμοποιούν εκτεταμένα τα βασικά τους συστήματα. 4) Ανοικτά πρότυπα κι ανεξαρτησία πωλήσεων Τα ανοικτά πρότυπα παρέχουν στους χρήστες την ευελιξία και την ελευθερία να αλλάζουν μεταξύ διαφορετικών πακέτων λογισμικού, πλατφόρμων, και πωλητών. Αντιθέτως τα ιδιόκτητα μυστικά πρότυπα περιορίζουν τους χρήστες να χρησιμοποιούν το λογισμικό μόνο από ένα πωλητή και τους αφήνουν στο έλεος του πωλητή σε μεταγενέστερο στάδιο, όταν όλα τους τα στοιχεία είναι σε ιδιόκτητη μορφή (που ορίζει ο πωλητής) το κόστος μετατροπής τους σε ανοικτό πρότυπο είναι απαγορευτικό. Οι συντάκτες του εγγράφου Free / Libre and Open Source Software : έρευνα και μελέτη υποστηρίζουν την άποψη που είναι κατά της χρήσης του ιδιόκτητου λογισμικού στην κυβέρνηση. Ένα σημαντικό επιχείρημα σύμφωνα με τους συντάκτες κατά της εφαρμογής του ιδιόκτητου λογισμικού στον δημόσιο τομέα είναι η εξάρτηση που θα υπάρχει από μετέπειτα προμηθευτές ιδιόκτητου λογισμικού. Με αυτόν τον τρόπο διαιωνίζεται η εξάρτηση αυτή. Ένα πλεονέκτημα ακόμη του ΕΛΛΑΚ είναι ότι σχεδόν πάντοτε κάνει χρήση ανοιχτών προτύπων και αυτό οφείλεται σε δύο βασικούς λόγους : α) διαθεσιμότητα του πηγαίου κώδικα και β)ενεργός τήρηση προτύπων. 5) Δυνατότητα προσαρμογής των έργων Το λογισμικό ΕΛΛΑΚ μπορεί να διαμορφωθεί γλωσσικά και πολιτισμικά για την χώρα στην οποία θα χρησιμοποιηθεί και θα πωληθεί. Οι χρήστες μπορούν να τροποποιήσουν το ΕΛΛΑΚ ώστε να ανταποκρίνεται στις απαιτήσεις μιας μοναδικής πολιτιστικής περιοχής ανεξαρτήτως οικονομικού μεγέθους. 21

6) Ανάπτυξη τοπικού λογισμικού Έχει σημειωθεί ότι υπάρχει θετική συσχέτιση μεταξύ της ανάπτυξης ενός ΕΛΛΑΚ έργου και των καινοτόμων ικανοτήτων της οικονομίας. Μία έκθεση από το διεθνές ινστιτούτο Infonomics απαριθμεί 3 λόγους για αυτό : α) Χαμηλοί φραγμοί στην αγορά : το ΕΛΛΑΚ ενθαρρύνει την ελεύθερη τροποποίηση και ανακατανομή του είναι εύκολο να αποκτηθεί και να χρησιμοποιηθεί β) το ΕΛΛΑΚ είναι ένα εξαιρετικό σύστημα εκπαίδευσης καθώς η ανοιχτή και συνεργατική φύση του επιτρέπει σε ένα μαθητή να εξετάσει και πειραματιστεί με τις έννοιες του λογισμικού χωρίς άμεσο κόστος στην κοινωνία και την οικονομία γ) το ΕΛΛΑΚ είναι πηγή προτύπων. 7) Πειρατεία και δικαιώματα πνευματικής ιδιοκτησίας Η πειρατεία του λογισμικού αποτελεί ένα σοβαρό πρόβλημα σε όλες σχεδόν τις χώρες του κόσμου. Το 2002 υπολογίστηκε ότι η πειρατεία λογισμικού κόστισε στις ΗΠΑ 13 δισεκατομμύρια δολάρια. Ακόμη και στις αναπτυγμένες χώρες όπου θεωρητικά οι τιμές του λογισμικού είναι προσιτές τα ποσοστά της πειρατείας είναι 24% ψηλότερα από ότι είναι στις ΗΠΑ και 35% από ότι είναι στην Ευρώπη. Εκτιμάται ότι η πειρατεία στις αναπτυσσόμενες χώρες όπου τα εισοδήματα είναι χαμηλά και καθιστούν την απόκτηση ιδιόκτητου λογισμικού δύσκολη, ανέρχεται στο 90%. Η πειρατεία λογισμικού και οι χαλαροί νόμοι εναντίον της μπορούν να κάνουν κακό σε μία χώρα με πολλούς τρόπους. Μια χώρα με ελλειπή προστασία των δικαιωμάτων πνευματικής ιδιοκτησίας δεν είναι ελκυστική σε ξένους επενδυτές. 8) Τεχνογνωσία Η τριβή ενός οργανισμού ή ενός φορέα με έργα ελεύθερου λογισμικού και λογισμικού ανοικτού κώδικα έχει ως αποτέλεσμα την ανάπτυξη των δεξιοτήτων των στελεχών τους, καθώς ο προγραμματισμός και η επέκταση μιας εφαρμογής του ΕΛ/ΛΑΚ απαιτεί τη κατανόηση της σε βάθος. Παρότι η διαδικασία αυτή μπορεί να αποδειχτεί επίπονη, έχει ως αποτέλεσμα τη μεταφορά τεχνογνωσίας στο ανθρώπινο δυναμικό του προσωπικού αλλά και στην ουσιαστική ανάπτυξη των δεξιοτήτων του. Αντίθετα, η διαρκείς 22

χρήση έτοιμων προγραμμάτων, δεν απαιτεί τις εξειδικευμένες γνώσεις πληροφορικής. 1.2.4 Κοινότητες και απωθετήρια κώδικα των έργων ΕΛ/ΛΑΚ Οι κοινότητες αυτές απασχολούνται κυρίως από ερευνητικές ομάδες, και άτομα τα οποία ενδιαφέρουνται και ασχολούνται με την παραγωγή ή βελτίωση του πηγαίου κώδικα. Πρόκειται για sites στα οποία developers open source έργων διαθέτουν την εφαρμογή στους χρήστες, καθώς και τον πηγαίο κώδικα. Οι χρήστες μπορούν να επικοινωνούν και να συνεργάζονται για την παραγωγή του κώδικα, για την εύρεση σφαλμάτων και την άμεση αντιμετώπιση τους. Όταν πραγματοποιούνται αλλαγές από ένα μέλος πάνω σε ένα έργο, γίνεται εύκολα και γρήγορα η ενημέρωση των υπολοίπων μελών, έτσι ώστε να είναι και πιο αποτελεσματική η συνεργασία τους. Στα sites αυτά αποθηκεύονται καθημερινά τεράστιες ποσότητες κώδικα, ενώ υποστηρίζουν έλεγχο έκδοσης, λίστες και wikis με βάσεις τεκμηρίωσης. Μερικές από τις πιο δημοφιλής κοινότητες και sites των έργων ΕΛ/ΛΑΚ είναι : Apache Software Foundation To Apache Software Foundation παρέχει οργανωτική, οικονομική και νομική υποστήριξη για ένα ευρύ φάσμα των έργων ελεύθερου λογισμικού. Μέσα από μια συλλογική και αξιοκρατική διαδικασία ανάπτυξης τα έργα του Apache είναι ελεύθερα διαθέσιμα προϊόντα λογισμικού τα οποία προσελκύουν μεγάλες κοινότητες των χρήστων. Ιδρύθηκε το 1999 και αρχικά ήταν γνωστή με το όνομα Apache Group. Πρόκειται για μια εταιρία μη κερδοσκοπικού χαρακτήρα, η οποία διασφαλίζει ότι τα έργα εξακολουθούν να υπάρχουν πέρα από τη συμμετοχή των μεμονομένων εθελοντών. Επίσης τα άτομα εκείνα τα 23

οποία έχουν επιδείξει μια συνεχής ενασχόληση αλλά και προσφορά στο πλαίσιο των έργων του ιδρύματος, είναι επιλέξιμα για την ένταξή τους στο ASF. Link : www.apache.org SourceForge Πρόκειται για ένα web- based αποθετήριο πηγαίου κώδικα. Λειτουργεί ως μια κεντρική τοποθεσία για την ανάπτυξη του λογισμικού, αλλά και για τον έλεγχο και την διαχείρηση έργων του ελεύθερου λογισμικού και λογισμικού ανοικτού κώδικα. Ήταν το πρώτο το οποίο παρείχε την υπηρεσία αυτή δωρεάν σε έργα ανοικτού κώδικα. Από μετρήσεις που έγιναν τον Ιούλιο του 2011 διαπιστώθηκε ότι φιλοξενεί περισσότερα από 300.000 έργα, ενώ έχει παραπάνω από 2 εκατομμύρια εγγεγραμένους χρήστες. Link : www.sourceforge.net Tigris Πρόκειτα για μια κοινότητα ανάπτυξης λογισμικού ανοιχτού κώδικα. Φιλοξενεί υπηρεσίες ανάπτυξης λογισμικού όπως web hosting, mailing lists, issue tracking, wiki, download and revision control. Φιλοξενείται από το CollabNet και τρέχει την CollabNet Enterprise Edition. To tigris.org ανταγωνίζεται με το πιο γνωστό SourceForge, αν και επικεντρώνεται κυρίως σε έργα για την από κοινού ανάπτυξη λογισμικού. 24

Link : www.tigris.org GitHub Πρόκειται επίσης για μια web- based υπηρεσία φιλοξενίας έργα ανάπτυξης λογισμικού τα οποία χρησιμοποιούν το Git revision control system. Προσφέρει τόσο πληρωμένα σχέδια για ιδιωτική αποθήκευση, όσο και δωρεάν λογαριασμούς για έργα ανοικτού κώδικα. Τον Μάϊο του 2011, το GitHub ήταν το δημοφιλέστερο open source code repository site. Ιδρύθηκε το 2008 και εδρεύει στον Σαν Φρανσίσκο της Καλιφόρνια. Link : www.github.com Launchpad Πρόκειται για ένα διαδικτυακό τόπο που επιτρέπει στους χρήστες να αναπτύξουν και να διατηρήσουν το λογισμικό, κυρίως το ελεύθερο λογισμικό. Το Launchpad αναπτύσσεται και συντηρείται από την Canonical Ltd. Τον Ιούλιο του 2011, το Launchpad φιλοξενούσε περισσότερα από 23.500 έργα. Link : www.launchpad.net Assembla Πρόκειται για μια εταιρεία που παρέχει cloud- based εργαλεία για την οργάνωση και τη διαχείριση ανοικτού κώδικα και την εμπορική ανάπτυξη λογισμικού. Το Assembla χρησιμοποιείται σήμερα από περισσότερους από 500.000 χρήστες σε 100 χώρες. 25

Link : www.assembla.com Gitorious Πρόκειται για μια ιστοσελίδα που φιλοξενεί έργα ανοικτού κώδικα με τη χρήση του κατανεμημένου συστήματος Git. Το όνομα επίσης αναφέρεται και στον διακομιστή στον οποίο φιλοξενείται η ιστοσελίδα. Το 2010 βγήκε το δεύτερο δημοφιλέστερο site φιλοξενίας του Git, μετά από το GitHub. Link : www.gitorious.org JavaForge Πρόκειται για μια μη κερδοσκοπική κοινότητα του ελεύθερου λογισμικού και λογισμικού ανοικτού κώδικα. Φιλιξενεί έργα που σχετίζονται με Web Hosting, διαχείρηση εγγράφων, wikis και forum. Ξεκίνησε το Σεπτέμβριο του 2005 ως το πρώτο που βασίζεται σε Java. Link : www.javaforge.com Bitbucket Πρόκειται για μια υπηρεσία η οποία φιλοξενεί έργα που χρησιμοποιούν είτε το σύστημα ελέγχου αναθεώρησης Mercurial είτε το Git. Προσφέρει τόσο εμπορικά σχέδια όσο και ελεύθερους λογαριασμούς στους χρήστες, με απεριόριστο αριθμό από ιδιωτικές αποθήκες. Το Σεπτέμβριο του 2008, εξαγοράστηκε από την VC- funded Atlassian και τον Οκτώβριο 26

του 2011 ανακοίνωσε επίσημα την υποστήριξη για φιλοξενία και έργων του Git. Link : www.bitbucker.org 1.3 Η Εταιρία Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού κώδικα (ΕΕΛ/ΛΑΚ) Η Εταιρία Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού κώδικα είναι μια μη κερδοσκοπική εταιρία η οποία ιδρύθηκε από 25 Πανεπηστήμια, Ερευνητικά κέντρα και Τεχνολογικά Ιδρύματα το 2008. Στόχος της της εταιρίας αυτής είναι η συμβολή της στην προώθηση αλλά και στην ανάπτυξη του Ελεύθερου Λογισμικού, του Ανοικτού Περιεχομένου και των Τεχνολογιών Ανοικτής Αρχιτεκτονικής στο χώρο της εκπαίδευσης, του δημόσιου τομέα και των επιχειρήσεων στην Ελλάδα, ενώ παράλληλα φιλοδοξεί να αποτελέσει κέντρο γνώσης και πλατφόρμα διαλόγου για τις ανοικτές τεχνολογίες. Πολλά από τα Ελληνικά Πανεπηστήμια, Τεχνολογικά Ιδρύματα κι Ερευνητικά Κέντρα συμμετέχουν στην Εταιρία Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα (ΕΕΛ/ΛΑΚ) και συνεργάζονται προκειμένου να υλοποιηθούν οι δράσεις της. Η ΕΛ/ΛΑΚ συνεργάζεται με τα Creative Commons ενώ είναι μέλος του COMMUNIA. 1.3.1 Στόχοι της ΕΕΛ/ΛΑΚ Μέσα από τις πρωτοβουλίες που αναλαμβάνει ως εταιρία έχει τους εξής στόχους : 27

Να συμβάλλει στην ευαισθητοποίηση του κοινού σχετικά με τα οφέλη που προκύπτουν από την χρήση και ανάπτυξη του Ελεύθερου Λογισμικού, του Ανοιχτού Περιεχομένου και των Τεχνολογιών Ανοιχτής Αρχιτεκτονικής. Να φροντίσει για την έγκυρη και έγκαιρη πληροφόρηση σε θέματα που αφορούν τις ανοιχτές τεχνολογίες στην Ελλάδα και το διεθνή χώρο. Να εργαστεί ώστε να υπάρχει συνεργασία με την ισότιμη συμμετοχή όλων των άλλων φορέων που έχουν άμεσο ή έμμεσο ρόλο στη διάδοση και ανάπτυξη του του Ελεύθερου Λογισμικού, του Ανοιχτού Περιεχομένου και των Τεχνολογιών Ανοιχτής Αρχιτεκτονικής στην Ελλάδα, όπως μεταξύ άλλων της κοινότητας προγραμματιστών EΛ/ΛΑΚ στην Ελλάδα καθώς και όσων ενδιαφέρονται να αναπτύξουν επιχειρηματική δραστηριότητα που σχετίζεται με το EΛ/ΛΑΚ. Να δημιουργήσει κέντρα προώθησης για τις ανοιχτές τεχνολογίες στην Ελλάδα (με στόχους: την διοργάνωση εκπαιδευτικών σεμιναρίων, την καταγραφή αναγκών για την εισαγωγή και χρήση του EΛ/ΛΑΚ σε διαφορετικούς τομείς καθώς και την καταγραφή των φορέων και των οργανώσεων που ασχολούνται με το EΛ/ΛΑΚ στην Ελλάδα). Να συμβάλει στο συντονισμό των ομάδων εθελοντών προγραμματιστών EΛ/ΛΑΚ στην Ελλάδα, ώστε να αποτελέσουν τον βασικό κορμό για την ανάπτυξη και υλοποίηση λογισμικού και εφαρμογών. Να υποστηρίξει την ανάπτυξη και προώθηση επιχειρηματικών μοντέλων που βασίζονται στο EΛ/ΛΑΚ, καθώς και την ενημέρωση επιχειρήσεων για την υιοθέτηση τους ή για τη μετάβαση τους σε αυτά. 28

Να προσφέρει τεχνική υποστήριξη εφαρμογών EΛ/ΛΑΚ και συγκεκριμένα: δημιουργία υπηρεσίας υποστήριξης(help- desk) για χρήστες και ομάδες EΛ/ΛΑΚ, μέριμνα για εξελληνισμό λογισμικού,ανάπτυξη γλωσσαρίου, καθώς και να συμβάλει στην ανάπτυξη εφαρμογών για τις οποίες υπάρχει ζήτηση στην Ελλάδα. Να συμβάλει στο σχεδιασμό, ανάπτυξη και προώθηση δράσεων Ανοιχτού Περιεχομένου και Τεχνολογιών Ανοιχτής Αρχιτεκτονικής. Η υλοποίηση των παραπάνω στόχων βασίζεται στην ενεργή συνεργασία: - των ελληνικών κοινότητων χρηστών και δημιουργών έργων Ελεύθερου Λογισμικού, Ανοιχτού Περιεχομένου και Τεχνολογιών Ανοιχτής Αρχιτεκτονικής. - των ενδιαφερόμενων φορέων- χρηστών(δημόσιοι φορείς, εκπαιδευτικοί φορείς και επιχειρήσεις), - των εταιρειών που δραστηριοποιούνται στους τομείς των τεχνολογιών πληροφορικής και επικοινωνιών που θα συμβάλλουν στην ανάπτυξη και υποστήριξη υπηρεσιών ΕΛ/ΛΑΚ. - των εργαστηρίων ΑΕΙ, ΑΤΕΙ και Ερευνητικών Κέντρων της Χώρας που χρησιμοποιούν και αναπτύσσουν Ελεύθερο Λογισμικό, Ανοιχτό Περιεχομένο και Τεχνολογίες Ανοιχτής Αρχιτεκτονικής. 1.4 Επαναχρησιμοποίηση του κώδικα Η παρούσα διπλωματική εργασία στηρίζεται κυρίως στην διαδικασία της επαναχρησιμοποίησης του κώδικα. Πρόκειται για μια διαδικασία κατά την οποία 29

χρησιμοποιούνται έτοιμα κομμάτια του λογισμικού ή έτοιμος κώδικας με σκοπό την παραγωγή νέου λογισμικού. Ουσιαστικά εκμεταλλεύονται τα έτοιμα κομμάτια που έχουν ήδη παραχθεί από τους προγραμματιστές, ώστε να προκύψουν κάποια νέα χωρίς όμως να απαιτείται να γίνει ολόκληρη η διαδικασία από το μηδέν. Με αυτό τον τρόπο προκύπτουν πολλά πλεονεκτήματα, κι ένα από αυτά η ελάττωση του χρόνου. Τόσο τα πλεονεκτήματα αυτά, όσο και η έννοια του Software Reuse περιγράφονται αναλυτικά στο επόμενο κεφάλαιο του παρόν εγγράφου. 1.5 Η γλώσσα προγραμματισμού Java Τα έργα τα οποία είχε σαν βάση η παρούσα πτυχιακή είναι γραμμένα αποκλειστικά στη γλώσσα προγραμματισμού Java και για αυτό το λόγο γίνεται μια αναφορά στην ιστορία της, καθώς και τα βασικά χαρακτηριστικά τα οποία την διέπουν. H Java είναι μια αντικειμενοστραφής γλώσσα προγραμματισμού, η οποία αρχικά αναπτύχθηκε από την εταιρία πληροφορικής Sun Microsystems, σαν μέρος ενός ερευνητικού έργου ανάπτυξης λογισμικού για ηλεκτρονικές συσκευές καταναλωτικού επιπέδου. Η εταιρία αυτή ξεκίνησε ένα εσωτερικό ερευνητικό έργο με τον κωδικό όνομα Green το 1991, το οποίο οδήγησε στην ανάπτυξη μιας γλώσσας βασισμένης στην C++, την οποία ο δημιουργός της, James Gosling, ονόμασε Oak, από μια βελανιδιά που βρισκόταν έξω από το παράθυρο του στην Sun. Αργότερα ανακαλύφθηκε ότι υπήρχε ήδη μια γλώσσα που είχε το ίδιο όνομα, Oak, κι έτσι μια ομάδα ανθρώπων της Sun πρότεινε το όνομα Java, όταν βρίσκονταν σε ένα τοπικό καφέ, το οποίο και παρέμεινε. Το έργο Green συνάντησε κάποιες δυσκολίες. Η αγορά για τέτοιες συσκευές δεν αναπτυσσόταν τόσο γρήγορα στις αρχές της δεκαετίας του 1990 όσο είχε εκτιμήσει η Sun. Το έργο κινδύνευε να ακυρωθεί, όταν καθαρά από τύχη, το 1993 η δημοτικότητα του World Wide Web εκτοξεύθηκε ψηλά, και η Sun είδε την άμεση δυνατότητα για χρήση της Java για τη 30

δημιουργία δυναμικών περιεχομένων, όπως διαδραστικότητας και κινούμενων παραστάσεων σε ιστοσελίδες. Αυτό ενέπνευσε νέα πνοή στο έργο. Η Sun ανακοίνωσε επισήμως την Java σε ένα συνέδριο τον Μάιο του 1995. Η Java τράβηξε αμέσως την προσοχή της επιχειρηματικής κοινότητας, λόγω του νέου, εκτενούς ενδιαφέροντος για το World Wide Web. Η Java χρησιμοποιείται τώρα για δημιουργία ιστοσελίδων με δυναμικά περιεχόμενα, για τη δόμηση εφαρμογών enterprise μεγάλης κλίμακας, για τη βελτίωση τγς λειτουργικότητας των World Wide Web servers (των υπολογιστών που παρέχουν τα περιεχόμενα που βλέπουμε στα προγράμματα μιας περιήγησης στο Web), για την παροχή εγαρμογών για καταναλωτικές συσκευές (π.χ. κινητά τηλέφωνα, pages, PDAs) και για πολλούς άλλους σκοπούς. Στις 27 Απριλίου του 2012 η εταιρία λογισμικού Oracle Corporation ανακοίνωσε ότι ήρθε σε συμφωνία για την εξαγορά της Sun Microsystems και των τεχνολογιών που η Sun είχε στη κατοχή της ή δημιούργησε. Η συμφωνία αυτή θεωρείται αρκετά σημαντική για την πορεία της εξέλιξης της Java. 1.5.1 Τα χαρακτηριστικά της Java H εταιρία Sun περιγράφει την Java ως «μια απλή, αντικειμενοστραφή, κατανεμημένη, συμπαγή, ασφαλή, ανεξάρτητη αρχιτεκτονικής, μεταφέρσιμη, υψηλής απόδοσης, υποστηρίζουσα πολλαπλά νήματα, και δυναμική γλώσσα». Αναλυτικά : Aπλή : Ο όρος απλή αναφέρεται στην εκμάθησή της καθώς είναι σχετικά εύκολη. Περιέχει λίγες προγραμματιστικές δομές με καλά ορισμένη σημασιολογία. Μοιάζει αρκετά με τις διαδεδομένες γλώσσες προγραμματισμού C και C++, συνεπώς η μετάβαση από αυτές στη Java είναι πιο εύκολη. 31

Αντικειμενοστραφής : Η Java εστιάζει τη δραστηριότητα του προγραμματιστή στον ορισμό αντικειμένων και λειτουργιών πάνω σε αυτά. Ιδιαίτερη σημασία έχει η έννοια της κλάσης, η οποία περιγράφει μια συλλογή δεδομένων καθώς και τις λειτουργίες που αυτά επιδέχοντα. Κάθε κλάση προέρχεται από κάποια άλλη ήδη ορισμένη μέσω της κληρονομικότητας. Αντικείμενα μιας κλάσης μπορούν να οριστούν και να χρησιμοποιηθούν σε ένα πρόγραμμα της Java, ενώ δημιουργούνται κατά τη διάρκεια εκτέλεσης του προγράμματος. Κατανεμημένη : Η Java υποστηρίζει την ανάπτυξη κατανεμημένων εφαρμογών δικτύων, και συγκεκριμένα επιτρέπει την προσπέλαση αντικειμένων που βρίσκονται σε απομακρυσμένες θέσεις στο δίκτυο. Ερμηνευόμενη : Ο μεταγλωττιστής δεν παράγει τελικό κώδικα, για κάποιο συγκεκριμένο υπολογιστή, αλλά ενδιάμεσο κώδικα σε μορφή bytes, που ονομάζεται bytecode. Ο ενδιάμεσος κώδικας στη συνέχεια εκτελείται από έναν διερμηνέα της Java. To πλεονέκτημα είναι ότι ο κώδικας μπορεί να εκτελεστεί σε πολλά διαφορετικά περιβάλλοντα υπολογιστών. Ο διερμηνέας μαζί με το σύστημα εκτέλεσης των προγραμμάτων υλοποιεί μια εικονική μηχανή Java (Java Virtual Machine, JVM). Συμπαγής : H Java είναι σχεδιασμένη έτσι ώστε να είναι δυνατή η ανάπτυξη συμπαγούς και αξιόπιστου λογισμικού. Η γλώσσα έχει ένα ισχυρό σύστημα τύπων, το οποίο επιτρέπει εκτενείς ελέγχους κατά τη διάρκεια της μετάφρασης των προγραμμάτων, βοηθώντας έτσι την ανάπτυξη αξιόπιστου λογισμικου. Ένα άλλο στοιχείο το οποίο βοηθάει την ανάπτυξη αξιόπιστου λογισμικού είναι το μοντέλο μνήμης. Η Java δεν παρέχει στον προγραμματιστή εντολές για παραχώρηση και αποδέσμευση μνήμης, αλλά η διαχείρηση της μνήμης γίνεται εξ ολοκλήρου από το σύστημα εκτέλεσης. Ασφαλής : Τα προγράμματα που έχουν αναπτυχθεί σε Java μπορούν να εκτελεστούν από πολλούς χρήστες με διαφορετικά δικαιώματα πρόσβασης στο σύστημα, χωρίς να είναι δυνατό να υπάρξουν ανεπιθύμητες παρενέργειες. Ανεξάρτητη αρχιτεκτονικής : Τα προγράμματα Java μεταφράζονται σε ενδιάμεσο κώδικα, ο οποίος δεν είναι προσανατολισμένος σε μια 32

συγκεκριμένη αρχιτεκτονική ή τύπο υπολογιστή. Ο κώδικας είναι μεταφέρσιμος, μια και μπορεί να εκτελεστεί από διερμηνείς της γλώσσας που έχουν αναπτυχθεί για πολλές αρχιτεκτονικές και περιβάλλοντα υπολογιστών. Μεταφέρσιμη : Το γεγονός ότι η Java είναι ανεξάρτητη αρχιτεκτονικής καθιστά τα προγράμματα μεταφέρσιμα. Οι προδιαγραφές της Java καθορίζουν σαφώς τα μεγέθη των διάφορων πρωταρχικών τύπων δεδομένων καθώς και τα αποτελέσματα των διάφορων λειτουργιών πάνω σε μεταβλητές αυτών των τύπων. Κατά συνέπεια, ένα πρόγραμμα Java θα δώσει τα ίδια αποτελέσματα όταν δεχθεί τα ίδια δεδομένα, ανεξάρτητα της αρχιτεκτονικής στην οποία θα εκτελεστεί. Υψηλής απόδοσης : Η Java σαν ερμηνευόμενη γλώσσα δεν μπορεί να φτάσει την απόδοση των γλωσσών προγραμματισμού όπως η C και η C++, που υλοποιούνται σε μεταγλωττιστές. Παρ όλα αυτά, η απόδοσή της είναι αρκετά υψηλή, με περίπου 20% καθυστέρηση των αντίστοιχων προγραμμάτων σε C ή C++. Yποστηρίζουσα πολλαπλά νήματα : Οι διεργασίες μοιράζονται τον ίδιο χώρο μνήμης για την εκτέλεση τους και τη διαχείριση δεδομένων. Τα πολλαπλά νήματα αποτελούν μια αποδοτική λύση σε πολλά προβλήματα, αλλά απαιτούν την ύπαρξη μηχανισμών συγχρονισμού μεταξύ των νημάτων. Αυτό είναι απαραίτητο προκειμένου να αποφεύγεται η ταυτόχρονη προσπέλαση του ίδιου αντικειμένου. Δυναμική : Κλάσεις μπορούν να μεταφερθούν δυναμικά από άλλα μέρη δικτύου και να εκτελεστούν τοπικά. Με αυτό το τρόπο προγράμματα της Java μπορούν να μεταφερθούν και να εκτελέσουν κλάσεις από άλλα μέρη δικτύου και δεν είναι απαραίτητο οι κλάσεις αυτές να ενσωματωθούν στο πρόγραμμα κατά τη διάρκεια της μετάφρασής του. Υποστήριξη πολυμέσων : Η Java καθιστά δυνατή τη μεταφορά εκτελέσιμου περιεχομένου σε εφαρμογές πολυμέσων. Πριν από τη Java, οι εφαρμογές πολυμέσων περιείχαν κείμενο, ακίνητη ή κινούμενη εικόνα, ήχο κ.τ.λ. Αυτό που έλειπε ήταν η δυνατότητα εκτέλεσης προγραμμάτων στο περιβάλλον του χρήστη, κι αυτό το κενό καλύπτεται από τη Java, η οποία επιτρέπει να 33

μεταφερθεί εκτελέσιμος κώδικας και να εκτελεσθεί στον περιηγητή του χρήστη. Ένα πλεονέκτημα είναι ότι με αυτό το τρόπο οι δυνατότητες των περιηγητών μπορούν να επεκταθούν χωρίς περιορισμούς, κάτι που απορρέει επίσης από το ότι η γλώσσα είναι δυναμική. 34

Κεφάλαιο 2 : Επαναχρησιμοποίηση του κώδικα 2.1 Τι είναι το Software Reuse Η επαναχρησιμοποίηση του κώδικα σαν έννοια δεν είναι καινούρια. Χρονολογείται απο το 1968, όταν προτάθηκε από τον N. Mcllay της Bell Laboratories. Τόσο οι εταιρίες λογισμικού, όσο και οι προγραμματιστές ατομικά γνωρίζουν το γεγονός ότι υπάρχουν συγκεκριμένα τμήματα κώδικα, τα περισσότερα από τα οποία προέρχονται από εμπορικά προγράμματα λογισμικού. Επιπλέον υπάρχουν και οι περιπτώσεις στις οποίες ο κώδικας αναπτύσσεται με συγκεκριμένες απαιτήσεις και με τέτοιο τρόπο, έτσι ώστε να μπορεί να εξυπηρετεί παρόμοια έργα που μπορεί να χρειαστούν σε μελλοντικό χρόνο. Συνήθως ο κώδικας αυτό αναφέρεται ως κώδικας κληρονομιάς. Η τεράστια ανάπτυξη που γνώρισε το Ελεύθερο Λογισμικό Ανοικτού Κώδικα τα τελευταία χρόνια, έφερε στην επιφάνεια την από κοινού ανάπτυξη του λογισμικού. Επίσης ο κώδικας των προγραμμάτων είναι ανοικτός, και προβιβάσιμος από τον καθένα μέσω του Web, και αυτό μεταμόρφωσε το world wide web σε μια τεράστια αποθήκη επαναχρησιμοποιήσιμου κώδικα. Γενικότερα, πρόκειται για μια ιδέα, σύμφωνα με την οποία δημιουργούνται νέα συστήματα λογισμικού, χρησιμοποιώντας ήδη υπάρχον λογισμικό, αντί για την κατασκευή τους από το μηδεν. Οι τύποι των αντικειμένων που μπορούν να επαναχρησιμοποιηθούν, δεν περιορίζονται μόνο σε πηγαίο κώδικα, αλλά μπορούν να περιλαμβάνουν δομές σχεδιασμού, περιγραφές, τεκμηρίωση κ.τ.λ. Στόχος αυτής της διαδικασίας είναι η εξοικονόμηση χρόνου αλλά και ενέργειας με τη μείωση των εργασιών, οι οποίες δεν είναι απαραίτητο να γίνουν ξανά. Πολλοί είναι εκείνοι οι ερευνητές που έχουν προσπαθήσει να κάνουν την επαναχρησιμοποίηση ταχύτερη, ευκολότερη, πιο συστηματική έτσι ώστε να αποτελεί ένα αναπόσπαστο μέρος της διαδικασίας του προγραμματισμού. 35

2.2 Πλεονεκτήματα και Μειονεκτήματα του Software Reuse Πλεονεκτήματα Αύξηση της αξιοπιστίας του συστήματος : Τα επαναχρησιμοποιημένα τμήματα του λογισμικού είναι κατά βάση δοκιμασμένα κι ελεγχμένα, με αποτέλεσμα, η πιθανότητα ενός πιθανούς σφάλματος να ελαχιστοποιείται σε σύγκριση με τη χρήση ενός νέου τμήματος του λογισμικού. Debbuging : Όπως αναφέρθηκε και προηγουμένως, η πιθανότητα εμφάνισης σφάλματος είναι αρκετά πιο μικρή, συνεπώς δεν χρειάζεται να ξοδευτεί χρόνος για την διόρθωση τμημάτων του λογισμικού. Το συνολικό ρίσκο και κόστος μειώνεται : Το κόστος ενός επαναχρησιμοποιήσιμου τμήματος λογισμικού μπορεί να εκτιμηθεί με μεγαλύτερη ακρίβεια από την αρχή. Αύξηση της αποδοτικότητας : Ο συνολικός χρόνος δημιουργίας του λογισμικού μειώνεται, καθώς μειώνεται και ο χρόνος σχεδιασμού αλλά και εγγραφής του κώδικα. Κέρδη : Η επαναχρησιμοποίηση μπορεί να οδηγήσει στην αγορά του τμήματος του λογισμικού. Ζωντανά παραδείγματα είναι τα συστατικά (components) Activex, Hypercard stacks, καθώς και τα πακέτα της Java. Μειονεκτήματα Ασυμφωνία : Είναι πολύ πιθανό τα τμήματα του λογισμικού να μην ταιριάζουν απόλυτα με μια κατάσταση. Χρόνος : Ενώ τις περισσότερες φορές ο χρόνος είναι ένα απο τα πλεονεκτήματα της επαναχρησιμοποίησης του λογισμικού, υπάρχουν και οι περιπτώσεις όπου η μετατροπή του τμήματος απαιτεί αρκετό χρόνο αλλά και ακρετή προσπάθεια. 36

Συνήθεια : Οι περισσότεροι τεχνολόγοι λογισμικού έχουν μάθει να παράγωγουν λογισμικό από την αρχή, και τις περισσότερες φορές δεν εμπιστεύονται την ποιότητα των τμημάτων τα οποία έχουν αναπτυχθεί από άλλους, κι αντί αυτού προτιμούν να ξαναγράφουν από την αρχή. Η επαναχρησιμοποίηση πρέπει να στηρίζεται σε τεχνικές κατηγοριοποίησης και ανάκτησης τμημάτων από βιβλιοθήκες : Κάτι το οποίο δεν βρίσκεται ακόμα σε ώριμο επίπεδο. 2.3 Η ανάπτυξη του λογισμικού με βάση την επαναχρησιμοποίηση του κώδικα Ο μηχανισμός της επαναχρησιμοποίησης βασίζεται στην κάλυψη των αναγκών του προϊόντος λογισμικού στο οποίο πρόκειται να εφαρμοστεί. Τα περισσότερα από τα κομμάτια του επαναχρησιμοποιήσιμου κώδικα βρίσκονται σε ανοικτά απωθετήρια λογισμικού. Η διαδικασία του software reuse αποτελεί επίσης μια κοινή πρακτική για την ανάπτυξη λογισμικού ανοικτού κώδικα, έτσι ώστε να οργανωθεί ο κώδικά τους σε συστατικά (components), αλλά μεγαλύτερα κι άλλα μικρότερα. Έχοντας αυτό κατά νου, μπορούμε να οργανώσουμε τις απαιτήσεις του προϊόντος του λογισμικού, σε πιθανά συστατικά με βάση μια προσέγγιση, όπως για παράδειγμα αυτή που απεικονίζεται στο επόμενο σχήμα. 37

Θεωρούμε την κάθε απαίτηση που έχει το προϊόν λογισμικού ως ένα ξεχωριστό συστατικό, και στη συνέχεια με βάση το πόσο πολύπλοκη συνάρτηση αντιπροσωπεύει το καθένα από αυτά, το σπάμε σε ακόμα απλούστερα. Στο τέλος θα έχουμε μια δομή δέντρου όπου στη ρίζα θα βρίσκεται το ίδιο το λογισμικό, ενώ στα φύλλα, τα συστατικά που πρέπει να εφαρμοστούν προκειμένου να εφαρμοστεί με επιτυχία το λογισμικό στο σύνολό του. Από τη στιγμή που έχουμε αυτά τα συστατικά διαθέσιμα, μπορούμε να ξεκινήσουμε την αναζήτηση των εφαρμογών στις οποίες μπορούν να φανούν χρήσιμα ως κομμάτια επαναχρησιμοποιήσιμου κώδικα. 2.4 Απαιτήσεις για την επαναχρησιμοποίηση του λογισμικού 1. Πρέπει να είναι δυνατόν να βρούμε τα επαναχρησιμοποιήσιμα στοιχεία σε μια βάση δεδομένων στοιχείων 38

2. Τα άτομα τα οποία θα επαναχρησιμοποιήσουν τα τμήματα θα πρέπει να είναι σε θέση να κατανοήσουν πλήρως τα στοιχεία, προκειμένου η διαδικασία να γίνει σωστά αλλά και να είναι σίγουροι ότι καλύπτουν τις ανάγκες τους. 3. Τα στοιχεία πρέπει να είναι τεκμηριωμένα έτσι ώστε αν κάποιος επιθυμεί να τα χρησιμοποιήσει να είναι φανερό το πως αυτά μπορούν να επαναχρησιμοποιηθούν, χωρίς να απαιτείται η ανάγνωση του κώδικά τους. 2.5 Επίπεδα και τύποι του Software Reuse Επίπεδα Application system reuse Έχει να κάνει με την επαναχρησιμοποίηση ολόκληρης της εφαρμογής. Βασικό της πρόβλημα είναι ότι είναι λειτουργικά ανεξάρτητη από την πλατφόρμα. Sub- system reuse Έχει να κάνει με την επαναχρησιμοποίηση μεγάλου μέρους μιας εφαρμογής (π.χ. query matching). Module ή object reuse Αφορά την επαναχρησιμοποίηση Τμημάτων του συστήματος που περιέχουν συλλογή συναρτήσεων. 39