ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Σχετικά έγγραφα
e-patents Διπλώματα Ευρεσιτεχνίας στο Λογισμικό Βασίλης Βλάχος Σύλλογος Διπλωματούχων Μηχανικών Η/Υ και Πληροφορικής

Α.Τ.Ε.Ι.Θ. ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΕΜΠΟΡΙΑΣ ΚΑΙ ΔΙΑΦΗΜΙΣΗΣ. Πτυχιακή εργασία

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

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

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

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

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

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

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

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

6. Εισαγωγή στον προγραµµατισµό

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

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

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

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

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

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

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

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Οντοκεντρικός Προγραμματισμός

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

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

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

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

Ειδικά Θέματα Προγραμματισμού

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

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

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η γλώσσα προγραμματισμού C

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Προγραμματισμός ΙI (Θ)

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

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

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

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

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

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

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

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

2.1 Αντικειµενοστρεφής προγραµµατισµός

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

Ομάδα (3) Γιάννης Καρανάσος. Μαριάννα Κοβού. Ήλιας Λάμπρου. Σπυριδούλα Γαντζούδη

Δομημένος Προγραμματισμός

Θέματα διπλωματικών εργασιών σε. Συστοιχίες παράλληλης εξυηρέτησης εφαρμογών Διαδικτύου

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Προγραμματισμός Υπολογιστών

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

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

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Τμήμα Μηχανικών Πληροφορικής ΤΕ. Επιχειρηματικά Μοντέλα Ανοιχτού Λογισμικού. Άννα Ρήγα (ΑΜ: Τ03134)

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

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

Αγροτική Ανάπτυξη Περιβάλλον

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

ΕΛΛΑΚ Ελεύθερο Λογισμικό Λογισμικό Ανοιχτού Κώδικα. Δρ. Δημήτρης Καβρουδάκης

Προγραμματισμός Η/Υ. Χειρισμός Αρχείων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Τεκμηρίωση Tetravex i. Τεκμηρίωση Tetravex

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

Α. Ερωτήσεις Ανάπτυξης

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

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr»

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

Τεχνολογία Λογισμικού & Πνευματική Ιδιοκτησία. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

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

Το ελεύθερο λογισμικό στη ζωή μας

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

Κατανεμημένα Συστήματα

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

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

Προγραμματισμός Υπολογιστών με C++

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

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

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

Στοιχειώδης προγραμματισμός σε C++

Τεχνική υποστήριξη λογισμικού HP

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

Μεταδεδομένα ψηφιακού περιεχομένου

Κεφάλαιο 1: Εισαγωγή. 1.1 Οι γλώσσες προγραμματισμού

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

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

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Εισαγωγή στο ΕΛ/ΛΑΚ. Προσαρμογή: Α. Ανδρεάτος Μάϊος Εισαγωγή στο ΕΛ\ΛΑΚ 1

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ «ΔΗΜΙΟΥΡΓΙΑ ΣΥΣΤΑΤΙΚΩΝ ΑΝΟΙΚΤΟΥ ΚΩΔΙΚΑ ΓΙΑ ΠΑΙΓΝΙΑ» ΜΟΥΤΙΔΗΣ ΗΡΑΚΛΗΣ Επιβλέπων καθηγητής: Σταμέλος Ιωάννης Θεσσαλονίκη, Ιούνης 2013

Πρόλογος Η εργασία αυτή αποτελεί την πτυχιακή εργασία του Ηρακλή Μουτίδη και εκπονήθηκε στα πλαίσια του προπτυχιακού προγράμματος σπουδών του τμήματος Πληροφορικής του Αριστοτελείου Πανεπιστημίου Θεσσαλονίκης. Η εκπόνησή της πραγματοποιήθηκε το ακαδημαϊκό έτος 2011-2012. Θα ήθελα να ευχαριστήσω θερμά τους επιβλέποντες την πτυχιακή μου εργασία, καθηγητή του Τμήματος Πληροφορικής ΑΠΘ, κ. Ιωάννη Σταμέλο και τον υποψήφιο διδάκτορα Απόστολο Κρητικό για την πολύτιμη καθοδήγησή τους, την άριστη συνεργασία κατά την πραγματοποίηση της εργασίας και για την μεγάλη υπομονή τους. Επίσης θα ήθελα να ευχαριστήσω θερμά όλους τους συναδέλφους που εργάζονταν εκείνη την περίοδο στο εργαστήριο τεχνολογίας λογισμικού του Αριστοτελείου Πανεπιστημίου Θεσσαλονίκης για την πολύτιμη τεχνική υποστήριξη που μου προσέφεραν. Τέλος, θα ήθελα να ευχαριστήσω την οικογένεια μου για την διαρκή στήριξη. Θεσσαλονίκη 2013 2

Περιεχόμενα Πρόλογος... 2 1.Εισαγωγή... 5 1.1 Περιγραφή Στόχοι Εργασίας... 5 1.2 ομή Εργασίας... 5 2. Ελεύθερο Λογισμικό και Λογισμικό Ανοιχτού Κώδικα (ΕΛ/ΛΑΚ)... 7 2.1 Ιστορικό του Ελεύθερου Λογισμικού/Λογισμικού Ανοιχτού Κώδικα... 7 2.2 Ορισμοί του ελεύθερου λογισμικού/λογισμικού Ανοιχτού Κώδικα... 10 2.3 Ελεύθερο λογισμικό ή λογισμικό ανοιχτού κώδικα;... 14 2.4 Τα Υπόλοιπα ήδη λογισμικού ως προς τον τύπο των αδειών χρήσης τους... 15 2.5 Λίστα Αδειών Χρήσης... 16 2.6 Κατηγοριοποίηση Αδειών... 21 2.7 Ποιος το αναπτύσσει... 23 3. Η Γλώσσα προγραμματισμού Java... 25 3.1 Η ιστορία της Java... 25 3.2 Τα βασικά χαρακτηριστικά της Java... 26 3.3 Τα Κυριότερα Εργαλεία της Java... 32 4. Επαναχρησιμοποίηση κώδικα (Software reuse)... 39 4.1 Τι είναι το Software reuse... 39 4.1.1 Επίπεδα software reuse... 40 4.1.2 Τύποι software reuse... 41 4.2 Πλεονεκτήματα και μειονεκτήματα του software reuse... 43 4.3 Παραδείγματα software reuse... 44 5. Το project OPEN-SME (Open-Source Software Reuse Service for Small-Medium Enterprises)... 46 5.1 Τι είναι το OPEN-SME... 46 5.2 Εργαλεία του OPEN-SME... 47 5.2.1 COPE... 48

3 6. Πειραματική μελέτη... 53 6.1 Πεδίο εφαρμογής (domain) Java Card Games... 53 6.2 Έργα προς μελέτη...... 54 6.3 Αποτελέσματα ανά έργο... 57 6.3.1 Four Row Solitare... 57 6.3.2 CoincheBox... 58 6.3.3 Jskat... 59 6.3.4 Jokers... 61 6.3.5 BlackJack... 64 7.Συμπεράσματα... 67 Βιβλιογραφεία... 71 4

1. Εισαγωγή 1.1 Περιγραφή - στόχοι εργασίας Αρχικά, ο φοιτητής καλείται να γνωρίσει τα εργαλεία που πρόκειται να χρησιμοποιήσει, τα οποία αποτελούν μέρος της πλατφόρμας OPEN-SME (http://opensme.eu) και να εκπαιδευτεί στον ορθό τρόπο χρήσης τους. Στη συνέχεια καλείται να εφαρμόσει τα εργαλεία αυτά σε έργα Ελεύθερου Λογισμικού και Λογισμικού Ανοικτού Κώδικα (ΕΛ/ΛΑΚ) των οποίων ο πηγαίος κώδικας είναι γραμμένος σε γλώσσα Java και που ανήκουν σε συγκεκριμένο πεδίο εφαρμογής (στην παρούσα εργασία Java Card Games) με στόχο την εξαγωγή συστατικών λογισμικού (software components). Τέλος, τα συστατικά λογισμικού που προέκυψαν στο προηγούμενο βήμα θα πρέπει να αντιμετωπισθούν ως ξεχωριστές εφαρμογές και να τεκμηριωθούν ως προς τη λειτουργικότητά τους (component characterization). 1.2 ομή εργασίας Στα κεφάλαια 1 έως 5 γίνεται περιγραφή των βασικών εννοιών και εργαλείων που χρησιμοποιούνται ή εξετάζονται σ αυτήν την εργασία. Στο κεφάλαιο 2, το ελεύθερο λογισμικό και το λογισμικό ανοιχτού κώδικα (ΕΛ/ΛΑΚ) όπου είναι το είδος των έργων που χρησιμοποιήσαμε.

5 Στο κεφάλαιο 3, η γλώσσα προγραμματισμού Java στην οποία είναι γραμμένος ο πηγαίος κώδικας των έργων που χρησιμοποιήσαμε. Στο κεφάλαιο 4, η έννοια του Software Reuse, που είναι κατ ουσία ο σκοπός της εργασίας Στο κεφάλαιο 5 με την πλατφόρμα OPEN-SME που είναι το μέσο-εργαλείο με το οποίο πήραμε τα συστατικά λογισμικού που μελετήσαμε στο πειραματικό κομμάτι της εργασίας. Στο κεφάλαιο 6 πραγματοποιείται το πειραματικό σκέλος της εργασίας. Χρησιμοποιούνται συγκεκριμένα έργα λογισμικού από το πεδίο Java Games Development και γίνεται τεκμηρίωση ως προς την λειτουργικότητά των συστατικών λογισμικού που θα προκύψουν από αυτά τα έργα. Στο κεφάλαιο 7 αποτυπώνονται διάφορα συμπεράσματα και παρατηρήσεις που αφορούν το σύνολο της εργασίας Στις τελευταίες σελίδες παρατίθεται η βιβλιογραφία χρησιμοποιήθηκε για την εκπόνηση της πτυχιακής. 6

2. Ελεύθερο Λογισμικό και Λογισμικό Ανοιχτού Κώδικα (ΕΛ/ΛΑΚ) [1] 2.1 Ιστορικό του Ελεύθερου Λογισμικού/Λογισμικού Ανοιχτού Κώδικα.[2] Στη δεκαετία του 1960, η έννοια του προσωπικού υπολογιστή δεν υπήρχε ακόμα και οι υπολογιστές χρησιμοποιούνται κυρίως από στρατιωτικές υπηρεσίες και πανεπιστήμια. Η έννοια του λογισμικού έμπαινε σε δεύτερη μοίρα και δεν υπήρχε ακόμα η ιδέα για εμπορική εκμετάλλευση του. Το κερδοφόρο μέρος των υπολογιστών ήταν τα μηχανήματα (υλικό/hardware). Υπήρχαν πολλοί κατασκευαστές υπολογιστών, οι οποίοι είχαν όλοι διαφορετικά μηχανήματα που στηρίζονταν πάνω σε διαφορετικές αρχιτεκτονικές κατασκευής και διαφορετικά λειτουργικά συστήματα. Αυτό σήμαινε ότι το λογισμικό που γράφτηκε για έναν τύπο υπολογιστή, δεν μπορούσε να τρέξει σε άλλον τύπο άλλης εταιρείας. Για να τρέξει το λογισμικό σε άλλο τύπο υπολογιστών θα έπρεπε να ξαναγραφτεί για να γίνει συμβατό. Αυτή η διαδικασία ήταν πολύ χρονοβόρα και ασύμφορη οικονομικά. Αυτές οι ασυμβατότητες εμπόδιζαν την τεχνολογία από το να προχωρήσει κυρίως λόγω του μεγάλου κόστούς. Η λύση στο πρόβλημα αυτό ήρθε το 1969 στο Νιου Ζέρσεϊ όταν ο Dennis Ritchie και ο Ken Thompson της ΑΤ&T Βell Labs ανέπτυξαν ένα λειτουργικό σύστημα, με το όνομα Unix, το οποίο ήταν συμβατό με διαφορετικές αρχιτεκτονικές υπολογιστών. Το λειτουργικό αναπτύχθηκε αρχικά για χρήση μέσα στην εταιρεία αλλά σύντομα υπήρξε ενδιαφέρον και από αλλού για τη χρήση του. Παρά το γεγονός ότι δεν υπήρχε στόχος το Unix γίνει ποτέ εμπορικό 7

προϊόν η AT&T τελικά το έβγαλε στην αγορά μαζί με τον πηγαίο του κώδικα έναντι ενός μικρού αντιτίμου για την άδεια χρήσης του. Ήταν σύνηθες εκείνη την εποχή ο πηγαίος κώδικας να είναι διαθέσιμος για να μπορούν όλοι οι χρήστες να ξέρουν τι συμβαίνει με τον υπολογιστή τους και για να μπορεί ο καθένας να λύσει τα δικά του προβλήματα. Ο καιρός πέρασε και το Unix εξελίχθηκε σε ένα ισχυρό λειτουργικό σύστημα. Από τη στιγμή που μπορούσες να αγοράσεις τον πηγαίο κώδικα πολλά πανεπιστήμια και επιχειρήσεις έφτιαξαν τις δικές τους διανομές Unix σύμφωνα με τις ανάγκες τους και όλες είχαν διαφορετικά εργαλεία και προγράμματα. Αυτές οι διανομές τότε βγήκαν στο εμπόριο όταν η αγορά προσωπικών υπολογιστών άρχισε να μεγαλώνει. Ακολούθως η διαθεσιμότητα του πηγαίου κώδικα άρχισε να εξαφανίζεται. Το Unix μετατράπηκε σε αυτό που ήταν και τα υπόλοιπα διαθέσιμα εμπορικά λειτουργικά, ακριβά και κλειστού κώδικα. Αυτή η εξέλιξη άφησε ένα κενό σε ανθρώπους που θέλανε ένα λειτουργικό σύστημα, ισχυρό, με χαμηλό κόστος και διαθέσιμο λειτουργικό κώδικα. Την λύση την έδωσε αργότερα to 1979 ο Richard Stallman που εκείνη την εποχή δούλευε στα εργαστήρια του MIT. Την ίδια χρονιά Το εργαστήριο παρέλαβε τον πρώτο εκτυπωτή laser από την Xerox. Παρά το γεγονός ότι ο εκτυπωτής ήταν καλός συνήθιζε να πετάει το χαρτί. Αυτό δεν ήταν δύσκολο να λυθεί και ο Stallman σκέφτηκε να το λύσει μόνος του όπως συνηθιζόταν τότε στα εργαστήρια του MIT. Αυτό που χρειαζόταν ήταν ο πηγαίος κώδικας του προγράμματος οδήγησης του εκτυπωτή για να το διορθώσει. Όταν το ζήτησε από την XEROX το αίτημα του απορρίφθηκε. Αυτό οδήγησε τον Stallman να πιστέψει ότι το λογισμικό θα πρέπει να είναι ελεύθερο. Ακολούθως ο Stallman παραιτήθηκε από το MIT για να ασχοληθεί με την δημιουργία ελεύθερου λογισμικού. Ίδρυσε το Ίδρυμα Ελεύθερου Λογισμικού το 1985. Κάποια από τα πιο δημοφιλή προϊόντα που προήλθαν από το ίδρυμα του είναι τα GNU που ήταν συλλογές ελεύθερου λογισμικού. Η πιο σημαντική 8

όμως προσφορά του Stallman στον κόσμο των υπολογιστών είναι η άδεια GPL. Το Ελεύθερο λογισμικό από μόνο του θα ήταν ευάλωτο και άναρχο. Με τον πηγαίο κώδικα διαθέσιμο δεν θα υπήρχε κανένας τρόπος από το να αποτρέψει οποιονδήποτε να οικειοποιηθεί την δουλεία άλλων και να κερδίσει από αυτήν. Αυτό λύθηκε με την άδεια χρήσης GPL. Η άδεια αυτή διασφάλισε το ελεύθερο λογισμικό και έδωσε συγκεκριμένες ελευθερίες πάνω σε αυτό που θα αναλυθούν με τους ορισμούς του ελεύθερου λογισμικού παρακάτω. Η άδεια δημιούργησε ένα δρόμο και προστάτεψε αυτούς που ήθελαν να δημιουργήσουν ελεύθερο λογισμικό. Επίσης δεν απέτρεψε κανέναν από το να βγάλει χρήματα από το λογισμικό αυτό. Παρ όλες αυτές τις εξελίξεις υπήρχε κάτι ακόμα που έλειπε και αυτό ήταν ένα λειτουργικό σύστημα. Το Ίδρυμα ελεύθερου λογισμικού δούλευε πάνω στο να δημιουργήσει το δικό της λειτουργικό σύστημα αλλά η ανάπτυξη του αργούσε για κάποιους λόγους. Το 1991 η λύση ήρθε ανέλπιστα από έναν 21 χρόνο Φιλανδό φοιτητή του πανεπιστημίου του Ελσίνκι. Το όνομα αυτού Linus Tovalds. Εκείνη τη χρονιά ο Tovalds αγόρασε τον πρώτο του 386 υπολογιστή (η αρχιτεκτονική x86 έγινε αργότερα αυτό που λέγεται σήμερα προσωπικός υπολογιστής). Δεν του άρεσαν το MS-Dos που ήταν κυρίαρχο λειτουργικό εκείνη την εποχή καθώς και τα υπόλοιπα λειτουργικά που ήταν βασισμένα στο Unix ήταν όλα βασισμένα σε εμπορικά πρότυπα και έξω από τις αρχές του ως φοιτητής. Ήθελε ένα λειτουργικό σύστημα παρόμοιο με το Unix που θα είχε ενδιαφέρον να δουλέψει πάνω σε αυτό. Από τη στιγμή που ο προγραμματισμός ήταν το κυριότερο του προσόν ξεκίνησε να γράφει το δικό του λειτουργικό σύστημα σαν χόμπι. Ο Linus Tovalds δημοσίευε τη δουλειά του σε Usenet Groups και με τον καιρό άλλοι ενδιαφερόμενοι άρχισαν να την παρατηρούν. Διάβαζαν τον κώδικα και άρχισαν να προτείνουν αλλαγές και να στέλνουν διορθώσεις και προσθήκες. Ο Tovalds έπαιρνε αυτές τις ιδέες και τις έβαζε στο πρόγραμμά του και έδινε αναφορές και ευχαριστίες σε όσους τις ιδέες χρησιμοποίησε. Αυτή η μέθοδος 9

διαδικασίας έπιασε και έτσι βρέθηκαν πολλοί ενδιαφερόμενοι να από όλο τον κόσμο να βοηθήσουν στην ανάπτυξη του. Αργότερα εκείνη την περίοδο ο Tovalds έκδωσε την έκδοση 0.1 του πυρήνα του LINUX. O πυρήνας είναι το κέντρο ενός λειτουργικού συστήματος και ελέγχει τις βασικές λειτουργίες που κάνουν έναν υπολογιστή να δουλέψει. Το Linux έγινε δημοφιλές και όταν βγήκε ή έκδοση 1.0 το 1994 είχε περισσότερους από ένα εκατομμύριο χρήστες σε όλο τον κόσμο. Ο Tovalds διέθεσε το λογισμικό κάτω από την άδεια GPL. Σήμερα υπάρχουν πολλές κοινότητες που αναπτύσσουν διάφορα project στα οποία ασχολούνται χιλιάδες συμμετέχοντες (εταιρείες, απλοί χομπίστες κ.α.) και αναπτύσσουν ελεύθερο λογισμικό. Φυσικά υπάρχουν και εμπορικές δραστηριότητες γύρω από αυτό που θα αναλυθούν σε παρακάτω κεφάλαια. 2.2 Ορισμοί του ελεύθερου λογισμικού/λογισμικού Ανοιχτού Κώδικα.[1],[9] Υπάρχουν δύο όρισμοι. Ένας από το FSF και ένας από το OSI. Οι διαφορές είναι κυρίως ιδεολογικές όπως αναφέρθηκε και στα ιδρύματα. Ο πρώτος σύμφωνα με το ίδρυμα ελεύθερου λογισμικού και σύμφωνα με αυτόν είναι τέσσερις ελευθερίες που καθορίζουν τι είναι ελεύθερο λογισμικό: 1. Η ελευθερία χρήσης του προγράμματος, για οποιονδήποτε σκοπό. 2. Η ελευθερία μελέτης του πώς λειτουργεί το πρόγραμμα, καθώς και η δυνατότητα τροποποίησής του, από τον χρήστη, ανάλογα με τις ανάγκες του. 3. Η ελευθερία αναδιανομής αντιγράφων, προκειμένου να βοηθηθεί ο πλησίον σας. 10

4. Η ελευθερία βελτίωσης του προγράμματος και δημόσιας επανέκδοσής του, ώστε όλη η κοινότητα να επωφεληθεί. Οι ελευθερίες αυτές είναι δικαιώματα, όχι υποχρεώσεις, αν και ο σεβασμός προς αυτές, υπέρ της κοινωνίας, ενδέχεται να υποχρεώσουν το άτομο. Κάθε άνθρωπος μπορεί να επιλέξει να μην κάνει χρήση τους, αλλά μπορεί να επιλέξει και τη χρήση όλων των ελευθεριών. Ειδικότερα, πρέπει να γίνει κατανοητό πως το Ελεύθερο Λογισμικό δεν αποκλείει την εμπορική χρήση. Αν ένα πρόγραμμα δεν επιτρέπει την εμπορική χρήση ή την εμπορική διανομή, δεν είναι Ελεύθερο Λογισμικό. Πράγματι, ένας αυξανόμενος αριθμός εταιρειών, βασίζουν το επιχειρηματικό τους μοντέλο ολοκληρωτικά ή μερικώς, σε Ελεύθερο Λογισμικό, μεταξύ αυτών και μερικές από τις μεγαλύτερες κατασκευάστριες ιδιόκτητου λογισμικού. Το Ελεύθερο Λογισμικό καθιστά νόμιμη την παροχή βοήθειας ή υποστήριξης, δεν την καθιστά απαραίτητη. O δεύτερος ορισμός του ανοιχτού κώδικα σύμφωνα με το το OSI (Open source Initiative) λέει ότι ο ανοιχτός κώδικας δεν σημαίνει μόνο την πρόσβαση στον πηγαίο κώδικα αλλά και ότι οι όροι διανομής του λογισμικού ανοιχτού κώδικα πρέπει να συμμορφωθούν με τα ακόλουθα κριτήρια: 1. Ελεύθερη αναδιανομή: Η άδεια δεν θα πρέπει να περιορίζει οποιοδήποτε συμβαλλόμενο μέρος από την πώληση ή να δώσει μακριά το λογισμικό ως μέρος μιας διανομής λογισμικού που περιέχει προγράμματα από διαφορετικές πηγές. Η άδεια δεν θα πρέπει να απαιτεί χρήματα από πνευματικά δικαιώματα η άλλη αμοιβή από μια τέτοια πώληση. 2. Πηγαίος Κώδικας: Το πρόγραμμα πρέπει να περιλαμβάνει τον πηγαίο κώδικα και πρέπει να επιτρέπει τη διανομή σε μορφή κώδικα καθώς και σε μορφή συνταγμένη για να εκτελείται κατευθείαν από το λειτουργικό. Όταν 11

σε κάποια μορφή του πρόγραμμα δεν διανέμεται με τον πηγαίο κώδικα, πρέπει να υπάρχει κάποιο καλά-κοινοποιημένο μέσο για την απόκτηση του πηγαίου κώδικα με κόστος όχι μεγαλύτερο από το λογικό για την αναπαραγωγή του, κατά προτίμηση αυτός ο τρόπος να είναι η δυνατή μεταφόρτωση του από το διαδίκτυο χωρίς χρέωση. Ο πηγαίος κώδικας πηγής πρέπει να είναι η προτιμώμενη μορφή με την οποία ένας προγραμματιστής θα τροποποιούσε το πρόγραμμα. Η σκόπιμη αλλαγή του κώδικα για να μην είναι κατανοητός η ασαφής δεν επιτρέπεται. 3. Παραγόμενες εργασίες: Η άδεια πρέπει να επιτρέπει τις τροποποιήσεις και την εξαγωγή παραγόμενων έργων και πρέπει να επιτρέψει σε αυτά να διανεμηθούν υπό τους ίδιους όρους της άδειας που υπόκειται το αρχικό λογισμικό. 4. Ακεραιότητα του πηγαίου κώδικα του συντάκτη: Η άδεια μπορεί να περιορίσει τον πηγαίο-κώδικα από το να διανεμηθεί σε τροποποιημένη μορφή μόνο εάν η άδεια επιτρέπει τη διανομή μικρών αρχείων-προγραμμάτων που να προσθέτουν λειτουργίες μαζί με τον πηγαίο κώδικα με σκοπό την τροποποίηση του λογισμικού στο χρόνο κατασκευής του. Η άδεια πρέπει ρητά να επιτρέπει τη διανομή του λογισμικού που χτίζεται από τον τροποποιημένο κώδικα πηγής. Η άδεια μπορεί να απαιτήσει από τα παραγόμενα έργα να φέρουν διαφορετικό όνομα ή αριθμό έκδοσης από το αρχικό λογισμικό. 5. Καμία διάκριση ενάντια στα πρόσωπα ή ομάδες: Η άδεια δεν πρέπει να κάνει διακρίσεις εις βάρος οποιουδήποτε προσώπου ή ομάδας προσώπων. 12

6. Καμία διάκριση ενάντια στους τομείς χρήσης: Η άδεια δεν πρέπει να απαγορεύσει σε κανέναν από τη χρήση του προγράμματος σε ένα συγκεκριμένο τομέα χρήσης. Π.χ δεν μπορεί να μην περιορίσει το πρόγραμμα από τη χρησιμοποίηση σε μια επιχείρηση, ή από τη χρησιμοποίηση για τη γενετική έρευνα. 7. Διανομή της άδειας: Τα δικαιώματα που συνδέονται με το πρόγραμμα πρέπει να ισχύσουν σε όλους, όσους διανέμεται το πρόγραμμα χωρίς την ανάγκη αποδοχής αποδοχής πρόσθετης άδειας από αυτά τα συμβαλλόμενα μέρη. 8. Η άδεια δεν πρέπει να είναι συγκεκριμένη για ένα προϊόν: Τα δικαιώματα που συνδέονται σε ένα πρόγραμμα δεν πρέπει να εξαρτώνται από το γεγονός ότι το πρόγραμμα είναι μέρος μιας ιδιαίτερης διανομής λογισμικού. Εάν το πρόγραμμα είμαι μέρος εκείνης της διανομής και χρησιμοποιείται ή διανέμεται μέ στους όρους της άδειας του προγράμματος, όλα τα συμβαλλόμενα μέρη στα οποία το πρόγραμμα αναδιανέμεται πρέπει να έχουν τα ίδια δικαιώματα όπως εκείνα που χορηγούνται από κοινού με την αρχική διανομή λογισμικού. 9. Η άδεια δεν πρέπει να περιορίσει άλλο λογισμικό: Η άδεια δεν πρέπει να τοποθετήσει τους περιορισμούς σε άλλο λογισμικό που διανέμεται μαζί με το αδειοδοτημένο λογισμικό. Παραδείγματος χάριν, η άδεια δεν πρέπει να επιμείνει ότι όλα τα άλλα προγράμματα που διανέμονται μαζί με το πρόγραμμα ανοιχτού κώδικα στο ίδιο μέσο πρέπει να είναι λογισμικό ανοικτού κώδικα. 13

10. Η άδεια πρέπει να είναι τεχνολογικά-ουδέτερη: Καμία παροχή άδειας δεν πρέπει να βασίζεται σε καμία μεμονωμένη τεχνολογία η στυλ απεικόνισης και οργάνωσης δεδομένων. 2.3 Ελεύθερο λογισμικό ή λογισμικό ανοιχτού κώδικα; [9] Το ελεύθερο λογισμικό είναι το λογισμικό στο οποίο η επεξεργασία και αναδιανομή του είναι ελεύθερη. Είναι λογισμικό του οποίου ο πηγαίος κώδικας είναι διαθέσιμος και μπορεί να τροποποιηθεί και να αναδιανεμηθεί. Παρόλα αυτά υπάρχει μια σύγχυση γύρω από τον όρο αυτό. Ελεύθερο λογισμικό δεν σημαίνει απαραίτητα δωρεάν λογισμικό. Επειδή στην αγγλική γλώσσα η λέξη free έχει διπλή σημασία. Free σημαίνει και ελεύθερος αλλά και δωρεάν. Ένα παράδειγμα για να λυθεί η παρερμηνεία αυτή είναι ότι το ελεύθερο λογισμικό είναι ελεύθερο σαν την ελευθερία λόγου (free speech). Το ελεύθερο λογισμικό γίνεται να διανεμηθεί και δωρεάν αλλά και με χρηματικό αντίτιμο, αλλά θα πρέπει πάντα να είναι διαθέσιμος ο πηγαίος κώδικας με στόχο την μελλοντική καινοτομία. Ο όρος Λογισμικό Ανοιχτού Κώδικα είναι ένα όνομα που δόθηκε για λόγους μάρκετινγκ σε μια προσπάθεια να προσπεραστεί η σύγχυση αυτή γύρω από τη λέξη free στην αγγλική γλώσσα. Μπορεί να χρησιμοποιείται σαν όρος μάρκετινγκ γιατί ο όρος ελεύθερος (free) δημιουργούσε προβλήματα όπως ανησυχία και σύγχυση στην επιχειρηματική δραστηριότητα. Μάλιστα σύμφωνα με το OSΙ (Open source Initiative) κατάφερε να αλλάξει σχεδόν ολοκληρωτικά την άσχημη εικόνα που είχε το ελεύθερο λογισμικό έξω από την κοινότητα των προγραμματιστών του. 14

2.4 Τα Υπόλοιπα ήδη λογισμικού ως προς τον τύπο των αδειών χρήσης τους. Για την καλύτερη κατανόηση παρακάτω αναφέρονται και υπόλοιπα είδη λογισμικού, ως αναφορά τις άδειες χρήσεις τους, εκτός από το ελεύθερο/ανοιχτού κώδικά. Αυτές συνήθως αναφέρονται στο ιδιωτικό λογισμικό (proprietary) και στις διάφορες μορφές του. Έτσι διακρίνονται τα εξής είδη λογισμικού: Ιδιωτικό (proprietary) λογισμικό ή αλλιώς μη ελεύθερό λογισμικό. Είναι λογισμικό με περιορισμούς στην χρήση, αντιγραφή και τροποποίηση από τον ιδιοκτήτη του. Οι περιορισμοί αυτοί είναι είτε από τεχνικής είτε από νομικής πλευράς πλευρές. Τεχνικοί περιορισμοί αφορούν είτε και από τις δύο την έκδοση του προγράμματος σε μορφή που να διαβάζεται από μηχανήματα και τα δικαιώματα πρόσβασης στον πηγαίο κώδικα. Οι νομικοί περιορισμοί περιλαμβάνουν την άδεια χρήσης του λογισμικού, τα πνευματικά δικαιώματα και το νόμο περί πατεντών λογισμικού. Έτσι το λογισμικό αυτού του είδους είναι το ακριβώς αντίθετο από το ελεύθερο λογισμικό αφού οι ίδιοι νόμοι που χρησιμοποιούνται από μια άδεια μονοπωλιακού λογισμικού χρησιμοποιούνται και από το ελεύθερο λογισμικό για να προστατέψουν τις ελευθερίες χρήσης, αντιγραφής και τροποποίησης του λογισμικού. Το ιδιωτικό λογισμικό επίσης περιλαμβάνει και το freeware και το shareware λογισμικό. Το freeware είναι λογισμικό που διανέμεται δωρεάν αλλά δεν δίνει δικαιώματα τροποποίησης και αναδιανομής στους χρήστες του. 15

Το shareware είναι λογισμικό που διανέμεται με άδεια για αναδιανομή αντιγράφων αλλά δίνει περιορισμούς στη χρήση είτε χρονικούς είτε σε λειτουργίες και όποιος θέλει να συνεχίσει να το χρησιμοποιεί θα πρέπει να πληρώσει. Και στα 2 παραπάνω είδη λογισμικού ο πηγαίος κώδικας δεν είναι διαθέσιμος. 2.5 Λίστα Αδειών Χρήσης Μια άδεια για να πιστοποιηθεί θα πρέπει να πληρεί τις προϋποθέσεις του Ορισμού του Ανοιχτού κώδικα του OSI. Οι πιστοποιημένες άδειες από το ίδρυμα OSI είναι: 1. Academic Free License 3.0 (AFL 3.0) 2. Affero GNU Public License 3. Adaptive Public License 4. Apache License, 2.0 5. Apple Public Source License 6. Artistic license 2.0 7. Attribution Assurance Licenses 8. New and Simplified BSD licenses 9. Boost Software License (BSL1.0) 10. Computer Associates Trusted Open Source License 1.1 11. Common Development and Distribution License 12. Common Public Attribution License 1.0 (CPAL) 13. Common Public License 1.0 14. CUA Office Public License Version 1.0 15. EU DataGrid Software License 16. Eclipse Public License 17. Educational Community License, Version 2.0 18. Eiffel Forum License V2.0 19. Entessa Public License 16

20. Fair License 21. Frameworx License 22. GNU General Public License (GPL) 23. GNU General Public License version 3.0 (GPLv3) 24. GNU Library or "Lesser" General Public License (LGPL) 25. GNU Library or "Lesser" General Public License version 3.0 26. Historical Permission Notice and Disclaimer 27. IBM Public License 28. ISC License 29. Lucent Public License Version 1.02 30. Microsoft Public License (Ms-PL) 31. Microsoft Reciprocal License (Ms-RL) 32. MIT license 33. Motosoto License 34. Mozilla Public License 1.1 (MPL) 35. Multics License 36. NASA Open Source Agreement 1.3 37. NTP License 38. Naumen Public License 39. Nethack General Public License 40. Nokia Open Source License 41. Non-Profit Open Software License 3.0 (Non-Profit OSL 3.0) 42. OCLC Research Public License 2.0 43. Open Group Test Suite License 44. Open Software License 3.0 (OSL 3.0) 45. PHP License 46. Python license (CNRI Python License) 47. Python Software Foundation License 48. Qt Public License (QPL) 49. RealNetworks Public Source License V1.0 50. Reciprocal Public License 1.5 (RPL1.5) 51. Ricoh Source Code Public License 52. Simple Public License 2.0 53. Sleepycat License 17

54. Sun Public License 55. Sybase Open Watcom Public License 1.0 56. University of Illinois/NCSA Open Source License 57. Vovida Software License v. 1.0 58. W3C License 59. wxwindows Library License 60. X.Net License 61. Zope Public License 62. zlib/libpng license Οι κυριότερες από τις παραπάνω είναι οι εξής: 1) Apache Licence Δημιουργήθηκε από το Apache Foundation και είναι η άδεια υπό την οποία διανέμεται ο εξυπηρετητής HTTP Apache. Είναι μια πολύ αναλυτικά διατυπωμένη άδεια, που ενώ επιτρέπει την αναδιανομή και τροποποίηση του λογισμικού, απαιτεί αυτή να γίνεται υπό την ίδια άδεια, να δείχνονται αναλυτικά ποια αρχεία του πηγαίου κώδικα πείραξε ο χρήστης και απαγορεύει τη χρήση υλικού που σχετίζεται με πατέντες λογισμικού καθώς και τη χρήση ονομάτων και συμβόλων του αρχικού συγγραφέα για διαφημιστικούς σκοπούς. Τέλος, απαλλάσσει το δημιουργό από κάθε ευθύνη σχετική με τη χρήση του προγράμματος. Εκτός από τον Apache, την άδεια χρησιμοποιούν πολλά προγράμματα που σχετίζονται με αυτόν, όπως ο Tomcat. 2) Artistic Licence Την συνέταξε ο συγγραφέας της perl, Larry Wall. Η πρώτη της έκδοση ήταν τόσο περίπλοκα διατυπωμένη που πολλοί την κατηγόρησαν ότι δεν είναι άδεια ελεύθερου λογισμικού. Η γλώσσα προγραμματισμού perl αλλά και πολλά modules της ήταν συνδεδεμένα με αυτήν. Η δεύτερη έκδοση είναι πιο σαφώς διατυπωμένη, και δίδει το δικαίωμα ανάγνωσης, τροποποίησης και αναδιανομής του 18

πηγαίου κώδικα/προγράμματος (υπό οποιαδήποτε άδεια), εφόσον διατηρείται η αναφορά στον αρχικό συγγραφέα του προγράμματος, σε περίπτωση που δεν υπάρξει τροποποίηση. Επιπλέον, απαλλάσσει το συγγραφέα από κάθε ευθύνη σχετική με τη χρήση του προγράμματος. Η postgresql διατίθεται υπό αυτήν την άδεια. 3) New BSD Licence Η άδεια αυτή αφορά λογισμικό που αναπτύχθηκε αρχικά στο πανεπιστήμιο Berkeley στην Καλιφόρνια των ΗΠΑ. Είναι μια από τις πιο 'ελεύθερες' άδειες, εφόσον επιτρέπει τροποποίηση και την αναδημοσίευση την ανάγνωση, την του προγράμματος υπό οποιαδήποτε άδεια, με ή χωρίς τον πηγαίο κώδικα, σε εμπορικά ή μη εμπορικά πακέτα. Επιπλέον, υπάρχουν τροποποιήσεις της άδειας, που αφορούν όμως μόνο το θέμα της χρήσης του ονόματος του αρχικού συγγραφέα για διαφημιστικούς σκοπούς. Παράδειγμα προγραμμάτων που τη χρησιμοποιούν είναι όλα τα είδη λειτουργικού BSD (freebsd, netbsd, openbsd) καθώς και οι αρχικές εκδόσεις των προγραμμάτων ηλεκτρονικού σχεδιασμού Spice, Magic και IrSim. Ως αποτέλεσμα της ελευθερίας που δίδει η άδεια για χρήση κώδικα ελεύθερων προγραμμάτων σε ιδιωτικά προγράμματα, πολλά κλειστά λειτουργικά συστήματα έχουν κομμάτια βασισμένα στο BSD (π.χ. μέρος του network API στα Windows 2000 ) και πολλά ιδιωτικά πακέτα ηλεκτρονικού σχεδιασμού βασίζονται στο Spice. Αυτό εκλαμβάνεται σαν ελευθερία από τους οπαδούς της άδειας, αλλά πολλές φορές δρα ανασταλτικά προς την ανάπτυξη του ελεύθερου λογισμικού. 4) GNU General Public Licence (GPL) Γράφτηκε αρχικά από τον Richard Stallman για το GNU project. Επιτρέπει την ανάγνωση, τροποποίηση και αναδιανομή του λογισμικού, μαζί με τον πηγαίο κώδικα του, με τον όρο ότι τροπoποιημένες ή μη εκδόσεις του θα αναδιανέμονται υπό την ίδια άδεια. Εν ολίγης, διασφαλίζει ότι οι χρήστες του τροποποιημένου 19

λογισμικού θα απολαμβάνουν τις ίδιες ελευθερίες με το χρήστη του αρχικού λογισμικού. Συνεπώς απαγορεύει την χρήση (ολόκληρου ή τμήματος) του πηγαίου κώδικα του προγράμματος σε κλειστά πακέτα λογισμικού. Αυτό εξασφαλίζεται δίνοντας το copyright του προγράμματος στον αρχικό δημιουργό, οπότε σε περίπτωση που κάποιος δε σεβαστεί την GPL μπορεί να μηνυθεί για καταπάτηση πνευματικών δικαιωμάτων. Η GNU GPL έχει κατηγορηθεί από πολλούς ως "ιός" (επειδή θα πρέπει κάθε πρόγραμμα που έχει σχέση με το αρχικό να τη φέρει) και ότι στερεί τη δημιουργία άμεσου κέρδους στον προγραμματιστή (επειδή μπορεί οποιοσδήποτε να αναδιανείμει το λογισμικό). Παρά τις κριτικές αποτελεί τη σημαντικότερη και πιο διαδεδομένη άδεια ελεύθερου λογισμικού. Σημαντικά προγράμματα που τη χρησιμοποιούν είναι ο πυρήνας του Linux, o μεταγλωττιστής gcc, ο επεξεργαστής κειμένου Emacs, ο διερμηνέας της Perl, o Mozilla Firefox, η ΜySQL, το Cygwin, το σύστημα αρχείων ReiserFS και πλέον και η βιβλιοθήκη Qt. Μια πιο ελαστική έκδοση της GPL είναι η GNU Lesser General Public Licence (LGPL). Μια LGPL βιβλιοθήκη για παράδειγμα, μπορεί να συνδεθεί με ένα πρόγραμμα που χρησιμοποιεί άλλη άδεια, ακόμα και αν αυτό δεν είναι ελεύθερο λογισμικό. H GNU GPL βρίσκεται στη δεύτερη έκδοση, η οποία οριστικοποιήθηκε το 1991. Το 2005 άρχισαν συζητήσεις για την τρίτη έκδοση της άδειας, η οποία αναμένεται είτε τον Οκτώβριο του 2006 είτε στις αρχές του 2007 και δίνει ιδιαίτερη έμφαση σε θέματα πατεντών λογισμικού και DRM (Digital Right Marks). Ένα προσχέδιο δόθηκε στις 16 Ιανουαρίου 2006 και ένα ακόμα αναμένεται για τον Ιούλιο του 2006. 20

5) MIT Licence H άδεια αυτή επιτρέπει την τροποποίηση και την αναδιανομή του προγράμματος με οποιονδήποτε τρόπο, υπό οποιαδήποτε άδεια, για οποιονδήποτε σκοπό. Το πιο γνωστό πρόγραμμα που τη χρησιμοποιεί είναι ο X Window System (X11) που χρησιμοποιείται για το παραθυρικό περιβάλλον στις περισσότερες διανομές Linux, και γι' αυτό η άδεια αυτή ονομάζεται πολλές φορές και X Licence ή X11 Licence. Άλλα προγράμματα που τη χρησιμοποιούν είναι το Expat, το MetaKit, και το PuTTY. 6) Open Software Licence Ουσιαστικά δίvει τις ίδιες ελευθερίες και τους ίδιους περιορισμούς με την GNU GPL (δλδ. απαιτεί την αναδιανομή υπό την ίδια άδεια) με σημαντική διαφορά τον όρο που αφορά τις πατέντες λογισμικού. Ο όρος αυτός τερματίζει αυτόματα την άδεια και στερεί τον χρήστη από τις ελευθερίες της στην περίπτωση που ο χρήστης μηνύσει οποιοδήποτε λογισμικό που τη χρησιμοποιεί για καταπάτηση πατεντών λογισμικού, που πολλοί πιστεύουν ότι έχουν γίνει επιζήμιες για το ελεύθερο λογισμικό. 2.6 Κατηγοριοποίηση Αδειών Οι άδειες χρήσεως του λογισμικού ανοιχτού κώδικα μπορούν να κατηγοριοποιηθούν σε κάποιες βασικές κατηγορίες ώστε η χρήση, τροποποίηση και διανομή του λογισμικού ανοιχτού κώδικα να ακολουθεί νομικά βάσιμες αρχές. Ιστορικά εμφανίζονται κυρίως τρείς τύποι αδειών: 1. Academic licenses (MIT Athena, Berkeley, and Apache) Δίνουν πλήρη δικαιώματα στον χρήστη του λογισμικού, ακόμα και για να το τροποποιήσει, να το επεκτείνει ή και να το πουλήσει. Δεν απαιτούν το απορρέον επεκταμένο λογισμικό να δίδεται με 21

την ίδια άδεια και δεν απαιτούν την κοινοποίηση των αλλαγών ή επεκτάσεων. Με αυτό τον τρόπο εξουσιοδοτούν ιδιόκτητο λογισμικό να εμπεριέχει τέτοιου τύπου άδειας Ανοιχτό Λογισμικό. Το μόνο που απαιτούν είναι να παραμένουν και να αναφέρονται (attribution) τα δικαιώματα του δημιουργού (copyrights). Αποκηρύσσονται οποιασδήποτε εγγύησης για την χρήση του λογισμικού. 2. Free software licenses (General Public License and the LGPL) Αν ο χρήστης επιθυμεί να τροποποιήσει και διανείμει το λογισμικό, τότε όλες οι αλλαγές πρέπει να κοινοποιούνται και το λογισμικό να διανεμηθεί με την ίδια άδεια. Εάν ο χρήστης συμπεριλάβει τέτοιας άδειας λογισμικό μέσα σε λογισμικό που έχει ο ίδιος αναπτύξει, ολόκληρο το απορρέον λογισμικό συμπεριλαμβανόμενου του ιδιόκτητου κώδικα πρέπει να υπαχθεί κάτω από την ίδια άδεια (propagate license). Αποκηρύσσονται οποιασδήποτε εγγύησης για την χρήση του λογισμικού. 3. Mozilla-style licenses (Mozilla, and the IBM licenses) Απαιτεί παράγωγα που προκύπτουν με την προσθήκη λογισμικού να διανέμονται με την ίδια άδεια Eπιτρέπει το λογισμικό να συνδυαστεί με άλλο λογισμικό δημιουργώντας ένα μεγαλύτερο προϊόν το οποίο μπορεί να διανεμηθεί με διαφορετικού τύπου άδεια. Υποστηρίζει έτσι την ανάπτυξη ιδιόκτητου λογισμικού, όπως και στην περίπτωση των Academic Licenses. Συζητά θέματα πατεντών σχετικά με την άδεια του λογισμικού. Αποκηρύσσονται οποιασδήποτε εγγύησης για την χρήση του λογισμικού. 22

2.7 Ποιος το αναπτύσσει. Η ανάπτυξη του Ελ/λακ γίνεται από κοινότητες. Οι κοινότητες αποτελούνται από απλούς προγραμματιστές, απλούς χρήστες του και από εταιρείες που συμβάλλουν και αυτές. Για τους ιδιώτες προγραμματιστές η συμμετοχή σε κοινότητες ΕΛΛΑΚ και η δημιουργία του θεωρείται από τον περισσότερους ερευνητές ως μια ιδιωτική ασχολία. Απλοί ιδιώτες προσφέρουν στα έργα ΕΛΛΑΚ για δικούς τους λόγος είτε αυτό είναι γιατί τους αρέσει, είτε γιατί πιστεύουν ότι έχουν κάτι να κερδίσουν από αυτό είτε γιατί η δραστηριότητα τους φέρνει έμμεσες κέρδη στην αγορά. Πχ. Η συμμετοχή ενός προγραμματιστή σε έργα ΕΛΛΑΚ ανεβάζει την εικόνα του στη κοινότητα και μπορεί να του δώσει πρόσβαση σε δουλείες προγραμματισμού. (Raymond, 2000). Τα μεγαλύτερα κίνητρα για τη συμμετοχή σε ένα έργο ΕΛΛΑΚ για τους ιδιώτες είναι: η ανάπτυξη νέων ικανοτήτων στο προγραμματισμό και ο διαμοιρασμός της γνώσης τους σε όλους. Επίσης σημαντικό κίνητρο είναι η βελτίωση των ευκαιριών τους για δουλεία. (Ghosh et al., 2002). Ένα μέρος της κοινότητας αποτελείται από ιδιώτες που έχουν προσληφθεί αποκλειστικά από εταιρείες για να αναπτύσσουν ελεύθερο λογισμικό. Ο Gosh et al. (2002) σημειώνει ότι περίπου το 1/3 των ερωτηθέντων της έρευνας του πληρώνονται μόνο για να αναπτύσσουν Ελ/λακ. Αυτό είναι μια απόρροια των αποφάσεων εταιρειών να χρηματοδοτήσουν το ελεύθερο λογισμικό. Επίσης υπάρχουν πολλά παραδείγματα εταιρειών που διέθεσαν το λογισμικό τους υπό μια άδεια Ελ/λακ ενώ πριν το ίδιο ήταν κλειστού κώδικα. Οι δυνατότητες σε πόρους που μπορούν να διαθέσουν οι μεγάλες εταιρίες στην ανάπτυξη λογισμικού είναι πολύ μεγάλες. 23

Για παράδειγμα η IBM ισχυρίζεται ότι έχει ξοδέψει πάνω από ένα εκατομμύριο δολάρια μόνο για την συμμετοχή της στο Linux και ξεχωριστά βοηθάει σε πολλά άλλα έργα. Οι εταιρείες θέλουν να εκμεταλλευτούν το Ελ/λακ για να πουλήσουν συμπληρωματικά προϊόντα ή υπηρεσίες. Στόχος κάθε εταιρείας είναι τα κέρδη και αυτό είναι απολύτως θεμιτό. Από τη στιγμή που δεν μπορούν να το κάνουν άμεσα πουλώντας ένα ελεύθερα διαθέσιμο προϊόν πρέπει να το επιτύχουν πουλώντας κάτι συμπληρωματικό η μέσω κάποιας άλλης έμμεσης δραστηριότητας τους. Οι Red Hat και η Suse είναι καλά παραδείγματα εταιρειών που προσφέρουν συμπληρωματικά προϊόντα και υπηρεσίες σε σχέση με το Ελ/λακ και το Linux ειδικότερα. Η έκδοση του λογισμικού τους υπό άδεια Ελ/λακ κάτω από ορισμένες προϋποθέσεις μπορεί να δράσει υπέρ της επιχείρησης. Αυτό γίνεται στην περίπτωση που μια επιχείρηση πιστεύει ότι μπορεί να βελτιώσει τα κέρδη της από τον συμπληρωματικό τομέα. Απαραίτητο για αυτήν την περίπτωση είναι τα κέρδη από τον συμπληρωματικό τομέα να είναι μεγαλύτερα από τα κέρδη που θα έκανε το λογισμικό αν δεν είχε μετατραπεί σε ανοιχτού κώδικα. Δεν τα καταφέρνουν όλες οι εταιρίες με την στρατηγική του αυτή καθώς όλο το λογισμικό δεν τυχαίνει της ίδιας σημασία από τις κοινότητες και τους χρήστες Τα κίνητρα που οδηγούν τις επιχειρήσεις να συμμετέχουν στο Ελ/λακ είναι τα εξής (Berlecon Research, 2002) α) Η τυποποίηση του λογισμικού β) Το ίδιο το λογισμικό ως χαμηλού κόστος μέρους του προϊόντος τους. γ) Στρατηγικές αποφάσεις 24

3. Η Γλώσσα προγραμματισμού Java 3.1 Η ιστορία της Java [2] Η γλώσσα της Java αρχικά αναπτύχθηκε από την Sun Microsystems υπό την αιγίδα των James Gosling και Bill Joy, σαν μέρος ενός ερευνητικού έργου ανάπτυξης λογισμικού για ηλεκτρονικές συσκευές καταναλωτικού επιπέδου (π.χ video,τηλεόραση). Ο τρόπος αυτός χρησιμοποίησης της, την μετέτρεψε σε μία ιδανική γλώσσα για την διανομή εκτελέσιμων προγραμμάτων μέσω του WWW (Παγκόσμιου Ιστού) καθώς επίσης σε μία γενικού σκοπού γλώσσα προγραμματισμού για την ανάπτυξη προγραμμάτων τα οποία θα είναι εύκολα στην χρήση και θα μπορούν να μεταφέρονται σε διαφορετικά λειτουργικά συστήματα. Αν και χρησιμοποιήθηκε από την Sun σε πολλές εφαρμογές (με το όνομα Οακ) με σκοπό την δημιουργία προϊόντων για την ηλεκτρονική αγορά, ενδιαφέρον προκάλεσε στο κοινό μόνο όταν συνδυάστηκε με το πρόγραμμα ανάγνωσης ιστοσελίδων (browser) της HotJava. Αυτό είχε ως αποτέλεσμα, η γλώσσα αυτή να συνδεθεί στενά με την ανάπτυξη μικρό - εφαρμογών στο διαδίκτυο και συγκεκριμένα στον Παγκόσμιο Ιστό (WWW). Η πραγματική όμως απογείωση της δημοτικότητας της Java ξεκίνησε όταν η Netscape ενσωμάτωσε την δυνατότητα της HotJava να τρέχει μικρό- εφαρμογές μέσα στο δικό της πρόγραμμα ανάγνωσης ιστοσελίδων (browser). Το γεγονός, ότι τα τελευταία χρόνια η Java χρησιμοποιείται κυρίως για την ανάπτυξη μικρό - εφαρμογών δεν σημαίνει ότι η γλώσσα αυτή δεν είναι κατάλληλη για την δημιουργία ολοκληρωμένων εφαρμογών. Εξάλλου αυτό αποδεικνύεται από το γεγονός ότι τα περισσότερα εργαλεία της έχουν γραφτεί με την Java. Μάλιστα, σύμφωνα με την θεωρεία ανάπτυξης μεταγλωττιστών, μία γλώσσα έχει "ενηλικιωθεί" όταν ο μεταγλωττιστής της μπορεί να γραφτεί από την ίδια την γλώσσα. Συνεπώς η Java ως γλώσσα προγραμματισμού έχει ενηλικιωθεί. 25

Αυτό που θα πρέπει κανείς να θυμάται για την Java είναι ότι πρόκειται για μία καλά οργανωμένη και καλά εκφρασμένη γλώσσα προγραμματισμού που έχει δανειστεί πολλά θετικά χαρακτηριστικά από άλλες γλώσσες όπως τη C++, τη SmallTalk και τη Lisp, αφαίρεσε όμως όλα εκείνα τα στοιχεία αυτών των γλωσσών που ίσως οδηγούσαν σε σύγχυση τους χρήστες. 3.2 Τα βασικά χαρακτηριστικά της Java[2] Οι δημιουργοί της Java την έχουν χαρακτηρίσει ως μία γλώσσα απλή, αντικειμενοστραφή, διαμοιραζόμενη, εύρωστη, ασφαλή, με ουδέτερηαρχιτεκτονική, εύκολη στην μεταφορά, υψηλής απόδοσης και πολυνηματική. Για να γίνουν όμως κατανοητοί όλοι αυτοί οι χαρακτηρισμοί θα πρέπει να αναλυθεί ο κάθε ένας ξεχωριστά. Αρχεία JAR (Java Archive Files) Η Java προέκυψε από την C++ με την αφαίρεση ορισμένων χαρακτηριστικών. Συνεπώς, η Java είναι σίγουρα ευκολότερη από την C++. Αυτό σε συνδυασμό με το γεγονός ότι οι περισσότεροι προγραμματιστές πρώτα μαθαίνουν C++, οδηγεί στο συμπέρασμα ότι είναι πολύ πιο εύκολο για αυτούς να μάθουν την Java. Η Java είναι πιο απλή γιατί περιλαμβάνει τρεις μόνο βασικούς τύπους δεδομένων τους αριθμούς, τις λογικές μεταβλητές (Boolean) και τους πίνακες. Όλα τα υπόλοιπα στην Java αποτελούν μία κλάση. Για παράδειγμα, τα αλφαριθμητικά είναι αντικείμενα και όχι απλά ένας πίνακας χαρακτήρων. Αναφέραμε πριν ότι η Java έχει αφαιρέσει ορισμένα χαρακτηριστικά από την C++, όπως είναι η δήλωση goto, η υπερφόρτωση των τελεστών (η οποία προκαλούσε σύγχυση στους προγραμματιστές της C++), οι δομές, τα ενωτικά όπως επίσης τις δηλώσεις #define και Typedef. Όλα αυτά τα 26

χαρακτηριστικά ήταν απαραίτητα στην C++ προκειμένου να μπορέσει ο μεταγλωττιστής να μεταγλωττίσει σωστά τον ήδη υπάρχοντα κώδικα της C ο οποίος και σχετιζόταν με τα χαρακτηριστικά αυτά. Το βασικό όμως στοιχείο της C++ το οποίο παραλήφθηκε από την Java είναι η άμεση διαχείριση της μνήμης, μέσα από την χρησιμοποίηση των δεικτών. Όπως ομολογούν οι περισσότεροι προγραμματιστές της C ή της C+ +, οι δείκτες αποτελούν την πηγή προβλημάτων τόσο κατά την διάρκεια γραφής του προγράμματος, όσο και κατά την μεταγλώττιση του. Οι δείκτες μπορούν κατά λάθος να οριστούν από τον χρήστη να δείχνούν σε λάθος μεταβλητή, με αποτέλεσμα την μη σωστή λειτουργία του προγράμματος. Πολλές φορές μάλιστα αυτό μπορεί να οδηγήσει σε κατάρρευση του προγράμματος. Επίσης, οι δείκτες μπορούν να αποθηκεύουν κατανεμημένη μνήμη. Εάν η κατανεμημένη αυτή μνήμη δεν απελευθερωθεί το πρόγραμμα σιγά- σιγά θα δεσμεύει μνήμη μέχρις ότου να μην υπάρχει καθόλου διαθέσιμη μνήμη. Έχουν δημιουργηθεί αρκετά προϊόντα, όπως το Bounds Checker, προκειμένου να βοηθήσουν τους προγραμματιστές να επιλύσουν τα προβλήματα αυτά που προκύπτουν από τους δείκτες. Η Java όμως, απλοποιεί το πρόβλημα αυτό με το να αφαιρεί την έννοια των δεικτών από την γλώσσα προγραμματισμού. Βέβαια η Java δεν αφαιρεί μόνο στοιχεία από την C++, αλλά προσθέτει και νέα γιατί διαφορετικά δεν θα μιλούσαμε για μία νέα γλώσσα προγραμματισμού, αλλά για ένα φτωχό μεταγλωττιστή. Επομένως, ένα από τα βασικά χαρακτηριστικά που έχει προσθέσει η Java είναι η αυτόματη διαχείριση της μνήμης, γνωστό και ως "μονάδα συλλογής σκουπιδιών" (garbage collector). Ο προγραμματιστής δεν χρειάζεται να απελευθερώνει την μνήμη που κατανέμει- η εικονική μηχανή της Java (Virtual Machine ή VMJ) κάνει την δουλεία αυτή για λογαριασμό του προγραμματιστή. 27

Επίσης, υποστηρίζει τη δημιουργία πολυνηματικών προγραμμάτων. Ένα πρόγραμμα λέγεται πολυνηματικό, όταν σχεδιάζεται έτσι ώστε να μπορεί να εκτελεί περισσότερες από μία δουλείες ταυτόχρονα. Αντικειμενοστραφής Όσον αφορά στα αντικείμενα η Java ακολουθεί περισσότερο τα χαρακτηριστικά της γλώσσας SmallTalk παρά της C++. Όπως έχουμε ήδη αναφέρει εκτός από τους τύπους των δεδομένων, όλα τα υπόλοιπα στην Java αποτελούν αντικείμενα. Στην Java δεν υπάρχουν καθολικές συναρτήσεις: όλες οι συναρτήσεις καλούνται μέσα από ένα αντικείμενο. Σημαντικό επίσης είναι, ότι η Java δεν υιοθετεί τα χαρακτηριστικά της πολλαπλής κληρονομικότητας, καθώς κάτι τέτοιο θα έκανε πιο πολύπλοκα τα πράγματα. Οι κλάσεις στην Java αποτελούνται από τις μεθόδους και τις μεταβλητές. Μέθοδοι λέγονται οι συναρτήσεις στις οποίες μπορεί να απευθύνεται το αντικείμενο μίας κλάσης. Μεταβλητές λέγονται τα δεδομένα που καθορίζουν την κατάσταση ενός αντικειμένου. Διαμοιραζόμενη Η Java επιτρέπει την δημιουργία διαμοιραζόμενων εφαρμογών από μία σειρά κλάσεων οι οποίες χρησιμοποιούνται σε δικτυακές εφαρμογές. Με την χρησιμοποίηση της URL κλάσης της Java, μία εφαρμογή μπορεί πολύ εύκολα να προσπελάσει έναν απομακρυσμένο διακομιστή. Εύρωστη Οι σχεδιαστές της Java προέβλεψαν ότι η γλώσσα αυτή επρόκειτο να χρησιμοποιηθεί για την επίλυση πολύπλοκων προγραμματιστικών προβλημάτων. Η δημιουργία ενός διαμοιραζόμενου, πολυνηματικού 28

προγράμματος το οποίο μπορεί να τρέχει σε μία ποικιλία λειτουργικών συστημάτων με διάφορους επεξεργαστές δεν είναι εύκολη δουλεία. Προκειμένου να βοηθήσουν στην επίλυση ενός τέτοιου είδους προβλήματος οι σχεδιαστές της Java δημιούργησαν μία πολύ δυνατή γλώσσα. Η διαχείριση της μνήμης έχει απλουστευτεί στην Java με δύο τρόπους: Πρώτον, δεν χρησιμοποιούνται οι δείκτες και επομένως είναι αδύνατον ένα πρόγραμμα της Java να καταστρέψει δεδομένα ή να γράψει πάνω σε άλλα. Δεύτερον, η Java ακολουθεί την γλώσσα Lisp και SmallTalk οι οποίες επιτρέπουν την αυτόματη απελευθέρωση της μνήμης η οποία έχει καταμεριστεί αλλά δεν χρησιμοποιείται πια. Ασφάλεια Οι ισχυροί μηχανισμοί ασφάλειας της Java δρουν σε τέσσερα διαφορετικά επίπεδα της αρχιτεκτονικής του συστήματος. Κατ αρχήν, η ίδια η γλώσσα Java σχεδιάστηκε να είναι ασφαλής και ο μεταγλωττιστής της Java διασφαλίζει ότι ο πηγαίος κώδικας δεν παραβιάζει τους κανόνες ασφάλειας. Κατά δεύτερον, όλος ο κώδικας σε μορφή bytecode που εκτελείται από το περιβάλλον χρόνου εκτέλεσης, ελέγχεται για να διασφαλιστεί ότι και αυτός επίσης υπακούει στους κανόνες ασφάλειας. Κατά τρίτον, η μονάδα φόρτωσης κλάσεων διασφαλίζει ότι οι κλάσεις δεν παραβιάζουν τους ισχύοντες περιορισμούς όταν φορτώνονται στο σύστημα. Τέλος, η συγκεκριμένη ως προς το API ασφάλεια εμποδίζει τις μίνι - εφαρμογές να κάνουν καταστροφικά πράγματα στο σύστημα. Ουδέτερη- Αρχιτεκτονική Την δεκαετία του 1980 υπήρχε μεγάλη ποικιλία από προσωπικούς ηλεκτρονικούς υπολογιστές (PC). Μπορούσες να αγοράσεις υπολογιστή από την Apple, Commodone, Radio Shack, Atari και από την IBM. Συγκεκριμένα κάθε διαφορετικού τύπου Ηλεκτρονικός Υπολογιστής είχε το 29

δικό του διαφορετικό λειτουργικό σύστημα. Επειδή, η ανάπτυξη λογισμικού απαιτούσε πολύ χρόνο, πολύ λίγο από το λογισμικό που αναπτυσσόταν για να χρησιμοποιηθεί από ένα Ηλεκτρονικό Υπολογιστή είχε εφαρμογή σε κάποιο άλλο διαφορετικό μηχάνημα. Η λύση στο πρόβλημα αυτό ήρθε με την ανάπτυξη των Windows, των Macintosh της Apple και του Unix. Ωστόσο, η ανάπτυξη λογισμικού για την χρησιμοποίηση του ταυτόχρονα και από τα Windows NT, Unix και Macintosh εξακολουθεί να είναι μία δύσκολη εργασία. Η Java έχει καταφέρει να λύσει το πρόβλημα της χρησιμοποίησης των εφαρμογών που έχουν αναπτυχθεί από διαφορετικά μηχανήματα. Το γεγονός ότι ο μεταγλωττιστής της Java δημιουργεί κώδικα εντολών γραμμένο σε byte ο οποίος μεταγλωττίζεται από τον μεταγλωττιστή της Java προσδίδει στην Java μία ουδέτερη αρχιτεκτονική. Έτσι, τα προγράμματα της Java μπορούν να εκτελούνται από οποιοδήποτε μηχάνημα ανεξαρτήτως λειτουργικού συστήματος. Εύκολη στην μεταφορά Βασικός στόχος της Java ήταν η δημιουργία φορητών εφαρμογών έτσι ώστε καθώς αναπτύσσονται νέες αρχιτεκτονικές ( είτε λόγω των λειτουργικών συστημάτων, είτε λόγω των ίδιων των μηχανημάτων), το περιβάλλον της Java να μπορεί να λειτουργεί μέσα σε αυτές. Στην Java όλοι οι τύποι δεδομένων (π.χ ακέραιοι, κινητής υποδιαστολής και κινητής υποδιαστολής διπλής ακριβείας ) έχουν προκαθορισμένο μέγεθος ανεξάρτητα από το μηχάνημα ή το λειτουργικό σύστημα στο οποίο το πρόγραμμα τρέχει. Αυτό βέβαια έρχεται σε αντίθεση με την C++, όπου το μέγεθος των παραπάνω τύπων εξαρτάται από τον μεταγλωττιστή. 30

Υψηλή απόδοση Μία εφαρμογή που αναπτύχθηκε με την Java σίγουρα δεν έχει την αποδοτικότητα που θα είχε αν είχε γραφτεί σε C++. Ωστόσο, για τις περισσότερες εφαρμογές που περιλαμβάνουν γραφικά τα οποία συναντάμε κυρίως στο διαδίκτυο, η απόδοση της Java είναι περισσότερο από αρκετή. Για ορισμένες μάλιστα εφαρμογές δεν υπάρχει ορατή διαφορά στην απόδοση ανάμεσα στην Java και την C++. Πάντως, ένα είναι σίγουρο ότι η Java είναι αρκετά γρήγορη και μπορεί να επιτρέψει στους προγραμματιστές να κάνουν πράγματα που δεν θα μπορούσαν με την C++. Πολυνηματική Οι σύγχρονες εφαρμογές χρειάζεται να εκτελούν περισσότερες από μία λειτουργίες κάθε φορά. Η Java ενισχύει την ανάπτυξη τέτοιων εφαρμογών μέσω των νημάτων. Τα νήματα είναι μία ροή εκτέλεσης μέσα σε μία εφαρμογή. Ένα νήμα μπορεί να εκτελείται ανεξάρτητα σε μία εφαρμογή ή πολλά νήματα μπορούν να εκτελούνται ταυτόχρονα. Η χρησιμοποίηση συγχρονισμένων νημάτων είναι εξαιρετικά χρήσιμη στην δημιουργία διαμοιραζόμενων, δικτυακών εφαρμογών. Ένα παράδειγμα τέτοιας εφαρμογής είναι η επικοινωνία με ένα απομακρυσμένο διακομιστή μέσω ενός νήματος, ενώ με ένα άλλο νήμα πραγματοποιείται η αλληλεπίδραση με τον χρήστη. 31

3.3 Τα Κυριότερα Εργαλεία της Java[2] Για να γράψει κανείς μία εφαρμογή ή μίνι - εφαρμογή στην Java, χρειάζεται εκτός από την ίδια την γλώσσα και τα εργαλεία με τα οποία θα γράψει, θα δοκιμάσει και θα μεταγλωττίσει το πρόγραμμα. Κατά καιρούς έχουν αναπτυχθεί πολλά περιβάλλοντα για την εκτέλεση των προγραμμάτων σε Java. Ωστόσο αυτό που κυρίως χρησιμοποιείται είναι το JDK που αναπτύχθηκε από την Sun Microsystems και το οποίο είναι διαθέσιμο στην ηλεκτρονική διεύθυνση http://www.java.sun.com. Ο Διερμηνευτής χρόνου εκτέλεσης Ο διερμηνευτής χρόνου εκτέλεσης (Interpreter), γνωστός και ως Java, είναι ένα εργαλείο το οποίο χρησιμοποιείται για την εκτέλεση προγραμμάτων και εφαρμογών της Java. Οι μίνι- εφαρμογές της Java απαιτούν την υποστήριξη ενός Web προγράμματος περιήγησης για την εμφάνιση τους. Μπορεί να είναι ένα αυτόνομο τμήμα λογισμικού ή μέρος μίας μεγάλης εφαρμογής, όπως είναι το Netscape. Επιτρέπει στο χρήστη να κάνει πολλά πράγματα, όπως είναι η φόρτωση αρχείων κλάσεων και η ερμηνεία δυαδικού κώδικα (δηλαδή αρχείων σε μορφή bytecode). Πολλές φορές λειτουργεί και ως μεταγλωττιστής ο οποίος μεταγλωττίζει τον δυαδικό κώδικα Java σε κώδικα μηχανής. Έχει την δυνατότητα να εκτελεί τόσο προγράμματα με υποστήριξη μόνο κειμένου, όσο και εφαρμογές Java με υποστήριξη γραφικών, αλλά όχι μίνιεφαρμογές. 32

Η σύνταξη για την χρήση του διερμηνευτή χρόνου εκτέλεσης είναι: java Επιλογές Όνομα_κλάσης Ορίσματα Το όρισμα Όνομα_κλάσης προσδιορίζει το όνομα της κλάσης που θέλουμε να εκτελεστεί. Εάν η κλάση βρίσκεται σε ένα πακέτο, πρέπει να προσδιοριστεί πλήρως το όνομα της. Για παράδειγμα, εάν θέλετε να εκτελέσετε μία κλάση με το όνομα Suffle η οποία βρίσκεται σε ένα πακέτο με όνομα CardActions, θα πρέπει να καλέσετε τον διερμηνευτή ως εξής: java CardActions.Suffle Όταν ο διερμηνευτής της Java εκτελεί μία κλάση, αυτό που κάνει στην πραγματικότητα είναι να εκτελεί την μέθοδο main() της κλάσης. Ο διερμηνευτής τερματίζει όταν η μέθοδος main() και οποιαδήποτε νήματα δημιουργήθηκαν από αυτήν ολοκλήρωσαν την εκτέλεση τους. Η μέθοδος main() δέχεται μία λίστα ορισμάτων τα οποία μπορούν να χρησιμοποιηθούν για τον έλεγχο του προγράμματος. Μεταγλωττιστής Ο μεταγλωττιστής της Java (javac) χρησιμοποιείται για την μεταγλώττιση των αρχείων πηγαίου κώδικα σε εκτελέσιμες κλάσεις ( σε μορφή bytecode). Στην Java, τα αρχεία πηγαίου κώδικα έχουν επέκταση.java και είναι αρχεία ASCII, παρόμοια με τα αρχεία πηγαίου κώδικα άλλων γλωσσών προγραμματισμού όπως είναι η C++. Τα εκτελέσιμα αρχεία έχουν επέκταση.class και αντιπροσωπεύουν μία κλάση της Java στην χρησιμοποιήσιμη μορφή της. Τα bytecode της Java είναι ένα ειδικό σύνολο εντολών μηχανής, οι οποίες δεν απευθύνονται αποκλειστικά σε έναν συγκεκριμένο επεξεργαστή ή σύστημα υπολογιστή. Ένας συγκεκριμένος, ως προς το σύστημα 33

διερμηνευτής, εκτελεί τις οδηγίες των bytecode. Ο διερμηνευτής αυτός λέγεται και εικονική μηχανή της Java. Ο μεταγλωττιστής επιτρέπει την ύπαρξη μίας μόνο public κλάσης. Είναι απαραίτητη η κοινή ονομασία του αρχείου και της κλάσης. Η σύνταξη της εντολής είναι: javac Επιλογές Όνομα Αρχείου Το όρισμα Όνομα Αρχείου καθορίζει το όνομα του αρχείου με τον πηγαίο κώδικα που θέλετε να μεταγλωττίσετε. Ο μεταγλωττιστής θα παράγει αρχεία κλάσεων σε μορφή bytecode για όλες τις κλάσεις που ορίζονται μέσα στο αρχείο αυτό. Εάν μεταγλωττίζετε την κλάση Α η οποία παράγεται από την κλάση Β και η κλάση Β δεν έχει μεταγλωττιστή ακόμα, τότε ο μεταγλωττιστής παρατηρεί την εξάρτηση αυτή και μεταγλωττίζει και τις δύο κλάσεις. Έτσι, με την εκτέλεση της εντολής javac BigBird δημιουργείται μία κλάση με το όνομα BigBird.class που αποθηκεύεται σε ένα κοινό κατάλογο με το πηγαίο αρχείο. Το όρισμα Επιλογές του μεταγλωττιστή καθορίζει επιλογές που σχετίζονται με το πως δημιουργούνται τα εκτελέσιμα αρχεία κλάσεων της Java από τον μεταγλωττιστή. Η επιλογή -d καθορίζει τον αρχικό κατάλογο στον οποίο αποθηκεύονται οι μεταγλωττισμένες κλάσεις. Αυτό είναι σημαντικό επειδή πολλές φορές οι κλάσεις οργανώνονται σε ιεραρχική δομή καταλόγων. Με την επιλογή -d, η δομή καταλόγων θα δημιουργηθεί κάτω από τον κατάλογο που προσδιορίζει η επιλογή. Η επιλογή -g αναγκάζει τον μεταγλωττιστή να παράγει πίνακες αποσφαλμάτωσης για τις κλάσεις της Java. Οι πίνακες αποσφαλμάτωσης χρησιμοποιούνται από τον αποσφαλματωτή της Java και περιέχουν πληροφορίες όπως τοπικές μεταβλητές και αριθμοί γραμμών. 34

Αρχεία JAR (Java Archive Files) Μπορείτε να χρησιμοποιήσετε τα αρχεία JAR για να συμπιέσετε και να εσωκλείσετε ένα μεγάλο αριθμό αρχείων έτσι ώστε να μπορείτε να τα φορτώσετε όλα μαζί με μίας σε ένα μίνι πακέτο, πράγμα που επιταχύνει σημαντικά την διαδικασία της φόρτωσης. Για να δημιουργήσετε ένα αρχείο JAR, χρησιμοποιείστε το αρχείο jar.exe. Για παράδειγμα έστω ότι η μίνιεφαρμογή canvaser.java δημιουργεί δύο αρχεία κλάσης κατά την μεταγλώττιση:canvaser.class και BoxCanvas.class. Μπορείτε να συμπιέσετε (Zip) και τα δύο αρχεία αυτά και να τοποθετήσετε σε ένα αρχείο JAR έτσι ώστε η φόρτωσή τους να γίνεται μαζί. Για να το κάνετε αυτό χρησιμοποιήστε το Jar.exe για να δημιουργήσετε το canvaser.jar ως εξής: C:\java-1\canvaser>jar cvf canvaser.jar* Το σύμβολο " * " στο τέλος της παραπάνω πρότασης σημαίνει ότι θα συμπιέσετε όλα τα αρχεία του τρέχοντος καταλόγου μέσα σε αυτό το αρχείο JAR, ενώ η συμβολοσειρά cvf δείχνει τις επιλογές που θέλετε να χρησιμοποιήσετε με το αρχείο jar.exe. Βοήθημα εμφάνισης μίνι- εφαρμογών (Applet Viewer) Οι δημιουργοί εφαρμογών της Java έχουν έναν ακόμη τρόπο για να τρέχουν τις μίνι - εφαρμογές, ο οποίος δεν απαιτεί την χρήση ενός Web προγράμματος περιήγησης. Ο τρόπος αυτός είναι το βοήθημα εμφάνισης μίνι -εφαρμογών (applet viewer) της java, το οποίο εξυπηρετεί σαν ένας στοιχειώδης μηχανισμός ελέγχου των μίνι - εφαρμογών που γράφονται με την java. Αν και το βοήθημα εμφάνισης μίνι - εφαρμογών λογικά καταλαμβάνει την θέση ενός Web προγράμματος περιήγησης, λειτουργεί πολύ διαφορετικά από τα web προγράμματα περιήγησης. Κατ αρχήν λειτουργεί πάνω σε HTML έγγραφα, αλλά ψάχνει μόνο για τις ενσωματωμένες ετικέτες <Applet> και αγνοεί όλο τον υπόλοιπο κώδικα που υπάρχει στο 35

έγγραφο. Κάθε φορά που το βοήθημα εμφάνισης μίνι - εφαρμογών συναντά μία ετικέτα <Applet> μέσα σε ένα HTML έγγραφο, ανοίγει ένα ξεχωριστό παράθυρο, το οποίο περιέχει την αντίστοιχη μίνι εφαρμογή. Το μόνο μειονέκτημα είναι ότι δεν δείχνει πως θα τρέχει η μίνι - εφαρμογή όταν θα περιοριστεί μέσα στα όρια μίας πραγματικής ιστοσελίδας. Η σύνταξή του είναι: appletviewer Επιλογές URL Το όρισμα URL καθορίζει το URL του εγγράφου που περιέχει μία HTML σελίδα σε μία ενσωματωμένη μίνι - εφαρμογή της Java. Αποσφαλματωτής Ο απασφαλματωτής της java (jdb) επιτρέπει την αποσφαλμάτωση των προγραμμάτων που γράφονται με την java. Παρέχει τις εξής λειτουργίες αποσφαλμάτωσης: τον ορισμό των σημείων διακοπής, δηλαδή τον καθορισμό της γραμμής του κώδικα στην οποία σταματά η εκτέλεση του προγράμματος και την βηματική εκτέλεση του κώδικα, δηλαδή την εκτέλεση του κώδικα γραμμή προς γραμμή. Πριν χρησιμοποιηθεί ο αποσφαλματωτής θα πρέπει πρώτα να μεταγλωττιστή ο κώδικας. Η σύνταξη του είναι: jdb Επιλογές <Όνομα Κλάσης> Το όρισμα Όνομα Κλάσης είναι προαιρετικό και καθορίζει το όνομα της κλάσης που θα εκτελεστεί. 36

Γεννήτρια Τεκμηρίωσης (JavaDoc) Η γεννήτρια τεκμηρίωσης της Java (javadoc) είναι ένα χρήσιμο εργαλείο για την παραγωγή τεκμηρίωσης απευθείας από τον πηγαίο κώδικα. Αναλύει τα πηγαία αρχεία και παράγει HTML σελίδες βασιζόμενη στις δηλώσεις και στα σχόλια. Η σύνταξη της είναι: javadoc Επιλογές Όνομα Αρχείου Το όρισμα Όνομα Αρχείου καθορίζει είτε ένα πακέτο, είτε ένα αρχείο πηγαίου κώδικα της Java. Η γεννήτρια τεκμηρίωσης υποστηρίζει ειδικές ετικέτες για την πρόσθεση επιπλέον πληροφοριών στα παραγόμενα HTML έγγραφα. Όλες οι ετικέτες ξεκινούν με το σύμβολο @ το οποίο και πρέπει να εμφανίζεται στην αρχή κάθε γραμμής. Ένα παράδειγμα πηγαίου κώδικα που χρησιμοποιεί ετικέτες τεκμηρίωσης κλάσεων είναι και το ακόλουθο: /** * @see Object * @see Game.Solitare *@version 3.1 May 10 2013 * @author Μουτίδης Ηρακλής */ Diassembler αρχείων κλάσεων Ο diassembler αρχείων κλάσεων της java (javap) χρησιμοποιείται για την "αποσυναρμολόγηση" ενός αρχείου κλάσης, πράγμα που σημαίνει ότι το 37