Pokretanje nova verzija projekta "Cosmopolitan 2.0", koji razvija standardnu C biblioteku i univerzalni format izvršne datoteke koji se može koristiti za distribuciju programa za različite operativne sisteme bez upotrebe interpretatora i virtuelnih mašina.
Kontejner za generiranje univerzalnih izvršnih datoteka oslanja se na kombinovanje specifičnih segmenata i zaglavlja iz različitih sistema operativne sisteme u jednu datoteku, kombinujući nekoliko različitih formata koji se koriste u Unixu, Windowsu i macOS-u.
Da bi se to osiguralo jedna izvršna datoteka pokrenuti na sistemima Windows i Unix, trik se koristi za kodiranje Windows PE datoteka kao shell skripte, koristeći prednost činjenice da Thompson Shell ne koristi marker skripte "#!".
Za kreiranje programa koji uključuju više datoteka (kombinirajući sve resurse u jednu datoteku), podržano je generiranje izvršne datoteke u obliku posebno izrađene ZIP arhive. Pregled predloženog formata (primjer aplikacije hello.com):
Poziv qemu-x86_64 je osiguran za dodatnu prenosivost i dozvoljava kodu kompajliranom za arhitekturu x86_64 da radi na platformama koje nisu x86, kao što su Raspberry Pi ploče i Apple uređaji opremljeni ARM procesorima. Projekat se takođe može koristiti za kreiranje samostalnih aplikacija koje rade bez operativnog sistema (goli metal). U takvim aplikacijama, pokretač je prikačen izvršnoj datoteci, a program se ponaša kao operativni sistem za pokretanje.
Glavne novine Cosmopolitana 2.0
U ovoj novoj verziji je istaknuto da promijenjena je šema za pristup internim resursima dentro iz zip datoteke (kada otvarate datoteke, sada se koriste uobičajene /zip/… putanje umjesto prefiksa zip:..). Slično, za pristup diskovima u Windows-u, moguće je koristiti putanje kao što je "/c/…" umjesto "C:/…".
Predložen je novi APE utovarivač (Actually Portable Executable), koji definira format univerzalnih izvršnih datoteka. Novi bootloader koristi mmap da dodijeli program u memoriju i više ne mijenja sadržaj u hodu. Ako je potrebno, univerzalni izvršni fajl se može pretvoriti u obične izvršne datoteke vezane za pojedinačne platforme.
Na Linuxu je moguće koristiti modul kernela binfmt_misc za pokretanje APE programa. Napominje se da je korištenje binfmt_misc najbrža metoda pokretanja, pored Implementacija funkcionalnost sistemskih poziva pledge() i unveil(), koje je razvio OpenBSD projekat, kao i pružanje API-ja za korištenje podataka o pozivima u C, C++, Python i Redbean programima, kao i uslužni program sa obećanja.com da se izoluju proizvoljni procesi.
To takođe možemo pronaći za Linux, performanse poziva clock_gettime i gettimeofday su povećane do 10 puta zahvaljujući korištenju vDSO (Virtual Dynamic Shared Object) mehanizma, koji omogućava prijenos rukovatelja sistemskim pozivima u korisnički prostor i zaobilaženje konteksta prekidača.
Izgradnja koristi Landlock Make, izdanje GNU Make sa strožom provjerom zavisnosti i korištenjem Landlock sistemskog poziva za izolaciju programa od ostatka sistema i poboljšanje efikasnosti keširanja. Kao opcija, sposobnost kompajlera i uobičajeni GNU Make su sačuvani.
S druge strane, također naglašava implementirane funkcije za multithreading: _spawn() i _join(), koji su univerzalna veza za specifične API-je za različite operativne sisteme. U toku je i rad na implementaciji podrške za POSIX niti.
Od ostalih promjena koje se ističu:
- Dodata podrška za opcije “–ftrace” i “–strace” izvršnim datotekama za slanje informacija o svim pozivima funkcija i sistemskim pozivima na stderr.
- Dodata podrška za closefrom() sistemski poziv kompatibilan sa Linux 5.9+, FreeBSD 8+ i OpenBSD.
- Matematičke funkcije za rad s kompleksnim brojevima premještene su iz Musl biblioteke.
- Mnoge matematičke funkcije su ubrzane.
- Predložena je funkcija nointernet(), koja onemogućuje mrežne mogućnosti.
- Dodane su nove funkcije za efikasno dodavanje stringova: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf i vappendf.
- Dodata je zaštićena verzija kprintf() porodice funkcija, dizajnirana za rad s povišenim privilegijama.
- Značajno poboljšane performanse SSL, SHA, curve25519 i RSA implementacija.
Konačno, ako ste zainteresirani da saznate više o tome, trebali biste znati da je kod projektaili se distribuira pod ISC licencom (pojednostavljena verzija MIT/BSD).