Διαφήμιση
Μόλις κατεβάσατε μια ενημερωμένη έκδοση για την αγαπημένη σας εφαρμογή ανοιχτού κώδικα. Όλα λειτουργούν καλά και τα χρησιμοποιείτε στις άλλες συσκευές σας - οπότε είναι καιρός να τα βγάλουμε και σε αυτά.
Εκτός από το γυαλιστερό σας νέο φορητό υπολογιστή Linux δεν είναι συμβατό με το πακέτο εγκατάστασης των Windows. Τι συμβαίνει με το tablet σας Android; iPhone; PS4; Γιατί δεν μπορείτε να πάρετε ακριβώς αυτό το κομμάτι του λογισμικού και να το χρησιμοποιήσετε όποτε θέλετε; Ας εξερευνήσουμε μερικούς διαφορετικούς φραγμούς στο όνειρο "αγοράστε μία φορά, τρέξτε οπουδήποτε".
Ανάπτυξη Λογισμικού και Αρχιτεκτονική OS
Η κατανόηση του λόγου για τον οποίο το λογισμικό δεν λειτουργεί σε όλα τα λειτουργικά συστήματα απαιτεί λίγη (ελάχιστη, υπόσχομαι) γνώση του τρόπου με τον οποίο γίνεται το λογισμικό.
Η διαδικασία ανάπτυξης λογισμικού
Σε μια πολύ βασική ροή ανάπτυξης λογισμικού για επιφάνεια εργασίας, διακομιστή και κινητό (δηλ. όχι ιστός Προγραμματισμός εναντίον Web Development: Ποια είναι η διαφορά; Μπορεί να πιστεύετε ότι οι προγραμματιστές εφαρμογών και οι προγραμματιστές ιστού κάνουν την ίδια δουλειά, αλλά αυτό απέχει πολύ από την αλήθεια. Εδώ είναι οι βασικές διαφορές μεταξύ προγραμματιστών και web developers. Διαβάστε περισσότερα ), ένας προγραμματιστής:
- Πληκτρολογήστε μερικά κώδικας σε ένα ή περισσότερα αρχεία.
- Συντάσσω ο κώδικας σε κάτι που μπορεί να εκτελέσει ο υπολογιστής.
- Δοκιμή για να βεβαιωθείτε ότι το πρόγραμμα λειτουργεί όπως αναμένεται.
- Συσκευασία και διανομή / ανάπτυξη το λογισμικό.

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

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

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

ο δυαδική διεπαφή εφαρμογής (ABI) αποδεδειγμένο είναι ιδιαίτερα σημαντικό. Ένας συνδυασμός των κλήσεων που είναι διαθέσιμες από τους επεξεργαστές, τον πυρήνα και τους libararies του συστήματος, ένα ABI είναι παρόμοιο με ένα διεπαφή προγραμματισμού εφαρμογών (API) στο ότι ορίζει πώς δύο προγράμματα επικοινωνούν μεταξύ τους. Αλλά το API είναι κάτι που χρησιμοποιούν οι προγραμματιστές (άνθρωποι) στον πηγαίο κώδικα για να δείξουν δύο κομμάτια του λογισμικού πρέπει να μιλούν μεταξύ τους. Το ABI είναι ό, τι πραγματικά τους επιτρέπει να το κάνουν όταν το λογισμικό καταρτιστεί και τρέξει. Κάθε λειτουργικό σύστημα εφαρμόζει ένα συγκεκριμένο ABI, το οποίο μπορεί να αλλάζει μεταξύ των εκδόσεων του ίδιου λειτουργικού συστήματος.
Σε γενικές γραμμές, τα λειτουργικά συστήματα εφαρμόζουν το δικό τους ABI, που καθορίζεται από ένα συνδυασμό του τύπου του επεξεργαστή, του πυρήνα και τυχόν τυποποιημένων βιβλιοθηκών συστήματος. Αλλά μερικές φορές ένα λειτουργικό σύστημα θα εφαρμόσει περισσότερα από ένα. Το FreeBSD έχει υποστήριξη για δυαδικά αρχεία Linux, για παράδειγμα, επειδή παρέχει ένα Linux ABI ως πρόσθετο στον πυρήνα του FreeBSD (αντί για τον πυρήνα του Linux). Αυτό είναι διαφορετικό από το προγράμματα virtualization Τι είναι μια εικονική μηχανή; Όλα όσα πρέπει να ξέρετεΟι εικονικές μηχανές σάς επιτρέπουν να εκτελείτε άλλα λειτουργικά συστήματα στον τρέχοντα υπολογιστή σας. Εδώ πρέπει να ξέρετε για αυτούς. Διαβάστε περισσότερα όπως το VMWare ή το VirtualBox, τα οποία χρησιμοποιούν λογισμικό για την προσομοίωση ολόκληρης της μηχανής (υλικού και όλων). Ως αποτέλεσμα αυτού του τύπου ABI-συμβατότητα είναι ταχύτερη, αλλά πολύ μεγαλύτερη προσπάθεια για να διατηρηθεί. Γι 'αυτό είναι σπάνιο, αν και Η Microsoft είδε πρόσφατα την αξία Το 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 για το σύστημά σας να ανησυχεί για το πώς να το κάνει πραγματικά. Η παρακάτω εικόνα δείχνει αυτό σε δράση, όπου Το Πλαίσιο Εφαρμογών Desktop της JIDE του Λογισμικού JIDE εμφανίζει την ίδια εφαρμογή για Mac (επάνω), Windows (μεσαία αριστερά), "καθαρή Java" (μεσαία δεξιά) και Linux (κάτω).

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

Αυτό σημαίνει ότι οι προγραμματιστές μπορούν να παίξουν γύρω και να τσίμπησουν τα πράγματα "ζωντανά". Στη συνέχεια, μόλις μια γραμμή κώδικα κάνει αυτό που θέλει, αντιγράψτε και επικολλήστε το ένα αρχείο δέσμης ενεργειών (το οποίο είναι πολύ πιο αποτελεσματικό από τον κύκλο "code-compile-test" που οι μη ερμηνευμένοι προγραμματιστές γλωσσών πρέπει να κάνουν).
Ακόμα και όταν το λογισμικό είναι το ίδιο, πιθανότατα όχι
Δυστυχώς για τους χρήστες, η βιομηχανία τεχνολογίας δεν έχει αναπτύξει μια πραγματικά "καθολική" μορφή. Και δεν μπορεί ποτέ να το κάνει. Η εισαγωγή αυτών των τύπων προτύπων οδηγεί συχνά σε μια λύση "ελάχιστου κοινού παρονομαστή", με παραχωρήσεις προς το συμφέρον της έγκρισης του καθενός.
Τι νομίζετε; Θα προτιμούσατε να έχετε συμβατό λογισμικό, ακόμα κι αν αυτό σημαίνει ότι δεν ήταν τόσο καλό; Ή είστε εντάξει με το λειτουργικό σύστημα που χρησιμοποιείτε και δεν ενδιαφέρεστε για τις εφαρμογές από άλλες πλατφόρμες; Ενημερώστε μας παρακάτω στα σχόλια!
Συντελεστές εικόνας: Masterchief_Productions / Shutterstock
Ο Aaron είναι τεχνολόγος ως επιχειρηματικός αναλυτής και διευθυντής έργου για δεκαπέντε χρόνια και είναι πιστός χρήστης του Ubuntu εδώ και πολύ καιρό (από το Breezy Badger). Τα ενδιαφέροντά του περιλαμβάνουν εφαρμογές ανοιχτού κώδικα, εφαρμογές μικρών επιχειρήσεων, ενσωμάτωση Linux και Android και υπολογιστές σε λειτουργία απλού κειμένου.