Ο κώδικας έχει κάτι κοινό με την καρδιά και το μυαλό: όσο πιο ανοιχτός είναι, τόσο περισσότερο καλό μπορεί να κάνει. Σε εμάς, αλλά και στους γύρω μας.

Δεν είναι μόνο οι λίγες παραπάνω γραμμές κώδικα που κερδίζει ένας προγραμματιστής. Ίσως αυτό να είναι και το λιγότερο σημαντικό. Είναι η χαρά της συνύπαρξης και της συνεργασίας, η ανταλλαγή ιδεών, η αλληλοβελτίωση και εκείνο το ωραίο συναίσθημα όταν βλέπεις κάτι στο οποίο έβαλες κι εσύ ένα μικρό λιθαράκι να μεγαλώνει και τελικά να φτάνει στην άλλη άκρη του κόσμου.
Γιατί, όταν οι άνθρωποι θέλουν, μπορούν.
Χιλιάδες προγραμματιστές σε ολόκληρο τον κόσμο, «κακές» εταιρείες και ο τύπος που καντηλιάζει τους πάντες μπορούν, παρ' όλα αυτά, να συνεργάζονται και να παράγουν κάτι πραγματικά αξιόλογο. Το καταφέρνουν επειδή, κάπου στην πορεία, καταλαβαίνουν ότι αυτό που κάνουν έχει σημασία.
Οι υπόλοιποι, πάλι, τα λέμε μια χαρά στα λόγια. Στην πράξη, πολλές φορές δεν μπορούμε να τα βρούμε ούτε με τον γείτονα.
Ερασιτεχνισμός και αθέατες πτυχές του προγραμματισμού
Σήμερα, όμως, δεν θα μιλήσουμε για τα καλά του ανοιχτού κώδικα. Θα μιλήσουμε για μια μάλλον άσχημη πλευρά του.
Για τις ερασιτεχνικές πρακτικές που ακολουθούν αρκετοί προγραμματιστές εκεί έξω —με την κακή έννοια του όρου— και για το πώς αυτές μπορούν κάποια στιγμή να γυρίσουν μπούμερανγκ. Και, μαζί με αυτές, για την τοξική επίδραση που μπορεί να έχει λίγος νομικός εκφοβισμός πάνω στην ανάπτυξη της τεχνολογίας.
Μήπως σας λέει κάτι το όνομα Azer Koçulu;
Μάλλον όχι.
Πιθανότατα δεν λέει τίποτα ούτε σε αρκετούς προγραμματιστές, παρότι οι δημιουργίες τους βασίζονται, άμεσα ή έμμεσα, σε κάτι που είχε φτιάξει ο ίδιος.
Ο Azer Koçulu είναι ένας προγραμματιστής που θα παρέμενε πιθανότατα άγνωστος στο ευρύ κοινό, αν δεν είχε προκαλέσει, άθελά του, ένα μικρό χάος.
Κατάφερε να σπείρει πανικό και να «γονατίσει» προσωρινά σημαντικά κομμάτια του οικοσυστήματος του Διαδικτύου.
Διαγράφοντας μόλις 11 γραμμές κώδικα.
Για να προστατεύσει το έργο του.
Ας δούμε λοιπόν πώς φτάσαμε εκεί.
Ο Koçulu ήταν αυτοδίδακτος προγραμματιστής και υποστηρικτής της φιλοσοφίας του ανοιχτού κώδικα. Είχε ανεβάσει στο γνωστό npm ένα πακέτο με το όνομα kik, το οποίο χρησιμοποιούσαν άλλοι προγραμματιστές στα δικά τους έργα.
Το πρόβλημα ήταν ότι υπήρχε ήδη μια εφαρμογή μηνυμάτων με το όνομα Kik και η ονομασία της ήταν κατοχυρωμένο εμπορικό σήμα (trademark).
Κάποια στιγμή, λοιπόν, έφτασε στο inbox του ένα email από δικηγόρο της εταιρείας, ο οποίος του ζητούσε να αλλάξει το όνομα.
Η απάντηση του Koçulu ήταν λιτή:
Λυπάμαι, αλλά φτιάχνω ένα έργο ανοιχτού κώδικα με αυτό το όνομα.
Επειδή, βέβαια, είναι γνωστό ότι οι μεγάλες εταιρείες δείχνουν πάντα ιδιαίτερο σεβασμό στους μικρούς ανεξάρτητους δημιουργούς, ήρθε και η επόμενη «ευγενική» απάντηση από το νομικό τμήμα:
Δεν θέλουμε να είμαστε μαλάκες, αλλά είναι καταχωρημένο σήμα στις περισσότερες χώρες του κόσμου και αν πραγματικά διαθέσεις ένα έργο ανοιχτού κώδικα που να λέγεται kik, οι δικηγόροι μας θα σου χτυπούν την πόρτα, θα "κατεβάσουν" λογαριασμούς σου και τέτοια — και δεν θα είχαμε επιλογή παρά να κάνουμε όλα αυτά, γιατί πρέπει να επιβάλεις τα trademarks ή να τα χάσεις.
Να ξεκαθαρίσουμε κάτι εδώ: το trademark από μόνο του δεν είναι κάτι κακό. Υπάρχει για να προστατεύει μια ονομασία και ένα έργο —όπως, για παράδειγμα, το «Linux».
Το πρόβλημα αρχίζει όταν η νομική προστασία μετατρέπεται σε εργαλείο εκφοβισμού απέναντι σε έναν ανεξάρτητο δημιουργό.
Ο Koçulu, πάντως, δεν φαίνεται να είχε ιδιαίτερη διάθεση να παίξει αυτό το παιχνίδι.
Η απάντησή του ήταν αφοπλιστική:
Χα χα, γίνεσαι στ’ αλήθεια μαλάκας. Γι’ αυτό άντε γαμήσου. Μη μου ξαναστείλεις email.
Κάπου εκεί η συζήτηση πήρε άλλη τροπή. Ο δικηγόρος προσφέρθηκε να πληρώσει για την ονομασία, ο Azer ζήτησε αποζημίωση, η συνεννόηση τελικά χάλασε και ο Koçulu πήρε την απόφαση να τραβήξει την πρίζα.
Διέγραψε το πακέτο του από το npm.
Και κάπου εδώ αρχίζει το ενδιαφέρον.
Όταν ο κώδικας… εξαφανίζεται
Το πακέτο του Koçulu δεν ήταν απλώς ένα μικρό, αυτόνομο εργαλείο που χρησιμοποιούσε ο ίδιος.
Ήταν dependency —εξάρτηση— για χιλιάδες άλλα πακέτα.
Ανάμεσά τους βρισκόταν και το περίφημο left-pad. Μια «σπουδαία» βιβλιοθήκη μόλις 11 γραμμών κώδικα, η οποία έκανε κάτι εξαιρετικά περίπλοκο: πρόσθετε κενά στην αρχή ενός string.
Γιατί να γράψει κάποιος μόνος του τρεις γραμμές για κάτι τόσο απλό, όταν μπορεί να κατεβάσει μια βιβλιοθήκη;
Και έτσι, χιλιάδες προγραμματιστές την είχαν βάλει ως dependency.
Όταν ο Koçulu διέγραψε το πακέτο του, το left-pad εξαφανίστηκε μαζί του και ένα μεγάλο κομμάτι του npm άρχισε να παρουσιάζει προβλήματα. Ακόμη και μεγάλα projects και εταιρείες βρέθηκαν ξαφνικά να μην μπορούν να χτίσουν τον κώδικά τους όπως πριν.
Το περιστατικό έμεινε στην ιστορία ακριβώς επειδή ήταν τόσο παράλογο:
Ένας άνθρωπος διέγραψε 11 γραμμές κώδικα και ένα τεράστιο κομμάτι του οικοσυστήματος JavaScript άρχισε να τρίζει.
Δεν ήταν ότι ο κώδικας ήταν ιδιαίτερα σημαντικός ή περίπλοκος. Ήταν ότι όλοι είχαν μάθει να βασίζονται σε αυτόν.
Η ευκολία αντί της ικανότητας
Το περιστατικό δεν ήταν απλώς μια αστεία ιστορία από τον κόσμο του προγραμματισμού. Ήταν ένα πολύ καλό μάθημα για τον τρόπο με τον οποίο χτίζεται μεγάλο μέρος του σύγχρονου λογισμικού.
Η υπερβολική εξάρτηση από τρίτα, μικροσκοπικά πακέτα —ιδιαίτερα σε οικοσυστήματα όπως το JavaScript και το npm— μπορεί εύκολα να μετατρέψει ένα project σε πύργο από τραπουλόχαρτα.
Αντί να γράψουμε λίγες γραμμές καθαρού και αυτόνομου κώδικα, τραβάμε μια βιβλιοθήκη. Μετά αυτή η βιβλιοθήκη χρειάζεται άλλη βιβλιοθήκη. Εκείνη χρειάζεται άλλη μία. Και ξαφνικά έχουμε ένα project που εξαρτάται από εκατοντάδες ή και χιλιάδες πακέτα, αρκετά από τα οποία συντηρούνται από έναν άνθρωπο στον ελεύθερο χρόνο του.
Και όταν αυτός ο άνθρωπος ξυπνήσει στραβά, τσακωθεί με έναν δικηγόρο, βαρεθεί ή απλώς αποφασίσει ότι δεν θέλει να συνεχίσει, μπορεί να αρχίσουν τα ωραία.
Τι άλλαξε από τότε;
Το 2016 το περιστατικό έμοιαζε περισσότερο με προειδοποίηση.
Δέκα χρόνια αργότερα, όμως, η υπερβολική εξάρτηση από τρίτα πακέτα εξακολουθεί να αποτελεί σοβαρό ζήτημα. Μόνο που πλέον δεν μιλάμε απλώς για έναν προγραμματιστή που κατέβασε ένα πακέτο επειδή τσακώθηκε με μια εταιρεία.
Μιλάμε και για επιθέσεις στην αλυσίδα εφοδιασμού λογισμικού (supply-chain attacks), κακόβουλες ενημερώσεις και πακέτα που μπαίνουν σε δημοφιλή repositories με σκοπό να εκμεταλλευτούν όσους τα εγκαταστήσουν. Το περιστατικό με το XZ Utils ήταν ένα από τα πιο χαρακτηριστικά παραδείγματα του πόσο σοβαρές μπορούν να γίνουν αυτές οι επιθέσεις.
Ο ανοιχτός κώδικας είναι υπέροχος. Δεν είναι όμως αλεξίσφαιρος μόνο και μόνο επειδή είναι ανοιχτός.
Χρειάζεται έλεγχος, επαγρύπνηση, καλή γνώση του κώδικα και, κυρίως, μια λογική ισορροπία ανάμεσα στην ευκολία και στην πραγματική ανάγκη.
Γιατί το να χρησιμοποιήσεις μια έτοιμη βιβλιοθήκη όταν πραγματικά τη χρειάζεσαι, είναι λογικό.
Το να εξαρτάται όμως ολόκληρο το οικοδόμημά σου από μια αλυσίδα χιλιάδων μικροσκοπικών πακέτων επειδή βαρέθηκες να γράψεις τρεις γραμμές κώδικα, είναι κάτι εντελώς διαφορετικό.
Και τελικά, ίσως αυτό να είναι το πιο παράξενο μάθημα της ιστορίας του Koçulu:
Δεν χρειάζεται πάντα ένας μεγάλος εχθρός για να καταρρεύσει κάτι μεγάλο.
Μερικές φορές αρκούν 11 γραμμές κώδικα, ένας τσακωμός, ένας μαλάκας δικηγόρος και μερικές χιλιάδες προγραμματιστές που δεν θέλησαν να γράψουν μόνοι τους τρεις γραμμές.
[ενημερωμένο άρθρο, βασισμένο σε αρχικό του παλιού osarena]
