Τι είναι το POSIX
To Portable Operating System Interface (POSIX) είναι ένα πρότυπο της IEEE για φορητότητα κώδικα μεταξύ διαφορετικών λειτουργικών συστημάτων. Είναι βασισμένο στις κλήσεις συστήματος και τα εργαλεία γραμμής εντολών του UNIX. Αν ένα πρόγραμμα χρησιμοποιεί μόνο το POSIX μπορεί να του γίνει μεταγλώττιση και να τρέχει σε κάθε συμβατό με POSIX λειτουργικό σύστημα.
Trivia : Η ονομασία POSIX είναι δημιούργημα του Richard Stallman
The name POSIX was suggested by Richard Stallman. It is expected to be pronounced pahz-icks , as in positive , not poh-six , or other variations. The pronunciation has been published in an attempt to promulgate a standardized way of referring to a standard operating system interface [link].
Είναι το Linux συμβατό με το POSIX;
Για να είναι συμβατό θα πρέπει να πάρει μια επίσημη τεκμηρίωση και καμία διανομή δεν την έχει πάρει. Ειρωνικά τα Windows NT 3.51 ήταν POSIX συμβατά .
Σύμφωνα με το Wikipedia, είναι αρκετά συμβατό με το POSIX, αλλά το πόσο εξαρτάτε από την διανομή. Αν η διανομή ακολουθεί το Linux Standard Base από την έκδοση 2.0 και μετά θα ακολουθεί το Single Unix Specification SUSv3 και θα είναι συμβατό με την έκδοση 2001 του POSIX.
Ο πυρήνας 2.6 του Linux ήταν ο πρώτος που είχε μια καλή συμβατότητα. Αλλά επίσης υποστηρίζει πολλές κλήσεις από άλλα UNIX συστήματα που δεν είναι POSIX καθώς και πολλές (μα πάρα πολλές) δικές του επεκτάσεις και νέα υποσυστήματα.
Posix and GNU
Το έργο gnu έβγαλε πρώτα μια σειρά από εργαλεία και compilers πριν ξεκινήσει να γράφει τον πυρήνα hurd. Τα εργαλεία αυτά ήθελε να τρέχουν σε κάθε UNIX σύστημα της αγοράς, μιας και δεν είχε ακόμα (και δεν έχει) το δικό της λειτουργικό. Οπότε ακολουθεί και υποστηρίζει σχεδόν ότι υπάρχει και δεν μένει στο POSIX. Δείτε : https://www.gnu.org/prep/standards/html_node/Non_002dGNU-Standards.html
libc:
Η libc υποστηρίζει εκτός του POSIX και την τυπική βιβλιοθήκη γλώσσας C το Berkeley Unix, System V, και το XPG (The X/Open Portability Guide). Καθώς και επεκτάσεις για αρχιτεκτονικές όπως το PowerPC και Risc-V.
Επιπλέον αυτών υποστηρίζει πολλές επιπλέον συναρτήσεις και λειτουργίες. Κάθε συνάρτηση τεκμηριώνει τα στάνταρτ που ακολουθεί καθώς και τις επεκτάσεις που κάνει στα διάφορα πρότυπα. Και δεν διστάζει να διαφοροποιηθεί αν το θεωρεί απαραίτητο. Για παράδειγμα δείτε την fseek(2) (με επεκτάσεις που έχουν προταθεί για την επόμενη έκδοση του POSIX), την fallocate(2) (μόνο σε Linux), ή την open(2).
Εύκολα μπορείς να διαλέξεις ποια στάνταρ θέλεις να χρησιμοποιεί μέσω των λεγόμενων feature macros. Μια συνάρτηση τεκμηριώνει ποια τέτοια είναι απαραίτητα. Για παράδειγμα δείτε setgroups(2).
glibc, gnulib, glib Πολύς κόσμος τις μπερδεύει οπότε ας πούμε δυο λογάκια. Η gnulib βοηθά να αντιμετωπιστούν ασυμβατότητες ανάμεσα στα συστήματα UNIX. Δεν είναι μια κανονική βιβλιοθήκη αλλά μια σειρά από αρθρώματα που ενσωματώνονται στον κώδικα. Η glib είναι μια βιβλιοθήκη του gnome με δομές δεδομένων και διάφορα άλλα χρήσιμα χαρακτηριστικά.
GNU tools:
Τα περισσότερα εργαλεία του GNU έχουν συμβατότητα (ή μπορούν να ενεργοποιήσουν) με το POSIX. Αλλά δεν έχουν καμιά σχέση με τα φτωχά εργαλεία του POSIX. Μια σύγκριση του awk
με το gawk
, του busrn shell
με το bash
, του make
με το GNU Make
, του yacc
με το bison
αρκεί για να δείξει πως από πλευράς δυνατοτήτων είναι σαν την μέρα με την νύχτα.
Πρέπει το πρόγραμμα μου να είναι POSIX;
Αν το πρόγραμμα θέλεις να τρέχει και σε άλλα λειτουργικά συστήματα και σε καλύπτουν οι λειτουργίες του POSIX είναι μια καλή επιλογή. Αλλά καλύτερα είναι να χρησιμοποιήσεις κάποιο επίπεδο συμβατότητας ώστε να χρησιμοποιεί με τον καλύτερο δυνατό τρόπο το υποκείμενο λειτουργικό σύστημα που θα τρέχει κάθε φορά. Μια βιβλιοθήκη σαν την Qt
θα σου δώσει σχεδόν οτιδήποτε θέλεις με μπόνους ένα ωραίο γραφικό περιβάλλον.
Η συμβολική σχέση ανάμεσα στους πυρήνες και το POSIX.
Αν θέλεις να αξιοποιήσεις στο έπακρο τις δυνατότητες του πυρήνα του Linux καλύτερα να το ξεχάσεις. Κάτι που τρέχει σε χαμηλό επίπεδο όπως πχ μια υπηρεσία εκκίνησης ή διαχείρισης του υλικού είναι ηλίθιο να μην χρησιμοποιεί στο έπακρο τις δυνατότητες του λειτουργικού. Δοκίμασε να γράψεις ένα docker σε POSIX. Μπορείς; Όχι.
Το ίδιο κάνε και για μια GUI εφαρμογή. Και ας μην τρέχει σε BSD. Ποιος νοιάζεται; Οι μέρες που είχαμε δεκάδες UNIX λειτουργικά έχουν τελειώσει. Το ίδιο και το POSIX εκτός κυβερνητικών συμβολαίων. Η αλήθεια στις μέρες μας είναι πως:
Το api του kernel, το LSB και τα βασικά εργαλεία του Linux είναι το νέο POSIX
Αν τα άλλα *nix
θέλουν να τρέξουν τα νέα λογισμικά θα πρέπει να υλοποιήσουν αυτά τα api. Λυπάμαι BSD αλλά αυτή είναι η ωμή αλήθεια.
Διαβάστε:
Μια ποιο αναλυτική εισαγωγή εδώ: Posix Standard