Publicitate

Tocmai ați descărcat o actualizare plină de caracteristici în aplicația preferată de sursă deschisă. Totul funcționează bine și îl folosești pe celelalte dispozitive - așa că este timpul să le dai și la acestea.

Cu excepția laptopului tău nou Linux nu este compatibil cu pachetul de instalare Windows. Ce zici de tableta ta Android? iPhone? PS4? De ce nu poți doar să iei acel software și să-l folosești oriunde vrei? Să explorăm câteva bariere diferite pentru visul de „a cumpăra o dată, a alerga oriunde”.

Dezvoltare software și arhitectură de sisteme de operare

Înțelegerea motivului pentru care software-ul nu funcționează în sistemele de operare necesită o cunoaștere mică (doar un pic, promit) cunoștințe despre modul în care este realizat software-ul.

Procesul de dezvoltare software

Într-un flux de dezvoltare software foarte de bază pentru desktop, server și mobil (adică. nu web Programare vs. Dezvoltare web: Care este diferența?S-ar putea să credeți că programatorii de aplicații și dezvoltatorii web fac aceeași treabă, dar acesta este departe de adevăr. Iată care sunt diferențele cheie între programatori și dezvoltatori web.

Citeste mai mult ), un programator va:

  1. Tastați unele cod într-unul sau mai multe fișiere.
  2. Compila codul în ceva pe care computerul îl poate executa.
  3. Test pentru a vă asigura că programul funcționează așa cum era de așteptat.
  4. Pachet și distribuire / implementare software-ul.
procesul de compatibilitate software os compatibilitate

Este o combinație între primul și al doilea pas care ne privește aici. Procesul de compilarea software-ul sau transformarea acestuia din cod în cele și zero-uri pe care un computer le înțelege (limbajul mașinii) este complexă. Nu vom intra în el în detalii mari, dar este util să înțelegem la un nivel înalt ce se întâmplă.

Arhitectură de sistem de operare

Un punct important de înțeles este faptul că un sistem de operare nu este o entitate unică. Mai degrabă, este format din straturi de software.

Nucleu de sistem de operare

Sistemul de operare nucleu răspunde de comunicarea cu hardware-ul computerului. Software-ul comunică comenzile sale către kernel, care la rândul său emite comenzi hardware-ului pentru (de exemplu) să citească un fișier de pe hard disk sau să deseneze o fereastră pe ecran. Practic, coordonează toate informațiile (indiferent dacă sunt stocate date, calcule sau inputuri ale utilizatorului) între hardware și diverse piese software. Nucleul pune toată această funcționalitate la dispoziția software-ului prin intermediul apeluri de sistem.

Noțiuni de bază ale nucleului compatibilității software
Credit imagine: Wikimedia Commons

Nucleul fiecărui sistem de operare va implementa apelurile de sistem în mod diferit, în funcție de care sunt disponibile, ce se numesc sau ce opțiuni iau. Drept urmare, software-ul trebuie să țină cont de apelurile de sistem suportate de nucleul fiecărui sistem de operațiune vizat. Apelul de sistem pe care îl utilizați pentru a trimite date la GPU în Linux poate avea un nume diferit, o listă de informații pe care trebuie să le furnizați sau ambele în Windows. Este posibil ca acest apel exact să nu fie deloc acolo.

Bibliotecile de sistem

În multe cazuri, software-ul nu apelează direct la kernel. În schimb, apelează la bibliotecile de sistemsau colecții de funcții de bază. Bibliotecile există astfel (de exemplu) fiecare program care salvează fișierele pe hard disk nu trebuie să scrie o funcție pentru a face acest lucru. În schimb, pur și simplu legături către o bibliotecă de sistem și utilizează o funcție existentă. Biblioteca GLibC pentru Linux este un exemplu primordial, așa cum sunt fișierele .DLL din API-ul Win32 sau conținutul directorului Mac / System / Library al unui Mac Cum să accesați folderul de bibliotecă OS X și de ce este la îndemânăMajoritatea folderelor OS X Library sunt lăsate cel mai bine, dar este util să vă cunoașteți drumul în Biblioteca de utilizator și în jurul acestuia. Citeste mai mult .

bibliotecile sistemului de compatibilitate software
Credit imagine: ScottXW prin Wikimedia Commons

Bibliotecile de sistem acționează ca un fel de traducător între aplicații și kernel pentru sarcini de rutină. Aplicațiile fac apeluri funcționale la aceste biblioteci, care gestionează o mulțime de detalii la nivel scăzut. De asemenea, pot efectua apeluri de sistem către kernel pentru confort. După cum ați putut ghici, aceasta înseamnă că aceste biblioteci sunt scrise pentru un anumit kernel și, prin urmare, nu pot fi utilizate pe sisteme de operare cu diferite kerneluri.

Anteturi de execuție a sistemului de operare

Ultimul bloc rutier către software-ul universal este formatul fișierelor executabile pentru sistemele de operare. Un sistem de operare se așteaptă ca fișierele pe care le rulează să urmeze o anumită format de fișier binar Tot ceea ce trebuie să știți despre formate de fișiere și proprietățile acestoraFolosim fișierul cuvânt în mod interschimbabil: muzică, imagine, foaie de calcul, prezentare de diapozitive și așa mai departe. Dar ce face din fișier un „fișier”, oricum? Să încercăm să înțelegem această parte fundamentală a calculului. Citeste mai mult . De exemplu, fișierele ELF (Executable and Linkable Format) care rulează pe sisteme de operare, cum ar fi Linux și FreeBSD trebuie să specifice anumite proprietăți ale fișierului în anumiți octeți, așa cum se arată în mai jos imagine.

software os compatibilitate antet elf

aplicație interfață binară (ABI) arătat capabil are o importanță deosebită. O combinație de apeluri disponibile de la procesor, kernel și bibliotecile de sistem, un ABI este similar cu un interfață de programare a aplicației (API) prin faptul că definește modul în care două programe comunică între ele. Dar API-ul este ceva folosit de programatori (oameni) în codul sursă pentru a indica două bucăți de software ar trebui să vorbiti unul cu celalalt. ABI este ceea ce le permite de fapt să facă acest lucru odată ce software-ul este compilat și rulat. Fiecare sistem de operare pune în aplicare un anumit ABI, care se poate schimba sau nu între versiunile aceluiași sistem de operare.

În general, sistemele de operare implementează propriul lor ABI, determinat de o combinație între tipul de procesor, nucleul și orice bibliotecă de sistem standard. Dar uneori un sistem de operare va implementa mai mult de unul. FreeBSD are suport pentru binarele Linux, de exemplu, deoarece furnizează un ABI Linux ca supliment pentru kernel-ul FreeBSD (în loc de nucleul Linux). Acesta este diferit de programe de virtualizare Ce este o mașină virtuală? Tot ce trebuie să știiMașinile virtuale vă permit să rulați alte sisteme de operare pe computerul dvs. curent. Iată ce ar trebui să știți despre ei. Citeste mai mult cum ar fi VMWare sau VirtualBox, care utilizează software pentru a simula o întreagă mașină (hardware și toate). Drept urmare, acest tip de compatibilitate ABI este mai rapid, dar mult mai mult efort de menținere. Acesta este motivul pentru care este rar, deși Microsoft a văzut recent valoarea Ubuntu este acum disponibil pe Windows StoreWindows Insiders poate acum descărca și instala Ubuntu pe Windows 10. Acest lucru aduce Linux și Windows împreună într-o uniune nesăbuită, puțini și-au imaginat vreodată că vor trăi suficient de mult pentru a fi martori. Citeste mai mult în realizarea ei.

Excepție: software interpretat

Pe baza celor de mai sus, am aflat că dezvoltatorii scriu software pentru un singur tip de sistem țintă și doar unul. Cu excepția cazului în care nu. Există multe aplicații pe care le puteți descărca și rula pe un Mac, apoi copiați și rulați pe Windows și poate chiar copiați din nou și rulați pe Linux fără probleme. Cum este posibil acest lucru?

Am fost culcat până acum?

După cum se dovedește, există o categorie de software care arată la suprafață ca și cum „rulează peste tot”. Puteți descărca și rula pe oricare platformă acceptată - cuvântul cheie fiind „susținut”. De fapt, descărcați codul sursă pentru aplicație, în timp ce o altă aplicație (The interpret) este un fel de rulare a codului sursă direct în timp real. Aceasta este o simplă simplificare, așa că haideți să analizăm exact cum funcționează acest lucru cu câteva limbi.

Java

Când Java a fost lansat pentru prima dată, promisiunea a fost (literalmente) „scrie o dată, alerga oriunde.” Ideea era să creeze aplicații folosind funcții Java pentru a salva fișiere, a face calcule sau a crea o aplicație fereastră. Apoi o Java Runtime Enviornment (JRE) pentru fiecare platformă de computer acceptată ar rula codul și le-ar traduce în funcții de sistem nativ. Trucul pentru Java, atunci, este că acesta nu rulează „direct” pe sistemul de operare. Se rulează într-o parte a JRE numită Mașină virtuală Java și asta este sistemul de operare.

Prin inserarea acestui strat suplimentar de software între aplicație și sistem de operare, Java vă permite să vă concentrați pe un set de funcții care sunt aceleași în sistemele de operare. Spuneți Java ce doriți să faceți și lăsați JVM pentru sistemul dvs. să vă faceți griji cu privire la modul de realizare. Imaginea de mai jos arată acest lucru în acțiune, unde Cadrul de aplicații Java pentru JIDE Software JIDE afișează aceeași aplicație pentru Mac (sus), Windows (mijloc-stânga), „Java pur” (mijloc-dreapta) și Linux (jos).

software os compatibilitate jide jdaf
Credit imagine: software JIDE

Programele Java nu se „compilează” singure în timp real. Mai degrabă, compilatorul Java le va transforma în „bytecode”. Vă puteți gândi la bytecode ca la un program pe jumătate copt. Atunci când dezvoltatorul lansează aplicația, aceasta este compilată atât cât poate fi fără să știe pe ce sistem de operare va urma. Când îl lansați efectiv, JVM îl va „coace tot restul” pentru a se potrivi cu funcțiile specifice ale sistemului de operare gazdă.

Piton

Un limbaj interpretat popular este Piton 5 motive pentru care programarea Python nu este inutilăPython - O iubești, ori o urăști. S-ar putea să te învârti chiar de la un capăt la celălalt ca un pendul. Indiferent, Python este un limbaj greu de ambivalent. Citeste mai mult . Când executați un script Python, interpretul Python va traduce codul în instrucțiuni pentru sistemul de operare. De asemenea, poate funcționa similar cu Java: când „importați” codul din afara aplicației, acesta este compilat la bytecode prima dată când este executat. Atunci interpretul va ști dacă, pe rulările ulterioare, codul inițial s-a schimbat, moment în care îl va re-compila la noul bytecode.

Un produs secundar minunat al acestei funcționări „la cerere” este că puteți utiliza interpretul pentru a vă dezvolta scripturile în mod interactiv. Pur și simplu tastând „python” la linia de comandă, veți porni interpretul și puteți rula codul și puteți vedea rezultatele imediat.

software os compatibilitate piton interpret

Acest lucru înseamnă că dezvoltatorii pot juca și regla lucrurile „în direct”. Apoi, odată ce o linie de cod face ceea ce vor, copiați și lipiți-o în un fișier de script (care este mult mai eficient decât ciclul „cod-compile-test” pe care trebuie să îl facă programatorii de limbaj neinterpretați).

Chiar și atunci când software-ul este același, probabil că nu

Din păcate pentru utilizatori, industria tehnologică nu a dezvoltat un format cu adevărat „universal”. Și s-ar putea să nu o facă niciodată. Introducerea acestor tipuri de standarde rezultă adesea într-o soluție „cel mai puțin numitor”, cu concesii în interesul obținerii aprobării tuturor.

Tu ce crezi? Aș prefera să aveți un software compatibil universal, chiar dacă a însemnat că nu este la fel de bun? Sau sunteți bine cu sistemul de operare pe care îl utilizați și nu aveți niciun interes pentru aplicațiile de pe alte platforme? Spuneți-ne mai jos în comentarii!

Credite imagine: Masterchief_Productions / Shutterstock

Aaron s-a aflat în profunzime în tehnologie ca analist de afaceri și manager de proiect de-a lungul a cincisprezece ani și a fost un utilizator Ubuntu fidel de aproape atâta timp (din Breezy Badger). Interesele sale includ open source, aplicații pentru afaceri mici, integrarea Linux și Android și calcularea în modul text simplu.