Μεταφράσεις αυτής της σελίδας

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

12 Απριλίου 2004

 [ένα φιλοσοφικό GNU]

του Richard Stallman


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

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

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

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

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

Η υλοποίηση της Java από τη Sun είναι μη-ελεύθερη. Το Blackdown είναι επίσης μη-ελεύθερο. Eίναι μια προσαρμογή του ιδιόκτητου κώδικα της 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, για παραδείγματα).

Fortunately, that specification license does permit releasing an implementation as free software; others who receive the library can be allowed to change it and are not required to adhere to the specification. But the requirement has the effect of prohibiting the use of a collaborative development model to produce the free implementation. Use of that model would entail publishing incomplete versions, which those who have read the spec are not allowed to do.

Στους πρώτους καιρούς του Κινήματος ελεύθερου λογισμικού, ήταν αδύνατο να αποφευχθεί η εξάρτηση από μη-ελεύθερα προγράμματα. Πριν αποκτήσουμε τον μεταγλωττιστή 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 θα πάρει χρόνο. Εάν περισσότερες μη-ελεύθερες βιβλιοθήκες συνεχίζουν να προστίθενται, ίσως να μην μπορέσουμε να τις έχουμε ποτέ όλες. Για αυτό παρακαλούμε μην βάλετε το ελεύθερο λογισμικό σας σε δεσμούς. Όταν γράφετε ένα πρόγραμμα εφαρμογών σήμερα, γράψτε το ώστε να εκτελείται σε ελεύθερες πλατφόρμες εξ'αρχής.


Αλλα κείμενα προς ανάγνωση


Μεταφράσεις αυτής της σελίδας:
[ English | FranΓ§ais | EspaΓ±ol | Ελληνικά | Polski ]