Βολτάροντας στα internets ανακαλύπτεις πολλά. Εν εξ αυτών είναι και το γνωστό πρόβλημα που υπάρχει σχετικά με τα Unix based συστήματα για την 18η Ιανουαρίου του 2038.

Τι θα συμβεί την 18η / 01 / 2038
Αφορά το λεγόμενο Year 2038 problem (Y2038) το οποίο προέρχεται από τον παλιό τρόπο που πολλά Unix-like συστήματα αποθηκεύουν την ώρα.
Τι σημαίνει αυτό;
Είναι γνωστό ότι η Unix ώρα μετράει δευτερόλεπτα από: **1/1/1970 00:00:00 UTC**.
Αυτό σημαίνει ότι σε ΠΑΛΙΕΣ 32-bit υλοποιήσεις τοtime_t είναι signed 32-bit integer. Άρα, το μεγαλύτερο θετικό νούμερο που χωράει είναι: 2,147,483,647και αυτό αντιστοιχεί σε: 19 Ιανουαρίου 2038, 03:14:07 UTC.
Δηλαδή, το επόμενο δευτερόλεπτο, **03:14:08**, δεν χωράει πλέον.
Και τότε μπορεί να συμβεί integer overflow και να εμφανιστούν ημερομηνίες του 1901, λάθος timestamps, αποτυχίες σε εφαρμογές κλπ.
Στα internets, για το συγκεκριμένο, διαβάζουμε και μια γενικότητα. Ή, να πω, μια ανακρίβεια, μια βλακεία, για να μη το χαρακτηρίσω αλλιώς:
Στις 13 / 1 / 2038 θα καταρρεύσουν τα Linux
Αφήνω τον πληθυντικό («ΤΑ» ) απέξω, δεν έχει νόημα να το συζητήσουμε περισσότερο.
Και περνάμε στο ερώτημα:
Άρα θα καταρρεύσει το Linux;
Κι αμέσως μετά στην απάντηση:
Και γιατί όχι;
Την είδατε τη λέξη με τα κεφαλαία πιο πάνω; Το «ΠΑΛΙΕΣ»;
Ε, λοιπόν, το πρόβλημα αφορά κυρίως παλιό 32-bit software/ABI και συσκευές που εξακολουθούν να χρησιμοποιούν 32-bit time_t.
Μόνο.
Τα σύγχρονα 64-bit Linux συστήματα έχουν ουσιαστικά ξεφύγει από αυτό εδώ και πολλά χρόνια. Το Linux έχει (εδώ και χρόνια) μηχανισμούς για 64-bit time values, ενώ οι σύγχρονες βιβλιοθήκες/ABIs μπορούν να χρησιμοποιούν 64-bit time_t. Η ίδια η τεκμηρίωση του Linux λέει ότι εφαρμογές που πρέπει να λειτουργούν μετά το 2038 θα πρέπει να χρησιμοποιούν ABI με time_t μεγαλύτερο από 32 bits. man7.org+1.
Τα δε παλιότερα interfaces μέσα στο Linux kernel έχουν αντικατασταθεί από νεότερες 64-bit εκδόσεις: Linux Kernel Newbies - Y2038 Documentation.
Αλλά, υπάρχει πράγματι ένα θέμα. Και αυτό αφορά τα embedded/παλιά συστήματα. Εκεί μπορεί όντως να υπάρχουν πράγματα που θα ζήσουν μέχρι το 2038 και έχουν ξεχαστεί.
Για παράδειγμα, παλιό firmware, βιομηχανικός εξοπλισμός, routers, appliances, συσκευές IoT, παλιά binaries που δεν μπορούν εύκολα να αναβαθμιστούν κλπ.: Man7 Linux Manual Page - time(2).
Με απλά λόγια συσκευές που έχουν κυριολεκτικά ξεχαστεί. Ακόμα και από τον ίδιο τον χρόνο.
Είναι η πρώτη φορά που ακούγεται κάτι τέτοιο;
Όχι βέβαια. Να θυμίσω το Y2K , το πρόβλημα του 2000 αν και εκεί ήταν διαφορετικό bug.
Σε εκείνη την περίπτωση παλιά προγράμματα αποθήκευαν το έτος με δύο ψηφία (99, 00), οπότε υπήρχε κίνδυνος το 2000 να θεωρηθεί 1900.
Τελικά, δεν κατέρρευσε το σύμπαν και η ανθρωπότητα, ο πλανήτης επέζησαν επειδή το πρόβλημα λύθηκε.
Βέβαια, το γενικό μοτίβο είναι ίδιο αφού αφορά τον παλιό τρόπο αναπαράστασης ημερομηνίας που φτάνει σε όριο.
Αλλά, υπάρχει και κάτι ακόμα. Σε,σχεδόν, έναν αιώνα από τώρα, αλλά τι σημασία έχει; Ας κινδυνολογήσουμε λίγο. 💗
Το 2106. Σε ορισμένα συστήματα που, αν υπάρχουν ακόμα και αν χρησιμοποιούν unsigned 32-bit Unix timestamps, το αντίστοιχο όριο μεταφέρεται στο 2106. Το Linux documentation μάλιστα αναφέρει διαφορετικά όρια ανάλογα με την αναπαράσταση.
Κατακλείδα:
Όχι, την 19η Ιανουαρίου του 2038 δεν θα ξυπνήσει η ανθρωπότητα και θα έχουν πεθάνει όλα ΤΑ Linux.
Σίγουρα θα είναι ένα πραγματικό compatibility bug για παλιό 32-bit software και embedded συστήματα που δεν έχουν μεταβεί σε 64-bit time, και γι' αυτό οι developers το αντιμετωπίζουν ήδη.
Και είμαι απολύτως βέβαιος ότι, μέχρι τότε, η λύση θα έχει βρεθεί. Ίσως, και με περισσότερους του ενός τρόπους.