O analogie rezonabilă ar fi să înveți să conduci.
Există reguli, protocoale de urmat și standarde de calitate și robustețe atât în mașină, cât și în șofer.
- Mașinile au volan.
- Unele au o treaptă manuală, iar altele sunt automate.
- Conduceți (în majoritatea țărilor) pe partea dreaptă a unui drum.
- Semnele oferă instrucțiuni despre cum să conduceți pe un anumit drum.
- Unitățile de măsură sunt (mai ales) în km/h.
- Combustibilul luat în vehicul este de un anumit amestec și standard.
- Șoferii sunt instruiți și se așteaptă să respecte un anumit standard de conducere.
Acum, ați putea sugera (totuși nu sunt atât de cultivat și îmi dau o licență poetică) că drumurile europene sunt „conforme cu standardele” între ele, astfel încât, dacă învățați să conduceți în Spania, puteți conduce oriunde în Europa, posibil cu aceeași mașină sau cel puțin poate cu o mașină diferită, în care toate anexele și bastoanele sunt într-un loc în care te-ai putea aștepta să fie.
Ați putea, de exemplu, să inventați un mod complet nou de a conduce, poate cu semnalizare total diferită, pe care să conduceți pe ambele părți ale drumului, să folosiți un joystick pentru a conduce și să vă măsurați distanța în coți pe oră, totuși, migrând la acel sistem de la cel cu care te-ai obișnuit necesită o barcă întreagă de mai mult efort.
POSIX se potrivește într-un fel unui model similar, dar în loc de mașini, drumuri, viteze și destinații se referă la intrări, mesaje, programe, ieșiri și caracteristici.
În general, cel mai bine este (ca programator și utilizator) să aveți la dispoziție anumite reguli care guvernează caracteristicile/funcțiile și intrările/ieșirile, așa că puteți scrie un program care se potrivește acestor standarde și apoi, fără prea mult efort, să reconstruiți același program pe care să îl rulați. un sistem diferit, care preia și aceleași intrări/ieșiri.
De exemplu, apelurile de sistem Linux citit și scrie sunt conforme cu posix. Ei preiau anumite intrări, într-o anumită ordine și returnează anumite ieșiri cu reguli care guvernează ce ar putea fi sau reprezenta ieșirile în anumite circumstanțe.
Puteți scrie un program pe Linux care deschide două fișiere, folosește citit
și scrie
pentru a transfera date între ele și le închide din nou. Apoi, eventual, reconstruiți-l pentru a rula și pe un Mac fără a fi nevoie să rescrieți codul sursă de bază.
De asemenea, puteți face exact aceeași operațiune -- mult mai rapid -- prin deschiderea a două fișiere, folosind Trimite fișier
apel de sistem pentru a muta datele între ele și a le închide din nou (cu excepția cazului în care utilizați nuclee foarte, foarte vechi). Problema aici este că Trimite fișier
apel de sistem nu este Compatibil cu POSIX -- nu puteți fi garantat că un astfel de apel de sistem există în mod corespunzător pe sistem pentru a face ceea ce doriți.
De fapt, dacă consultați pagina de manual Mac pentru Trimite fișier
apel, deși se numește aceeași operațiune, necesită un set diferit de parametri și oferă caracteristici diferite (de asemenea, din punct de vedere tehnic, nu îl puteți folosi pentru a copia de pe un fișier de pe disc pe altul de pe disc).
Prin urmare, nu veți putea rula un program folosind Linux Trimite fișier
previzibil pe un sistem, cel puțin fără a schimba programul sau a utiliza alt nivel de compatibilitate.
Acesta este motivul pentru care oamenilor le pasă de POSIX. Evită reinventarea roții și vă permite potențial să migrați la un sistem de operare general mai bun, „compatibil cu Posix”, sau cel puțin să vă concentrați pe livrarea produsului, mai degrabă decât să vă faceți griji cu privire la calitatea materialelor folosite pentru a construi fundația.
Am omis o mare parte din ipotezele când POSIX nu este cu adevărat urmat în totalitate și în totalitate chiar și de cei care pretind că sistemul lor este compatibil cu POSIX, dar asta este principiul conceptului.
Un ultim punct pe care aș vrea să-l clarific. Dacă codificați la cel mai mic numitor comun al unui standard (cum ar fi POSIX), veți pierde câștiguri mari de performanță pe care altfel le-ați fi putut profita folosind extensii non-standard pe sistemul de operare pentru care codificați.
Deci, este, de asemenea, o alegere de proiectare, dacă doriți să obțineți performanță înaltă/performanță ridicată, atunci s-ar putea să nu codificați pentru conformitatea cu POSIX.
Deși, angajarea unui programator care știe să programeze „posixal” (știe cum deschis
, citit
, scrie
pthread
și închide
funcționează în POSIX) va fi mult mai simplu decât angajarea pe cineva care doar programează la un standard ciudat nefolosit.
Deci nu este vorba doar de performanță (mașini), ci și de potențialul de adaptare (abilitatea lor de a conduce mașina).