De ce nu există un API Unix? [închis] (Unix, X11, Desktop, Mediu Desktop, Posix, Api)

xiver77 a intrebat.

De ce nu există API Unix? Adică, așa cum există API-ul Windows.

Știu că multe lucruri din lumea Unix sunt modulare, iar aceste lucruri puse împreună creează un întreg sistem. Asta sună bine, dar creează unele probleme atunci când încerci să faci o aplicație nativă Unix.

De exemplu, vreți să programați un procesor de text frumos cu un nume cool WP. Versiunea Windows a WP va fi construită prin apelarea API-ului Windows. Puteți codifica acest lucru direct în C sau puteți folosi oricare dintre diversele biblioteci wrapper existente. Dar, cu toate acestea, programul trebuie construit prin apelarea winapi, care oferă fiecare funcționalitate de care un programator poate avea nevoie pentru a construi o aplicație Windows, de la apeluri de sistem de bază până la GUI, 3D, multimedia sau orice altceva cu mai mult de un deceniu de compatibilitate retroactivă. Dacă nu ar fi fost așa, Wine nu ar fi putut exista niciodată.

Acum doriți să creați o versiune Unix a WP. Biblioteca standard C și C++ și API-ul POSIX este foarte stabilă și bine susținută în orice variantă Unix. Problema apare atunci când încercați să faceți mai mult. Așadar, trebuie să creați o fereastră pentru WP, dar cum? Există X11, dar acesta nu este singurul. Oamenii cred că X11 ar trebui să fie înlocuit și acum fac doi înlocuitori incompatibili, Wayland și Mir. Chiar și pentru X11, există Xlib și xcb. xcb pretinde că este „mai bun”, și este adevărat în unele privințe, dar unde este documentația? În cele din urmă, alegeți Xlib pentru a face această sarcină, dar standardul X11 definește în sine doar caracteristici foarte simple. Orice altceva la care te-ai aștepta pentru o aplicație GUI, cum ar fi evenimentele de fereastră sau suportul pentru clipboard, trebuie să fie tratat cu extensii, prin apelarea lui XInternAtom. Această propoziție este doar opinia mea personală, dar utilizarea Atomi în X este extrem de neintuitivă. Și o altă problemă este că nu toți managerii de ferestre pentru X suportă bine aceste extensii. Așa că haideți să lăsăm această murdărie pe seama dezvoltatorilor de GTK+ și Qt, care rup compatibilitatea retroactivă la fiecare nouă versiune. Este măcar posibil să existe un suport portabil pentru drag-and-drop în Linux?

Chiar mi se pare că comunitatea Unix se omoară singură în lumea Desktop. Știu că lucrurile pe care le-am menționat nu contează nici măcar pentru a configura un server BSD, dar contează dacă încerci vreodată să construiești o aplicație nativă portabilă pentru Linux.

De unde vine toată mizeria asta? Există cu adevărat un efort de a curăța acest lucru și de a standardiza lucrurile pentru mediul desktop modern al Unix? De ce nu există API-ul Unix? Va exista vreodată una?

Comentarii

  • Btw. Dacă spui Windows API, este puțin ambiguu ce vrei să spui. Pentru că API-ul Windows a fost complet depreciat, acum se numește Win32 și ComAPI, iar noul API Windows funcționează de la Windows 8 în sus. –  > Por Šimon Tóth.
  • Cunoașteți POSIX? Consultați man7.org/tlpi/index.html pentru Interfața de programare Linux care este un superset al POSIX. Aceasta este standardizată în LSB (Linux Standard base). –  > Por Ho1.
3 răspunsuri
Goldilocks

Chiar mi se pare că comunitatea Unix se omoară în lumea Desktop.

Cred că există o concepție greșită că orice formă de Unix există pentru a concura pe piața PC-urilor de acasă. Există câteva distribuții linux care au acest obiectiv; prima a fost chiar Ubuntu, dar merită să luăm în considerare că o parte din viziunea inițială a Ubuntu a fost aceea de a dezvolta un sistem de operare ușor de utilizat, care să poată fi folosit în părți ale lumii în care a trebui să plătești sute de dolari pe calculator pentru o licență Microsoft nu era fezabil și putea însemna diferența dintre a avea calculatoare (în școli, guvern, etc.) și a nu avea.

Nu am rămas la curent cu cât de mult succes a avut acest lucru, dar, în orice caz, mi se pare că este un obiectiv foarte diferit de dorința de a depăși Apple Apple sau ceva de genul acesta. Mere și portocale, cum se spune. Sau merele și zarzavaturile.1 Acest aardvark nu seamănă deloc cu un măr! Nu, nu este. De ce ai crede că este?

Acum vreți să creați o versiune Unix a WP […] În cele din urmă alegeți Xlib pentru a face această sarcină

Doar dacă ești o persoană nebună care este puțin probabil să finalizeze un procesor de text cu potențial de consum în masă.

Software-ul există în straturi distincte care sunt asamblate în stive. X este un strat care este utilizat pe diverse platforme ca parte a stivei GUI. Pe platformele respective, X lib este utilizat pentru a implementa un nivel superior biblioteci de nivel superior, cum ar fi Gtk și Qt, ambele având o portabile API PORTABILĂ; acestea pot fi utilizate pe OSX și Windows, care nu utilizează X. Pe aceste platforme, o altă bibliotecă/API de nivel inferior este utilizată pentru a implementa Gtk și Qt. Acest lucru înseamnă că programele de nivel superior, cum ar fi aplicațiile GUI ale utilizatorului final, scrise pentru Gtk sau Qt, pot fi utilizate oriunde cu modificări relativ minore.2

Acestea sunt bibliotecile care sunt utilizate direct pentru a implementa aplicații GUI pe sistemele POSIX, motiv pentru care majoritatea acestor aplicații nu sunt, de obicei, atât de greu de portat de la un sistem POSIX „aproape compatibil” la altul.

Așadar, „problema” la care vă referiți nu există de fapt în modul în care ați prezentat-o. Comunitatea Unix nu se sinucide, ci face exact ceea ce intenționează să facă.


1. Pentru a explica mai bine ce vreau să spun prin aceasta, luați în considerare rolul pieței libere în evoluția GNU/Linux vs. Windows. Acesta din urmă este în mod clar, prin intenție, produsul forțelor pieței libere, dar primul caz este mult mai ambiguu. Ca buni occidentali, punem teoria pe primul loc și spunem: „Evident, un produs care este modelat de piața liberă este mai bun decât unul care nu este”. Dar acest lucru nu este chiar adevărat – ceea ce înseamnă de fapt este că unul va fi predispus la să se vândă mai bine. Se pare că vă întrebați de ce nu există un efort mai mare pentru ca produsul să se vândă mai bine în acest sens. Răspunsul, desigur, este că există mai puțină motivație pentru a face acest lucru, ceea ce ridică întrebarea despre ce există motivație pentru a face. Dezvoltarea GNU/Linux (în special) a fost ghidată foarte mult de dezvoltatorii pentru a se mulțumi pe ei înșiși, , și nu atât de mult alte persoane sau o piață de masă. Dacă acest lucru produce sau nu un sistem mai bun, cred că depinde de cât de apropiată este perspectiva ta de oamenii care l-au creat. Istoria UNIX implică mai multe forțe de piață, dar este/era un public foarte specializat. Altfel spus: Este un sistem de operare tehnic pentru oameni tehnici, dar există o gaură de iepure disponibilă pentru publicul larg.

2. În schimb, dacă scrii ceva cu API-ul Windows, există un singur loc în care îl poți folosi fără niște modificări foarte importante..

Comentarii

  • Problema cu GTK și Qt este că nu este ușor să rulezi o aplicație GTK1 sau Qt3 în cel mai recent Ubuntu, în timp ce un executabil Windows 98 pe 32 de biți va rula în continuare în Windows 8. Faptul de a avea 2 seturi de biblioteci incompatibile necesare pentru a realiza o aplicație GUI nativă este, de asemenea, o problemă în sine. Am menționat toate acestea și în întrebarea mea inițială. –  > Por xiver77.
  • „Nu este ușor pentru a rula…” -> Dar asta nu înseamnă „nu se poate”, chiar dacă de fapt unii oameni „nu pot”. Niciodată nu aș susține că aproape toate distribuțiile GNU/Linux vor fi mai greu de configurat și de utilizat decât Windows. De exemplu, nu îl recomand prietenilor, chiar dacă este cu siguranță prima mea alegere de sistem de operare. Acest lucru face parte din punctul meu de vedere cu privire la „concepția greșită” pe care o au unii oameni că este menit să concureze cu Windows. În mare parte, nu este așa și, în mod realist, deși poate exista o suprapunere în ceea ce privește „publicul lor țintă”, din nou, există mere și orătănii. –  > Por Goldilocks.
  • WRT „2 seturi de biblioteci incompatibile necesare pentru a face o aplicație GUI nativă” dacă vă referiți la X și la straturile superioare, nu, aceasta este opusul unei probleme, este în acord cu unele principii de bază ale unei bune inginerii software. Dacă nu ar fi separate, înlocuirea X cu Wayland (de exemplu), ar fi imposibilă, la fel ca și a avea aplicații POSIX foarte portabile. Acesta include mai mult de un sistem de operare distinct, la urma urmei. Dacă este vorba despre Gtk și Qt, nu aveți nevoie de ambele pentru a crea o aplicație și nu prea există o problemă cu alegeri. –  > Por goldilocks.
Šimon Tóth

Pentru a fi numit UNIX trebuie să treci printr-un proces de certificare care necesită (printre altele) implementarea standardului POSIX.

Deci întrebarea ta este complet invalidă. Există un API UNIX, se numește POSIX.

EDIT:Aici este lista de cerințe: http://www.unix.org/version4/overview.html

Comentarii

  • Pentru a fi perfect corect, POSIX este nu este un API, , ci este un standard de funcționalitate de bază a sistemului, utilitare, apeluri de sistem și interfețe de sistem pe care un sistem de operare de tip UNIX ar trebui să să implementeze pentru a fi compatibil POSIX și pentru a se numi pe sine UNIX-like. Așadar, nu există o singură API pe care să o puteți descărca, de exemplu, dezvoltatorii de sisteme de operare sunt liberi să implementeze lucrurile menționate, dar în cadrul specificațiilor. A se vedea, de asemenea, unix.stackexchange.com/a/423123/85039 –  > Por Sergiy Kolodyazhnyy.
gwillie

Unix are specificații/un standard pe care speră că îl veți urma, POSIX, moduri în care lucrurile ar trebui implementate, deși depinde de dezvoltator, este un standard pe care ar trebui să îl urmăm dacă vrem ca codul nostru să funcționeze pe mai multe arhitecturi/platforme/sisteme, oricare ar fi ele, depinde de dezvoltator, în cele din urmă, să urmeze ceea ce (sperăm) urmează majoritatea dezvoltatorilor.

Windows are o bibliotecă de funcții, așa-numitul API, care este fixat în piatră, conform dictatului financiar al conducerii superioare (mulți se vor certa, dar tot ceea ce face Microsoft este despre profitul final AFAIK… în timp ce posix este despre încercarea de a se înțelege).

POSIX este ca un API, doar că fără considerații financiare, ci doar despre coduri care încearcă să colaboreze… acesta nu este un concept microsoft, ci doar o cale sau o autostradă.

Așa văd eu lucrurile ;-}

EDIT::::

După ce mi-am citit postarea, îmi dau seama că s-ar putea să fiu puțin părtinitor, asta nu a fost intenția, deoarece degetele doar se mișcă cu adevărul, dar eu vreau să spun ceea ce am spus, părtinitor eliminat…dacă este posibil

Comentarii

  • Nu am o problemă cu părtinirea ta, doar că nu cred că are prea multă legătură cu această întrebare. POSIX este controlat de cum pot face ca fl studio să nu mai adauge piese noi de fiecare dată când face buclă, > Por abdelouahed.
  • vreau să încerc să înregistrez în buclă pe fl studio, am urmărit niște tutoriale pe youtube și am prins gustul, dar problema este că fl studio adaugă o nouă piesă de fiecare dată când face buclă microsoft gold partner > Por .

ajutați-mă vă rog