Για το POSIX το Linux και αν έχει σημασία στις μέρες μας.

Τι είναι το POSIX

To Portable Operating System Interface (POSIX) είναι ένα πρότυπο της IEEE για φορητότητα κώδικα μεταξύ διαφορετικών λειτουργικών συστημάτων. Είναι βασισμένο στις κλήσεις συστήματος και τα εργαλεία γραμμής εντολών του UNIX. Αν ένα πρόγραμμα χρησιμοποιεί μόνο το POSIX μπορεί να του γίνει μεταγλώττιση και να τρέχει σε κάθε συμβατό με POSIX λειτουργικό σύστημα.

image

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 συμβατά :rofl:.

Σύμφωνα με το 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 θα σου δώσει σχεδόν οτιδήποτε θέλεις με μπόνους ένα ωραίο γραφικό περιβάλλον.

image

Η συμβολική σχέση ανάμεσα στους πυρήνες και το POSIX.

Αν θέλεις να αξιοποιήσεις στο έπακρο τις δυνατότητες του πυρήνα του Linux καλύτερα να το ξεχάσεις. Κάτι που τρέχει σε χαμηλό επίπεδο όπως πχ μια υπηρεσία εκκίνησης ή διαχείρισης του υλικού είναι ηλίθιο να μην χρησιμοποιεί στο έπακρο τις δυνατότητες του λειτουργικού. Δοκίμασε να γράψεις ένα docker σε POSIX. Μπορείς; Όχι.

Το ίδιο κάνε και για μια GUI εφαρμογή. Και ας μην τρέχει σε BSD. Ποιος νοιάζεται; Οι μέρες που είχαμε δεκάδες UNIX λειτουργικά έχουν τελειώσει. Το ίδιο και το POSIX εκτός κυβερνητικών συμβολαίων. Η αλήθεια στις μέρες μας είναι πως:

Το api του kernel, το LSB και τα βασικά εργαλεία του Linux είναι το νέο POSIX

Αν τα άλλα *nix θέλουν να τρέξουν τα νέα λογισμικά θα πρέπει να υλοποιήσουν αυτά τα api. Λυπάμαι BSD αλλά αυτή είναι η ωμή αλήθεια.

Διαβάστε:

Μια ποιο αναλυτική εισαγωγή εδώ: https://linuxhint.com/posix-standard/

2 Likes

Επειδή μπορεί να με θεωρήσατε υπερβολικό, επιτρέψτε μου να παραθέσω την παρακάτω μελέτη από το Columbia University

POSIX Abstractions in Modern Operating
Systems: The Old, the New, and the Missing

μετράει την χρήση του POSIX API σε σύγχρονα προγράμματα. Το POSIX είναι παλιό ή πρώτη έκδοση του ήταν πριν από 32 χρόνια και οι εφαρμογές έχουν αλλάξει δραστικά από τότε αλλά το πρότυπο έχει παραμείνει ουσιαστικά ίδιο. Μια ανάλυση της χρήσης του σε Ubuntu, Android και OS X δείχνει πως και στα τα τρία λειτουργικά νέες βιβλιοθήκες παίρνουν την θέση του, αλλά δεν υπάρχει σύγκληση σε ένα νέο κοινό πρότυπο.

Σήμερα δεν γράφουμε τις εφαρμογές απευθείας πάνω στο POSIX, αλλά χρησιμοποιούμε api/βιβλιοθήκες υψηλότερου επιπέδου για IPC, διαχείριση των νημάτων, βάσεις δεδομένων και γραφικά περιβάλλοντα. Οι βιβλιοθήκες αυτές μπορεί να κάνουν χρήση του POSIX API ή να χρησιμοποιούν άλλες υπηρεσίες του λειτουργικού. Η φορητότητα μεταξύ λειτουργικών δεν υπάρχει σήμερα χωρίς την χρήση cross-platforms SDKs που χρησιμοποιούν αυτά τα νέα api.

H χρήση extension APIs, όπως το ioctl(2) κυριαρχεί και αντιμετωπίζει τις ελλείψεις του POSIX. Η επικοινωνία με την OpenGL θα γίνει μέσω της τελευταίας. Κάνεις δεν χρησιμοποιεί το POSIX IPC, ή επικοινωνία με το σύστημα των αρχείων έχει αντικατασταθεί με ιδιόκτητα api και frameworks όπως το dbus, ή sqlite και το Binder το έχουν αντικαταστήσει.

image

Η μελέτη δείχνει πως μεγάλα μέρη του POSIX χρησιμοποιούνται από ελάχιστα έως καθόλου, ενώ κυριαρχούν συναρτήσεις της τυπικής βιβλιοθήκης της C και ή ioctl.

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

Η τάση των δεύτερων να χρησιμοποιούν κομμάτια του POSIX που κανονικά κανείς δεν χρησιμοποιεί είναι παραπάνω από εμφανής.

Σήμερα χρειαζόμαστε λοιπόν ένα νέο διεθνές στάνταρ για φορητότητα μεταξύ των εφαρμογών αλλά κανένας δεν δουλεύει πάνω σε αυτό. Ο δρόμος της Apple είναι κλειστός και στρωμένος με πατέντες. Μένει ένας μόνο δρόμος ανοικτός. Και θα το επαναλάβω: Το Linux είναι το νέο POSIX.

Διαβάστε την: POSIXpaper.pdf (455,1 KB)

3 Likes