Ένα μέγεθος δεν ταιριάζει σε όλα: γιατί το λογισμικό δεν είναι συμβατό καθολικά

Το λογισμικό είναι το ίδιο σε οποιοδήποτε λειτουργικό σύστημα, σωστά; Λανθασμένος. Μπορεί να φανεί το ίδιο, και να λειτουργήσει ομοίως, αλλά είναι διαφορετικό πίσω από τις σκηνές.

Το λογισμικό είναι το ίδιο σε οποιοδήποτε λειτουργικό σύστημα, σωστά;  Λανθασμένος.  Μπορεί να φανεί το ίδιο, και να λειτουργήσει ομοίως, αλλά είναι διαφορετικό πίσω από τις σκηνές.
Διαφήμιση

Μόλις κατεβάσατε μια ενημερωμένη έκδοση που περιέχει τις δυνατότητες της αγαπημένης σας εφαρμογής ανοιχτού κώδικα. Όλα λειτουργούν καλά και τα χρησιμοποιείτε στις άλλες συσκευές σας - οπότε είναι καιρός να τα βγάλουμε και σε αυτά.

Εκτός από το γυαλιστερό σας νέο φορητό υπολογιστή Linux δεν είναι συμβατό με το πακέτο εγκατάστασης των Windows. Τι συμβαίνει με το tablet Android; iPhone; PS4; Γιατί δεν μπορείτε απλά να πάρετε αυτό το λογισμικό και να το χρησιμοποιήσετε όποτε θέλετε; Ας εξερευνήσουμε μερικούς διαφορετικούς φραγμούς στο όνειρο "αγοράστε μία φορά, τρέξτε οπουδήποτε".

Ανάπτυξη Λογισμικού και Αρχιτεκτονική OS

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

Η διαδικασία ανάπτυξης λογισμικού

Σε μια πολύ βασική ροή ανάπτυξης λογισμικού για επιφάνεια εργασίας, διακομιστή και κινητό (δηλαδή δεν είναι προγραμματισμός ιστού εναντίον ανάπτυξης στο Web: Ποια είναι η διαφορά; Προγραμματισμός εναντίον ανάπτυξης στο Web: Ποια είναι η διαφορά;, αλλά αυτό είναι μακριά από την αλήθεια, εδώ είναι οι βασικές διαφορές μεταξύ των προγραμματιστών και των web developers (Read More), ένας προγραμματιστής θα:

  1. Πληκτρολογήστε κάποιο κωδικό σε ένα ή περισσότερα αρχεία.
  2. Καταρτίστε τον κώδικα σε κάτι που μπορεί να εκτελέσει ο υπολογιστής.
  3. Ελέγξτε αν το πρόγραμμα λειτουργεί όπως αναμένεται.
  4. Πακέτο και διανομή / ανάπτυξη του λογισμικού.

λογισμικό συμβατότητας os dev διαδικασία

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

Αρχιτεκτονική OS

Ένα σημαντικό σημείο που πρέπει να καταλάβουμε είναι ότι ένα λειτουργικό σύστημα δεν είναι μια ενιαία οντότητα. Αντίθετα, αποτελείται από στρώματα λογισμικού.

Πυρήνες του λειτουργικού συστήματος

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

βασικά στοιχεία πυρήνα συμβατότητας λογισμικού
Image Credit: Wikimedia Commons

Ο πυρήνας κάθε λειτουργικού συστήματος θα εφαρμόσει διαφορετικά τις κλήσεις συστήματος, από την άποψη του ποιες είναι διαθέσιμες, τι καλούνται ή ποιες επιλογές παίρνουν. Ως αποτέλεσμα, το λογισμικό πρέπει να λαμβάνει υπόψη τις κλήσεις συστήματος που υποστηρίζει ο πυρήνας κάθε OS που στοχεύει. Η κλήση συστήματος που χρησιμοποιείτε για την αποστολή δεδομένων στη GPU στο Linux μπορεί να έχει διαφορετικό όνομα, λίστα πληροφοριών που πρέπει να δώσετε ή και τα δύο στα Windows. Αυτή η ακριβής κλήση ίσως να μην υπάρχει καθόλου.

Βιβλιοθήκες συστήματος

Σε πολλές περιπτώσεις, το λογισμικό δεν καλεί απευθείας τον πυρήνα. Αντίθετα, καλεί σε βιβλιοθήκες συστήματος ή συλλογές βασικών λειτουργιών. Οι βιβλιοθήκες υπάρχουν έτσι (για παράδειγμα) κάθε πρόγραμμα που αποθηκεύει αρχεία στον σκληρό δίσκο δεν χρειάζεται να γράψει μια λειτουργία για να το κάνει. Αντίθετα, απλά συνδέεται με μια βιβλιοθήκη συστήματος και χρησιμοποιεί μια υπάρχουσα λειτουργία. Η βιβλιοθήκη GLibC για το Linux είναι ένα εξαιρετικό παράδειγμα, όπως είναι τα αρχεία .DLL στο Win32 API ή τα περιεχόμενα του καταλόγου Mac / System / Library Πώς να αποκτήσετε πρόσβαση στον φάκελο της βιβλιοθήκης OS X & Γιατί είναι εύκολο να αποκτήσετε πρόσβαση στη βιβλιοθήκη OS X Folder & Why It's Handy Οι περισσότεροι OS X φακέλους της βιβλιοθήκης είναι καλύτερα να μείνουν μόνοι, αλλά είναι χρήσιμο να γνωρίζετε τον τρόπο σας μέσα και γύρω από τη βιβλιοθήκη χρηστών. Διαβάστε περισσότερα .

βιβλιοθήκες συστήματος συμβατότητας OS
Πιστοποίηση εικόνας: ScottXW μέσω του Wikimedia Commons

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

Κεφαλίδες εκτέλεσης λειτουργικού συστήματος

Το τελευταίο εμπόδιο στο καθολικό λογισμικό είναι η μορφή των εκτελέσιμων αρχείων για τα λειτουργικά συστήματα. Ένα λειτουργικό σύστημα αναμένει τα αρχεία που εκτελεί να ακολουθούν μια συγκεκριμένη μορφή δυαδικού αρχείου Όλα όσα πρέπει να γνωρίζετε για τις μορφές αρχείων και τις ιδιότητές τους Όλα όσα πρέπει να γνωρίζετε για τις μορφές αρχείων και τις ιδιότητές τους Χρησιμοποιούμε το αρχείο λέξεων εναλλακτικά: μουσική, εικόνα, υπολογιστικό φύλλο, παρουσίαση, και ούτω καθεξής. Αλλά τι κάνει ένα αρχείο ένα "αρχείο", ούτως ή άλλως; Ας προσπαθήσουμε να καταλάβουμε αυτό το θεμελιώδες μέρος της πληροφορικής. Διαβάστε περισσότερα . Για παράδειγμα, τα αρχεία Executable and Linkable Format (ELF) που εκτελούνται σε λειτουργικά συστήματα όπως το Linux και το FreeBSD πρέπει να καθορίζουν ορισμένες ιδιότητες του αρχείου σε ορισμένα byte, όπως φαίνεται στην παρακάτω εικόνα.

επικεφαλίδα elf για συμβατότητα με το λογισμικό os

Η δυαδική διεπαφή εφαρμογής (ABI) που φαίνεται να είναι ιδιαίτερα σημαντική. Ένας συνδυασμός των κλήσεων που είναι διαθέσιμες από τους libraries του επεξεργαστή, του πυρήνα και του συστήματος, ένα ABI είναι παρόμοιο με ένα περιβάλλον προγραμματισμού εφαρμογών (API), καθώς ορίζει πως δύο προγράμματα επικοινωνούν μεταξύ τους. Αλλά το API είναι κάτι που χρησιμοποιούν οι προγραμματιστές (άνθρωποι) στον πηγαίο κώδικα για να δείξουν ότι δύο κομμάτια λογισμικού πρέπει να μιλούν μεταξύ τους. Το ABI είναι αυτό που πραγματικά τους επιτρέπει να το κάνουν όταν το λογισμικό καταρτιστεί και εκτελεστεί. Κάθε λειτουργικό σύστημα εφαρμόζει ένα συγκεκριμένο ABI, το οποίο μπορεί να αλλάζει μεταξύ των εκδόσεων του ίδιου λειτουργικού συστήματος.

Σε γενικές γραμμές, τα λειτουργικά συστήματα εφαρμόζουν το δικό τους ABI, που καθορίζεται από ένα συνδυασμό του τύπου του επεξεργαστή, του πυρήνα και τυχόν τυποποιημένων βιβλιοθηκών συστήματος. Αλλά μερικές φορές ένα λειτουργικό σύστημα θα εφαρμόσει περισσότερα από ένα. Το FreeBSD έχει υποστήριξη για δυαδικά αρχεία Linux, για παράδειγμα, επειδή παρέχει ένα Linux ABI ως πρόσθετο στον πυρήνα του FreeBSD (αντί του πυρήνα του Linux). Αυτό είναι διαφορετικό από τα προγράμματα virtualizatiton Τι είναι μια εικονική μηχανή; Τι είναι μια εικονική μηχανή; Οι εικονικές μηχανές σάς επιτρέπουν να εκτελείτε άλλα λειτουργικά συστήματα στο τρέχον λειτουργικό σας σύστημα, αλλά γιατί αυτό έχει σημασία; Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα; Διαβάστε περισσότερα, όπως το VMWare ή το VirtualBox, τα οποία χρησιμοποιούν το λογισμικό για να προσομοιώσουν ολόκληρο το μηχάνημα (υλικό και όλα). Ως αποτέλεσμα αυτού του τύπου της συμβατότητας ABI είναι ταχύτερη, αλλά πολύ μεγαλύτερη προσπάθεια για τη διατήρηση. Αυτός είναι ο λόγος για τον οποίο είναι σπάνιο, αν και η Microsoft είδε πρόσφατα την αξία του Ubuntu Είναι πλέον διαθέσιμο στο Windows Store Το Ubuntu είναι τώρα διαθέσιμο στο Windows Store Τα Windows Insiders μπορούν πλέον να κάνουν λήψη και εγκατάσταση του Ubuntu στα Windows 10. Αυτό φέρνει το Linux και τα Windows μαζί σε μια άγια ένωση λίγοι φάνηκαν ποτέ ότι θα ζούσαν αρκετά για να γίνουν μάρτυρες. Διαβάστε περισσότερα για να το κάνετε.

Εξαίρεση: Ερμηνευμένο λογισμικό

Με βάση τα παραπάνω έχουμε μάθει ότι οι προγραμματιστές γράφουν λογισμικό για έναν και μόνο έναν τύπο συστήματος προορισμού. Εκτός αν δεν το κάνουν. Υπάρχουν πολλές εφαρμογές που μπορείτε να κατεβάσετε και να εκτελέσετε σε Mac, στη συνέχεια να αντιγράψετε και να εκτελέσετε σε Windows, και ίσως ακόμη και να αντιγράψετε και να τρέξετε σε Linux χωρίς προβλήματα. Πώς είναι αυτό δυνατόν?

Έχω ξαπλώσει μέχρι τώρα;

Όπως αποδεικνύεται, υπάρχει μια κατηγορία λογισμικού που εμφανίζεται στην επιφάνεια σαν να "τρέχει παντού". Μπορείτε να το κατεβάσετε και να το εκτελέσετε σε οποιαδήποτε υποστηριζόμενη πλατφόρμα - η λέξη κλειδί "υποστηρίζεται". πηγαίο κώδικα για την εφαρμογή, ενώ μια άλλη εφαρμογή (ο διερμηνέας ) είναι το είδος της εκτέλεσης του πηγαίου κώδικα άμεσα σε πραγματικό χρόνο. Αυτό είναι κάτι υπερπροσδιοριστικό, οπότε ας δούμε ακριβώς πώς λειτουργεί αυτό με δύο γλώσσες.

Ιάβα

Όταν η Java κυκλοφόρησε για πρώτη φορά, η υπόσχεση ήταν (κυριολεκτικά) "γράψτε μία φορά, τρέξτε οπουδήποτε". Η ιδέα ήταν να δημιουργήσετε εφαρμογές χρησιμοποιώντας λειτουργίες Java για τον τρόπο αποθήκευσης αρχείων, υπολογισμού ή δημιουργία παραθύρου εφαρμογής. Στη συνέχεια, μια έκδοση Java Runtime Enviornment (JRE) για κάθε υποστηριζόμενη πλατφόρμα υπολογιστή θα εκτελεί τον κώδικα και θα μεταφράζεται σε λειτουργίες του εγγενούς λειτουργικού συστήματος. Το τέχνασμα για την Java, λοιπόν, είναι ότι δεν τρέχει "άμεσα" στο λειτουργικό σύστημα. Λειτουργεί σε ένα τμήμα του JRE που ονομάζεται Java Virtual Machine και αυτό τρέχει στο λειτουργικό σύστημα.

Εισάγοντας αυτό το πρόσθετο στρώμα λογισμικού μεταξύ της εφαρμογής και του λειτουργικού συστήματος, η Java σάς επιτρέπει να εστιάσετε σε ένα σύνολο λειτουργιών που είναι ίδιες μεταξύ των λειτουργικών συστημάτων. Μπορείτε να πείτε στο Java τι θέλετε να κάνετε και αφήστε το JVM για το σύστημά σας να ανησυχεί για το πώς να το κάνει πραγματικά. Η παρακάτω εικόνα δείχνει αυτό σε δράση, όπου το Java Desktop Application Framework του JIDE Software εμφανίζει την ίδια εφαρμογή για Mac (κορυφή), Windows (μεσαία αριστερά), "καθαρή Java" (μεσαία δεξιά) και Linux (κάτω).

λογισμικό συμβατότητας os jide jdaf
Πιστωτική εικόνα: Λογισμικό JIDE

Τα προγράμματα Java δεν "μεταγλωττίζονται" με τον ίδιο τρόπο σε πραγματικό χρόνο. Αντίθετα, ο μεταγλωττιστής Java θα τα καταστήσει "bytecode." Μπορείτε να σκεφτείτε τον bytecode ως ημι-ψημένο πρόγραμμα. Όταν ο προγραμματιστής κυκλοφορήσει την εφαρμογή που έχει συγκεντρωθεί όσο μπορεί να είναι χωρίς να γνωρίζει σε ποιο OS θα τρέξει. Όταν το ξεκινήσετε, το JVM θα το «ψήσει» για να ταιριάζει στις λειτουργίες του OS.

Πύθων

Μια δημοφιλής ερμηνευμένη γλώσσα είναι η Python 5 λόγοι για τους οποίους ο προγραμματισμός της Python δεν είναι άχρηστος 5 λόγοι για τους οποίους ο προγραμματισμός της Python δεν είναι άχρηστος Python - Το αγαπάτε είτε το μισείτε. Μπορεί ακόμα να κουνηθείτε από το ένα άκρο στο άλλο σαν ένα εκκρεμές. Ανεξάρτητα από αυτό, η Python είναι μια γλώσσα που είναι δύσκολο να αμφισβητηθεί. Διαβάστε περισσότερα . Όταν εκτελείτε μια δέσμη ενεργειών Python, ο διερμηνέας Python θα μεταφράσει κώδικα σε οδηγίες για το λειτουργικό σύστημα. Μπορεί επίσης να λειτουργήσει παρόμοια με την Java: όταν "εισάγετε" τον κώδικα από το εξωτερικό της εφαρμογής σας, καταρτίζεται σε bytecode την πρώτη φορά που εκτελείται. Στη συνέχεια, ο διερμηνέας θα γνωρίζει αν, σε επόμενες εκτελούμενες εργασίες, ο αρχικός κώδικας έχει αλλάξει, οπότε θα επανασυλλέξει τον νέο κωδικό.

Ένα δροσερό παραπροϊόν από αυτή την "on-demand" λειτουργία είναι ότι μπορείτε να χρησιμοποιήσετε τον διερμηνέα για να αναπτύξετε τα σενάρια σας διαδραστικά. Πληκτρολογώντας απλά το "python" στη γραμμή εντολών θα ξεκινήσετε τον διερμηνέα και μπορείτε να εκτελέσετε κώδικα και να δείτε τα αποτελέσματα αμέσως.

συμβατότητα του λογισμικού με τον μεταφραστή python

Αυτό σημαίνει ότι οι προγραμματιστές μπορούν να παίξουν γύρω και να τροποποιήσουν τα πράγματα "ζωντανά". Στη συνέχεια, μόλις μια γραμμή κώδικα κάνει αυτό που θέλει, αντιγράψτε και επικολλήστε το σε ένα αρχείο δέσμης ενεργειών (το οποίο είναι πολύ πιο αποτελεσματικό από τον κύκλο "code-compile-test" οι μη-ερμηνευμένοι προγραμματιστές γλωσσών πρέπει να κάνουν).

Ακόμη και όταν το λογισμικό είναι το ίδιο, πιθανότατα δεν είναι

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

Τι νομίζετε; Θα προτιμούσατε να διαθέτετε συμβατό λογισμικό, ακόμα κι αν αυτό σήμαινε ότι δεν ήταν τόσο καλό; Ή είστε εντάξει με το λειτουργικό σύστημα που χρησιμοποιείτε και δεν ενδιαφέρεστε για τις εφαρμογές από άλλες πλατφόρμες; Ενημερώστε μας παρακάτω στα σχόλια!

Συντελεστές εικόνας: Masterchief_Productions / Shutterstock

In this article