Faceți cunoștință cu noua versiune a Cosmopolitan 2.0, biblioteca C standard multiplatformă

Lansarea noua versiune a proiectului „Cosmopolitan 2.0”, care dezvoltă o bibliotecă C standard și un format de fișier executabil universal care poate fi folosit pentru a distribui programe pentru diferite sisteme de operare fără utilizarea de interpreți și mașini virtuale.

Containerul pentru a genera fișiere executabile universale se bazează pe combinarea unor segmente și anteturi specifice din diferite sisteme sisteme de operare într-un singur fișier, combinând mai multe formate diferite utilizate în Unix, Windows și macOS.

A se asigura ca un singur executabil rulează pe sisteme Windows și Unix, se folosește un truc pentru a codifica fișierele Windows PE ca script shell, profitând de faptul că Thompson Shell nu folosește marcatorul de script „#!”.

Pentru a crea programe care includ mai multe fișiere (combinând toate resursele într-un singur fișier), este acceptată generarea unui fișier executabil sub forma unei arhive ZIP special concepute. Prezentarea formatului propus (exemplul aplicație hello.com):

Apelul qemu-x86_64 este furnizat pentru portabilitate suplimentară și permite codului compilat pentru arhitectura x86_64 să ruleze pe platforme non-x86, cum ar fi plăcile Raspberry Pi și dispozitivele Apple echipate cu procesoare ARM. Proiectul poate fi folosit și pentru a crea aplicații de sine stătătoare care funcționează fără un sistem de operare (bare metal). În astfel de aplicații, la fișierul executabil este atașat un bootloader, iar programul acționează ca un sistem de operare bootabil.

Principalele noutăți ale Cosmopolitan 2.0

În această nouă versiune se evidențiază faptul că schema de accesare a resurselor interne a fost modificată Dentro dintr-un fișier zip (la deschiderea fișierelor, căile obișnuite /zip/... sunt acum folosite în loc de a folosi prefixul zip:..). În mod similar, pentru a accesa discuri în Windows, este posibil să folosiți căi precum „/c/…” în loc de „C:/…”.

Este propus un nou încărcător APE (Actually Portable Executable), care definește formatul fișierelor executabile universale. Noul bootloader folosește mmap pentru a aloca programul în memorie și nu mai modifică conținutul din mers. Dacă este necesar, executabilul universal poate fi convertit în executabile obișnuite legate de platforme individuale.

Pe Linux, este posibil să utilizați modulul kernel binfmt_misc pentru a rula programe APE. Se observă că utilizarea binfmt_misc este cea mai rapidă metodă de pornire, în plus față de O implementare a funcționalitatea apelurilor de sistem pledge() și unveil(), dezvoltate de proiectul OpenBSD, precum și furnizarea unui API pentru utilizarea datelor de apel în programele C, C++, Python și Redbean, precum și un utilitar de la promise.com pentru a izola procese arbitrare.

Putem găsi și asta pentru Linux, performanța apelurilor clock_gettime și gettimeofday a fost crescută de până la 10 ori datorită utilizării mecanismului vDSO (Virtual Dynamic Shared Object), care permite transferul gestionarului de apeluri de sistem în spațiul utilizatorului și ocolirea contextului de comutare.

Construcția folosește Landlock Make, o ediție a GNU Make cu verificare mai strictă a dependenței și utilizarea apelului de sistem Landlock pentru a izola programul de restul sistemului și pentru a îmbunătăți eficiența stocării în cache. Opțional, se păstrează capacitatea compilatorului și GNU Make obișnuit.

Pe de altă parte, evidențiază și funcții implementate pentru multithreading: _spawn() și _join(), care sunt legături universale peste API-uri specifice pentru diferite sisteme de operare. De asemenea, se lucrează pentru implementarea suportului pentru firele POSIX.

Dintre celelalte schimbări care se remarcă:

  • S-a adăugat suport pentru opțiunile „–ftrace” și „–strace” la fișierele executabile pentru a trimite informații despre toate apelurile de funcții și apelurile de sistem către stderr.
  • S-a adăugat suport pentru apelul de sistem closefrom() compatibil cu Linux 5.9+, FreeBSD 8+ și OpenBSD.
  • Funcțiile matematice pentru lucrul cu numere complexe au fost mutate din biblioteca Musl.
  • Multe funcții matematice au fost accelerate.
  • Este propusă funcția nointernet(), care dezactivează capabilitățile rețelei.
  • S-au adăugat noi funcții pentru a adăuga eficient șiruri de caractere: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf și vappendf.
  • A fost adăugată o versiune protejată a familiei de funcții kprintf(), concepută pentru a funcționa cu privilegii ridicate.
  • Performanța îmbunătățită semnificativ a implementărilor SSL, SHA, curve25519 și RSA.

În cele din urmă, dacă sunteți interesat să aflați mai multe despre acesta, ar trebui să știți că codul proiectuluisau este distribuit sub licența ISC (versiunea simplificată a MIT/BSD).


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.