Αυτή η μετάφραση μπορεί να μην αντανακλά τις αλλαγές που έγιναν από τις 2007-12-15 στο Αγγλικό πρωτότυπο.

Παρακαλούμε δείτε το Μεταφράσεις ΔΙΑΒΑΣΕΜΕ για να βρείτε πως μπορείτε να βοηθήσετε να ενημερωθεί αυτή η μετάφραση.

Ελεύθερο αλλά δεσμευμένο - η παγίδα της Java

από τον Richard Stallman

Υποσημείωση

Τον Δεκέμβριο του 2006, η Sun έχει ξεκινήσει την αναδημοσίευση της πλατφόρμας Java υπό την άδεια GNU GPL. Όταν ολοκληρωθεί αυτή η αλλαγή άδειας, η Java δεν θα αποτελεί πλέον παγίδα. Παρόλα αυτά, το γενικό ζήτημα που περιγράφεται εδώ παραμένει σημαντικό, επειδή οποιαδήποτε μη ελεύθερη βιβλιοθήκη η πλατφόρμα προγραμματισμού μπορεί να προκαλέσει παρόμοια προβλήματα. Πρέπει να πάρουμε το μάθημα μας από το παρελθόν της Java, ώστε να αποφύγουμε ενδεχόμενες μελλοντικές παγίδες.

Παρακαλούμε δείτε επίσης: Η παγίδα της JavaScript.

12 Απριλίου, 2004

Εάν το πρόγραμμά σας είναι ελεύθερο λογισμικό, είναι γενικά ηθικό—αλλά υπάρχει μια παγίδα για την οποία πρέπει να είστε σε ετοιμότητα. Το πρόγραμμά σας, αν και είναι ελεύθερο, μπορεί να περιοριστεί από το ανελεύθερο λογισμικό από το οποίο εξαρτάται. Δεδομένου ότι αυτό το πρόβλημα είναι το πιο σοβαρό σήμερα για τα προγράμματα της Java, το καλούμε η παγίδα της Java.

Ένα πρόγραμμα είναι ελεύθερο λογισμικό εάν οι χρήστες του έχουν ορισμένες κρίσιμες ελευθερίες. Χοντρικά, αυτές είναι: η ελευθερία να εκτέλεσης του προγράμματος, η ελευθερία μελέτης και μεταβολής του πηγαίου κώδικα, η ελευθερία επαναδημοσιοποίησης του πηγαίου κώδικα και των εκτελέσιμων αρχείων, και η ελευθερία δημοσίευσης βελτιωμένων εκδόσεων. (Δείτε http://www.gnu.org/philosophy/free-sw.html.) Εάν το οποιοδήποτε δεδομένο πρόγραμμα είναι ελεύθερο λογισμικό εξαρτάται αποκλειστικά από το περιεχόμενο της άδειας χρήσεως του.

Το εάν όμως το συγκεκριμένο πρόγραμμα μπορεί να χρησιμοποιηθεί στον Ελεύθερο Κόσμο, από τους ανθρώπους που θέλουν να ζουν με ελευθερία, είναι μια πιο σύνθετη ερώτηση. Αυτό δεν καθορίζεται από την άδεια χρήσεως του προγράμματος, επειδή κανένα πρόγραμμα δεν λειτουργεί μεμονωμένα. Κάθε πρόγραμμα εξαρτάται από άλλα προγράμματα. Παραδείγματος χάριν, ένα πρόγραμμα πρέπει να μεταγλωττιστεί ή να διερμηνευτεί, άρα εξαρτάται από έναν μεταγλωττιστή ή έναν διερμηνέα. Εάν συντάσσεται στον κώδικα χαρακτήρων (byte code), εξαρτάται από έναν διερμηνέα κώδικα χαρακτήρων. Επιπλέον, χρειάζεται βιβλιοθήκες προκειμένου να εκτελεστεί, και μπορεί επίσης να απαιτεί και άλλα χωριστά προγράμματα που τρέχουν σε άλλες διαδικασίες. Όλα αυτά τα προγράμματα είναι εξαρτήσεις. Οι εξαρτήσεις μπορεί να είναι απαραίτητες για να μπορεί να εκτελεστεί το πρόγραμμα, ή μπορούν να είναι απαραίτητες μόνο για ορισμένα χαρακτηριστικά του γνωρίσματα. Σε κάθε περίπτωση, σύνολο ή μέρος του προγράμματος δεν μπορεί να λειτουργήσει χωρίς τις εξαρτήσεις.

Εάν μερικές από τις εξαρτήσεις ενός προγράμματος είναι ανελεύθερες, αυτό σημαίνει ότι σύνολο ή μέρος του προγράμματος είναι ανίκανο να εκτελεστεί σε ένα εξ ολοκλήρου ελεύθερο σύστημα—είναι ακατάλληλο προς χρήση για τον Ελεύθερο Κόσμο. Βέβαια, θα μπορούσαμε να επαναδημοσιοποιήσουμε το πρόγραμμα και να έχουμε αντίγραφα για τις μηχανές μας, αλλά θα ήταν άχρηστο εάν δεν μπορούσε να εκτελεστεί. Αυτό το πρόγραμμα είναι μεν ελεύθερο λογισμικό, αλλά χάνει την αποτελεσματικότητα του από τις ανελεύθερες εξαρτήσεις του.

Το πρόβλημα αυτό μπορεί να εμφανιστεί σε οποιοδήποτε είδος λογισμικού, σε οποιαδήποτε γλώσσα προγραμματισμού. Παραδείγματος χάριν, ένα ελεύθερο πρόγραμμα που τρέχει μόνο στα Microsoft Windows είναι σαφώς άχρηστο για τον Ελεύθερο Κόσμο. Το λογισμικό που τρέχει στο GNU/Linux μπορεί επίσης να είναι άχρηστο εάν εξαρτάται από άλλο ανελεύθερο λογισμικό. Στο παρελθόν, το Motif (πριν τη δημιουργία του LessTif) και το QT (πριν οι κατασκευαστές του το μετατρέψουν σε ελεύθερο) ήταν σημαντικές αιτίες αυτού του προβλήματος. Οι περισσότερες τρισδιάστατες κάρτες οθόνης (γραφικών) λειτουργούν πλήρως μόνο με ανελεύθερους οδηγούς, οι οποίοι προκαλούν επίσης το ίδιο πρόβλημα. Αλλά η σημαντικότερη πηγή αυτού του προβλήματος είναι σήμερα η Java, επειδή οι άνθρωποι που γράφουν ελεύθερο λογισμικό αισθάνονται συχνά ότι η Java είναι ελκυστική. Τυφλοί από την έλξη τους στη γλώσσα, αγνοούν το ζήτημα των εξαρτήσεων, και πέφτουν στην παγίδα της Java.

Η υλοποίηση της Java από τη Sun είναι μη-ελεύθερη. Οι τυποποιημένες βιβλιοθήκες της Java είναι επίσης μη-ελεύθερες. Εμείς έχουμε ελεύθερες υλοποιήσεις της Java, όπως ο μεταγλωττιστής GNU για την Java (GCJ) και το GNU Classpath, αλλά δεν υποστηρίζουν όλα τα χαρακτηριστικά γνωρίσματα ακόμα. Προλαβαίνουμε ακόμη.

Εάν αναπτύσσετε ένα πρόγραμμα της Java για την πλατφόρμα της Sun, είστε εκτεθειμένοι στα χαρακτηριστικά γνωρίσματα χρήσης της Sun χωρίς καν να το αντιληφθείτε. Τη στιγμή που θα το ανακαλύψετε, μπορεί να τα χρησιμοποιούσατε για μήνες, και η επανασυγγραφή των έργων σας θα μπορούσε να πάρει ακόμη περισσότερους μήνες. Πιθανότατα θα πείτε, “είναι πάρα πολλή δουλειά για να ξεκινήσω ξανά από την αρχή.” Έτσι το πρόγραμμά σας θα έχει πέσει στην παγίδα της Java. Θα είναι ακατάλληλο προς χρήση στον Ελεύθερο Κόσμο.

Ο αξιόπιστος τρόπος ώστε να αποφευχθεί η παγίδα της Java είναι να έχετε μόνο μια ελεύθερη υλοποίηση της Java στο σύστημά σας. Κατόπιν εάν χρησιμοποιήσετε ένα χαρακτηριστικό γνώρισμα ή μια βιβλιοθήκη της Java που το ελεύθερο λογισμικό δεν υποστηρίζει ακόμα, θα το ανακαλύψετε αμέσως, και μπορείτε να ξαναγράψετε αυτό τον κώδικα άμεσα.

Η Sun συνεχίζει να αναπτύσσει τις πρόσθετες “τυποποιημένες” βιβλιοθήκες της Java, και σχεδόν όλες τους είναι μη-ελεύθερες. Σε πολλές περιπτώσεις, ακόμη και η προδιαγραφή μιας βιβλιοθήκης είναι ένα εμπορικό μυστικό, και η πιο πρόσφατη άδεια της Sun για αυτές τις προδιαγραφές απαγορεύει τη δημοσίευση (release) οτιδήποτε λιγότερου από μια πλήρη υλοποίηση της προδιαγραφής. (Δείτε http://jcp.org/aboutJava/communityprocess/JSPA2.pdf και http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html, για παραδείγματα).

Ευτυχώς, αυτή η προδιαγραφή της άδειας (της Sun) επιτρέπει τη δημοσίευση μία υλοποίησης ως ελεύθερο λογισμικό. Δηλαδή άλλοι χρήστες της βιβλιοθήκης επιτρέπεται να την αλλάξουν δίχως να απαιτείται να προσθέσουν τις αλλαγές τους στην προδιαγραφή. Όμως οι απαιτήσεις της έχουν ως αποτέλεσμα η δημιουργία ενός συνεργατικού μοντέλου ανάπτυξης και η δημιουργία μίας ελεύθερης υλοποίησης να είναι απαγορευτική. Η χρήση αυτού του μοντέλου συνεπάγεται την δημοσίευση ελλιπών εκδόσεων, στις οποίες όσοι έχουν διαβάσει την προδιαγραφή (της Sun) δεν επιτρέπεται να συμμετάσχουν.

Στις αρχές του κινήματος ελεύθερου λογισμικού, ήταν αδύνατο να αποφευχθεί η εξάρτηση από μη-ελεύθερα προγράμματα. Πριν αποκτήσουμε τον μεταγλωττιστή GNU C, κάθε πρόγραμμα C (ελεύθερο ή όχι) είχε εξάρτηση από έναν μη-ελεύθερο μεταγλωττιστή C. Πριν αποκτήσουμε τη βιβλιοθήκη GNU C, κάθε πρόγραμμα είχε εξάρτηση από μια μη-ελεύθερη βιβλιοθήκη C. Πριν αποκτήσουμε τον Linux, τον πρώτο ελεύθερο πυρήνα, κάθε πρόγραμμα είχε εξάρτηση από έναν μη-ελεύθερο πυρήνα. Πριν αποκτήσουμε το BASH, κάθε κώδικας κελύφους (shellscript) έπρεπε να ερμηνευθεί από ένα μη-ελεύθερο κέλυφος. Ήταν αναπόφευκτο ότι τα πρώτα προγράμματά μας θα παρακωλύονταν αρχικά από αυτές τις εξαρτήσεις, αλλά το δεχτήκαμε επειδή το σχέδιό μας συμπεριλάμβανε να τα διασώσει στη συνέχεια. Ο γενικός στόχος μας, ένα αυτό-φιλόξενο λειτουργικό σύστημα GNU, συμπεριλαμβανομένων τις ελεύθερες αντικαταστάσεις για όλες εκείνες τις εξαρτήσεις. Εάν πετυχαίναμε το στόχο, όλα τα προγράμματά μας θα διασώζονταν. Έτσι κι έγινε: με το σύστημα GNU/Linux, μπορούμε τώρα να εκτελέσουμε αυτά τα προγράμματα σε ελεύθερες πλατφόρμες.

Η κατάσταση σήμερα είναι διαφορετική. Πλέον έχουμε ισχυρά ελεύθερα λειτουργικά συστήματα και πολλά ελεύθερα εργαλεία προγραμματισμού. Οποιαδήποτε εργασία κι αν θέλετε να κάνετε, μπορείτε να την κάνετε σε μια ελεύθερη πλατφόρμα. Δεν υπάρχει καμία ανάγκη να γίνει αποδεκτή μια μη-ελεύθερες εξάρτηση ακόμα και προσωρινά. Ο κύριος λόγος της πτώσης των ανθρώπων στην παγίδα της Java σήμερα είναι επειδή δεν το σκέφτονται. Η ευκολότερη λύση στο πρόβλημα της παγίδας της Java είναι να διδαχθούν οι άνθρωποι ώστε να μην πέφτουν σε αυτήν.

Για να κρατήσετε τον κώδικα σας γραμμένο σε Java μακριά από την παγίδα της, εγκαταστήστε ένα ελεύθερο περιβάλλον ανάπτυξης της Java και χρησιμοποιήστε το. Γενικότερα, οποιαδήποτε γλώσσα κι αν χρησιμοποιείτε, κρατήστε τα μάτια σας ανοικτά, και ελέγξτε την ελεύθερη κατάσταση των προγραμμάτων από τα οποία εξαρτάται ο κώδικάς σας. Ο ευκολότερος τρόπος να εξακριβωθεί ότι κάποιο πρόγραμμα είναι ελεύθερο είναι με έρευνα για την ύπαρξή του στον κατάλογο ελεύθερου λογισμικού (http://www.fsf.org/directory). Εάν ένα πρόγραμμα δεν είναι στον κατάλογο, μπορείτε να ελέγξετε την(ις) άδεια(ες) του σε σχέση με τον κατάλογο αδειών ελεύθερου λογισμικού (http://www.gnu.org/licenses/license-list.html).

Προσπαθούμε να διασώσουμε τα παγιδευμένα προγράμματα της Java, έτσι εάν συμπαθείτε τη γλώσσα Java, σας προσκαλούμε να βοηθήσετε στην ανάπτυξη του GNU Classpath. Δοκιμάζοντας τα προγράμματά σας με το μεταγλωττιστή GCJ και το GNU Classpath, και εκθέτοντας οποιαδήποτε προβλήματα αντιμετωπίζετε στις κλάσεις που υλοποιήθηκαν ήδη, γίνεστε χρήσιμοι. Εντούτοις, η ολοκλήρωση του GNU Classpath θα πάρει χρόνο. Εάν περισσότερες ανελεύθερες βιβλιοθήκες συνεχίζουν να προστίθενται, ίσως να μην μπορέσουμε να τις έχουμε ποτέ όλες. Για αυτό παρακαλούμε μην βάλετε το ελεύθερο λογισμικό σας σε δεσμούς. Όταν γράφετε ένα πρόγραμμα εφαρμογών σήμερα, γράψτε το ώστε να εκτελείται σε ελεύθερες πλατφόρμες εξ' αρχής.

Δείτε επίσης:-

The Curious Incident of Sun in the Night-Time