O mărime nu se potrivește tot De ce software-ul nu este universal compatibil

O mărime nu se potrivește tot De ce software-ul nu este universal compatibil / Tehnologie explicată

Tocmai ați descărcat o actualizare cu pachete funcționale în aplicația dvs. open source preferată. Totul funcționează bine și îl folosiți pe celelalte dispozitive - deci este timpul să-l dați și altora.

Cu excepția faptului că noul tău laptop Linux Linux nu este compatibil cu pachetul de instalare Windows. Ce zici de comprimatul tău Android? iPhone? PS4? De ce nu puteți să luați acea bucată de software și să o utilizați oriunde doriți? Să explorăm câteva bariere diferite visului “cumpăra o dată, alerga oriunde.”

Dezvoltarea de software și arhitectura OS

Înțelegerea de ce software-ul nu funcționează în sistemele de operare necesită o cunoaștere mică (doar o mică promisiune) a modului în care se face software-ul.

Procesul de dezvoltare software

Într-un flux de dezvoltare foarte software pentru desktop, server și mobil (adică nu programare pe Web vs. Dezvoltare Web: Care este diferența? Programare vs Dezvoltare Web: Care este diferența? S-ar putea să credeți că programatorii aplicațiilor și dezvoltatorii web fac același lucru , dar acest lucru este departe de adevar.Aici sunt diferentele cheie dintre programatori si dezvoltatori web.Citeste mai mult), un programator va:

  1. Scrie ceva 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ă conform așteptărilor.
  4. Pachete și distribuire / implementare software-ul.

Este o combinație a primului și a celui de-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 înțelege (limba mașinii) este complexă. Nu vom ajunge la ea în detaliu, dar este util să înțelegem la un nivel înalt ce se întâmplă.

OS Architecture

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

Sistem de operare Kernels

Un sistem de operare nucleu este responsabil pentru comunicarea cu hardware-ul calculatorului. Software-ul comunică comenzile sale către kernel, care, la rândul său, emite comenzi către hardware (de exemplu) să citească un fișier de pe hard disk sau să deseneze o fereastră pe ecran. Acesta coordonează în esență toate informațiile (fie că sunt date stocate, calcule sau intrări de utilizator) între hardware și diferite tipuri de software. Kernel-ul pune la dispoziția software-ului toate aceste funcționalități apeluri de sistem.

Credit de imagine: Wikimedia Commons

Fiecare kernel al sistemului de operare va implementa în mod diferit apelurile de sistem, în funcție de care sunt disponibile, de ceea ce sunt numite sau de ce opțiuni iau. Ca urmare, software-ul trebuie să țină seama de apelurile de sistem susținute de kernel-ul fiecărui sistem de operare vizat. Apelul de sistem pe care îl utilizați pentru a trimite date GPU-ului î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 acel apel exact să nu fie chiar acolo.

Bibliotecile de sisteme

În multe cazuri, software-ul nu sună direct la kernel. În schimb, se cheamă la bibliotecile de sisteme, sau colecții de funcții de bază. Există astfel de biblioteci (de exemplu) fiecare program care salvează fișiere pe hard disk nu are nevoie să scrie o funcție pentru a face acest lucru. În schimb, pur și simplu link-uri către o bibliotecă de sistem și utilizează o funcție existentă. Biblioteca GLibC pentru Linux este un prim exemplu, la fel ca și fișierele .DLL din Win32 API sau conținutul directorului Mac / System / Library Cum se accesează folderul Biblioteca OS X & De ce este ușor de accesat Biblioteca OS X Folder & De ce este ușor de manevrat Cele mai multe foldere ale bibliotecii OS X sunt cel mai bine lăsate singure, dar este util să cunoașteți modul în și în jurul Bibliotecii de utilizatori. Citeste mai mult .

Credit de imagine: ScottXW prin Wikimedia Commons

Bibliotecile de sisteme funcționează ca un fel de translator între aplicații și kernel pentru sarcini de rutină. Aplicațiile fac apeluri funcționale la aceste biblioteci, care se ocupă de o mulțime de detalii de nivel scăzut. De asemenea, pot face apeluri de sistem la kernel pentru comoditate. Așa cum probabil ați ghicit, aceasta înseamnă că aceste biblioteci sunt scrise pentru un anumit kernel și, prin urmare, nu pot fi utilizate între sisteme de operare cu kerneluri diferite.

Operațiuni de executare a sistemului de operare

Ultimul obstacol pentru 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 un anumit format de fișier binar Tot ce trebuie să știți despre formatele de fișiere și proprietățile lor Tot ce trebuie să știți despre formatele de fișiere și proprietățile acestora Folosim termenul alternativ: muzică, imagine, foaie de calcul, , si asa mai departe. Dar ceea ce face un fișier un "fișier", oricum? Să încercăm să înțelegem această parte fundamentală a calculului. Citeste mai mult . De exemplu, fișierele Executable and Linkable Format (ELF) care rulează pe sisteme de operare precum Linux și FreeBSD trebuie să specifice anumite proprietăți ale fișierului în anumite octeți, așa cum se arată în imaginea de mai jos.

interfață binară de aplicație (ABI) dovedit este de o importanță deosebită. O combinație a apelurilor disponibile de la procesoare, kernel și libararii de sistem, un ABI este similar cu un interfața de programare a aplicațiilor (API) în sensul că definește modul în care două programe comunică între ele. Dar API 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 efectiv să facă acest lucru odată ce software-ul este compilat și rulat. Fiecare sistem de operare implementează un anumit ABI, care poate sau nu să se schimbe între versiunile aceluiași sistem de operare.

În general, sistemele de operare implementează propriile ABI, determinate de o combinație a tipului de procesor, a nucleului și a oricăror biblioteci de sisteme standard. Dar uneori un sistem de operare va implementa mai multe. FreeBSD are suport pentru binarele Linux, de exemplu, deoarece oferă un ABI Linux ca un add-on al kernel-ului FreeBSD (în loc de kernel-ul Linux). Acest lucru este diferit de programele virtualizate Ce este o mașină virtuală? Tot ce trebuie să știți Ce este o mașină virtuală? Tot ce trebuie să știți Mașinile virtuale vă permit să rulați alte sisteme de operare pe calculatorul dvs. curent. Iată ce ar trebui să știți despre ei. Citiți mai multe, cum ar fi VMWare sau VirtualBox, care utilizează software pentru a simula o mașină întreagă (hardware și toate). Ca urmare, acest tip de compatibilitate ABI este mai rapidă, dar efortul mult mai mare de menținere. Acesta este motivul pentru care este rar, deși Microsoft a văzut recent valoarea Ubuntu este acum disponibilă în magazinul Windows Ubuntu este disponibil acum pe Windows Store Windows Insiders poate descărca și instala acum Ubuntu pe Windows 10. Acest lucru aduce Linux și Windows împreună într-o uniune sfântă câțiva au crezut vreodată că vor trăi suficient de mult pentru a fi martori. Aflați mai multe în a face acest lucru.

Excepție: Software interpretat

Pe baza celor de mai sus, am aflat că dezvoltatorii scriu software pentru unul și doar unul, tipul de sistem țintă. Doar dacă nu o fac. 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 copiați din nou și rulați pe Linux fără probleme. Cum este posibil acest lucru?

M-am mințit până acum?

După cum se dovedește, există o categorie de software care arată pe suprafață ca ea “alerga peste tot.” Puteți descărca și rula pe orice platformă acceptată - cuvântul cheie fiind “sprijinit.” De fapt, descărcați codul sursă pentru aplicație, în timp ce o altă aplicație ( interpret) generează codul sursă direct în timp real. Acest lucru este ceva de o simplificare, așa că hai să vedem exact cum funcționează acest lucru cu câteva limbi.

Java

Când Java a lansat prima dată, promisiunea a fost (literal) “scrie o dată, alerga oriunde.” Ideea era să creezi aplicații utilizând funcții Java pentru a salva fișiere, a face calcule sau a crea o fereastră de aplicație. Apoi o Java Runtime Enviornment (JRE) pentru fiecare platformă de calculator acceptată va rula codul și va traduce aceste funcții în sistemul nativ. Trucul la Java, atunci, este că nu rulează “direct” pe sistemul de operare. Rulează într-o parte a JRE numită Java Virtual Machine și asta este ceea ce rulează pe sistemul de operare.

Prin introducerea acestui strat suplimentar de software între aplicație și sistemul de operare, Java vă permite să vă concentrați asupra unui set de funcții care sunt aceleași în cadrul sistemelor de operare. Spuneți Java ceea ce doriți să faceți și lăsați-o pe JVM pentru sistemul dvs. să vă îngrijoreze cum să o faceți. Imaginea de mai jos arată acest lucru în acțiune, în care Java Desktop Application Framework de la JIDE Software afișează aceeași aplicație pentru Mac (sus), Windows (din stânga din mijloc), “Java pură” (la mijlocul-dreapta) și Linux (partea de jos).

Credit de imagine: Software JIDE

Programele Java nu sunt precise “compila” ei înșiși în timp real. Mai degrabă, compilatorul Java le va face “bytecode.” Te poți gândi la biciclete ca pe un program pe jumătate de copt. Când dezvoltatorul eliberează aplicația, acesta este compilat la fel de mult cât poate fi fără să știe la ce sistem de operare va funcționa. Când o lansați de fapt, JVM va “coaceți restul drumului” pentru a se potrivi cu funcțiile specifice ale sistemului de operare gazdă.

Piton

O limbă populară interpretată este Python 5 motive pentru care programarea Python nu este inutilă 5 motive pentru care programarea Python nu este inutilă Python - Îți place sau o urăsc. S-ar putea chiar să vă mișcați de la un capăt la altul ca un pendul. Indiferent, Python este o limbă greu de interpretat. Citeste mai mult . Când executați un script Python, interpretul Python va traduce codul în instrucțiunile pentru sistemul de operare. Acesta poate funcționa, de asemenea, similar cu Java: când tu “import” Codul din afara aplicației dvs. este compilat la octet la prima dată când este rulat. Apoi, interpretul va ști dacă în versiunile următoare codul original sa schimbat, moment în care îl va re-compila la noul octet.

Un produs secund răcoros al acestui lucru “la cerere” care rulează este că poți folosi interpretul pentru a-ți dezvolta scripturile în mod interactiv. Doar tastând “piton” la linia de comandă, veți porni interpretul și puteți rula codul și puteți vedea imediat rezultatele.

Acest lucru înseamnă că dezvoltatorii pot juca în jurul valorii de lucruri și pot schimba lucrurile “Trăi.” Apoi, o dată ce o linie de cod face ceea ce vrea, copiați-l și inserați-l într-un fișier de script (care este mult mai eficient decât “cod-compilare-test” ciclu pe care programatorii de limbă ne-interpretați trebuie să le facă).

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

Din păcate, pentru utilizatori, industria tehnică nu a dezvoltat cu adevărat “universal” format. Și nu poate face acest lucru niciodată. Introducerea acestor tipuri de standarde duce adesea la o “cel mai puțin numitor comun” soluție, cu concesii în interesul de a obține aprobarea tuturor.

Tu ce crezi? Ați prefera să aveți software universal compatibil, chiar dacă ar însemna că nu era la fel de bun? Sau sunteți în regulă cu sistemul de operare pe care îl utilizați și nu aveți interes pentru aplicațiile de pe alte platforme? Spuneți-ne mai jos în comentariile de mai jos!

Credite de imagine: Masterchief_Productions / Shutterstock

Explorați mai multe despre: Sistem de fișiere, Software de instalare, Sisteme de operare.